Getting better as an engineer is as much about reading code as it is about writing it
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. I have read many good books covering tech-related things, such as software engineering, for example, and am still reading to learn new patterns and best practices.
Finding great books for software engineering is not an easy task because the ecosystem changes so rapidly, making many things obsolete after a short time. This is especially true regarding books that rely on a specific version of a programming language.
However, there are evergreens available, books that deal with meta-topics, design patterns, or general mindsets.
The following collection consists of some of the most popular, most-read books available. Books that are still relevant today and that are often recommended by senior developers to junior developers. I know that time is precious, especially for software engineers, but if you manage to read some of them it will definitely help you and your career. Note that this list is in no particular order because all of these books are equally recommendable.
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, to break problems into small chunks, and to get better in learning concepts.
Furthermore, Gayle provides you with 189 real interview questions and solutions so you can prepare well for the next 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 topics such as design, coding, debugging, and testing.
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 for others.
“Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin (Uncle Bob) is one of the most popular programming books around. It was written to teach software engineers the principles of writing clean programming code. It comes with a lot of examples showing you how to refactor code to be more readable and maintainable, but be aware of the fact that it is very Java-centric. While some of the 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 tools and IDEs that are available. But it is a good read after all.
The book Refactoring: Improving the Design of Existing Code, 2nd Edition by Martin Fowler explains what refactoring really is, just like the original 20 years ago. Questions that you may ask yourself and that are answered 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 is also filled with great visualizations that will help you to learn new concepts more easily.
If you want to learn about things like factories, singletons, dependency injections, etc., this book is a great choice. The examples are written 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 great book by Martin Fowler that deals with the practice of enterprise application development. After a short tutorial on how to develop enterprise applications, Martin then gives you over 40 patterns as solutions to common problems while architecting enterprise applications. It also comes with a lot of UML visualizations and code examples written in Java or C#.
After reading the book, you should be able to divide an enterprise application into layers, to know the major approaches of organizing business logic, to use the MVC patterns to organize web applications, and to handle concurrency for data over multiple transactions.
However, the book is aging pretty badly, so modern concepts like REST, cloud, or JSON are not mentioned. It’s still a good read, but be critical while doing so!
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 how to get legacy code ready for testing and how to identify where the code needs changes.
The book provides examples written in Java, C++, C, and C# but also comes with tips on how to deal 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; to handle unrelenting pressure and avoid burnout; to manage your time; to get into the flow of coding; and to foster environments where developers and teams can thrive.
This book is pretty accepted in the industry, but I think not everything in it is pure gold. It contains many anecdotes and hypothetical conversations that most of the time come to the conclusion that the developer is ultimately responsible for what they do. 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 very comprehensive and accessible to all kinds of readers, beginners, and professionals alike. It is clearly worded and covers a lot of subject matter. But it also is kind of complex and not so easy to follow.
It covers topics such as 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 significant books I have ever read. It is filled with both technical and professional practical advice that helped me in a lot of projects and to become 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 how important it is; how to write flexible, adaptable and dynamic code; how to solve the problems of concurrent code; how to guard against security vulnerabilities; how to test ruthlessly and effectively; and much more.
If there was one book I had to pick to recommend to you, it would definitely be this one!
To sum this piece up: These are some of the most popular books for developers around. If I had to pick a book to recommend to you, it would be “The Pragmatic Programmer” by Andrew Hunt. The books from Robert C. Martin are accepted in the industry and liked by many developers, but I would be critical while reading them because I do not share a lot of opinions with Uncle Bob.