This is my goto reference for data structures/algorithms. Includes “The Hitchhiker’s Guide to Algorithms”, a comprehensive collection of practical examples.
His free video lectures on the topic are also great!
Pragmatic Programmer
Not sure if it offers that many values for new programmers today but it was the first book that I read on programming and I think it taught me valuable lessons.
Clean Code
I’m a bit conflicted about the book because I think Robert C. Martin is a bit dogmatic with his style and it’s not the end all be all the he claims it to be, but I think my programming style is still heavily influenced by his thinking.
Practical Object Oriented Design in Ruby by Sandi Metz
POODR was such a joy to read, one of the books that sparked my joy for programming at the time. I’d recommend it to anyone somewhat familiar with Ruby that wants to learn about the Small Talk school of OO.
Eloquent Ruby
I can’t remember a lot about this book, just that I had a great time reading it.
Books not mentioned so far:
The Little Schemer
The “The Little X” book series has a really nice didactic style, showing you one column with a questions and providing the answer in the other column (you’re supposed to hide the column until you think you found the answer, of course). I think it’s good book to get more comfortable with recursion. I probably should reread as I was still quite new to Lisp when I first read it.
Effective Java by Joshua Bloch
One of the evergreen / more or less timeless Java books, but still only interesting if you’re programming in Java… Joshua Bloch lead the designed of the Java Collections package (and quite some more) and shares 90 items / rules that teach you how to effectively use the Java language and it’s standard library.
Honorable mention for “What Every Programmer Should Know about Object-Oriented Design” by Meilir Page-Jones, as it introduces the concept of Connascence. The book was written before UML won the struggle for modeling language dominance so it’s kind of hard to get into nowadays. You’re probably better off by reading about connascence on https://connascence.io/.
on my side I wish I read this one earlier in my career. I found it to be a very very good book about TDD and practices like that. Agile Technical Practices Distilled
and the one about refactoring-guru I found it very nicely explains the different design patterns. Dive Into DESIGN PATTERNS
Domain Driven Design is actually by Eric Evans, not Martin Fowler. And I agree that it is not the easiest of reads, though its content and the concepts it exposes is immensely useful.
Anything by Robert C. Martin, Martin Fowler, Kent Beck, Mark Seeman, Vaughn Vernon and Micheal Feathers. Many of which were already mentioned by others.
Plus one for Eloquent JavaScript. When ChatGPT or Stack Overflow fails me, I return to the book, study the fundamentals, and try to arrive to solutions on me own. I keep Eloquent JavaScript close at all times.
What do we do as programmers? We reduce complexity. We simplify. My favorite programming book did exactly this for me. The Programmer’s Brain by Felienne Hermans takes an approach to teaching programming that helps you learn how to think more like a programmer with indelible techniques meant to be applied directly to the problem solving part of your brain. Oftentimes requiring you to step away from the keyboard, grab a pen, and spend some time getting a deeper understanding of some complex code.
This book also taught me about Sajaniemi’s 11 Variable Roles which has completely changed the way I look at and think about code now.
If you read only one book on programming in your entire career, you could definitely do worse than this book.
How come no one has mentioned yet “SICP: Structure and Interpretation of Computer Programs” It is one of (if not) the best introductory book for programming. For those people that want to understand how things work from first principles, I would highly recommend this book. It makes it so much easier to learn any programming languages. I noticed a lot of people mentioning Crafting Interpreters, I am glad that book is on my reading list, and now because of the numerous mentions here I am looking forward to reading Regular Expressions as well.
I really enjoyed “The Little Schemer”, and think SICP is great. “Coders at Work” was also a fun read, particularly with the benefit of hindsight. I have also found a soft spot for introductory/gentler programming books: “A Data-Centric Introduction to Computing” by Kathi Fisler et al (amongst which is Shriram Krishnamurthi, one of the authors of “How to Design Programs”) is the kind of stuff I wish I’d read in college, along with Eric Normand’s “Grokking Simplicity”
Since “SICP”, “Grokking Simplicity” and “Data-Oriented Programming” have already been mentioned, I’d recommend “Let Over Lambda”.
It’s quite opinionated, but nonetheless a very interesting read.
As an Uncle Bob’s fan, “Clean Code” and “Clean Architecture” have been my #1 books in my career. But in my research to go deeper into OOP I found this very useful classic gem:
Eloquent Ruby was memorable to me! The very book seems to be an example of idiomatic code in my view. Also, gave me a glimpse on the power of the Ruby interpreter.