10 Must-Read Books for Software Developers
Besides all the great offerings of the modern world — podcasts, videos, blogs, etc. — reading a good book is still something many people don’t want to miss. So how do you find the best books for software developers?
Finding great books for software developers is not easy because the ecosystem changes rapidly, making many things obsolete after a short time. This is especially true regarding books that rely on a specific programming language.
However, there are evergreens available, books that deal with meta-topics, design patterns, or general mindsets.
The following collection consists of books for software developers, some of the most popular, most-read books available. In addition, senior developers often recommend books that are still relevant to junior developers. I know that time is precious, especially for software engineers, but if you manage to read some of the books for software developers, it will help you and your career. Note that this list is in no particular order because all of these books are equally recommendable.
Note: None of the links below are affiliate links.
Cracking the Coding Interview
“Cracking the Code Interview: 189 Programming Questions & Solutions” is highly recommendable to anyone who wants or needs to take coding interviews. Author Gayle Laakmann McDowell, an experienced software engineer, was both an interviewer and a candidate. She can help you to look for hidden details in questions, break problems into small chunks, and to get better at learning concepts.
Furthermore, Gayle provides 189 real interview questions and solutions so you can prepare well for the following coding interview!
“Code Complete: a Practical Handbook of Software Construction, 2nd Edition” by Steve McConnell is one of the books every programmer should probably have skimmed through once in their life.
It’s a comprehensive analysis of software construction, well written, and highly accepted in the industry. It deals with the design, coding, debugging, and testing topics. Overall, this book will probably have the highest ROI for developers with one to three years of professional programming experience. But I recommend it to beginners as well because it helps give you more confidence when constructing software. The main takeaway? Developers have to manage complexity. To write code that is easy to maintain and to read for you and others.
“Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin (Uncle Bob) is one of the most popular programming books. It teaches software engineers the principles of writing clean programming code. It has many examples showing you how to refactor code to be more readable and maintainable, but be aware that it is very Java-centric. While some patterns and techniques are transferable to general programming or other languages, the book’s primary audience is Java developers.
Another thing to note is that the book is from 2009. Some content, like code formatting, is less relevant today because of the available tools and IDEs.
The book Refactoring: Improving the Design of Existing Code, 2nd Edition by Martin Fowler, explains what refactoring is, just like the original 20 years ago. Questions that you may ask yourself and have answers to in this book are:
Why should I refactor my code?
How can I recognize code that needs refactoring?
How can I successfully refactor my code?
After reading this book, you should understand the process and general principles of refactoring that you can quickly apply to your codebase. You should also be able to spot “bad smells” in your teammate’s code that need refactoring.
Head First Design Patterns
“Head First Design Patterns: A Brain-Friendly Guide” by Eric Freeman, Bert Bates, Kathy Sierra, and Elisabeth Robson teaches you design patterns and best practices used by other developers to create functional, reusable, elegant and flexible software. It also has excellent visualizations that will help you to learn new concepts more quickly.
This book is an excellent choice if you want to learn about things like factories, singletons, dependency injections, etc. The examples are in Java, so it wouldn’t hurt to know that language or another object-oriented one.
Patterns of Enterprise Application Architecture
“Patterns of Enterprise Application Architecture” is another excellent book by Martin Fowler that deals with the practice of enterprise application development. After a short tutorial on developing enterprise applications, Martin then gives you over 40 patterns as solutions to common problems while architecting enterprise applications. In addition, it has many UML visualizations and code examples in Java or C#.
After reading the book, you should be able to divide an enterprise application into layers, know the major approaches to organizing business logic, use the MVC patterns to manage web applications and handle concurrency for data over multiple transactions.
Working Effectively with Legacy Code
In “Working Effectively With Legacy Code” by Michael Feathers, the authors offer strategies to deal with large, untested legacy code bases. While you might think that we are in 2020 now and legacy code shouldn’t be a problem anymore because we only have clean, maintainable code and microservices all along, let me assure you that this is a misconception. Legacy code still is one of the most challenging problems for many companies.
After reading this book, you should be able to understand the general mechanics of software change, like adding features, fixing bugs, optimizing performance, and improving the design. Furthermore, you learn to prepare legacy code for testing and identify where the code needs changes. The book provides examples written in Java, C++, C, and C# but also includes tips on dealing with legacy code that is not object-oriented.
The Clean Coder
Another book by Uncle Bob teaches techniques, disciplines, tools, and practices of true software craftsmanship. “The Clean Coder: A Code of Conduct for Professional Programmers” is packed with practical advice about estimating, coding, refactoring, and testing.
After reading this book, you should be able to deal with conflicts, tight schedules, and unreasonable managers. You should be able to handle unrelenting pressure and avoid burnout, manage your time, get into the flow of coding, and foster environments where developers and teams can thrive.
This book is accepted in the industry, but I think not everything in it is pure gold. It contains many anecdotes and hypothetical conversations that often conclude that the developer is ultimately responsible for their actions. This goes so far that in one statement, the advice for a developer whose code produced a bug is to reimburse the company financially for the money loss.
So my advice is to read the book carefully and critically if you do!
Introduction to Algorithms
“Introduction to Algorithms, Third Edition” by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein is nothing less than an essential guide to algorithms of all kinds. It is comprehensive and accessible to all readers, beginners, and professionals alike. It is worded and covers a lot of subject matter. But it also is complex and not so easy to follow.
It covers data structures, fast algorithms, polynomial-time algorithms for seemingly intractable problems, graph theory, computational geometry, and much more. While it contains some examples in pseudo-code, it still is a very theoretical book in my eyes.
The Pragmatic Programmer
“The Pragmatic Programmer” is one of the most important books I have ever read. It is filled with technical and professional practical advice that helped me in many projects and became a better developer.
The book is highly relevant even in 2020, especially with the new 20th Anniversary Edition. It examines what it means to be a modern developer by exploring topics that range from personal responsibility and career development to architectural techniques.
After reading the book, you should know what continuous learning means and its importance. Furthermore, I know how to write flexible, adaptable and dynamic code; solve the problems of concurrent code; guard against security vulnerabilities; test ruthlessly and effectively; and much more.
Get articles like
this via email
- Join 2,800 others
- Never miss an insight