Here's my current list of books:
Software Design Principles and Patterns Books
- Design Patterns : Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides
This is the book known as the Gang of Four book and it is considered required reading if you want to learn about software design principles and patterns. Several people warned me that this book would be dense. Several people also warned me that the pattern terminology used in the book has changed significantly since the book was published in 1994. So far, this book has not caused any brain injury and I haven’t found it overly difficult to read.
- Head First Design Patterns
by Elisabeth Freeman, Eric Freeman, Bert Bates, and Kathy Sierra
This book makes the previous book understandable. It has really clear samples of each of the design patterns. This is a great book – it was a joy to read. There are only two things that I don’t like about it. I wish that it did not contain all of the cartoons. Also, I wish the samples were C#/VB.NET instead of Java. Troy Goode originally recommended this book to me.
- Framework Design Guidelines
by Krzysztof Cwalina and Brad Abrams
If you want to understand why the .NET framework was designed in the way that it is designed, then this is the book to read. The book introduces great phrases like “Fall into the pit of success”. By reading this book, I also learned the origin of the terminology Pascal Casing and Camel Casing.
- Refactoring: Improving the Design of Existing Code
by Martin Fowler
Martin Fowler’s book got everyone talking about better software design through refactoring. The book contains a catalog of more than 70 types of refactorings.
- Refactoring to Patterns
by Joshua Kerievsky
As the title suggests, this book combines a discussion of patterns and refactoring. I’ve been told that this is a super important book and that I should read it immediately.
- Patterns of Enterprise Application Architecture
by Martin Fowler
Another massively important book written by Martin Fowler. Contains a catalog of over 40 patterns that you should know when building enterprise applications.
- Domain Driven Design: Tackling Complexity in the Heart of Software
by Eric Evans
This book is devoted to the process of building software through patterns and refactoring.
Test-Driven Development Books
- Working Effectively with Legacy Code
by Michael Feathers
This book has received recommendations all over the place. It is the next book that I plan to read.
- xUnit Test Patterns
by Gerard Meszaros
This is a big, intimidating book. This book is supposed to do a good job clarifying testing terminology such as the distinction between mocks, stubs, dummies, doubles, etc.
- Test-Driven Development in Microsoft .NET
by James W. Newkirk and Alexei A. Vorontsov
This was one of the first books on Test-Driven Development that I read. I really liked the organization of the book. I like how the book presents walkthroughs of using TDD when testing ADO.NET and user interfaces.
- Test-Driven Development: By Example
by Kent Beck
The Kent Beck book on Test-Driven Development. This is a really enjoyable book to read. I was surprised that Kent Beck takes a very practical approach to using TDD. He even presents a few situations in which TDD does not make sense (testing concurrency and security).
- Pragmatic Unit Testing in C# with NUnit, 2nd Edition
by Andy Hunt, Dave Thomas, and Matt Hargett
This book covers using NUnit when building ASP.NET 2.0 applications.
- Extreme Programming Explained: Embrace Change
by Kent Beck and Cynthia Andres
The founding book of XP. I’ve been warned that the first edition of this book differs significantly from the second edition.
- Agile Principles, Patterns, and Practices in C#
by Robert C. Martin and Micah Martin
This is a dense but valuable book. The authors (father and son) do a great job of delving deep into the subject of software design principles and patterns. The code samples in this book are written in C#. Brian Henderson recommended that I read this book.
Almost all of these books were recommended by friends or colleagues. If you know of a good book related to these topics, please leave a comment.