Book
A Philosophy of Software Design, 2nd Edition
John Ousterhout
Summary
Argues that complexity is the central problem in software design, and gives it a working definition: anything that makes a system hard to understand or change. From there Ousterhout builds a small set of principles, including deep modules with simple interfaces, information hiding, and pulling complexity downward into the implementation instead of pushing it onto callers. Short and opinionated enough that you can disagree with specific claims, which is rarer than it sounds among design books.
Target Readers
- Engineers who can make code work and now want criteria for judging whether it is designed well
- Tech leads who need vocabulary for explaining why an interface is worse than its implementation
Tags
Colophon
- Publisher
- Yaknyam Press
- ISBN
- 978-1732102217
- Published
- Dec 2021
Get this book
* The link above is an advertisement via Amazon Associates.Related Books
Prerequisites
- Recommended
Clean Architecture
Robert C. Martin
Reason: Once you have the principles of dependencies and boundaries, you descend to the universal question beneath them: how to contain complexity. Ousterhout systematizes complexity management through the lens of deep modules and information hiding.
- Related
Effective TypeScript, 2nd Edition
Dan Vanderkam
Reason: Once you can write robust code with types, you want to face a more fundamental question—how to curb complexity itself. A Philosophy of Software Design articulates the 'good versus bad' of design that underlies typing, through principles like deep modules and information hiding.
- Related
Building Micro-Frontends
Luca Mezzalira
Reason: Having experienced designing how to split and compose frontends, you arrive at the universal question beneath those decisions—how to deal with complexity. A Philosophy of Software Design gives you the language to judge good versus bad decomposition through module depth and cognitive load.
- Related
リファクタリング
Martin Fowler
Reason: Once you have tactical means of improvement, you raise your view to the strategic question of why—the nature of complexity itself. A new criterion enters your refactoring decisions: does this actually reduce complexity?
Next Books
- Related
Domain-Driven Design: Tackling Complexity in the Heart of Software
Eric Evans
Reason: Once you have universal principles for containing complexity, you apply them specifically to the complexity of the domain. DDD tames the essential complexity inherent in the business through a model and a ubiquitous language.
- Related
データ指向プログラミング
Yehonathan Sharvit
Reason: Once you have general principles for managing complexity, you examine data-oriented programming as one concrete prescription—separating data from behavior and embracing immutability. The same goal admits different paths.