John Ousterhout, of TCL fame, has written a book that is as small (literally) as it is important. Weighing in at 178 none too big pages, it takes us on an inspired trip through what John has learned over the decades.
There is no shortage of thought on programming. There is also no shortage of people doing programming. What is rare however is a compendium of mature insights from someone that clearly still is into programming. Like many old hands, John has zoomed in on ‘complexity’ as the defining trait of software success (or lack of it).
Ousterhout has distilled 40 years of software & language development experience into a highly readable book that brims with insights both profound and mundane. By his own admission, some are rather lofty, like ‘define errors out of existence’.
But the book also offers smaller down to earth observations like that developers tend to put more work into commit messages that rarely get read than into source code comments that we see all the time. This is most certainly true for PowerDNS, and we will be changing our practice.
On comments, many of us believe that the better the code, the less comments you need. John qualifies this argument by observing there are many things that code itself can not document, like for example calling semantics (‘you need to open() this thing before you can write() to it’).
What is unique about the book is that Ousterhout shares his knowledge using examples that span the gamut from ‘language design’ to ‘modern day extremely low latency kernel-based distributed storage’. I’ve not found such a high dynamic range of experience in any other book on software development.
‘A Philosophy of Software Design’ delivers a great toolbox for thinking about software complexity, including concepts like ‘shallow’ and ‘deep’ methods, ‘information leakage’ and ‘pulling complexity downwards’.
I urge you to get your hands on this book and read it. I am sure it will make your software better and your development experience more fun. Or to quote the good book:
The reward for being a good designer is that you get to spend a larger fraction of your time in the design phase, which is fun. Poor designers spend most of their time chasing bugs in complicated and brittle code. If you improve your design skills, not only will you produce higher quality software, but the software development process will be more enjoyable.
Some further reviews:
- Notes on A Philosophy of Software Design by Will Larson
- Book review: A Philosophy of Software Design by Tim Goh