When I started my career back in 2009 I was fortunate enough to pick up and start reading some amazing books. While my first inclination was to buy books that covered specific languages I soon discovered that the books that were most beneficial were those that covered broader topics in software development. Below is my list of the top 5 books that every software developer should read. They are listed in reverse order of importance. I've also included some honorable mentions that didn't make my top 5 but are worth the read.

5. Test Driven Development: By Example by Kent Beck.

Test driven development is a key practice of a software master craftsman. Unfortunately, this practice is rarely taught or encouraged by IT and software shops. As an aspiring software developer you should commit to test driven development early in your career and join the elite few who have made this part of their every day method for developing software. I did not pick up this habit when I started, and I am years behind where I should be for not doing so. Learn from my mistake and start doing this right away.

4. Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, Johnson, and Vlissides.

When I started developing I was always told to make my software reusable and decoupled. I always wondered how successful software developers did this until I discovered the power of design patterns. This book contains a catalog of time-tested, proven ways of structuring your code to maximize re-usability and code quality. Furthermore, learning these patterns gives the aspiring software developer a powerful vocabulary to communicate with other software developers.

3. The Clean Coder: A Code of Conduct for Professional Programmers by Robert C Martin.

In this book Robert "Uncle Bob" Martin puts forth a code of conduct that every programmer who seeks to call themselves a "professional" should follow. For example, he states that a professional developer should strive to develop their code such that QA will find nothing. While QA will find something, a professional developer does not merely write the code and throw it over the wall. They should take care to put forth the best code they can and not depend on others to ensure the quality.

2. The Passionate Programmer: Creating a Remarkable Career in Software Development  by Chad Fowler.

This book is at the heart of what this website is about. It provides great insight into creating a remarkable career in software development. He offers advice on questions the question that plague every developer at various stages throughout their career. His writing is interesting, to the point, and he offers helpful action items at the end of every chapter to help you implement the ideas he has put forth. This book had a profound impact on my own career. The work I am trying to do with this website would have never come into existence without reading this book first.

1. Code Complete: A Practical Handbook of Software Construction, Second Edition by Steve McConnell.

If there is one book that is an absolute must for a developer to read it is this one. Code Complete is a masterpiece. If you have any intention of going beyond just slinging code, reading this book and putting its advice into practice is the best first step you can take. At my previous employer I had the privilege of helping new software engineers to get started in the company. One of my proudest accomplishments was starting a program to ensure that every new developer received a copy of this book along with the expectation that they should read in their first year. Get this book, read it, put it away, pick it up again in a few years and read it again. You will find valuable information every time you read it.

Honorable Mentions

Inversion of Control Containers and the Dependency Injection pattern by Martin Fowler. Okay, this isn't a book, but dependency injection is such an important concept that I had to include something on it. A few years into my career I was able to take a week-long training course on the Spring Framework. During this course I learned about dependency injection and inversion of control, and it was probably one of the most profound 'ah-ha!' moments I have had in my career. Suddenly it became so clear how to utilize the power of object-oriented programming to its fullest.

The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas. This is another great book out of the pragmatic series, the same series as The Passionate Programmer. While it contains some amazing insight, I think it is worth reading a little later in your career, or after the above mentioned 5 books. As its title indicates "From Journeyman to Master" it is focused more on those who have exited the apprentice phase.

Clean Code: A Handbook of Agile Craftsmanship by Robert C Martin. Clean Code is another great work by Robert "Uncle Bob" Martin. It is definitely worth the read, and, much like the Pragmatic Programmer, will help you take the next steps after you have launched your career in software development.

Did I miss anything? Do you disagree with anything? Is there a book that you feel every aspiring software developer should read? Leave it in the comments and I will update things as we go.

Thank you for reading!
- Shawn Rakowski