Book Review: A Philosophy of Software Design by John Ousterhout.

Principles of software design that improve our approach to programming.

ᗰṳhumuzå ₱ɨuṩ
4 min readOct 30, 2023
A Philosophy of Software Design book cover

Introduction

Initially, I was only interested in watching the Talks at Google Video;- “A Philosophy of Software Design” by John Ousterhout, but after watching it twice, I decided I might as well read the book;- A Philosophy of Software Design also by John Ousterhout.

In this book, John Ousterhout addresses Software Design topics;- how to decompose complex software systems into modules that can be implemented independently, first introducing the fundamental problem in software design, which is managing complexity and then discussing philosophical issues on how to approach the software design process, and then presenting a collection of design principles to apply during software design among other things.

In this review, I try not to “technically Review” like a few other Book Reviews I've come across on this book in order to make it easy for Beginners to also see the beauty in picking up this book. The idea is to excite whoever is interested in software Design/Engineering/Development to at least pick up a copy with a “clean-slate mindset”.

I also have taken the initiative to share links I found useful while both reading the book and writing my simple review. Please enjoy & don’t hesitate to share feedback.

The book

A Philosophy Of Software Design Book Cover

Title: A Philosophy of Software Design

Author: John Ousterhout

Publication dates: April 6, 2018 (1st Edition) and July 25, 2021 (2nd Edition).

A Brief Comparison Between the 2 Editions.

At the time of this reading, the book has 2 Editions.

  • The First edition, was published on April 6, 2018, and introduces the author’s philosophy of software design and covers topics such as the nature of complexity, [working code, deep modules, information hiding, abstraction, interfaces, reuse, exceptions, testing, and documentation.]
  • The Second edition was released and published on July 25, 2021, with only a few significant changes from the First Edition like a new chapter “Decide What Matters” that talks about how good software design is about separating what’s important from what’s not important and focusing on what’s important.

According to John Ousterhout, Since the First Edition was published, the importance of choosing general-purpose approaches became even more clear to him leading him to rework and expand Chapter 6 (“General-Purpose Modules are Deeper”) to reflect this, and also move some material from other chapters to Chapter 6.

He also added subsections in two chapters to compare the book’s design philosophy with that of Robert Martin’s Clean Code.

Personally, I believe reading both editions chronologically will help you as a software design enthusiast appreciate the work put into the material by John Ousterhout throughout the course of time given the circumstance that inspired him to begin writing the book if you’ve watched the Talks at Google Video;- “A Philosophy of Software Design” by John Ousterhout.

Takeaways

  • John Ousterhout emphasises that the key to managing complexity is to decompose a system into modules that are independent of each other as much as possible. He then presents a collection of design principles that can be used to achieve this goal.
  • He also addresses a set of red flags that can indicate that a design is likely to be problematic thus identifying design problems and how to apply the ideas in this book to minimize the complexity of large software systems so that you can write software more quickly and cheaply.
  • One of the key ideas in John’s book is the distinction between shallow and deep interfaces where he points out how shallow interfaces are essential for managing complexity.

Conclusion

A Philosophy of Software Design by John Ousterhout is a book about how to design software systems that are both complex and manageable.

All in All, John’s book is a valuable resource for anyone who wants to learn how to design software systems that are both complex and manageable. It is a short book, but it is packed with useful information.

I highly recommend reading both Editions to anyone who is serious about software design as well as the various blogs written around this book as feedback, reviews or comparisons. I’ve found some like Book Review: A Philosophy of Software Design by Jimmy Koppel, to be particularly intriguing as it provides an in-depth review which I believe is most suited for Software Developers slightly more experienced over Junior level but otherwise generally insightful for even Juniors/beginners.

If you’ve read The 10 Commandments of Egoless programming, then you know exactly what I mean.

References

--

--