A Philosophy of Software Design
A short book with a single argument: complexity is the enemy, and deep modules with simple interfaces are how you fight it. It disagrees productively with a lot of received wisdom about small functions and comments.
Book
Other
John Ousterhout
2 weeks
Intermediate
About $25
The central argument
That the main difficulty in software is complexity, that complexity accumulates incrementally rather than in one bad decision, and that the best defence is modules that are deep, meaning a simple interface hiding substantial functionality.
Where it argues with the consensus
It makes a direct case against decomposing code into very small functions, on the grounds that this multiplies interfaces and therefore complexity. It also argues that comments are essential rather than a failure of naming, and that a great deal of design knowledge simply cannot be expressed in code. Both positions contradict widely repeated advice, and both are argued carefully.
Why it is worth reading even if you disagree
It is short, it is specific, and it makes you articulate why you write code the way you do. That is valuable whether or not you end up agreeing.
Best for: engineers with a few years of experience and opinions about code structure, especially strongly held ones.
Ready to start?
Opens on John Ousterhout in a new tab.
Stuck on something specific?
Writing only gets you so far. If you want an answer to your situation rather than the general case, book a session and we will work through it together. Every session is free; a few slots open each week.
Follow along
New writing, resources and project ideas land here first.