Ousterhout’s book is one of the better books on software design. Ousterhout values his audience, his writing is concise, focused, and with an appreciation that such books are often reminders rather than novel ideas. Often we know or have seen the messages the author is conveying in practice, but the ability to put a name to that intractable ‘good engineering’ and make it tangible is a great skill, and one Ousterhout excels in.
His writing that particularly stood out to me were the sections on code that is spread across multiple abstractions because the engineer was thinking about it temporally, and on ‘shallow classes’. Both of these formed ‘aha!’ moments to me, and are easier to employ now they have been named.
With that said, I am disheartened to see yet another book written and edited in Markdown. Ousterhout’s respect for his readers seems to have stopped at the editing phase, the book is not beautiful and would have been much more visceral if it had considered the last decade of word editors.
On a separate vein I fear that books on software design, as a genre, are falling into the same traps that business books do: they focus on the generic case, and veer into self-help. The best business books are just incredibly well-researched, hyper-specific books on a single case, leaving the reader to derive their own impressions for their own context. Software design books are yet to see such a counterpart, and ‘A Philosophy of Software Design’ is certainly not that.