This is my first book review for Slashdot, so I have *ahem* borrowed Rick Franchuk's excellent review formatting and layout information. Any errors or omissions are entirely my fault.
|REVIEW:||Expert C Programming: Deep C Secrets|
|Peter van der Linden|
|(Prentice Hall ASIN: 0131774298)|
|An excellent (and humorous) reference for the journeyman
C programmer looking to expand his/her understanding of the C language. Although
a bit pricey at $40, and somewhat out of date with respect to discussion of C++, it is
well worth a read for anyone wishing to become a competent C hacker.
I tend to pick up books on programming fairly frequently, hoping that I will pick up a valuable tip or two, or identify some nagging little coding detail that has been the cause of problems in my own code. Generally, I find these types of books to be either too elementary, focusing on simple programming constructs that are rehashed from any of a number of Idiot's Guides, or overly code-dense at the expense of clarity. So it is a rare treat to read a book like Expert C Programming: Deep C Secrets. This book delves into the dark, cob-webbed corners of the C language to explain various language idiosyncricies, and why things work the way they do in the ANSI standard.
This book provides additional detail in many areas typically ignored in more introductory texts. For example, pointers are covered quite extensively in this document, and covers the often-overlooked cases in which C Arrays and Pointers are NOT the same. Yes, it's true -- C Arrays can't be assumed to act like pointers in all cases. What's more, the representation of Arrays and pointers in memory are two different animals, and programmers who treat them the same do so at there own risk.
Another particularly useful section is his description of how to define and understand C Declarations. This description was particularly useful for me, as I have always found these constructions to become virtually unreadable when defining pointers to functions, or similar. Mr. van der Linden provides some slick little mneumonics and tables to translate declarations into english meanings. Lots of fun!
Finally, an Appendix entitled Secrets of Programmer Job Interviews gives an excellent set of questions that van der Linden and others have used in job interviews. As a amateur programmer (that hopes to someday be gainfully employed as a Software Engineer ), I found this insight into what the interviewer is trying to accomplish to be highly illuminating. In fact, this section alone might make it worth your while to pick up this book.
Of course, the book contains a great deal more. Topics range from a discussion of the ANSI standardization process to the Obfuscated C Contest "greatest hits". You really haven't lived until you see the fully-functional BASIC interpreter coded in 1,500 characters of unreadable, unformatted C code. See below for a more comprehensive list of what is covered.
Well, the short answer is not much. The more pointy-haired types might find the frequent use of humour (a mainstay of all of van der Linden's books I have read) to be a negative. In addition, at roughly $40 with no discounts available at the major on-line sellers the book is a bit pricey. However, these are minor quibbles.
In fact, the largest problem with this book (and it's a fairly small problem as well) is its discussion of C++. Since the book was written in 1994, and has not been updated, it is a bit out of date with the current state of the art with respect to C++. In fact, this section is a lot like the introductory Java chapters found in most current C++ books. This chapter could use a rewrite in light of the recent ANSI standardization of C++.
One final minor problem is that the book is highly Unix-centered (and especially geared to Sun's Solaris). Mr. van der Linden has some discussion of DOS protected mode and memory structure, but by-and-large we are presented with a Unix System V description of virtual memory. Now, since I do nearly all of my programming in Linux I did not have much problem with this. However, these sections of the book could use a rewrite in light of Windows 95/98/NT's virtual memory model.
So What's In It For Me?
I'd strongly recommend this text for anyone seriously interested to writing production-grade C. Probably the most important things you can learn from the book are:
- C Arrays are NOT the same as pointers
- How to decipher C Declarations
- Dynamic run-time data structures
- The recipe for Oobleck (from the Dr. Seuss story)
Table of Contents
1. C Through the Mists of Time
2. It's Not a Bug, It's a Language Feature
3. Unscrambling Declarations in C
4. The Shocking Truth: C Arrays and Pointers Are NOT the Same!
5. Thinking of Linking
6. Poetry in Motion: Runtime Data Structures
7. Thanks for the Memory
8. Why Programmers Can't Tell Halloween from Christmas Day
9. More about Arrays
10. More About Pointers
11. You Know C, So C++ is Easy!
Appendix: Secrets of Programmer Job InterviewsIndex