Programming for fun and profit

Programming tutorials, problems, solutions. Always with code.

Top Software Design Books

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!

Clean Code” Robert C. Martin

Clean Code


Clean code is the basis of good software design, and anyone who is to write any piece of code should read this book! Skills from this book are a must for professional software developers. Design won’t help when the code is not clean.

Applying UML and Patterns” Craig Larman

Applying UML and Patterns Fantastic book, worth reading for at least two reasons:

  1. It describes GRASP patterns.
    These are fundamental design principles, which together with SOLID and GOF patterns should be known by every (good) software developer.
  2. 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!

Agile Principles, Patterns, and Practices in C#” Robert C. Martin


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

Design Patterns

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.

Domain-Driven Design: Tackling Complexity in the Heart of Software” Eric Evans

Domain-Driven Design

This book is invaluable for software developers that work with complex domains. The author shows many valuable viewpoints and concepts. Things like Ubiquitous language and Bounded Context had a great impact in some of my projects. Be warned: the book is bloody hard to read!


Refactoring to Patterns” Joshua Kerievsky

Refactoring to Patterns

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.

This list is far from complete and will be updated. :-)
Share with the World!