Reflections on A Philosophy of Software Design
This is not required reading in our Software Design class, but it is highly recommended — and now that I finished John Ousterhout's A Philosophy of Software Design I can see why.
Students of law, medicine, or philosophy are expected to read works that frame how they think about their discipline. In software engineering the tacit assumption is that design judgement comes "on the job." Ousterhout lands against that backdrop with a clear mantra: it is more important for a module to have a simple interface than a simple implementation — because most modules have more users than developers.
Why bother reading theory if software changes so quickly? Design principles do not change as fast as tools. And as AI systems democratise knowledge, engineers who can reason from first principles will have an advantage over those who only know the how.