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.
Hi Petri,
Some of these books are somewhat old. May be 12 -14 years old. But the concepts are still valid. Is it? Technology moves really fast. Please correct me if i am wrong.
Hi Akalanka,
You are right. Some of these books are rather old but the concepts are still valid today. The only one which needs an update (urgently) is Effective Java. The second edition covers "only" Java SE 5 and Java SE 6. You can still learn a lot from it but you should be aware that it doesn't describe the features which were introduced in Java 7 or Java 8.
Hi Petri,
About your point that Effective Java needs an update: Well Joshua Bloch's fans will be pleased to learn that he has said that an edition that covers version 8 is in the works! Hopefully, it will be some time later this year or 2016. (He said that here: https://youtu.be/EduWekviwRg?t=7m12s . That's a fun long discussion which I suggest you all watch when you have some time).
I'd like to add a couple of books to your list:
1. "Java Puzzlers: Traps, Pitfalls, and Corner Cases" by Bloch again and Neal Gafter. To this day, I'm still surprised that relatively so few people recommend this book. It explores corner cases in Java through 95 puzzles. I have selected 5 of them and blogged about it; may I invite you to take a look: http://methodicalprogrammer.com/blog/5-puzzles-that-prove-you-need-to-read-java-puzzlers Personally, I rate this book as least as useful as Effective Java. If you said that we have 78 reasons to read Effective Java, then I'd say that we have 95 reasons to read Java Puzzlers :)
2. If you're looking for a book that covers security (about which I think we all should have some sense), then consider reading Iron-Clad Java: Building Secure Web Applications by Jim Manico and August Detlefsen. Personal rating: 5/5
Hi,
Thank you for your book suggestions. I will add them all on my reading list.
That's great, thanks.
is it useful in reading of the book "The complete reference of java 9th edition" ?
Unfortunately I don't know if that book is worth reading because I haven't read it. However, it has received very good reviews on Amazon.
As a Java developer, I really enjoy reading most of these books.
I should Thank Petri for sharing this.
You are welcome! I am happy to hear that you enjoyed reading these books.
By the way, you mentioned that you enjoyed reading most of these book. Did you mean that you didn't like all of them or you just haven't read them all? If you didn't like all of them, I would love to hear what book / books you didn't like.
Hello Petri, I am new to web development. Please suggest me some books for overall knowledge.
Hi Jai,
Web development is a very broad topic. Before I can recommend any books to you, I have to know if you want to just understand the HTTP protocol or do you have a specific language in mind? For example, do you want to learn how to write web applications by using Java (or some other language)?