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.
Top comments (95)
More classics: The Mythical Man-Month (Frederick Brooks) and The Cathedral and the Bazaar (Eric Raymond) for "agile" and project management.
I've read The Mythical Man-Month. I know lots of people love this book but I prefer Steve McConnell's books. I just feel they are more actionable and supported by data. But anyone who reads Brooks instead will not be disappointed.
I haven't read the second book. I'll look into it. Thanks.
Eric Raymond's other book "The Art of Unix Programming" is the best book I've ever read about software engineering principles and philosophy, even though it's cleverly disguised as a book about Unix. catb.org/esr/writings/taoup/html/
Thanks, I'll have to read that.
Objectively I think the Eric Raymond book hasn't aged well (as someone with a hard copy that I thought was out of obsolete 5 years ago).
Further ESR himself has shown some pretty bad behaviour in recent years.
Which Eric Raymond book are you refering to, Art of Unix Programming or Cathedral and the Bazaar? If it's the one about Unix I'd be particularly interested in the ways in which you've found it obsolete.
I didn't know about the controversy around his behavior, but it's clearly evident from a google search. That's really a shame and I'll see if I can learn more about it, esp before making an idol of his Unix book (which I really like).
Interesting. Care to elaborate on the shortcomings of "The Art of Unix Programming"?
What do you mean ESR's book hasn't aged well?
Heya, I haven't read the Unix one, I was talking about the Cathedral and the Bazaar.
Honestly I wanted to like it and was stoked to come across it as there are so few books on the topic (and at the time also wasn't aware of ESR's now-bad rep, actually as an emacs user myself I though highly of him) and I was trying everything I could in the area because I was prepping a talk for PyCon US.
It pre-dates distributed version control (ie git) and comes from a time when freshmeat.net was the coolness for FOSS, how many people even remember that now? github wasn't even imaginable from the place where that book is written.
It's about emailing patches and old skool hax0r behaviour, that time is just past and really not that relevant to anyone who wasn't there.
Thanks for the list, there are some titles that are new to me.
And I would like to add one title that I think is missing. It is my all time favourite book; "Design of everyday things" by Don Norman. The first draft is from 1988 but a second revised draft is from 2013. The book describes how items can be designed so that the user naturally uses it the way it was meant to be used. The cover of the book illustrates that in a brilliant way. The book teaches you to look with different eyes to things around you. It certainly changed my way of looking at things.
Amazon
Yes. Thanks for the suggestion. It is a good book. I've read the original but want aware there's an updated version.
I chose the books by Steve Krug instead because they are more directly applicable to our work as programmers.
Thanks so much for this list!! I've pinned some of them that I'm going to read. I would like to add two of my books always handy on my desk:
Great suggestions.
I've read the first book and it would have made the list if DDD were a little more popular.
I haven't read the second book but I hear good things.
I went and bought the first one on the list yesterday. I wish I read it at least 5 years ago and didn't have to learn this stuff from my own mistakes. Better, 10 years.
Everyone who strongly believes in "follow your passion" should read it.
I agree. He presents a compelling alternative to the "passion hypothesis."
Great list! thanks for sharing!!
You mentioned Carl Newport, have you read his DeepWork book?
Would also recommend 'The Effective Engineer' effectiveengineer.com/book
and Yegor Bugayenko books!
You're welcome.
The Effective Engineer is on the list.
I haven't read Deep Work yet but it is on my list. Thanks.
Peopleware
amazon.de/Peopleware-Productive-Pr...
Interesting. Why should Peopleware be in the list? What does it offer that isn't covered by one of the other books?
It's an often cited book about team-work and the importance of having stable teams, and how to achieve that.
I'm sure some material has been covered in other books but this one is as on-the-point as it gets. English non-fiction books tend to be very repetitive, which this one isn't at all.
I've read it. I thought it was okay but I've never recommended it to anyone. I'd recommend Rapid Development over this book every time but there's plenty of room for people to love Peopleware too.
Thanks for recommending it.
I think that a programmer has to know how the compilers work so I think that the Compilers: Principles, Techniques, and Tools (2nd Edition) a.k.a The Dragon Book for Compilers amazon.com/Compilers-Principles-Te... .
Interesting. Why do you think that's important?
Many of us work in languages that are interpreted. But even those of us who work in modern compiled languages tend to treat the compiler as a black box.
Well even if you work with languages that are interpreted it won't hurt to read this book.
If you read this book you will be able to make a interpreter or compiler. Even if you don't want to create a new language it can help you in various ways.
If you understand compilers and interpretators you will gain really deep knowadge about computer science concepts. It has a lot of like basic knowledge which isn't taught or learnt from the beginning since you need to know a bunch of other stuff first.
I know that a lot of developers have survived without ever writting a compiler. They just press F5 and then they have a working program (of course if you have no errors). If you understand compilers it will be easier for you to debug your code. Especialy if you know assembler and have a black box debugger. Having this knowadge will help you analyse your code in a whole new way and make you better.
I've enjoyed looking at this list... but I've noticed you're leaving out some books that many others would put in - say XP Explained and Test Driven Development by Kent Beck. Or Clean Code by Robert Martin.
I'm interested in whether you've left them out because of an oversight, or because you don't practice test driven development?
That said, it's great that a good proportion of these books are ones I've never heard of. Which is the one book in your list that you think that never gets read but that everyone should read?
Good questions.
Clean code is on the list.
I've read and did consider adding test driven development but I decided against it. I was trying to keep the list appilable to a wide audience and based on what I see here on dev.to, many people aren't even unit testing so I thought I would emphasize that with some beginner-intermediate material.
I haven't read XP Explained so I can't comment on its content.
The list was never meant to be comprehensive. There are no architecture, requirements, lifecycle management, security, or manual testing books on the list either.
The most under appreciated book on the list is Rapid Development. It's 22 years old and I read it for the first time this year. It holds up. I've been programming and reading widely for almost 20 years and that book had me underlining stuff left and right. The worst thing about that book is its misleading title (which is what kept me from reading it for so long). It's actually the other half of Code Complete and covers everything it didn't. If new developers could only read two programming books in their whole career, I'd choose those two.
That'll teach me... must've gone snow blind for a second!
Well, I'll recommend it! It's short, and brevity is a quality all of its own!
Fair point about TDD - I was just interested to see unit testing talked about outside of TDD.
It's now on the Christmas list - hopefully I've been nice not naughty...
Ah, yes, I remember XP Explained now. I saw Kent Beck talk about how he completely rewrote the second edition instead of the update he had planned to do. I've added it to my reading list.
Cheers.
Awesome collection. I will pick one from your list every month. Lol. 29 months to go.
It's no joke. You could read a book a month but it will take much longer than 29 months to master the content. I'm still working on it myself and I started almost 20 years ago.
The best insight from the whole thread :D
Software engineering is a continuous improvement.
I believe "The five dysfunctions of a team" deserves some attention, specially for people working in teams and the leaders out there. I'm unsure it should be in the list, but def. a good read :)
Yes, good feedback, Christopher.
I enjoyed reading "The Five Dysfunctions of a Team" but it didn't occur to me to add it to the list.
Anyone on a dysfunctional team will find something useful in this book but--as best as I can recall--it didn't offer many solutions to members of a team. I believe it was all about what you could do if you were the leader of a dysfunctional team.
That was just my optimistic understatement. However it is doable, if reading for breadth and familiarity of key concepts.
Those people should meet with some of my ex faculty members and some of my old professors..
I would add the whole Pattern Oriented Software Architecture series to your list.
Thanks for the recommendation. I've added the first book in the series to my reading list. It looks quite interesting.
I keep the second volume around. It explain concurrency, synchronization and event handling in networking, very helpul for those who struggle with async programming these days.
Ah, I'll keep that in mind. I'm lucky enough not to have to deal with async programming.