Book review: Expert C Programming by Peter van der Linden (1994)
I picked up this book after I saw it in the recommended readings in the OSTEP book. Despite the fact that it's over 25 years old now, it is a very illuminating book on C's pitfalls, quirks, and its history.
This book is definitely not meant to be one's first book on C. If you want to learn C today, you should definitely pick something that teaches you modern C (C99+). If you want to learn about C's origins and motivations, the next book should be K&R. Expert C Programming fits nicely as a third book after that because it was written after C was standardized but back when there was still a lot of K&R C in use, and it frequently compares how things work between these versions.
A lot of C code that the book contains may not be very useful anymore and many Unix commands are obsolete now. Still the concepts are very much evergreen. It's hard to claim expertise in C without understanding how OS, CPU, and system calls interact and this book touches on many such aspects.
The text frequently compares how things are done in C versus in other popular systems languages at the time—Ada and Pascal in particular, and sometimes Fortran and Algol. This makes it very interesting to see how C was different from these languages and why it stood the test of time making it one of the most influential languages and popular in systems programming even today. There is even a chapter on C++ highlighting the fundamentals of object-oriented programming.
By far the most interesting parts of the book are the "Light Relief" sections at the end of each chapter. These sections include some amusing historical incidents and war stories like when GCC took "implementation-defined" too literally, CMU's coke machine, the "phantom finger", and Emacs psychiatrist AI. The text is written in the author's tongue-in-cheek humor style and is filled with his personal anecdotes from working at the Sun compiler team. I'd recommend reading this book solely for these sections if not for C itself.
If you enjoy language history and systems programming, this book is definitely worth your time.