A good book has the power to change yourself and your career. Through the years I have compiled a list of books that I believe every software developer must read. The list represents my personal opnions and preference. It was based on the books I’ve read and conversations about books with colleagues and ex-colleagues.

Here is the list:

Agile Software Development, Principles, Patterns, and Practices by Uncle Bob

This is a fundamental book. Uncle bob gives a succint and effective explanation about how to execute an Agile Software Development project. The book explains why the old ways of working was not effective. Then moves on to talk about agile software development. He covers the fundamentals of eXtreme Programming and mentions other methodologies. But don't assume this is a book for managers and teams leaders only. He covers in details object oriented patterns that enable agility to a project. The book covers the following principles: the single responsibility principle, the Open-Close principle, the Liskov Substitution Principle, the Dependency-Inversion Principle and the Interface-Segregation Principle. Then he progress to give examples of projects that succeed [or not] to adopt agile. I read this book when I had my first encounter with a scrum project back in 2006/2007. It blew my mind.

Design Patterns: Elements of Reusable Object-Oriented Software

The book that popularised the design patterns that everybody still mentioning today. More than 10 years later and this book still a must for every software developers. I found the first part of the book the most valuable one. Although there is no questions regards the value of patterns' catalog.

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

Many people are seeking the answer to the question: "How small should a Micro-Service be?" The answer is inside this book. Eric Evans wrote one of the most influential books of all times. All the patterns that he describe are mandatory in almost all software development project. I didn't find it a easy read, actually I had a hard time to finish the first part of the book, but the second part is pure gold. In the last part he answers the question about the size of Micro Services (before the micro-services book had a single line). If you find yourself stuck in the first part, keep pushing through, it is totally worth the effort. There is a Distilled version of this book, I didn't read it yet. When I read I will give you my comments.

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))

This is the bible of Continuous Delivery. The amount of knowledge gathered in this book is impressive. The same way that you don't think about a software project that would not follow agile practices it is also impossible to think about a project that would not benefit from a Continuous Delivery. Jez Humble is The Name about Continuous Delivery and together with David Farley they cover everything you must know to implement a Continuous Delivery Pipeline. I believe this book should be mandatory in software releated universities courses.

Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series)

XP never had the same level of adoption that scrum has, but it is for sure much more complete in terms of understanding the details of a software development project. Kent Beck captures the essence of delivering software products that not only satifies the final user but also bring pleasure to the development team. This simple detail can make the difference between a failure and a product that excel the expectations.

Patterns of Enterprise Application Architecture

Mr. Fowler, the biggest author in our industry. In this book he capture common patters to solve problems that you can face in any company. Different from the other design patterns books that focus on how to make your code more readable this book will focus on making the problem that you have at hand more readble.

Refactoring: Improving the Design of Existing Code

What happens when you mix Martin Fowler, Kent Beck and other two great software developers to write a book? You end-up with this threasure in form of a book: Refactoring. This book openned my eyes to how to move a code that seems mediocre to a great code taking safe steps.

Test Driven Development: By Example

I still wonder about what Kent Beck and Ward Cunningham smoked to create such a controversial way to write good code. TDD changed completed the way I solved problems in my mind. Instead of have the whole design in my head, now I have only the high level direction I want to take and I rely on the TDD to guide my steps towards the goal. This book explains the process of TDD and show some usefull patterns of applying TDD. Although I believe TDD is something you learning by doing, you still must read this book to make sure you can extract all the power of this fantastic and controversial technique.

The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)

Can 9 women produce 1 baby in 1 month? If you like this analogy you must read this book. This is a old but gold book. I would just recommend you to have some experience before reading this book as this is heavy and deep conversation.

Working Effectively with Legacy Code

I hope there will be a day where nobody will never ever have to deal with legacy code again. But sadly this day is not in our horizonte of events yet. Therefore this book is a must. His definition of legacy code leaves no question on how to classify a code as legacy or not. His outside in tatics changed the way I approach challenges with legacy code. The sad part is that although many years have passed since Michael wrote this book, it still relevant. That means we still producing legacy code.

Clean Code: A Handbook of Agile Software Craftsmanship

Uncle bob again. He opens and closes this list. Clean Code is the reference about how to write good code. Many developers, myself included, believe that after years of experience you know how to produce good code. Yet this book has proven that, as Yoda would say: much to learn we have still. This book covers everything, since naming, comments, functions, scope till unit test. I never met Uncle Bob in person, but the day I do I will say: "Thank you for the Clean Code book".

Conclusion

This list for sure is not definitive, but I'm confident that if you read all of these book you will be a better programmer. Did you miss any book? Do you disagree with any book on the list? Let me know in the comments. I would love to read your opinions.