What makes a programming book truly great? IMHO, two things:
- Content quality
- Content delivery
There are many clever people out there who have a lot of knowledge about some very innovative, complex and useful subjects. But very few of those people can impart this knowledge in writing, in a way that it can be easily understood and assimilated. Writing style and expressiveness make all the difference between knowing something and sharing it in writing. With that in mind, these are my top 5 programming books (in no particular order):
The book that taught C to generations of programmers. This is a no-nonsense book, terse and concise but tells you everything you need to know about C. Some people will argue that in this day and age you don't need to know C to be a programmer. True, but you don't learn C to be a programmer, you learn it to be a better programmer. Knowing about memory allocation, how pointers work, what an L-value is...all this stuff gives you much better insight into your own programming language of choice. In the words of a colleague "you can't really program until you know how strcmp and strcpy work".
Until this came out, most C++ (and other programming) books were simple knowledge-dumps of their authors' undoubted expertise. Bruce Eckel took a very complex subject (C++), broke it down into fundamental principles and explained each one in an informal, conversational way that made it comprehensible even to readers like me who didn't have the vast intellect of Stroustrup or Scott Meyer. C++ for your ordinary Joe Programmer!
This book manages to give the reader a great, working understanding of design patterns while introducing and showcasing the Ruby programming language. Unlike the GoF design pattern book this one is written in a conversational and incremental fashion, offering relevant, real-world examples of how and when to apply design patterns and also provides a great perspective on how patterns are but a product of the constraints of current frameworks and languages. A must-read on design patterns, regardless of your programming language.
This book takes a language notorious for its inconsistencies, ugly syntax and design weaknesses, strips away all that and presents you with an elegant, expressive and effective language. What more can I say?
When this book was first published, terms like 'refactoring', 'code-smells' and 'TDD' lived on the edge of the software community, practiced and understood by a few eccentrics. This book explained why we should take notice and how to apply these concepts in our everyday programming. A thought-process-changing book indeed.
There are other books I could have added but I have to draw the line somewhere and this is it. Let me know your top 5 programming books.