Book Studio

A Philosophy of Software Design

A study edition of John Ousterhout's approach to managing software complexity.

John Ousterhout · Second Edition · 2021

Cover of A Philosophy of Software Design, Second Edition

Software design is the practice of arranging a system so that future work remains understandable. A program can produce the right output today and still be expensive to change tomorrow. John Ousterhout's central argument is that the most useful measure of design quality is complexity: the amount of knowledge and coordination a developer needs before making a safe change.

This study edition follows three ideas that build on one another. First, complexity rarely arrives in one dramatic failure. It accumulates through small dependencies, vague names, special cases, and decisions that force knowledge to spread. Second, good modules are deep: they offer a small, clear interface while absorbing substantial work inside. Third, information hiding keeps design decisions in one place so that a change does not ripple through unrelated code.

The chapters use original examples rather than reproducing the book. Read them in order to move from recognizing complexity, to shaping module boundaries, to deciding where knowledge should live.

About this sample

This is an original study summary based on the author's official Second Edition page and public Stanford course materials. It is not the book's text or a substitute for the complete work.