If Clean Code is about the obvious, A Philosophy of Software Design is about the subtle. This short book goes deeper and is more insightful than its predecessor. Writing clean code is great, but having a clean design is greater, and I would like more developers to read this book instead of the popular one written by Bob Martin.
For many years, the author questioned if software design can be taught, and if design skill is what separates great programmers from average ones. The result was a new course at Stanford, and after three iterations, this book emerged. A Philosophy of Software Design is clearly not the definitive book on the subject. Only a few real-world projects, mostly written in OO languages, are used to illustrate the principles, and there is so much more to cover about good software design. But as an introduction on the subject, the book is excellent, especially for students.
I found many references to this book by researching about the perils of clean code. A function is often more maintainable when the number of lines of code is small but sometimes, a longer function is preferable. A class is often more maintainable when it has a single responsibility but sometimes, making the common case as simple as possible is preferable. The book is filled with many examples like these. The discussions about some principles like “Design it twice” or “General-purpose modules are deeper” are invaluable. If you want to write clean code, you have to think, and this book will help you ask a lot of questions.
If you read the reviews of any book about code design, you will have a lot of divergent opinions. This book is no exception. The best option is thus to read not just one book, but a lot. Make sure to include this one in your reading list.