A Philosophy of Software Design is written by John Ousterhout and published on July 26, 2021 by Yaknyam Press.


What is inside

A Philosophy of Software Design explores best practices for code organization and decomposition, as well as common pitfalls to avoid in large projects where maintainability is a major concern.

A Philosophy of Software Design is a relatively short book that can be read in 1-2 sessions.

What is Good

Strong first half with nice articulated ideas on:

  • Complexity nature
  • Deep/shallow modules
  • Modularity
  • Dependency decompositions practices

It makes a successful attempt to generalize abstraction concepts and primitives without making them language-specific, and gives code samples for different languages

It also features engaging examples and idioms, such as “tornado developer” and “classitis”

What Can Be Better

The second half of A Philosophy of Software Design is quite basic, with a heavy focus on comments (4 out of 20 parts) and naming (3 out of 20 parts).

Sections on performance and trends only touch the surface of the topic.

While the book offers some generic and basic tips, overall it falls short in providing more advanced or nuanced advice.

The discussion of Agile versus Waterfall is very basic and biased towards Agile, lacking deeper analysis or examples to support its claims.

The biggest gap between my expectations and the reality of A Philosophy of Software Design was the disconnect between its title and the actual content. While the book covers important topics such as abstractions, modules, code style, and naming, it primarily focuses on a narrow subset of programming issues rather than providing a comprehensive exploration of software design philosophy.

Who Will Find It Useful

  • Developers seeking best practices for code style and organization.
  • Junior developers without much experience in enterprise-level development.