FB

If you’re a programmer or software developer, you’ve probably done a lot of reading. And if you’re interested in becoming a better programmer, there are many books you can read to improve your skills.

This page contains a list of the best books for programmers. I’ve looked at different lists on Google, Reddit, Twitter, and other places.

The list does not include language-specific books, as some languages change often, and languages can be learned in many other ways.

Also, I’ve added some of my own notes next to each book. You can read the Amazon reviews for each book to get a wider and more detailed view of each book (which is what a lot of us use to decide whether or not to buy a book anyway), but my comments can help explain my own experiences and opinions with the book or why it’s on this list.

Finally, you can use the Table of Contents to navigate to a specific category of books on this page.

Let’s take a look at this list!

Fundamentals

This section covers books on the fundamentals of programming: how to improve your skills as a programmer, object-oriented design, design patterns, and writing better code.

Clean Code: A Handbook of Agile Software Craftsmanship

Robert C Martin

This is one of the few books that is commonly referred to as a "must read" for developers, and I agree. I read this book and learned a lot about how to write clean code and better code. Robert Martin, or "Uncle Bob", is a well-known figure in the software industry and this book is a great book to read.

Code Complete: A Practical Handbook of Software Construction

Steve McConnell

This is another book that I can highly recommend. It has a lot of code samples and advice on improving the way you write code. It's another book that's on a lot of "must read" lists for developers.

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vissides

This book is one of the original books on software design. It's often referred to as the "gang of four" design patterns book. If you want to learn more about software design patterns and improving your code design in consistent ways, check out this book.

Head First Design Patterns: A Brain-Friendly Guide

Eric Freeman & Bert Bates & Kathy Sierra & Elisabeth Robson

Another book on design patterns which follows the Head First concept of books. It's easier to understand than other design pattern books, so if you tried the Design Patterns book above and didn't like it, try this one.

Code: The Hidden Language of Computer Hardware and Software

Charles Petzold

This book won't teach you how to code, but it explains what code is and how it interacts with computers. It's got a lot of great reviews and is on a lot of lists of best books for programmers, so if you want to learn more about code, I suggest reading this book.

Code Simplicity: The Fundamentals of Software

Max Kanat-Alexander

This book provides a good theory on software development and how to simplify your code. As you get more experienced with software development, you'll learn that simple code is good code, and this book covers that concept.

Coder to Developer: Tools and Strategies for Delivering Your Software

Mike Gunderloy

Learning how to write code is something you'll learn when you start learning a programming language. But there is much more to being a developer than writing code, and that's what this book covers. You'll learn about source code control, bugs, unit testing, logging, and more.

Refactoring: Improving the Design of Existing Code

Martin Fowler

All developers at some point will need to make improvements to existing code. This book is one I found very interesting and useful, as it explains why to refactor, and many examples of how to refactor effectively.

Software Craftsmanship: The New Imperative

Pete McBreen

This book explains what software craftsmanship is and shows developers how to improve and master skills for that role.

Test Driven Development by Example

Kent Beck

Test-driven development, or TDD, is a concept where you write a failing test before writing the code that makes it pass. It's explained (and proven) by many to be a more efficient way to write working software. This book explains more about what it is and covers many examples.

The Art of Computer Programming

Donald E Knuth

A fundamental series of books on computer programming. It can take a while to read but covers a lot of computer programming concepts that are not covered elsewhere. There are many positive reviews on Amazon saying that these books have helped them become a better developer.

Working Effectively With Legacy Code

Michael C Feathers

Many of us will work with legacy code, or code that has been around for a long time. This book teaches you strategies for improving how you work with that code, which may be in a poor state, and can help you improve it.

Think Like a Programmer: An Introduction to Creative Problem Solving

V. Anton Spraul

This book helps you solve problems. It's a great complement to other books on improving your programming skills, as this focuses on ways you can solve problems, which aren't taught very often.

Writing Secure Code, Second Edition

Michael Howard, David LeBlanc

Developing applications that are secure is important, but the concepts are often not taught to the level that's required. This book covers those concepts and includes some examples. The material focuses on Windows development and can be quite dated, but the concepts are worth knowing.

Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams

Steve Maguire

This book is about the concept of debugging. It's a relatively short book, and while it's about debugging, it's more about how developers work on debugging code and how to help them improve. It's helpful if you want to convince your team to improve the way you work.

Growing Object-Oriented Software, Guided by Tests

Steve Freeman, Nat Pryce

This book is about using Test-Driven Development (TDD) to improve the way you write software. It covers how to get started, how to create cleaner code, how to focus on quality, and more.

Making Software: What Really Works, and Why We Believe It

Andy Oram, Greg Wilson

This book contains a range of opinions and insights held by the software development community, and explanations on whether they work or not. If you've ever had a question or heard something about how things are done, then read this book to learn more about it.

Object-Oriented Analysis and Design with Applications

Grady Booch, Robert A. Maksimchuk, Michael W. Engle, Bobbi J. Young, Jim Conallen, Kelli A. Houston

This book covers object-oriented design, what all of the terms mean, and how to create and understand UML diagrams. It's quite a few years old now, but the material is still good quality and useful.

97 Things Every Programmer Should Know: Collective Wisdom from the Experts

Kevlin Henney

This book collates a range of advice and tips from different experts in the software development world. Some of the topics are covered in other books, but this is a great collection of ways you can become a better developer.

Pragmatic Thinking and Learning: Refactor Your Wetware

Andy Hunt

This book shows you how to learn more effectively and improve your skills. Learning is something that developers need to do constantly, and this is a good book to help you improve.

Structure and Interpretation of Computer Programs, Second Edition

Harold Abelson, Gerald Jay Sussman, Julie Sussman

This is a helpful book if you want to learn more about the science of computer science and programming. Many reviewers say it's one of the best books they have read on programming, but can be hard to get through.

Algorithms

The books in this section cover algorithms in programming, which can be applied to any language you work with. They are often used in coding interviews (there's a section on this page for coding interview books).

Algorithms

Robert Sedgewick, Kevin Wayne

This is probably the most popular and most recommended book on algorithms. Algorithms are commonly used in programming and this book covers the most important ones. You'll see a lot of examples in this book and is a good book to learn more about this topic.

Introduction to Algorithms, Third Edition

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein

Another good book on algorithms, this one targets those who are new to algorithms. Some of the reviews say it's harder to read, but it's in a more formal style than other books.

Programming Pearls

Jon Bentley

This is a commonly recommended book when learning about algorithms and programming interviews. It has a range of tips and advice on real problems.

Architecture

These books cover the architecture of software systems.

Domain-Driven Design: Tackling Complexity in the Heart of Software

Eric Evans

This book covers the concept that to be a better developer you should understand the domain that you're working in. It's helpful for developers, and while some of the material is covered in other books or seems like common practice, you may get some value from it.

Software Architecture in Practice

Len Bass, Paul Clements, Rick Kazman

This book covers some best practices in software architecture and how systems are meant to interact. It's helpful if you work on large systems.

Building Microservices: Designing Fine-Grained Systems

Sam Newman

If you work on systems with a microservice architecture, or want to, then this book can be helpful to you. it shows you examples and advice on working with this type of architecture.

Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems

Martin Kleppmann

Some systems you work on will make heavy use of data, and there are some considerations you need to make when designing them. This book goes into detail on these topics to improve the way you design and develop these systems.

Refactoring to Patterns

Joshua Kerievsky

This book covers how you can refactor existing code to use design patterns. It's a mix of the concepts from other books on refactoring and design patterns. It has short chapters and explains many different strategies for refactoring.

Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions

Gregor Hohpe, Bobby Woolf

This is known as the book to read if you work on any kind of messaging system. There's a helpful vocabulary and many examples of different technologies. A case study is also used to demonstrate and explain the concepts.

Patterns of Enterprise Application Architecture

Martin Fowler

This book would be helpful for you if you work on large systems. It has a lot of advice and patterns for us that work on large systems.

Databases

These books cover working with databases and SQL. They don't include introductory database or SQL books as they can be learned in other ways.

SQL Antipatterns: Avoiding the Pitfalls of Database Programming

Bill Karwin

This is a great book about working with SQL. The book includes many antipatterns, and each of them include an explanation of the antipattern, why it's an issue, and what your alternatives are. I learned a lot from reading this book.

Refactoring Databases: Evolutionary Database Design

Scott W. Ambler, Pramodkumar J. Sadalage

Refactoring code is often easier than refactoring databases, as code represents the current state of the application. Databases contain data and are harder to deploy. This book contains a lot of strategies for refactoring the design of databases and deploying them to reduce risk and downtime for users.

Data Access Patterns: Database Interactions in Object-Oriented Applications

Clifton Nock

This book contains 25 different patterns for improving the way your applications access data. Whether you use them or not, you'll likely learn a lot about accessing and working with data.

Testing, Deployment, Operations

These books cover related topics such as software testing, deployment, continuous delivery, DevOps.

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation

Jez Humble, David Farley

If there was one book that changed the way I thought about developing software, this might be the one. The concepts in this book blew my mind when I read it and got me excited about deployment and automated testing. Almost all of the teams I've worked with have a long and painful manual testing and release process, and this book explains the why, what, and how to improve that process to make it mostly or completely automated.

Agile Testing: A Practical Guide for Testers and Agile Teams

Lisa Crispin, Janet Gregory

This is another great book if you're a developer on an agile team. Rather than having a "testing" phase that was common on waterfall projects, Agile testing is done within the same sprint. This book covers some reasons why that is, strategies for testing code and how to work more effectively with testers.

Testing Computer Software

Cem Kaner, Jack Falk, Hung Q Nguyen

This book covers strategies and concepts of testing your software. It's not only for testers, it's for developers as well. It can show you how to find bugs quickly, describe errors, use a bug tracking system, and improve your tests.

Perfect Software: And Other Illusions about Testing

Gerald M Weinberg

This book covers software quality and testing, and explains why we test code, and whether perfect software is possible. There are also discussions on many other frequently asked questions on testing and software.

DevOps: A Software Architect's Perspective

Len Bass, Ingo Weber, Liming Zhu

This book covers the concept of DevOps, how it works, and case studies of making it work in different organisations.

Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale

Jennifer Davis, Ryn Daniels

This book covers why and how you can get started with DevOps from within your team, then work with other teams and your wider organisation.

Ship it! A Practical Guide to Successful Software Projects

Jared Richardson, William A. Gwaltney

This book has a collection of tips and techniques for working on successful projects. It includes things like tools that help and don't help, what's normal on a project and what isn't, and how to notice and fix danger signs.

Migrating Large-Scale Services to the Cloud

Eric Passmore

These days, moving services from on-premise to cloud hosted is a common task undertaken by organisations. This book covers the advice and experience of someone who migrated a Microsoft service to the cloud.

Site Reliability Engineering: How Google Runs Production Systems

Niall Richard Murphy, Betsy Beyer, Chris Jones, Jennifer Petoff

This book covers the experience of people working at Google and how they run their production systems. While much of it is Google-specific, you might get some good information from it.

The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations

Gene Kim, Jez Humble, Patrick Debois, John Willis

This book explains what DevOps is, why it's helpful, and how to get started with it. The reviews are polarising: many say it's too wordy, a lot of hype, and written for managers rather than developers, and others say it's a good guide. Take a look at the reviews and the description to see if it's something you'll get value from.

Job Interviews

There are a couple of books here to help you get through a programming interview.

Cracking the Coding Interview: 150 Programming Questions and Solutions

Gayle Laakmann McDowell

This is a highly recommended book for those who are looking for a job as a programmer. It has a lot of exercises with solutions to help you improve and refine your skills.

Programming Interviews Exposed: Coding Your Way Through the Interview

John Mongan, Noah Suojanen Kindler, Eric Giguère

This book focuses on the interview process as a programmer, including what the interviewer wants to hear, the screening process, and how to come up with the solution to demonstrate your skills.

UI Design

Learning about UI design is hard as a programmer, but these books can help.

User Interface Design for Programmers

Joel Spolsky

This book is written to help programmers design better user interfaces. As a programmer, a good UI design might be hard and best left to others who are more creative. But this book shows that is not the case and explains how you can improve your UI designs.

The Non-Designer's Design Book

Robin Williams

This book covers more than just UI design. It covers things like typography, font, and designing interfaces in general. It's a good book if you want to learn more about designing or if you need to for your role.

GUI Bloopers 2.0: Common User Interface Design Don'ts and Dos

Jeff Johnson

This book explains a range of user interface design mistakes and issues from around the web, why they are bad, and how to avoid them. It's a good way to learn what not to do.

Agile

The books here go in-depth on several Agile topics which are great if you're working in an Agile environment.

Agile Software Development, Principles, Patterns, and Practices

Robert C Martin

This is a book on Agile development methodologies, written by a software developer for software developers. It shows you how you can solve problems and work well in an Agile environment.

Agile Estimating and Planning

Mike Cohn

This is a great book on how Agile teams can estimate and plan their work. There are many stories and experiences online about how this is done, and after reading this book you'll have a better understanding on how to plan your team's work and how to estimate it, and what to avoid.

User Stories Applied: For Agile Software Development

Mike Cohn

This book can help you better understand user stories. If you're on an Agile team that writes user stories, learning some helpful ways of writing them is useful, as it's not up to the Product Owner or Business Analyst to write them all of the time.

Career

These books are focused on skills to improve your career.

The Pragmatic Programmer: From Journeyman to Master

Andrew Hunt, David Thomas

This book covers concepts such as creating code that satisfies requirements and the users, career development, and writing flexible code. It's a good read if you're looking to improve your career and is often recommended by others online.

Coders at Work: Reflections on the Craft of Programming

Peter Seibel

This book is a collection of interviews of different programmers, offering advice on how to become a good programmer and solve problems. It's written in the style of another book called Founders at Work.

Don't Make Me Think, Revisited

Steve Krug

This is a commonly-recommended book on software design and user interface design. It's a great guide on web development and how to design the layout of web applications and improve how the user experience works.

The Clean Coder: A Code of Conduct for Professional Programmers

Robert C Martin

This book is an explanation of concepts to improve your programming career. Not to be confused with "Clean Code", this book is more about the mindset, managing time, working in teams, and improving the quality of your work.

The Complete Software Developer’s Career Guide

John Sonmez

This book covers a range of topics to improve your career, such as improving your knowledge, taking a contract role or permanent position, whether earning a degree is necessary, coding bootcamps, dress code, and more.

The Manager's Path

Camille Fournier

This book covers the process of going from an engineer to a technical manager. Even if this career path is not for you, it can be a good read to understand the things that technical leaders need to deal with.

Peopleware: Productive Projects and Teams

Tom DeMarco, Tim Lister

This book explains that the common problems on software projects are related to people and not technical. It discusses many issues and how to resolve them on your projects.

Rapid Development

Steve McConnell

This book covers a lot of strategies and tips to help software development projects get completed faster. Some tactics work and some don't work, and this book explains why.

The Mythical Man Month

Frederick P. Brooks Jr.

This is a commonly-recommended book and tells the stories and experiences of someone working as a software project manager. It describes problems on large projects and how to overcome them.

The Passionate Programmer: Creating a Remarkable Career in Software Development

Chad Fowler

This book explains the concept that you should treat your career as a business, and look to improve it and drive it in a direction that you want. It covers how to build a career in the same way as if you were building a product.

The Self-Taught Programmer: The Definitive Guide to Programming Professionally

Cory Althoff

This book covers the process and experience of teaching yourself to program. The author focuses on learning Python, but covers a lot of things that aren't taught when learning a programming language.

Other

These books here focus on productivity, personal development, finances, and ways of working.

Atomic Habits

James Clear

A recently written book on habits, this book will explain why habits are useful and how you can define and implement your own.

7 Habits of Highly Effective People

Stephen Covey

A classic book on improving your own habits, you can learn how to become more effective at what you do with the advice in this book.

Deep Work: Rules for Focused Success in a Distracted World

Cal Newport

A great book on why focused, deep work is important. As a developer, we thrive in long blocks of uninterrupted time, and this book explains how you can achieve that.

So Good They Can't Ignore You

Cal Newport

This book states that a persons' skill and talent is more important than their passion. This can help you understand and work out where you want to go in your career.

Getting Real: The Smarter, Faster, Easier Way to Build a Successful Web Application

Jason Fried, David Heinemeier Hansson, Matthew Linderman

This is another book by the team at 37signals, and explains their principles of business and programming. It's got a collection of advice, some of which you might not find in other places. It's helpful if you're building your own application or if you're working in a team.

Getting Things Done: The Art of Stress-Free Productivity

David Allen

This is one of the most important and impactful books I've ever read. As we get older, we take on more responsibility in life and at work. The concept of this book is that your brain is great for having ideas but terrible for holding them, so you should use a system to record what you need to do and help you to get it done. This book teaches this system, known as GTD.

How to Win Friends and Influence People

Dale Carnegie

Another classic book on personal development, and while the title may seem fluffy or shady, it's a genuine book on how to do the right thing and be considerate of everyone you may work with.

Rework: Change the Way You Work Forever

Jason Fried, David Heinemeier Hansson

This book, from the authors of software company 37signals, explains how you can use the tools available today to start a business. While it's not about software development, the principles in the book can be used in your career, even if you don't want to start a business.

Rich Dad, Poor Dad

Robert Kiyosaki

This is a great book on the mindset of creating wealth and investing. While the book can be a bit repetitive, the concepts are solid, and they are helpful to learn.

I Will Teach You To Be Rich

Ramit Sethi

A great book to read to learn how to manage your own finances and what to avoid doing. Don't judge the book by the title: it's a great read and has been recently updated.

The Theory of Constraints

Eli Goldratt

This book explains the concept of constraints, which is that every system or process has a bottleneck, and that improving anywhere else but the bottleneck can cause more problems. It's a concept I've found helpful when working with teams, as management often wants to add more developers to a team, when more benefit can be gained in other ways. The reviews of the book indicate it's hard to read, so if you don't want to read the book, you can search for more on this topic online.

Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency

Tom DeMarco

This book explains that allowing teams to have a little "slack" time in their plans, they can better achieve their goals. Slack time is not time for slacking off, it's a buffer of time so that teams are not 100% accounted for. It's a helpful concept and this book helps to explain why it's beneficial.

The Founder's Dilemmas: Anticipating and Avoiding the Pitfalls That Can Sink a Startup

Noam Wasserman

A book on founders and starting a business. This can be useful even if you don't want to start your own business, as the tips can be applied to your career.

The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win

Gene Kim, Kevin Behr, George Spafford

This book is actually a novel about an IT project that's over budget and behind schedule. It's often recommended by other developers and has some great advice about the problems on software projects.

The Subtle Art of Not Giving a F*ck

Mark Manson

A great book on personal development and improving how you approach life. It's humorous and to the point. If you want to get a preview of the author's work, check out his website.

Emotional Intelligence: Why It Can Matter More Than IQ

Daniel Goleman

This book explains that emotional intelligence, which is concepts like self awareness, motivation, persistence, is more important than intelligence. This is helpful for us as developers as it can improve how we interact with others and move ahead in our career.

The Productive Programmer

Neal Ford

This book covers a range of strategies and advice for improving your efficiency with programming, such as how to work smarter, avoid interruptions, and avoid repetition. It's also got a section on questioning authority, which is something that can be helpful and not discussed often.

The Best Software Writing I

Joel Spolsky

This book is a collection of essays about software development by a range of other developers. It's been collated by Joel Spolsky and contains a lot of good advice on working with software.

Conclusion

That brings us to the end of this collection of best books for programmers. If you have any thoughts on these books, or any other recommendations, let me know in the comments below.