A Philosophy of Software Design

John Ousterhout introduces the concept of “complexity” as the central challenge in software design and offers practical techniques for managing it. The book argues that the primary goal of good design is to reduce complexity, making systems easier to understand and modify over time.
Topics include deep vs. shallow modules, information hiding, choosing good names, writing comments, and recognizing red flags in code. It is a concise, opinionated guide that pairs well with hands-on experience.