There is a question that is often asked: should I read books to become a better developer ? Usually the question is yes, however when asking which books?, you will get different answers from different people, as there are so many topics in the software engineering area. During the years I developed a routine to read a lot of books, so taking into account my own experience, experience of many peers I spoke with, as well as other sources that compiled similar lists  (some of them using analytics to calculate the score), I compiled a list of the greatest books that every software developer should read in one point in career.
Just to take a short note that just reading these books will not make you a great developer, for that you will need years of doing development, but you will get insights into some guiding principles that you could apply. In addition, by reading them, you will avoid to make some common mistakes in development.
This list is not complete, as there are always some new and good books, but these ones made the most impact in carriers of many software developers and as there are mostly languages agnostic, they can be applied by using any programming language.
The list of top 10 greatest software development books
1. Clean Code
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 about 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.
Link: Delfi.rs (In Serbian)
This book is filled with both technical and professional practical advices for developers in order 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 of 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 to use version-tracking software for even the smallest projects.
Link: Kombib.rs (In Serbian)
Some people consider this book as the on the the best practical guides to programming, strongly recommended to beginners. Again one of the books written more than 15 years ago, still valid today. It deals with topics such as design, coding, debugging and testing. In more than 900 pages, 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 human qualities of top coders (humility, curiosity and the most important, keep your ego in check).
Probably the most famous and the oldest books from 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 re-usable form of a solution to a design pattern was taken from the architect Christopher Alexander. It is 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.
Link: CET (In Serbian)
Link: Delfi.rs (In Serbian)
One of the most famous books on all kinds of algorithms in depth (also known as CLRS). It represents a comprehensive guide for all kind 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 its more theoretical book than practical one. The book covers topics such as data structures, fast algorithms, graph theory, computational geometry and much more.
This book is one of the best books to learn fundamentals of programming (also known as SICP). It represent a fundamental course to tech programming at MIT and uses Scheme to show different programming concepts. Book explains four best-known paradigms of programming languages: imperative, logic-based, object-oriented and applicative programming.
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 career, has to work with a legacy system and it still represent of the most challenging problems for many companies. The book goes deep into understanding general process of a software change like adding features, fixing bugs, optimizing performances, etc. In addition, it will learn you how to get legacy code ready for testing and identify where the code need changes. Examples in the book are written in C, C++, C# and Java.
The book represent 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 giving the answer right away. “Programming Pearls” is a bit different book than others in this list and it represent a solid way to teach problems of data structures and algorithms, especially, searching, sorting, etc.
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: are you correctly layering your application, 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.
In addition to the top 10 greatest software development books, there are many more good books that is not easy to exclude from this list. Here are some of them that I would strongly recommend to read:
- The Art of Computer Programming, written by 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 the combined mathematical exactness with an outstanding humour throughout the chapters.
- Head First Design Patterns, is a book that describes design patterns and best practices used by other developers to create functional, reusable, elegant and flexible software. It is also filled with great visualizations that will help you to learn new concepts more easily.
- Cracking the Coding Interview, is highly recommendable to anyone who wants or needs to take coding interviews. Author explain how to look for hidden details in questions, to break problems into small chunks and to get better in learning concepts. In addition, it provides 189 real interview questions and solutions.
- Enterprise Integration Patterns, is a book that describe how applications exchange data and communicate. It encompass messaging patterns, messaging components and some real live examples on how a banking system would be designed.
- Object-Oriented Analysis and Design, is a guide how do we architect software and it provides a lot of background theory as to why you would do object-oriented programming by using UML. It is written by Grady Booch, IBM Fellow and the author of the UML language.
- The Art of Unit Testing. This book is focused on unit testing as a cruical thing any developer need to do to deliver good piece of software. The book explains core competencies on how to unit test, how to scope it and what to unit test.
- Peopleware: Productive Projects and Teams is one of the classics about software management. It speaks about why do managers give so much leeway to their teams to get things done and why there are so many jelled SWAT teams at Microsoft that are remarkably productive. The book approaches sociological or political problems, such as group chemistry, “flow time” and quiet in the work environment.
- The Mythical Man-Month discusses productivity, tackling one of the myth 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 delay 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 address how to translate process into software. It described how does a process look like for someone who doesn’t write software and how do one communicate about a process so it can be translated into 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.
- Soft Skills: The Software Developer’s Life Manual. Every programmer need some soft skills in his professional life, especially as responsibilities grow during time, so this book comes perfectly in the place. Interaction with colleges, clients, how to speak with confidence or ability to negotiate is something you will find in this book. In addition, it encompasses some of the productivity tips how to build right habits to improve productivity.
In the next blog posts I will write more about some great technology specific books, so stay tuned. Thanks for reading. If you have any suggestion on this list or a feedback, feel free to contact me.