A list of Top Software Design books. Some of them are eye openers, some are hard read, but all of them will definitely change the way you build systems!
- It describes GRASP patterns.
These are fundamental design principles, which together with SOLID and GOF patterns should be known by every (good) software developer.
- It shows how an experienced software designer thinks.
The author goes through design process of two applications (one business system and a game) and shows what he thinks at each step, how he applies GRASP patterns, why he chooses one think over another. Very valuable book!
Don’t get fooled by UML in the title. I thought the same: “What!? Yet another UML book?“. IMHO putting UML in the title was a marketing mistake, that puts many off the book, but the book is worth more than its price!
Does SOLID ring the bell? It’s all here and more.
Great chapter with application of Test-Driven Development and how it leads to simple design that does the job.
Like “Applying UML and Patters” it was eyes opener for me. And again, don’t get fooled by the title – just replace C# with Java and the code will compile with JDK just fine. ;-)
“Design Patterns: Elements of Reusable Object-Oriented Software” Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
A book with description of 23 basic design patterns that many people talk about, but not many know.
GOF is hard to read, especially that examples are in C++ and Smalltalk (who speaks Smalltalk these deays?), but still it contains many insights and the descriptions of design patterns are very deep and valuable.
Alternatively/also one can read a different book about GOF patterns. Head First Design Pattens doesn’t describe all of them, but is much easier to read and has some good examples.
In most (all?) enterprise projects the work have to be done in existing projects. Hardly anyone starts projects from scratch, so to apply Design Patterns one have to refactor to them. And this book is about that.
If you would have to learn only one thing from all of these books, learn Compose Method pattern from this book. It turns shi**y code into readable, more maintainable one. I use it everyday.