Quite often I am asked about the top programming books that I'd recommend all software developers should read.
I've finally decided to put together a list of the programming books that I find most beneficial and that I think every programmer should read.
Now, just like my Ultimate List of Developer Podcasts, this is my list, so I get to make the rules. (Which means I get to advertise my book at the top of this list–actually both of them.)
My most recent book is a massive tome called “The Complete Software Developers Career Guide.”
I wrote this book primarily because there just wasn't a good book out there–or really any book for that matter–which told software developers everything they needed to know about how to have a successful career in software developer and to answer all the common questions I get like:
- How do I get started as a software developer?
- How do I learn a new programming language?
- College, boot camp, self study?
- How do I deal with my asshole boss? My coworkers? Discrimination?
- How do I find a new job? My first job?
- How do I get a raise?
- What do I actually need to know to be a software developer?
- How do I MAKE MORE MONEY and advance my career?
I could go on and on, but I think you get the point. Anyway, the goal was to create the one stop how-to guide for all software developers, regardless of career level, to manage their careers.
The book has been a huge success so far actually debuting #5, yes that's right, #5 on the Wall Street Journal Non-fiction Best Seller list on the week of it's release.
It's a book every software developer should have. Period. (And not just cause I wrote it.)
After reading all the books on this list, being in the software development field for over 15 years and training hundreds of thousands of software developers through my online courses at Pluralsight, I wrote my own book called “Soft Skills: The Software Developer's Life Manual.”
Now, obviously I highly recommend this book—but not just because I wrote it.
I wrote the book because I felt that there was a large gap of knowledge missing in the programming books that were out there.
There are many excellent books—as you'll no doubt encounter on this list—but, there weren't any books that provided a comprehensive treatment of the soft skills required to be successful as a software developer—and to live a better life in general.
So, that is what “Soft Skills: The Software Developer's Life Manual” is. I wanted to write the book that I wished someone would have given me 15 years ago when I first started my career as a software developer.
Ok, that is enough plugging my own book. If you want to check it out, you can find plenty of reviews for it here.
(And before you binge read this whole list, you might want to check out my guide: 10 Steps to Learn Anything Quickly)
Foundational programming books
This first list of books are ones that I consider to be a good starting point and provide a solid foundation for any software developer:
Code Complete: A Practical Handbook of Software Construction, Second Edition
This book is one of the most transformative books I've ever read. Immediately after reading this book, the way I wrote my code and the way I thought about writing code completely changed.
The book is full of great advice about how to write good code, regardless of architecture or programming language. Code Complete goes into the details of the structure of writing good code. I've never found another book that even comes close to touching many of the topics in this book. I consider this book a must-read for all serious software developers. The book is a bit dated, but still has extremely valuable information.
Clean Code: A Handbook of Agile Software Craftsmanship
This is another one of those books that completely changed the way I wrote code. I can neatly divide my programming career into pre-Code Complete, pre-Clean Code and after. I recommend this book after reading Code Complete, because while Code Complete deals more with the structure of individual lines of code and methods, Clean Code deals with some of the same concepts, but at a slightly higher level.
It's pretty difficult to read this book and not become a better programmer.
Structure and Interpretation of Computer Programs
I debated putting this one on the list. Is it really foundational? It depends on how solid of a foundation you want to have. If you want to have a really solid foundation, then the answer is a resounding “yes.”
The book is challenging. It deals with functional programming. It was written for the famous introductory programming course at MIT. But, I'd recommend you not only read this book, but go through all the exercises in it. It will be a difficult journey, but you'll come out the other side a much better programmer than you were before.
Design Patterns: Elements of Reusable Object-Oriented Software
This classical book is critical reading to really understand what design patterns are and become familiar with the most common design patterns you are likely to encounter in your career. It's not a particularly easy read and the descriptions and examples might be a bit difficult to follow—especially if you don't have a solid grasp of UML—but, it's a book I consider a “must read.” If you are having trouble with this book, you might want to start with “Head First Design Patterns.” which teaches the design patterns in this book in a much more digestible way—still, there is no substitute for the original.
Head First Design Patterns
Read the classic first, then read this one, then go back and read the classic one with a renewed understanding. This book makes design patterns much easier to understand. It's also a useful book for learning how to teach complex topics and make them interesting.
Refactoring: Improving the Design of Existing Code
Although modern IDEs have automated many of the refactorings mentioned in this book, refactoring is still a very important concept to understand in order to write good, clean code—especially in today's Agile environments. This book covers just about all of the major refactorings that all software developers should know how to execute in any code base. Learning how to refactor your code allows you to breathe new life into it and to have it improve over time as it is maintained, rather than rot.
Working Effectively With Legacy Code
Unless you are fortunate enough to always work on green-field projects, you'll mostly likely encounter legacy code in your career—and lots of it. I included this book, because it is the foundational programming book on working with legacy code. If you are working on a large code base more than 5 years old, this book might be your new bible. Read it and take it to heart.
Professional development programming books
This section contains programming books that I have found most beneficial to my professional development as a software developer.
The Pragmatic Programmer: From Journeyman to Master
When I first read this book, it wasn't my favorite. I still don't agree with everything said in the book, but even with my misgivings, I have to acknowledge this is a programming book that every software developer should read when they want to transition from being just a coder to something more. There is some extremely pragmatic advice in this book that will bestow upon you lessons that otherwise would take years or even decades to learn.
The Clean Coder: A Code of Conduct for Professional Programmers
This book is all about being a professional programmer. This is a tough read. A lot of developers won't like this programming book, because the advice is sometimes difficult to swallow. But swallow it if you can, because Bob Martin, the author of the book, is a veteran in the industry and has managed to stay relevant decade after decade of pumping out code. I really found this book helpful in shaping my career and making tough decisions.
The Passionate Programmer: Creating a Remarkable Career in Software Development
This book was one of the main programming books that influenced me to treat my career in software development as a business rather than just something I did. The book is full of all kinds of wisdom about how to increase your skills, maximize your time, keep your career and passion alive and more. I highly recommend reading this book if you want to move beyond programming as just a job.
The Mythical Man Month
All those problems you thought were unique to your project, well I've got news for you, they aren't. They are inside this book. If you want a very practical programming book about complex software development projects, this is it. This book is like a catalog of the most common problems that plague non-trivial software development projects and the book has more than stood the test of time.
Architecture based programming books
These are programming books that an aspiring architect or software developer who cares about architecture should read.
Domain-Driven Design: Tackling Complexity in the Heart of Software
Buckle your seat belt, this is a difficult read. The first time I read this book, I didn't get it. The second time I read it, I sort of got it. It wasn't until my third pass through the book that it finally clicked all the way. This book will help you learn how to create a maintainable architecture that is based on domain modeling. Once you learn what is in this book, you can't go back. You won't think about software development architecture in the same way again.
Patterns of Enterprise Application Architecture
If you are doing any kind of enterprise application development, you'll find this book extremely useful. It contains great information about how to design and build an enterprise application from start to finish. What I found most useful though, was the many patterns contained in the book that are often seen in enterprise applications. This is a book I referenced all the time when I was building large enterprise applications for my job.
Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions
This is the absolute guide-book for implementing message bus or service bus architectures. Don't let the name of the book fool you, this book is all about message buses and all of the patterns used to implement them correctly. If you are doing any kind of integration between applications or services using a bus, you will absolutely love this book.
Refactoring to Patterns
It is one thing to read and learn about design patterns, it is another thing to implement them. It is yet another thing to actually take existing code and refactor that code into design patterns. This is a programming book that teaches you—scratch that—shows you how to move existing code into patterns and how to even move it out of patterns. Should be on every architect's bookshelf.
Agile programming books
These programming books are some of the best books on Agile development that I have found. I recommend them to anyone working in an Agile environment, whether you are using Scrum, Kanban, XP or something else.
Agile Software Development, Principles, Patterns and Practices
Yes, this is another Bob Martin book, and it is excellent. There is also a C# version of this book. This book takes you through all the core tenants of Agile development without all the fluff. Not only that but it introduces the SOLID design principles which are fundamental to understanding how to write clean, maintainable code. This book was the book that convinced me to actually start doing pair programming.
Agile Estimating and Planning
So many teams get this wrong. This book shows you how to do it correctly. The first time I read through this book, I realized that sound principles could be applied to estimation and planning on an Agile team. Highly recommended for anyone working in an Agile environment.
User Stories Applied: For Agile Software Development
Another great Agile book that helps with a major trouble area: user stories. I've worked with some pretty crappy user stories when working on Agile teams, simply because no one knew how to make good ones or what user stories were actually supposed to look like. This book solves that problem.
Extreme Programming Explained
What I consider to be the classic Agile book. A little extreme for some—this is not SCRUM, this is real XP. This programming book is an extremely prescriptive description of how to implement extreme programming, but the ideas in this book can be applied to many different kinds of Agile environments.
Algorithm and interview question programming books
These programming books will make you better at writing algorithms and will help you pass interviews—especially programming interviews where you have to write code.
The classic book of programming problems. Read this book and actually do all the exercises. If you survive the ordeal, you'll be a much better programmer and garner a deep understanding of algorithms and algorithm design as well as some critical problem solving skills.
Cracking the Coding Interview: 150 Programming Questions and Solutions
This book is not only one of the top-selling programming books on Amazon, it is one of the top selling books on Amazon, period. And for good reason. The book is full of great interview advice and real programming problems that will not only help you pass a coding interview, but make you a better programmer overall. Go through the book and do the exercises. If you can master the exercises in this book, it will be very difficult to stump you in a programming interview.
Introduction to Algorithms
This book is considered one of the best books on learning algorithms, and for good reason. It is a solid programming book for anyone interested in increasing their ability to write and understand algorithms, which is the core of writing code. If you are going to read any book on algorithms, start with this one for sure.
Language specific and programming language related programming books
This is a mix of really good language specific programming books and books that are related to programming languages in general. I know I've probably missed a few here, so help me out.
Thinking in Java
This book not only teaches you how to start programming in Java, but it teaches you how to teach a programming language. I don't think I've ever encountered a better book on learning a programming language than this book. Even if you have no interest in Java, I recommend reading it.
Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14
I've linked to the modern version of this book, but the whole series of older books is damn good. I learned so much from reading the original Effective C++, More Effective C++ and Effective STL books, that even though I don't write any C++ code today, I still have fond memories of these books. I'll admit, the earlier books probably won't do you much good today if you are writing in modern C++, but if you are obsessed with becoming the best C++ developer possible, you have to read this updated version of the classic.
The Java counterpart is almost as good as the C++ original. Some of the recommendations are dated by the changes to the language, but overall this is still a really good book.
C# In Depth
Do you know C#? Do you really know C#? If you read this book you will. I've never read a book that dove as deeply into a language as this book does. Before I read this book, I considered myself an expert in C#. I would have given myself a 10. After, I realized how far from the mark my original estimation of my knowledge was.
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages (Pragmatic Programmers)
I love this book, because it stretches you and makes you a more open-minded programmer. This is a programming book that has the potential to take you to the next level and see beyond pretty religious technology tendencies. This book helped me to see how similar so many programming languages are, appreciate their differences and see just how fast I could learn.
OPs, QA and deployment related programming books
These books are programming books related to anything outside the scope of normal programming activities, including testing, operations and deployment.
Testing Computer Software
Every developer should read this book to gain a good understanding of QA and testing. This book is very easy to digest, yet a comprehensive book all about testing. After reading this book, I was able to communicate with QA better, write more testable code and avoid defects by learning how to test my own code before throwing it over the wall.
Ship it! A Practical Guide to Successful Software Projects
Lots of great content and practices in this book. Some of them are a bit extreme, but they are all very effective. This book can help you take your software development shop to the next level. It's a great book to read and then to give to your manager to highlight the value of some best practices like: continuous integration, automated testing, scaled back planning, etc.
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
I didn't really believe continuous delivery was possible until I read this book. This book actually shows you how to build an entire system that will build and deploy tested code right into production. This book goes well beyond continuous integration and takes the entire delivery process into a continual flow. A programming book I highly recommend if you want to automate your entire deployment process—and trust me, you do!
Soft Skills and other fun programming books
These programming books are really not programming books at all, but are books that I have either found immensely valuable in my career, or books that most software developers have really enjoyed.
Soft Skills: The Software Developer's Life Manual
Yes, this is my book. I mentioned it before, but I wanted to include it in its proper place as well. In this book I cover everything non-technical that a programmer could possibly be interested in, from career, to personal branding, blogging, learning, teaching, being productive, finances and even a bit on fitness and relationships.
How to Win Friends and Influence People
I really can't praise this book enough. Yes, it has nothing to do with programming. You might be surprised to find this on a programming books list, but this is a life-changing book. As a software developer, you will deal with people during your entire career. If you learn how to deal with them effectively, you'll have a much better go of it. So, I highly recommend reading this book. This book changed my life and set me on the path I am on now.
Code: The Hidden Language of Computer Hardware and Software
This is a fascinating book. Again, it's not explicitly a programming book, but it is all about how computers work at the very lowest level. After reading this book, you'll understand what the code you are writing is actually doing and how a CPU actually executes your code. This is both a fun and fascinating read.
Gödel, Escher, Bach: An Eternal Golden Braid
Another non-programming book on this programming book list, but a book that almost all programmers will find fascinating. This is a huge book that is one of the most pleasurable books I have ever read. I didn't ever want to put this book down and I was extremely sad when I reached the end.
The War of Art
This one is another stretch. It is in no way a programming book—not even close—but it is a book that helped me achieve an extremely high level of productivity. This book is the reason why I can sit down and spend 4 hours writing this blog post. It's an excellent book that will inspire you to be your best, and finally beat procrastination.
What programming books did I miss?
Any programming books that should be on this list?
If so, let me know and I'll add them.
And if you'd like to see my “top 10” list of books I think every developer should read, I've put together a list you download.
Just click the button below to grab your copy: