Best Books for Programmers (Updated 2020)

Written By John Sonmez

There are so many books out there for programmers and not enough time to read them all.

Wouldn’t it be nice if you had a curated list so you could make the most effective use your self-study time?

What you’ll find below is my personal list of top books for programmers.

The first thing you’ll probably find is that this list is not one of the typical “books for programmers” lists you’ll find out there floating around on the internet—and that’s a good thing!

I selected these particular books because I wanted to provide a list of books that wouldn’t just increase your technical skills and make you a better programmer, but would also challenge you to grow as a person and provide some entertainment value along the way.

The books on this list are designed specifically to give you a solid foundation in all of the areas that are important to a software developer.

I’ve broken up the types of books by the topic areas that I find are most important—and many of them sorely neglected.

You’ll find foundational books that will help you to learn to write good, clean code and structure your code proficiently as well as help you grasp all of the major programming concepts.

You’ll find books specifically geared to help you to advance your career and survive as a programmer.

You’ll find books that teach you about best practices—especially around Agile development—and teach you how to be better at your job (including interviews).

And finally, you’ll find a collection of books that will help round you out as a person, to achieve the goals you want in life.

This is no dry collection of technical books…


Table of Contents – Book Links By Type:

Foundational Programming Books

Professional Development Programming Books

Architecture Based Programming Books

Agile Programming Books

Algorithm and Interview Question Programming Books

Language Specific and Programming Language Related Programming Books

OPs, QA and Deployment Related Programming Books

Soft Skills and Other Fun Programming Books

Foundational Programming Books

Code Complete: A Practical Handbook of Software Construction, Second Edition

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.

Structure and Interpretation of Computer Programs, Second Edition

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

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. I’d recommend you not only read this book, but also 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

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: A Brain-Friendly Guide

Read the classic first, then read this one, and 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 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 most 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 five years old, this book might be your new bible. Read it and take it to heart.

The Art of Computer Programming, Volumes 1-4A

Can I really recommend a book series I’ve never read? Sure can. This four-volume set was on my list of “someday to read” books, but I never got around to it.

Why? Because reading these books is a huge undertaking. These books go through, in depth and in detail, computer science algorithms—and not the easy stuff. If you really, really want to go deep with algorithms and you are prepared for some heavy math, go for it. Let me know how it goes. I wish you luck.

Compilers: Principles, Techniques, and Tools (Second Edition)

This book is known as the dragon book—and for good reason.

It goes down deep into places where the dragons live: in the realm of compilers and operating systems.

Some of the information might be a bit dated, but if you are really interested in how compilers work and perhaps want to write your own, take a crack at this book.

Professional Development Programming Books

The Complete Software Developer’s Career Guide *** John’s (my) book!

the complete software developer's career guide

I wrote this book primarily because there just wasn’t a good book out there—or really any book for that matter—that told software developers everything they needed to know about how to have a successful career in software development 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 co-workers? Discrimination?
– How do I find a new job? My first job?
– What do I actually need to know to be a software developer?
– How do I MAKE MORE MONEY and advance my career?

The Pragmatic Programmer: From Journeyman to Master

This book wasn’t my favorite when I first read it. 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

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, were 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 even how to move it out of patterns. Should be on every architect’s bookshelf.

Agile Programming Books

Agile Software Development, Principles, Patterns, and Practices

(There is also a C# version of this book.)

Yes, this is another Bob Martin book, and it is excellent. This book takes you through all the core tenets of Agile development without all the fluff. Not only that, but it also introduces the SOLID design principles that 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: Embrace Change, Second Edition

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

Programming Pearls, Second Edition

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 also 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, Third Edition

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

JavaScript: the Good Parts

This book might become outdated as JavaScript evolves, but for now, this book is essential. JavaScript is a language that was never designed for the use it is used for today. That means there are quite a few pitfalls in writing JavaScript code. This book has saved me on more than one occasion. If you are going to write JavaScript, you are going to want to read this book.

Thinking in Java, Fourth Edition

This book not only teaches you how to start programming in Java, but it also 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

(Effective C++, More Effective C++ and Effective STL)

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.

Effective Java, Second Edition

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, Third Edition

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 let you see beyond petty 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

Testing Computer Software, Second Edition

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

Soft Skills: The Software Developer’s Life Manual **** John’s book (my first!)

Yes, this is my book. In this book, I cover everything nontechnical 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 (Developer Best Practices)

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 four hours writing this blog post. It’s an excellent book that will inspire you to be your best and finally beat procrastination.

As a Man Thinketh

This is a short book and another old one, but extremely potent.

The mindset presented in this book is the mindset required to achieve success in life.

It’s all about focusing on your thoughts and how you choose to perceive the world, which ultimately determines what your life and world is like and what it will become.

Maximum Achievement: Strategies and Skills That Will Unlock Your Hidden Powers to Succeed

If I had to pick one personal development book, and only one, this would be it.


It’s packed with many concepts that are sourced from classical books on the subject, and they are explained in a way that is concise and clear. It has plenty of exercises for you to actually do to make real, positive changes in your life.

This book covers a wide range of personal development topics and gives you a huge “bang for your buck” in terms of what can be offered in a single book.

How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life

There are still so many good personal development books out there, but I picked this one because the author is none other than Scott Adams—yes, that’s right, the creator of Dilbert.

But he’s so much more than that.

This book lays out a philosophy of life that can’t help but make you a champion.

I never expected such wisdom from the creator of a cartoon about a pointy-haired boss, but this book delivers.

The Obstacle Is the Way: The Timeless Art of Turning Trials into Triumph

This book is the first book that really introduced me to the stoic philosophy I hold so central to my life today.

This book is about how the bad things that happen to you can be used to make you strong and help you find the right path instead of defeating you.

Most of these lessons come right out of stoic philosophy; they are told using historical stories that demonstrate the principle.

The 10x Rule: The Only Difference Between Success and Failure

The author of this book, Grant Cardone, quickly became one of the greatest role models in my life after I read this book and the next one, also his.

This book is all about how you probably need to set your goals 10x higher and how it will probably take 10x more effort to achieve them than what you think.

It’s about how you can, and should, take massive action to achieve success in life.

This book will kick you in the ass—I promise.

Be Obsessed or Be Average

Hey, so do the people around you say that you are “obsessed” and that what you are doing isn’t healthy because you are working too hard?

This book gives you permission to politely “give them the finger” and keep on blazing your trail.

It’s all about harnessing the power of obsession to get where you want to go.

It also talks quite a bit about the people who will try to bring you down and how to deal with them.