These are my "must read" programming books. They are universally applicable: you'll benefit from reading them regardless of the kind of programming you do. And the knowledge in these books will remain relevant throughout your career.
I hope you'll find a couple of good books to add to your reading list here.
June 16, 2019: I'm no longer updating this post. You'll find my most up-to-date list of must read books for programmers (with working links) on my blog.
Career
The first thing you have to figure out, if you haven't done so already, is what kind of career you want and how to get it. This book will help. Actually, it will help anyone get more satisfaction out of their career.
- So Good They Can't Ignore You - Cal Newport (Why follow your passion is bad advice and what you should do instead)
Learn how to learn
Learning new skills is hard. Change is hard. So why not learn how to make new behaviors stick and learning new things easier? These books will help.
- The Power of Habit: Why We Do What We Do in Life and Business - Charles Duhigg (Learn how habits actually work so you can make lasting changes by working with your brain instead of against it)
- The Spirit of Kaizen: Creating Lasting Excellence One Small Step at a Time: Creating Lasting Excellence One Small Step at a Time - Robert Maurer (Kaizen is the practice of making small, continuous improvements. Toyota used it to improve the quality of their cars and become the biggest car maker in the world. You can use it to improve just about anything as this book demonstrates)
- Badass: Making Users Awesome - Kathy Sierra (Most people learn inefficiently. This book shows you a better way) (YouTube summary).
Personal effectiveness
The first three books below are all slightly different takes on the same advice. No matter what your profession or education or task, effective people tend to share a similar mindset and employ similar techniques. Read the book that resonates with you the most.
- The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change - Stephen Covey (a classic)
- The Effective Executive: The Definitive Guide to Getting the Right Things Done - Peter Drucker (another classic)
- Great at Work: How Top Performers Do Less, Work Better, and Achieve More - Morten Hansen (a modern take on the genre)
Checklists can be a game changer. I've got tons of them and you should too.
- The Checklist Manifesto: How to Get Things Right - Atul Gawande (Learn the power of simple checklists to improve your performance and reduce errors)
Programming effectiveness
Once you've mastered personal effectiveness, it's time to learn how to be an effective software developer.
- The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact - Edmond Lau (Gets you focused on the right things)
- The Pragmatic Programmer: From Journeyman to Master - Andrew Hunt and David Thomas (Shows beginners how to apply their craft and level up)
Writing code
I still meet programmers who haven't read these classics. What are you waiting for?
- Code Complete: A Practical Handbook of Software Construction, Second Edition - Steve McConnell (Evidence-based recommendations on software construction--MY BIBLE)
- Clean Code: A Handbook of Agile Software Craftsmanship - Robert C Martin (Every programmer in my workplace is paid to read this book. Learn the importance of readability and maintainability and the cost of owning a mess. I agree with almost all of it (except forcing people to write extremely short methods))
- Code Simplicity: The Fundamentals of Software - Max Kanat-Alexander (It's easy to get lost on the theory, opinions, and patterns we are urged to use when creating software. This book puts it all in perspective. It's simply 80 pages of amazing wisdom--MUST READ)
Software engineering
Despite what most people believe, software engineering does have a body of knowledge backed by research. Don't go against the research and expect your project to turn out okay--it probably won't.
- Facts and Fallacies of Software Engineering - Robert Glass (Evidence of what works and what doesn't. If you're breaking any of these rules, you better have a good reason to think the research doesn't apply to you)
- Rapid Development: Taming Wild Software Schedules - Steve McConnell (Evidence-based recommendations on project/team management--MUST READ)
- Making Software: What Really Works, and Why We Believe It - Andy Oram & Greg Wilson (I don't love this book. It's written as a bunch of essays and it's kind of long winded and disjointed. However, if you want to avoid doing something foolish, and you've read the other books in this section, give this book a try after)
Leadership
Leadership is a mindset and a set of skills, not a title or position. Anybody can be a leader. As your career progresses and you gain responsibilities, you need to sharpen your leadership skills.
- Measure What Matters: How Google, Bono, and the Gates Foundation Rock the World with OKRs - John Doerr (How to get everybody in your organization pulling as hard as they can in the same direction)
- Turn the Ship Around!: A True Story of Turning Followers into Leaders - L. David Marquet (Leader-leader instead of leader-follower. Your organization will perform at the highest levels if everyone is 100% engaged in their job and working towards a common objective. You will learn how to give everyone in your organization the 3 Cs: control, competence, and clarity to make their maximum contribution)
Project management
Just because you're a good coder and you've been around for a while, it doesn't mean you can run a project. Avoid all the beginner mistakes by reading these books.
- Rapid Development: Taming Wild Software Schedules - Steve McConnell (Evidence-based recommendations on project/team management--MUST READ)
- Essential Scrum: A Practical Guide to the Most Popular Agile Process - Ken Rubin (Excellent advice on scrum and project management in general. Very high signal-to-noise ratio)
- The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses - Eric Ries (Learn why building an MVP and using the build-measure-learn cycle is so important)
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win - Gene Kim & Kevin Behr (Learn how you can apply the Theory of Constraints and Lean to turn around a trouble project (or prevent it from getting into trouble in the first place))
Advanced project management
Once you've got the basics down and your projects are no longer raging garbage fires, consider learning the advanced project management techniques described in the following books.
- The Principles of Product Development Flow: Second Generation Lean Product Development - Donald Reinertsen (Corrects the errors people naturally make by trying to apply Lean and Six Sigma techniques from the manufacturing world to the product development world--not suitable for beginners)
- Goldratt's Theory of Constraints: A Systems Approach to Continuous Improvement - William H. Dettmer (A systematic approach to finding the constraint in your organization and overcoming it. This is a huge lever--not suitable for beginners)
Unit testing
If you're not unit testing yet, what's stopping you? These books will get you started.
- Starting to Unit Test: Not as Hard as You Think - Erik Dietrich (A Beginner's guide to unit testing)
- Working Effectively with Unit Tests - Jay Fields (Unit testing best practices for people who know the basics)
- Working Effectively with Legacy Code - Michael Feathers (Very famous book on getting existing code covered by automated unit tests--a notoriously difficult task)
Data analysis and statistics
You need data analysis skills to measure your results. Many programmers lack the statistics knowledge and the skills required to correctly apply statistical tests to data and come up with sound conclusions. These books will help.
- Data Analysis with Open Source Tools: A Hands-On Guide for Programmers and Data Scientists - Philipp K. Janert (This is the book you need when your boss dumps a ton of data in your lap and says "find the insights." I love this book)
Any introductory book on statistics. The following books are much better than the textbooks I read in university:
- Statistics For Dummies - Deborah Rumsey
- Statistics II for Dummies - Deborah Rumsey
User interface/user experience
Most programmers don't pay enough attention to user interfaces and user experience. These books are written for programmers and they'll teach you everything you need to know.
- Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability - Steve Krug (amazing!)
- Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems - Steve Krug (also amazing!)
Wrapping up
So that's my list of "must read" programming books. There's enough material here to keep you busy for a couple of years so please don't think you should read all these books immediately. We already have enough problems with unrealistic expectations in our profession and I don't want to add to them.
Don't just skim through these books so you can check them off some list either. The important point is to take as much time as you need to learn a new skill that's important to you.
I almost certainly missed some really great books. Feel free to suggest more "must read" books in the comments.
Latest comments (95)
Thanks, that was a great list, very practical, not one of those where people enumerate all the famous books just to sound smart.
Thank you for sharing great list.
I would like to add two of my favorite books.

Atomic Habits: By James Clear
The Obstacle is the Way: By Ryan Holiday
That's a lot of books... Simpler is better, so I choose to read other's project and learn from them =)))
This list is fantastic! Thank you!
Thanks. I'm glad you enjoyed it.
I'm not a big fan of "XX books every developer must read" posts, because the view on this is (of course) heavily subjective. But that is not the problem.
For me, these titles sound a lot like "you're not a real developer, if you haven't read these books". Arve Solland wrote a nice article about this.
You are not a real developer
Arve Solland ・ Feb 16 '17 ・ 2 min read
I know that most of the time the title is really meant as "XX books a really enjoyed and recommend".
So from time to time a still skimm through a list of book recommendations. Just like this one.
And I'm so happy that you recommended "Starting to Unit Test: Not as Hard as You Think" by Erik Dietrich. I was a little skeptical, because (to me) the title
sounds like "A beginners guide to unit tests". But I read it anyhow and I really enjoyed it. And I'm not new to unit testing and still took so much information from this book. Erik Dietrich provides so many valuable tips for everyone who is writing tests.
After I was done reading Erik's book, I immediately started "Working Effectively with Unit Tests" by Jay Fields. And so far this as also great.
So even if the start of my comment might sound a little frustrated, I really wanted to say thank you for the great book recommendations. :-)
You're welcome.
An acquaintance asked me for a list of programming books he could read to up his software development game. I spent a fair bit of time creating that list and, at some point, I got the idea to turn it into a blog post.
I'm sure many brilliant developers haven't read half the books on this list. In fact, I'd be willing to put money on it. These are just the books that were helpful to me.
Cheers.
Great List, I want to add refactoringui.com/book/ to the list of UI/UX.
It's a new book but has great content.
Thanks for the recommendation. It looks interesting.
I would also recommend How to Win Friends and Influence People by Dale Carnegie to every programmer that sometimes struggles with the human aspect of the job. Keeping in mind lessons from this book definitely helps me manage conflicts at work.
Good one! An absolute classic.
Awesome list! I also recommend Growth Hacker Marketing. It's useful for people looking to create a project or startup. Also super short :)
Cool. Thanks for the recommendation.
Awesome list! Thanks for sharing :) I'm thinking of starting with Clean Code - Robert C Martin
Also, we have this classic book: The Art of Computer Programming.
It is like a bible of algorithms. It might be more for computer scientists, but programmers should read it from time to time.
Interesting. Why would programs read it from time to time? What will they get from it?
Because it is like a complete reference of algorithms.
Let us see, the complexity of a software system comes from:
Functional requirements (problem domain)
Non functional requirements (user interface, persistence, ...)
Almost the 85% of the code correspond to the 2., but those can have generic solutions and most of the type they are included into software components or frameworks.
Nevertheless, from time to time, a programmer would need to face the 1. type.
There you'll need to know the data structures inherent to the problem you are trying to model, how to represent them in your system and which algorithm fits its resolution.
This is a more higher level of programming that, let us say, make a web site or query a database system. It is more unlike to be replaced by future software stacks.
So learning to face problems of type 1. a programmer its more likely to be needed in the future.
Actually the natural evolution of a programmer is to become a computer scientist (type 1.) or a software engineer (type 2.) or a system admin (type 2.)