Way back in the Dark Ages of the mid-90s, I used to read a newsgroup called comp.lang.c++. You can tell this was the Dark Ages because A) it was a newsgroup, not a web board and B) growth of the C++ community hadn’t forced it to transition to comp.lang.c++.moderated in order to keep the signal/noise ratio high. One of the things I remember from this time was some guy who was thinking through ideas for a book and posting articles about design metrics for commentary from the group. I found the ideas interesting, but didn’t pay close attention. (Amusingly, I think I might have found one of these posts just now while Googling to double-check the group name.)
Fast-forward a year or two, when I was in a bookstore looking at computer science books and noticed a book: ‘Designing Object-Oriented C++ Applications Using the Booch Method’ by Robert C. Martin. I already had Booch’s book (the 2nd edition) and had loved it – especially the case studies where he would go through the design of a toy application. And yes, that’s a measure of my geekiness – I used to re-read those cases studies over and over just for the fun of it. Anyway, I looked into the book, and lo and behold it was the same guy whose posts I’d been reading on comp.lang.c++! And he had case studies!!! :)
Fast forward another ten years or so. I was working on ACIS at Spatial, and we were in the process of going Agile. I was in a bookstore looking at software engineering books, and what to my wondering eyes should appear but … a book by Robert C. Martin titled ‘Agile Software Development: Principles, Patterns, and Practices’! Which, when reading the preface, said “This book started out as a second edition to Designing, but that’s not how it turned out.” I actually (respectfully) disagree with this statement – I think that the heart of the book is section 2 ‘Agile Design’, and that this heart is unchanged (albeit rearranged and improved).
So why am I making such a big deal about this book? Because I think it’s the best book I’ve ever read at capturing the reason object-oriented design (OOD) is so important: it’s a methodology for using interfaces to break the naïve dependence of client code upon server code. As Martin says on page 2 of Designing: “Instead the dependency has been inverted so that the server depends on the interface.” The idea is that both the client and the server depend on the interface, which means that they can be independently modified. This is discussed in detail in chapter 11 of Agile: ‘DIP: The Dependency-Inversion Principle’. Each of the six chapters in section 2 of Agile discusses principles of similar importance; it is my view that all professional programmers should read and embrace this section of the book. I’m pretty sure that I’m not alone in this opinion, since he’s very well known within the C++ community.
Who else puts his books on their ‘must-read’ list?