I have read my share of software development books and I have noticed that it is very rare to find a book which I want to read more than once.
However, once in a while I find a book which teaches me new things every time when I read it. This blog post is a tribute to these rare gems.
And now, without further delay, I present to you ten books which have earned a special place in my bookshelf:
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin teaches you three things: how to write good code, how to tell the difference between good code and bad code, and how to transform bad code into good code. These are essential skills for every developer. That is why you should read this book.
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides is a true classic. It presents elegant solutions to common design problems. If you want to learn the basics of writing elegant object-oriented code, this is the book you should read.
- Domain Driven Design: Tacking the Complexity in the Heart of Software by Eric Evans is a book for developers who want to understand how they can transform the knowledge of domain experts into a useful domain model. If you have noticed that often it is hard to find a natural place for “business logic”, you should do yourself a favour and read this book.
- Effective Java by Joshua Bloch is a book that requires no introduction. If you want to write more robust Java code, you have 78 reasons to read this book.
- Effective Unit Testing: A guide for Java developers by Lasse Koskela is the second testing book of Lasse Koskela, and it helps you to improve the quality of your test suite. Reading this book helped me to write cleaner and more maintainable tests. I guess you could say that this book helped me to realize that tests have no value if they don’t express the intention of each test. I think that this is a valuable lesson, and that is why you should read this book too.
- Patterns of Enterprise Application Architecture by Martin Fowler has a “boring” title but you shouldn’t let it scare you. Reading this book gave me a better understanding about the basic building blocks of the “enterprise” frameworks which I use every day. If you want to understand your tools, this is the book you should read.
- Refactoring: Improving the Design of Existing Code by Martin Fowler is another timeless classic. It describes more than 40 different refactorings which can be used to improve the design of existing code. Every software developer should have good refactoring skills and reading this book will take you one step closer to that goal.
- SQL Antipatterns: Avoiding the Pitfalls of Database Programming by Bill Karwin is a book that is very useful to all developers who use relational databases. This book helps you to avoid the most common design antipatterns, query antipatterns, and application development antipatters. To be honest, I have to admit that I have made a few mistakes described in this book. That is why I am extremely happy that I read it and learned how I can avoid making the same mistakes in the future.
- SQL Performance Explained by Markus Winand promises that it will teach you everything you need to know about SQL performance. That is a very bold tagline and I was very happy when I realized that this book keeps its promise. I think that you should read this book for two reasons: it proves that relational databases aren’t slow, and it explains how you can make your SQL queries as fast as possible (they can faster than you ever imagined).
- Test Driven: TDD and Acceptance TDD for Java Developers by Lasse Koskela is the first testing book which I have ever read, and that is why it has a special place in my heart. It is a very good introduction to TDD, but you can learn a few testing tricks from this book even if you aren’t a TDD fanboy. That is why this book is a very good addition to your bookshelf.
This list is based on my (subjective) opinion and it is very likely that your list will look completely different. If you think that I missed a book which should be in this list, share your opinion in the comment section.