Of the two I carried around with me for years, the first was Steve McConnell’s “Code Complete”. The second (which didn’t help as much as the former) was Eric S. Raymond’s “The New Hacker’s Dictionary”.
One paper (not a book as such) that significantly influenced me is Kenneth E. Iverson’s “Notation as a Tool of Thought”
There are other programming books that I’m currently reading, but they’re outside the scope of the original question.
Hey @jmorganws - that’s great, thanks so much for the recommendation. Will certainly add that to the pile.
What a great thread, I’ll be here a lot for sure :D.
The first one that really opened my eyes was Clean Code for sure. More recently, I found 99 bottles of OOP perfect to deepen my understanding in SOLID, and make me go all-in in TDD too.
@pernambucano Nice! @kytrinyx will be pleased to hear that :)
I am not an old guy, but started the in the industry fairly early and educated myself as best as I could with professional books.
Back in the days I’ve read Code Complete 2 and it was a good starter.
Another excellent starter was Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development Hardcover by Craig Larman. (there is newer edition, but back than I’ve read that one).
I found GRASP Patterns (specially Low Coupling and High Cohesion) far superior to any SOLID ideas.
Fast forward 15 years later when I read Clean Code and found the book very basic and idiotic. I think Uncle Bob is overrated.
Going back to the early 2000s, I’ve read the GoF and “Pattern-Oriented Software Architecture” books. Back then I was smitten with the ideas presented there. I even got to meet some of the writers of those books.
Somewhat later in the early 2010s I found those books (the POSA’s) more “Not Applicable” than useless or wrong or complicated. Regarding design I reverted back to my early university instincts, back to the 90s. I found out that is actually called Domain-Driven Design (DDD).
I also became disillusioned by certain ways of working. I did not gave up and discovered Behaviour-Driven Design (BDD) own my own. Later I found books about it.
One can screw up in many ways:
- Hack and design spaghetti mountains
- Pompously build well crafted and architected mountains that nobody needs. Or just need a small functionality and the rest becomes cancerous growth.
Getting the requirements right became the most important thing for me. Latest books that I found excellent on this topic:
User Story Mapping: Discover the Whole Story, Build the Right Product by Jeff Patton (Author), Peter Economy (Author, Editor) - Favourite book.
- Writing Great Specifications: Using Specification By Example and Gherkin by Kamil Nicieja
- Behavior-Driven Development with Cucumber: Better Collaboration for Better Software by Richard Lawrence (Author), Paul Rayner (Author)
The thread is about “best books on programming”. I’ve ended up ranting.
Here in the end I will share a good technical book about programming:
Previously I found TDD as trivial (BDD and DDD is my main thing), but this book showed how to influence design with the right TDD (Detroit style of course ). Note: One can apply the concepts presented in the above book in any language not just C#.
Thanks so much for posting such a comprehensive and brilliant list of information on resources to delve into.
I am mid-way through the ‘Headfirst Go’ and really enjoying it. It’s been really good to build up from the ground up.
I recently enjoyed the recently released 2nd edition of Code: The Hidden Language. It provides a nuanced but accessible introduction to how computers work from the bottom up from and how code plays into it, highlighting Boolean logic, logic gates, semiconductors, and finally software. It made a few things click for me that were only semi-articulated before.
Of all the programming books I’ve read, two came to mind immediately because they were an absolute joy to go through:
Eloquent Ruby by Russ Olsen - which I think would be an interesting read for anyone interested in OOP, even if they have no intention of ever using Ruby.
Deep Learning with Python by François Chollet - which is by (very) far the most approachable book about DL I’ve ever come across.
I just started reading O’Reilly’s Programming Rust: fast, safe systems development and so far it is also extremely pleasant to read.
Crafting Interpreters is an AWESOME book. One of those books that can get you excited about programming again. I think an excellent final exercise for any language track would be to implement tree walk interpreter, maybe for the Exercism programming language haha. Something simpler than Lox though.
Also agree with Martin Fowler’s Refactoring. Got my copy from one of those take a book leave a book boxes not knowing how popular it was. Great read.
I’m also a rustacean so I’d be remiss if I didn’t mention Jon Gjengset’s Rust for Rustaceans. It’s an especially useful book for learning how to do effective API/Library design in Rust.
Totally agree with this!
I love this. @taiyab has been wanting a “final boss” style exercise for ages - maybe this is the one! If you fancy starting a new topic on this (so we don’t derail this one entirely!) then I’d be up for chatting about it more. I bet @ErikSchierboom and @kytrinyx would love this too
Oh, and welcome to the forum
Some of the books I wanted to mention have already been suggested by other fellow devs, so let me offer a suggestion from my country.
As an indian who started programming in my early school days, I found Let Us C to be a helpful entry point to the world of C programming.
What surprises me is that the book has been revised many times (running 18th edition now!) and with many readers in the Asian geographies. I think this book is translated to many regional languages, thereby making it easy to jump start programming without the knowledge of English language.
Kudos and mad respect to YPK, the author.
Two really good JS books that I gladly recommend to anyone to read are:
I’m currently reading the The Rust Programming Language. I think this is an insanely well written educational book. Very easy to follow, and makes you really excited about Rust. It also mentions some basic topics on Systems Programming langs that I didn’t know about, but can do the research after this.
I’ve been reading Modern Software Engineering by David Farley with some friends and would highly recommend it. I’ve been on the Uncle Bob train most of my career, but recently have been straying away from his work. I think he has essential concepts to share, but there is a deeper conversation past his books I think David Farley captures well. It’s been really helping me put my career and thoughts on programming into a new perspective.
The last book I read which is definitely in my top list : A philosophy of software design by John Ousterhout. It deals with software complexity and is not language specific. It is concise and easy to read. It’s the one I always carry.
I also love Clean Code which was very inspiring and helped me write better, more readable code I believe.
Last one I’d say is Domain Driven Design by Martin Fowler. I must admit that as a non native English I found it not so easy to read but I discovered a great programming paradigm which I felt very in line with.
The Structure and Interpretation of Computer Programs, anyone?
That’s the book that’s responsible for introducing me to Lisp, and leading me to learn Clojure. But a couple of things happened since then that make that seem like an accident of history unlikely to be repeated:
- The famous MIT course responsible for the book switched from using Scheme to Python
I’m kind of surprised no one has mentioned The Art of Computer Programming, but perhaps I shouldn’t be, because it’s not really a book, it’s an encyclopedia (written by one person over like 40 years) that one does not simply read…
…unless they’re in a situation like I was last Summer, away from civilization recovering from Covid, without access to the internet.
No, I didn’t read the entire thing. But I developed a very keen appreciation for pseudorandom number generators and sorting algorithms.
Oh, and I think it’s the reason for LaTeX… I heard the legend that when Donald Knuth saw the first printing he was appalled at how terrible the mathematical expressions looked, and decided to, as one does, stop everything and design an entire typesetting system
I found Introduction to Computation and Programming Using Python: With Application to Understanding Data to be a good book for a beginner to get comfortable with Python and also programming concepts.
The Go Pogramming Language has been a good primer/reference to get started with Go.