Rating: ★★★★★ (5 of 5 stars)
“A Philosophy of Software Design” (APoSD) might sound daunting theoretical, but contains a lot practical recommendations and examples.
My apprehension was that the book might not provide additional value in comparison with “The Practice of Programming” (TPOP). Luckily this wasn’t the case. TPOP is about general programming while this book focuses on Software Design - two different topics. Common knowledge - for example don’t repeat the code with the comments - is in my point of view the only overlap between these two books.
“A Philosophy of Software Design” focuses on complexity in software. Why complexity matters, causes of complexity, methods to avoid complexity and indications of unnecessary complexity. Complexity receives a thorough examination on different layers in the book, from very high level to a granular level. In every chapter there are practical examples to comprehend the authors point. These examples are either code snippets, experiences from the author or visualizations.
With just ~190 pages of a DIN-A5 format (US equivalent to Statement format) it can be read within a short amount of time.
I like the summaries of every chapter and the summaries of all Design Principles and Red Flags at the end of the book which help to refresh the essence of previous chapters/principles/indicators. The summaries of the Design Principles and the Red Flags will definitely find a permanent place on my desk.
I recommend to read this book without hesitation if you want to know more about software design. I have the feeling that this book is an excellent complementation to the “swiss knife” programming book, TPOP, to get a better understanding of software development.