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 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.

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.

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.

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.

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.

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:

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.

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.