10 Books Every Programmer Should Read
Due to the dynamic nature of software development, we as programmers can be sometimes overwhelmed by the sheer amount of information we're being bombarded with on a daily basis.
Even though we can take programming to a multitude of avenues there still are some "general truths" in programming that every developer should learn and practice.
The following list of books covers a wide range of areas in programming (and not just) that, practiced, can be implemented in a multitude of programming languages.
0. Mythical Man-Month: Essays on Software Engineering
Author: Frederick P. Brooks Jr.
It is a timeless classic on the software development management process. It is a must-read, not just for programmers, but all the people working in this industry, including clients.
This book shattered the myth of putting more people on a project will be finished more quickly. It is absolutely false, you simply can't finish a project more quickly by simply using more developers, in fact, the opposite will be true.
1. The Pragmatic Programmer: Your Journey to Mastery
Authors: Andrew Hunt, David Thomas
This book should be on the shelf of every beginner software developer, even though most of the ideas presented in the book are sort of "common sense" for most programmers, it still helps to reiterate these ideas.
It's one of the best non-technical software development books, it presents ideas such as taking ownership of our code, fighting code rot, applying the "broken window" theory to software, and so on.
2. The Art of Computer Programming
Author: Donald Knuth
Another classic, and possibly the most influential book in computer science. Donald Knuth truly raises software development to an art form.
The Art of Computer Programming is a collection of books covering everything a developer should know about computer programming, starting from how math applies to computers, algorithms, floating-point calculations, data structures, and much much more.
Author: Jeff Erickson
Just like blood running through our veins, algorithms are the lifeblood of computer programs.
The author presents this complex topic in a clear and simple manner, it covers techniques most other books on the same topic ignore. If you want to master this field, going back to basics is sometimes necessary.
4. Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages
Author: Bruce Tate
The Pragmatic Programmer book above in the list recommends learning a new programming language every year, to be truly dedicated to the craft. The author of this book demonstrates as the title suggests, seven programming languages in seven weeks.
It achieves to broaden the reader's perspective of programming by striking correlations between the different programming languages, showing the reader the pros and cons of each.
The languages presented in this book are Clojure, Haskell, Io, Prolog, Scala, Erlang, and Ruby.
5. Refactoring: Improving the Design of Existing Code, 2nd Edition
Author: Martin Fowler
Business expectations and project features sometimes change, dependencies are always being updated, and inevitably code rot happens.
Refactoring code should be part of every development process, it's inevitable after a while and that's just the reality of programming. The author shows us clear strategies we can take on our codebase, presents the principles of refactoring, how to recognize code smells, and much more.
6. Code Complete: A Practical Handbook of Software Construction, 2nd Edition
Author: Steve McConnell
Talking about code smells, this book takes it to another level. You can find every type of bad practice and "what not to do" in this book, and more importantly "how to do it right".
This book focuses on the process of software construction and everything relating to it like software architecture and design decisions, debugging, testing, code smells, and more.
7. Clean Code: A Handbook of Agile Software Craftsmanship
Author: Robert C. Martin
This book is widely popular in the software developer community, and it's for a good reason. The author, also known as Uncle Bob, shows us that the practice of writing code is a very complicated process.
Writing good code is truly an art, this book presents clear and concise strategies a programmer should take to "get to the next level", methods such as, how good OOP principles look like in action, classes are not just containers for procedural code, there's a reason behind every design pattern, and so on.
8. Domain-Driven Design: Tackling Complexity in the Heart of Software
Author: Eric Evans
If you want to take the practice of designing good software to a whole other level, this book is for you.
The author focuses on the topic of domain modeling, how to actually implement those models, normalizing the domain across all parts of the project, having a clear cut line between various entities, etc.
9. Why We Sleep: Unlocking the Power of Sleep and Dreams
Author: Matthew Walker, PhD
If you want to do a favor for your personal health then read this book. It's one of the more eye-opening books you can read and it's worth every second of your time.
This book manages to change the general idea of living a healthy life. In the past, the priority was diet, exercise, and sleep. Today this order changed to diet, sleep, exercise, thanks to this book.
We, as humans, not just programmers, should put our health as the number one priority.
Bonus: The Phoenix Project
Author: Gene Kim
An entertaining read on the concepts, the struggles, and the problems of DevOps. The characters in the book are fictionalized, but their doings are oh so real for system administrators living it on a daily basis.
Allow me to recommend the books from Watts S. Humphrey, especially: "Winning with Software: An Executive Strategy", "Managing the Software Process" and "Reflections on Management". It will change very deeply the way you create software for good.
Another book that I would strongly recommend is Computer Science Distilled by Wladston Ferreira Filho. It's a short book, less than 200 pages, so it can be read in a single weekend. But it manages to give both a good introduction to and overview of, computer science topics.
Honestly, it's worth the read just to see how much the author was able to pack into such a small book!