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 at 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.
I recently started a new site The Smart Coder where I create free content for the community. This article is from there, you should check it out :)
If you like what I write and want to support me and my work, please follow me on Twitter to learn more about programming, making, writing & careers🥰
Top comments (31)
Some more books I found to be fun reading:
The Pheonix Project
The Unicorn Project
by Gene Kim
It's lovely narratives of the real life IT world. Would definitely recommend.
is there any ebook to it?
you can download from this site
Exactly what I would add to. But, nevertheless, this list is excellent @simonholdorf .
Thank you, my friend!
Thanks for the suggestions, Juan :)
Some of my additions: I liked the Gang of Four book for design pattern, though it has been years since I cracked it. It really did a good job of breaking down the reasons for the patters. The Mythical Man Month reinforces the fact that software development hasn't changed, really, in 60 years.
I love Gerald Weinberg's "Secrets of Consulting". Again, not a really a tech book, but a book about how to get problems solved in organizations. Finally, my recently published book, Letters To a New Developer, is a favorite of mine, but I might be a bit biased.
Hey Dan, thank you for the detailed comment, great additions!
Clean code was good I bought Refactor last week, and I'm planning to buy Cracking the code interview when I finish it. Thank you so much for sharing your recommendation with us. You got a new Twitter follower
Thanks, Eduardo, glad it helps you :)
"Design Patterns: Elements of Reusable Object-Oriented Software" by the gang of four is a very popular book in object-oriented programming. They speak about solutions for some common problems, and how to write reusable components when building software.
Thanks for your contribution, my friend!
I'd recommend Andrew's post. He did data analysis of various recommended reading lists to find the 20 most recommended tech books:
20 Most-Recommended Books for Software Developers
Andrew (he/him) ・ Oct 19 '19 ・ 19 min read
I'm curious if you have any other book suggestions for algorithms? I've considered getting Intro to Algorithms, but I'm worried it might be a little dense or heavy on the theory, like you said. I've read Grokking Algorithms, which I thought was pretty good.
To be fair, algorithms are, by their very nature, all about the theory.
Grokking Algorithms was a super light intro, so light that it almost hinted at maybe touching the surface. I understand wanting to ease into algorithms. However, when it comes down to it, to really leverage knowledge about data structures and algorithms day to day, in code you actually write, you'll need to embrace the heavy theory.
That said, A Common-Sense Guide to Data Structures and Algorithms by Jay Wengrow and Algorithms Illuminated by Tim Roughgarden are both very approachable. And The Algorithm Design Manual by Steven Skiena covers much of Cormen in a fraction of the pages (but is even denser as a result.)
If I may add an entry to your list, I strongly recommend "The Design of Everyday Things" from D. Norman.
Of course, thank you very much!
Thank you, Henry!
"Introduction to Algorithms" I used that book in university! The memories
I'm going to look for it now, just for kicks.
Love it thank you
very accurate list !!
Wow all books you mentioned are what I read. I'm glad to meet someone who read the same books.
Lovely list! Thanks Simon! These two are also very good:
I wish someday they update the Head First book series' photos haha!
Yeah, me too :D
Some comments may only be visible to logged-in visitors. Sign in to view all comments.