Daniel Irvine on building software
Book Review: Agile Software Development: Principles, Patterns and Practices
4 June 2014
Agile Software Development: Principles, Patterns and Practices (affectionately known as PPP) by Robert C.Martin (affectionately known as Uncle Bob) is a must-read for software developers of all abilities.
The book starts with a walkthrough of the bowling game kata using TDD and pair programming. The dialogue between Bob and his pair is insightful, particularly because they are constantly stumbling along and often moving backwards rather than forwards. If you’ve never experienced these agile techniques before, this is a great introduction to how it all fits together.
The second part of the book is devoted to the SOLID principles, although somewhat amusingly the book has these in the wrong order and ends up spelling SOLDI.
SOLID is something you can read about on Wikipedia but you won’t fully understand it until you’ve written software for decades or you’ve read this book. The author’s keen focus on examples of SOLID violations provides the reader with the tools required to spot and fix errors in everyday object-oriented design.
The open-closed principle is the principle that underpins the rest and the author does a great job of explaining this thoroughly and tying it all in. This particularly thoughtful “first principles” approach was a highlight of the book for me.
The rest of the book details walkthroughs of real-life examples using well-known patterns such as strategy, command and observer. The real-life examples are just that: full, working examples that describe and implement systems that mimic actual systems. This gives the reader a whole extra level of understanding than standard text-book examples would give alone.
One pervasive element of the book is its focus on UML class diagrams to describe program structure. Interestingly, it clearly shows the 1% of the UML that is actually useful. Learning the full UML is next to useless, so this book is all you really need to learn UML--and strangely that’s not even advertised on the cover. The two appendices on the full UML are largely unnecessary as you’ll have a good grounding in the useful parts just by reading through the walkthrough examples.
The book shows its age by its exclusive use of C++ and Java. What can be done in 100 lines of C++ can be done in 20 Ruby, so many agile practitioners have left these languages behind. Although the examples are still perfectly understandable to those without C++ and Java experience, it’s certainly a negative point and I feel it could do with a second edition that uses more current and popular languages.
All in all though, a great book that every programmer should read at least once.