A Philosophy of Software Design is it's author's attempt to teach an often neglected core skill in software development: How to design and create high quality software. This is not done in the way it is often attempted, where a method of programming like OOP is explained and codified and good practices are listed. Rather the book attempts to explore and explain the principles that underlie these good practices so that the reader can then apply them to other problems they will encounter day to day.
The author is John Ousterhout, who currently teaches the first class on Software Design at Stanford University. In the preface he talks about how Software Design is both a fairly static subject in academia and not taught enough and that the book contains both lessons learned during his own extensive code writing career and the classes he has taught at Stanford University.
Chapter One: Introduction
The first chapter describes complexity as the biggest limitation in writing programs. The larger and more interconnected the program is the larger the cognitive load of adding to it becomes. There are two ways of managing complexity: First by simplifying the code, and second by hiding it inside an encapsulation (called a module) like a function or class.
Unlike traditional design work code is highly malleable, this allows the designing of the program to be an ongoing iterative part of programming. The contrast between Waterfall and Agile is noted and should be familiar to any programmer out there, but the book set reducing complexity as one of if not the most important goal of software design.
The book focusses mostly on describing complexity and its solutions at a very high level. Unlike most programming books there is little actual code printed and very few images. Instead the focus is on more narrative examples rather than the nitty-gritty written code.
Book Reviews
- henrikwarne.com/2021/07/12/book-review-a-philosophy-of-software-design/
- blog.pragmaticengineer.com/a-philosophy-of-software-design-review/
- medium.com/@illegalnumbers/review-of-a-philosophy-of-software-design-a947cd78434f
PS: 2nd Edition
I'm reading the first edition of the book released in 2018, the second edition has reworked chapter 6, added some sections comparing and contrasting with Clean Code and added a new chapter. Luckily these sections have been released for free here as a sort of errata to the first edition.


