Skip to content

A Really Good Book

ADMIN | 14-07-2011

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.

Hexagon pattern 1

book on chairWay 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?

You might also like...

c138_2_cropped
3 Min read
3D ACIS
We often focus the success of new partners, showcasing how Spatial helped with bringing a new product to market. But...
Large Tolerant  Vertex
3 Min read
3D Software Development Kits
boolean operation Boolean operations on individual bodies are common functions in 3D modeling. While simple in concept,...
3 Min read
3D Software Development Kits
In much the same way as physical design has moved from paper 2D drawings to 3D models in software, so has analysis....
4 Min read
3D InterOp
Part and parcel with model-based engineering is model translation. Because the model is now the specification, accurate...
4 Min read
3D ACIS
We are moving things around in the office here at Spatial to accommodate some new people. As a result, our marketing...
2 Min read
3D ACIS
This article shares a simple architecture which can be used to capture meta-data about the use of ACIS APIs in your...
1 Min read
3D ACIS
How To Create an Ellipsoid using 3D ACIS The 3D analytics supported directly in 3D ACIS include: sphere, block,...
2 Min read
3D ACIS
Basically, there are two priorities when using a software component, particularly a 3D modeling kernel: Does it do what...
1 Min read
3D ACIS
A geometry kernel is a big thing. It’s a huge thing. Maybe even big enough to see from space. By most accounts, even...
1 Min read
3D ACIS
My comrades and I did a performance analysis of Intel’s Hyper Threading Technology (HTT), using thread-safe ACIS and...
3 Min read
3D ACIS
In earlier posts I’ve written a lot about the various approaches to multiprocessing and the potential benefits. What I...
2 Min read
3D ACIS
The challenges of a major software release are not unique to Spatial. And like other organizations, the launch process...
5 Min read
3D ACIS
We’ve known for a long time that the integrity of B-rep data plays a major role in the success of downstream modeling...
3 Min read
3D ACIS
Answer: when it’s a 'HappyPathPoint'.
1 Min read
3D ACIS
To finish up this series of posts; what Gregg's post described happened a few years ago. Since that first team room,...
4 Min read
3D ACIS
This post will discuss two aspects of my favorite programming language, C++:
2 Min read
3D ACIS
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...
7 Min read
3D ACIS
Here’s a subject to which everyone can relate in one way or another: growable arrays. An array is a contiguous memory...