Your learning as a software engineer doesn't stop after you've graduated from university or a coding bootcamp.
As Socrates once said:
"Education is the kindling of a flame, not the filling of a vessel."
So, we took a look at our bookshelf and asked our friends about the best software engineering books.
We've compiled a list of the top 12 that all software developers should read. So whether you're an experienced engineer looking to sharpen your skills or preparing for an upcoming software engineering interview, you should have these on your bookshelf too.
Software development is a massive subject. Even if you've been an engineer for decades, there's still plenty more to learn.
Needless to say, as technology continues to improve exponentially, so too does the software development process.
So, no matter where you are in your software development career, here are the top 12 software engineering books you should check out:
The Top 12 Software Engineering Books
- Clean Code
- The Pragmatic Programmer
- The Mythical Man-Month
- Design Patterns: Elements of Reusable Object-Oriented Software
- Refactoring: Improving the Design of Existing Code
- Code Complete: A Practical Handbook of Software Construction
- Domain-Driven Design: Tackling Complexity in the Heart of Software
- Working Effectively With Legacy Code
- Test-Driven Development: By Example
- Peopleware: Productive Projects and Teams
- Cracking the Coding Interview: 150 Programming Questions and Solutions
- Code: The Hidden Language of Computer Hardware and Software
Sneak Peek: The three most common software engineering interview questions are:
- K-Messed Array Sort. Give it a try here.
- How would you build a URL shortener? Watch answer here.
- Find the Smallest Missing Integer. Try it out here.
Note: There are no affiliate links below. These are unbiased opinions from our own team of system design coaches and our community. If you'd like to purchase a book, we recommend using Bookshop to support a local book store or buying directly from the author or publisher.
by Robert C. Martin
The first book on our list is Clean Code by a legend of the software engineering world Robert C. Martin.
For those who don't know, Robert Martin (or "Uncle Bob") is the best-selling author of several classic software engineering books, such as Clean Architecture (featured on our System Design book list) and The Clean Coder.
Not only that, he was one of the founders of the Agile Methodology and was one of the co-authors of the Manifesto for Agile Software Development.
Nevertheless, Clean Code is considered one of his most important and influential coding books. It is a must-read for every software developer.
As the name suggests, this book seeks to teach its readers how to write clean, readable, and easy-to-maintain code.
The Pragmatic Programmer
by Andrew Hunt, David Thomas
The Pragmatic Programmer is another excellent read covering many software engineering aspects.
In fact, this book is used as a textbook for many university courses. But, unlike other computer science or software engineering textbooks focusing more on software development's abstract or theoretical aspects, this book focuses more on practical tips and methods software engineers can implement to improve the development process.
Each chapter ends with problem sets that you can use to help test yourself on what you've learned and practice as much as possible.
The authors use several analogies and fables to illustrate their points about development methods and shortcomings. For instance, the broken windows theory, the story of the stone soup, and the boiling frog metaphor appear in the book.
The 1st edition of the book was published in 1999, and some chapters are a tad out-of-date. However, a 2nd edition was published in 2019.
The Mythical Man-Month
by Frederick P Brooks
Another classic and momentous software engineering book is The Mythical Man-Month by Frederick Brooks.
While many of the books on our list here are highly technical, this one is a little more philosophical and thought-provoking.
The book's primary theme centers around project management and the author's self-titled Brook's Law, which states that" "adding manpower to a late software project makes it later."
Beyond this, dozens of ideas are presented in the book that would be highly relevant to software engineers, especially if they are responsible for managing their development projects and keeping things on schedule.
Despite the latest edition of the book being released over 20 years ago, Brooks claims that many engineering managers still make many of the same mistakes whose solutions are outlined in the book.
As such, he half-jokingly refers to The Mythical Man-Month as the "Bible of Software Engineering."
Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
This book is relatively old in terms of software engineering books, published in 1994. However, it is still often cited as one of the best, even today.
Despite being nearly 30 years old, it still contains many design patterns and coding structures relevant to today's software engineers.
Of all the books on our list, this is perhaps the most famous and influential (although many here really give it a run for its money).
As the name suggests, this text covers three main design patterns for object-oriented programming types: Creational, Structural, and Behavioral. The book is considered a significant source of knowledge on the theory behind object-oriented programming and how to best use it in practice.
Design Patterns is a must-have for every software developer.
Refactoring: Improving the Design of Existing Code
by Martin Fowler
Refactoring is another older but hugely influential software engineering book. It is considered the seminal text on the subject of code refactoring or restructuring code without changing its behavior.
However, a second edition of the book was recently published in 2018 with updated examples.
This book is a comprehensive source on the concept of refactoring with practical tips on performing it in various programming languages.
Given how necessary refactoring is for many software engineers, we strongly recommend you pick up a copy to help you rewrite your code in the future.
Code Complete: A Practical Handbook of Software Construction
by Steve McConnell
Code Complete is another older but quintessential book on software engineering. Having been published in 1993, you'll find that the examples used in the book are a bit dated (using languages like C, Pascal, and BASIC). However, the lessons it teaches are still relevant today.
Not only that, a second edition was released with more up-to-date examples and includes lessons on web development, object-oriented programming, and agile practices, among other things.
This really is one of the best books on the subject of software engineering period. If you had to choose just one book from our list, we'd recommend you choose this one (or rather, the 2nd edition).
The book itself is massive, sitting at over 900 pages, and touches many dimensions of software development and best practices. Everything from naming variables to the techniques of a great software engineer is covered by McConnell in Code Complete.
Domain-Driven Design: Tackling Complexity in the Heart of Software
by Eric Evans
A cornerstone of the software development process is domain modeling.
Software developers regularly use domain models, but there aren't many high-quality resources on the subject to help them understand the best ways to do so.
However, Domain-Driven Design by Eric Evans is one of the best books on this.
This book will give you a comprehensive look into how to make your software designs correspond with your mental models of the problem domain you are looking to solve.
You'll get plenty of design best practices, expert techniques, and fundamental principles of domain-driven design.
The book uses many examples of real software projects to illustrate its points and help you incorporate its lessons into your work as a software engineer.
Working Effectively With Legacy Code
by Michael C. Feathers
For those that don't know, legacy code is simply old code. It could mean existing code written over several years or code that is now obsolete or supporting obsolete technologies.
Being tasked with updating or maintaining years (or decades) old code is not necessarily something most software engineers want to do. But that doesn't mean that they won't be asked to.
Of course, working with legacy code is still important, and software engineers must understand how to do it effectively.
Working Effectively With Legacy Code by Michael Feathers is one of the best resources to help you do that.
After reading this book, you'll better understand how to untangle old and often confusing legacy code. You may even start finding the act of updating legacy code exciting.
Test-Driven Development: By Example
by Kent Beck
As many software engineers already know, with the rapid advancements of technology that never cease, the software development process also evolves and advances too.
One of these advancements came in the form of something called "test-driven development," or TDD. As the name suggests, this simply means that engineers are repeatedly converting software requirements into test cases and testing them during the development process rather than afterward.
Kent Beck developed this technique (or "rediscovered," in his words) in the early 2000s and published his book Test-Driven Development: By Example.
Since then, TDD has become very popular amongst software engineers and tech companies and is credited with helping developers build simpler software and inspiring greater confidence.
As such, we've added Beck's book to our recommended reading list because it is still valuable for you to understand whether you or your teams are using TDD or not.
Peopleware: Productive Projects and Teams
by Tom DeMarco
Software engineers tend to downplay the soft skills necessary for their roles and for the software development lifecycle more generally.
For Example, communication and leadership are critical aspects of software project management and delivering finished products.
Despite its importance, there aren't many books on the subject that are specifically geared towards software engineers and developers.
However, Peopleware: Productive Projects and Teams is a great one that every software engineer should read, even if you're not directly responsible for managing teams.
This book by Tom DeMarco takes a deep dive into the leadership qualities necessary to drive and complete software projects in the modern economy. It is filled with excellent, practical advice on the subject.
Cracking the Coding Interview: 150 Programming Questions and Solutions
by Gayle Laakmann McDowell
Of course, our software engineering book list would not be complete without one on the coding interview.
This book, by Gayle Laakmann McDowell, is considered one of the best. Not only that, the 6th edition was recently published in 2015.
Cracking the Coding Interview will provide you with everything you need to prepare for and ace your upcoming software engineering interviews.
You'll find that this book is comprehensive and highly technical, including hundreds of interview questions and deep dives into essential software development concepts.
While there are dozens of interview prep resources out there for software engineers, including those at Exponent, this book is a must-have if you have upcoming interviews.
Code: The Hidden Language of Computer Hardware and Software
by Charles Petzold
Finally, the last book on our list is actually a personal favorite.
Code is a book on fundamental computer science principles covering how computers work as hardware and software.
While nearly all software engineers will already be familiar with the concepts, it's still a delightful read that could provide you with a much more intimate understanding of your craft.
It starts from the ground up, detailing how logic gates work before moving onto memory processors and operating systems.
Best Programming Reference Books
While the titles mentioned above are some of the best books on software engineering you can find today, software engineers often need reference books for their day-to-day responsibilities.
These books below are limited to a single or a few programming languages. So, they may not be relevant to every software engineer or developer.
However, we would be remiss if we did not mention them.
Here are the best programming reference books you should keep on your bookshelf:
by Douglas Crockford
HTML and CSS: Design and Build Websites
by Jon Duckett
by Joshua Bloch
by Ross Olsen
Fluent Python: Clear, Concise, and Effective Programming
by Luciano Ramalho
Modern PHP: New Features and Good Practices
by Josh Lockhart
C# in Depth
by Jon Skeet
by Barbara E. Moo, Josée Lajoie, and Stanley B. Lippman
SQL Queries for Mere Mortals: A Hands-On Guide to Data Manipulation in SQL
by John Viescas and Michael J. Hernandez
Getting Ready for Software Engineering Interviews?
If you've combed through each of these books, you'll undoubtedly be in a good spot.
However, software engineering interview questions can be just as challenging as the subject itself.
So, it's highly recommended that you take full advantage of the other interview prep resources at your disposal.
Here at Exponent, we've got you covered!
Solve the Game of Life
Check out this mock interview where Google Software Engineer implements John Conway's famous automaton game.
Print Left View of Binary Tree
Watch this mock interview with an Amazon Software Engineer that demonstrates how to print the left view of a binary tree.
We've connected thousands of job seekers in countless tech roles with expert-level courses and resources to prepare them for their upcoming interviews.
If you're interested in more software engineering-related resources, be sure to check out:
💬 Study up on example software engineering interview questions
📖 Read through our company-specific engineering interview guides
👯♂️ Practice your behavioral and interviewing skills with our mock interview practice tool.
👨🎓 Take our complete Software Engineering Interview Course.