The Greatest Software Development Books of All Time
[Updated — Originally published November 2020] This list is not complete, as there are always new books, but these are the ones that have made the most impact on the careers of many software developers.
Join the DZone community and get the full member experience.
Join For FreeUpdated — Originally published November 2020
There is a question that is often asked: should I read books to become a better developer? Usually, the question is yes and the reason for that is that the person who wrote the book wrote it when (s)he was the most invited to write it with the large knowledge base then. The only better option would be to work with that person, which is often not possible. Yet, a lot of people are not reading enough, unfortunately, which means if you read books, you will be ahead of others by a few marks.
However, when asking which books, you will get different answers from different people, as there are so many topics in the software engineering area. Over the years, I developed a routine to read a lot of books. So taking into account my own experience, the experience of many peers I spoke with, as well as other sources that compiled similar lists (see the References section at the end of this post; some of these lists use analytics to calculate the score), I compiled a list of the greatest books that every software developer should read in one point in a career.
A short note: Just reading these books will not make you a great developer. For that, you will need years of development. But you will get insights into some guiding principles that you could apply. In addition, by reading them, you will avoid making some common mistakes in development.
The List of Top 10 Greatest Software Development Books
1. Clean Code by Robert C. Martin
One of the greatest software development books ever written by Uncle Bob Martin in 2008, it is written to teach software engineers the principles of writing clean programming code. There are a lot of examples inside, showing how to refactor code to be more readable and maintainable. In addition, it includes chapters for common mistakes made by all kinds of programmers and chapters for explaining SOLID principles of object-oriented design. Even though examples in the book are made in Java, it is equally useful for other object-oriented programming languages.
In addition to this book, there are more books in the Uncle Bob series, such as Clean Coder and Clean Architecture.
2. The Pragmatic Programmer by Andrew Hunt and David Thomas
This book is filled with both technical and professional practical advice for developers in order to become better developers. It examines what it means to be a modern developer, by going through topics that range from personal responsibility and career development to architectural techniques. Even though written in 1999, it is still valid in many aspects. The unique thing about this book is that it teaches you a pragmatic way with a collection of tips to improve the development process. Authors for example advise readers to learn one text editor and use it for everything and also recommend using version-tracking software for even the smallest projects.
3. Code Complete by Steve McConnell
Some people consider this book as the of the best practical guides to programming, strongly recommended to beginners. Again, one of the books written more than 15 years ago, is still valid today. It deals with topics such as design, coding, debugging, and testing. In more than 900 pages, the authors describe how to write programs for people first and then for computers second, how to divide your code in terms of domains, and how to master the human qualities of top coders (humility, curiosity, and the most important, keep your ego in check).
4. Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, and Grady Booch
This is probably the most famous and oldest book on this list (published in 1994). It describes 23 software design patterns in three different categories, to create more flexible, elegant, and reusable designs without having to rediscover the design solutions themselves. An idea for a design pattern as a reusable form of a solution to a design pattern was taken from the architect Christopher Alexander. It is a must-read for an architect or developer of a complex system. The authors are often referred to as the Gang of Four (GoF). The book includes examples in C++ and Smalltalk.
Some people find it hard to read, so there is a great alternative in this book: Head First Design Patterns: A Brain-Friendly Guide.
5. Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, and Erich Gamma
In this book, Martin Fowler writes about improving the design of an existing code. It represents refactoring as a process of changing a software system in a way that does not alter the external behavior of the code but improves its internal structure. Using refactoring as a technique, it's possible to take a bad design and rework it into a good one. In the book, one can find a catalog of more than 40 proven refactorings with details of when and why to use them. In the 2nd, the main programming language used in the book is JavaScript, while the 1st edition used Java.
6. Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein
One of the most famous books on all kinds of algorithms in depth (also known as CLRS), it represents a comprehensive guide for all kinds of readers, from beginners to professionals. Each chapter is relatively self-contained and can be used as a unit of study. Algorithms are described in English and pseudocode, so one can be familiar even with someone who didn’t do much coding. It could be said that it's more a theoretical book than a practical one. The book covers topics such as data structures, fast algorithms, graph theory, computational geometry, and much more.
Another great alternative is the Algorithms book by Robert Sedgewick and Kevin Wayne, which is widely used in colleges and universities worldwide.
7. Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman, and Julie Sussman
This book is one of the best books to learn the fundamentals of programming (also known as SICP). It represents a fundamental course in tech programming at MIT and uses Scheme to show different programming concepts. Book explains the four best-known paradigms of programming languages: imperative, logic-based, object-oriented, and applicative programming.
8. Working Effectively with Legacy Code by Michael Feathers
In this book, Michael Feathers offer different strategies how to deal with large and untested legacy code bases. The book is important, as almost every developer at some point in their career, has to work with a legacy system and it still represents of the most challenging problems for many companies. The book goes deep into the understanding general process of a software change like adding features, fixing bugs, optimizing performances, etc. In addition, you will learn how to get legacy code ready for testing and identify where the code needs changes. Examples in the book are written in C, C++, C#, and Java.
9. Programming Pearls by Jon Bentley
The book represents one of the most influential books that help a person to think as a programmer. Every concept in the book is covered with practical problems and various solutions. The book challenge reader to understand the core concepts in memory, CPU, and algorithms and gradually increment difficulties rather than answering right away. “Programming Pearls” is a bit different book than others in this list and it represents a solid way to teach problems of data structures and algorithms, especially, searching, sorting, etc.
10. Patterns of Enterprise Application Architecture by Martin Fowler
One more book in this list from a productive author Martin Fowler that deals with the practice of enterprise application development. The book teaches you different concepts, such as: whether are you correctly layering your application, whether are you aware of different presentational designs that one can choose from (MVC, MVVM, templates), how are you accessing your data, etc. Martin gives over 40 patterns as solutions to common problems while architecting enterprise applications. It comes with a lot of UML diagrams and code examples in Java and C#. Take into account that the book is from 2002., so it lacks some of the modern concepts, such as REST, JSON, or cloud.
Honorable Mentions
In addition to the top 10 greatest software development books, there are many more good books that are not easy to exclude from this list. Here are some of them that I would strongly recommend reading:
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems is one of the best books in the area of data-intensive applications. The book describes different concepts such as databases and data models, and deep dives into distributed concepts, such as transactions, replication, consistency, etc.
- Software Architecture in Practice is one of the best books on the topic of software architecture. It goes through main software quality attributes, then through different case studies (US air traffic control system and a software product line used to build submarines), but also it gives an introduction to the topic of architectural evaluation (using two frameworks, ATAM, and the CBAM).
- The Art of Computer Programming, written by a famous computer scientist from Stanford University, Prof. Donald Knuth, this book is very popular and highly praised by many of the top programmers in the world for its combined mathematical exactness with outstanding humor throughout the chapters.
- Cracking the Coding Interview is highly recommendable to anyone who wants or needs to take coding interviews. The author explains how to look for hidden details in questions, break problems into small chunks, and to get better at learning concepts. In addition, it provides 189 real interview questions and solutions.
- Enterprise Integration Patterns is a book by Gregor Hohpe and Bobby Woolf that describes how applications exchange data and communicate. It encompasses messaging patterns, messaging components, and some real-life examples of how a banking system would be designed.
- Object-Oriented Software Construction is a book by Bertrand Meyer and even though is written in the early 2000s, it will teach you the best engineering practices behind software construction. The author describes for the first time what is Design by Contract.
- The Art of Unit Testing is a book focused on unit testing as a crucial thing any developer needs to do to deliver a good piece of software. The book explains core competencies on how to unit test, how to scope it, and what to unit test.
- The Mythical Man-Month discusses productivity, tackling one of the myths that the time taken by one engineer can be equally divided if you hire more engineers to do the job. It writes about how to handle delays in project delivery, communicate efficiently as a project leader, and how to manage project iteration.
- Domain-Driven Design: Tackling Complexity in the Heart of Software addresses how to translate the process into the software. It described what a process looks like for someone who doesn’t write software and how one communicates about a process so it can be translated into a software system.
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win is a narrative about a fictional company that is transitioning to the DevOps model from an older less integrated model of working. It talks about challenges in coordinating between operations and development and how to make that bridge.
References
Published at DZone with permission of Milan Milanovic. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments