If a beginning programmer was to read just one book, this would definately rank high on a list of candidates. (But then again, why should a beginning programmer only read one book)
“Agile Software Development: Practices, Principles, and Patterns” is in many ways Robert C. Martin’s magnum opus. After having read much of his papers on Dependency Inversion Principe, the Open-Closed Principle and other object-oriented methods, as well as Extreme Programming, Agile Software Development puts it all together. More than any other book I have read, possibly including Beck’s excellent “Test-Driven Development”, Agile Software Development makes a very strong case for writing the test before the code. Most of the examples in the book, even when Martin does not talk about testing, start out by writing a test to explain a concept. The book goes a long way to normalize the sensibilities of Extreme Programming.
As the full title implies, Agile Software Development spans a wide range of subjects. The book starts off explaining Agile software development and Extreme Programming in some depth before covering principles of program design. While using a lot of examples and good case studies to clearify his points, Martin then goes on to explain, each in it’s own natural time, 14 of the most crucial design patterns from Gang of Four, as well as a few from other sources. Agile Software Development does not study each pattern in as much depth as the gang of four, but the author provides a good trade-off between giving the motivation for each pattern, explaining the mechanics of the pattern and putting it into context.
All in all, the book tours a great number of subjects that are critical to the design and implementation of software projects. I would be much relieved about the competency of any colleague if I knew this book was on the list of books he or she had read. More than explaining the basics, Martin argues for why and when they are important and just as importantly: when they should be ignored.
But the Satire of Two Companies in the appendix is just lame. ;-)