I recently had an interesting conversation with a developer about unit testing, object-oriented design and in general, how to write good code. Our discussion went around in circles, and I found myself where I usually end up in conversations like this, quoting experts like Martin Fowler, Uncle Bob, and numerous others. Having had the conversation numerous times before, I decided it was about time I compile a list of my favorite books that all developer's should read. This is not intended to be a comprehensive list of the greatest books ever, but merely books that I have found invaluable to contributing to better code and projects.
- The Pragmatic Programmer: From Journeyman to Master (Andy Hunt and David Thomas) - This is probably the bible of the modern software engineer. Provides practical advise about how to write software smartly.
- Growing Object-Oriented Code, Guided by Tests (Steve Freeman and Nat Pryce) - Exceptional book on how to execute Test Driven Development, with a special emphasis on mocking. I especially like their approach of starting with end-to-end tests and working your way through the design.
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Jez Humble and David Farley) - When I read this book, I was furious at all the time I wasted on previous projects doing it wrong. This book changed my view of how to run a software project.
- Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin) - This book contains an amazing collection of advise and guidance on how to write code.
- Working Effectively with Legacy Code (Michael Feathers) - This book is by no means just about Legacy Code, but it is also about refactoring, design and most importantly testing. Even though some of the examples are in C++, I still found this book absolutely essential in the consulting industry.
- The Productive Programmer (Neal Ford) - In my o pinion, an underrated book. This book focuses on how to make yourself more productive as a programmer by automating tasks in your development environment.
- Release It! Design and Deploy Production Ready Software (Michael Nygard) - Great book about how to design scalable and stable systems that can with stand the test of production.
- Specification by Example: How Successful Teams Deliver the Right Software (Gojko Adzic) - My most recent addition to my favorite books list and the least technical of the bunch. This book focuses on how your team identifies, evaluates and refine requirements into executable specifications.
I would love to hear what other developers think should be on this list. Enjoy!