A bit different from the audiobook request 2 years ago, as I’m not looking for audiobooks (so it does not have to be nice to listen to, I can see code examples) but regular books you read. Let me know which books helped you out the most, or that you just found fun to read!
EDIT: Thank you to everyone for helping me inflate my reading list! I was wondering what question I should ask to get answers including books on databases, cybersecurity, basically any topic that might fall under “computer science” and not just programming. In hindsight I maybe should have posted somewhere other than Programming and said something other than “Programming book recommendations” if I wanted that, but since I am also interested in programming and software engineering all these books will definitely be eaten soon. Thank you!
Oh, and !books@programming.dev for programming books exists but is sadly not getting much attention.
The single most bestest book that I wish my very first programming teacher would’ve hit me over the head with is “Code Complete 2” by Steve McConnell. I’ve only encountered it a few years into my studies, and time and again I thought: I had to figure this out myself!
It’s basically a collection of all the things you can consider, or think about, or do or do differently when programming. Nothing in there is revolutionary, and none of it is something you couldn’t come up with yourself, but I found it immensely helpful to have the content laid out in a structured way.
Design patterns from 1994 and Code Complete are pretty solid
Design Patterns is good, another one is The New Turing Omnibus.
Kernighan & Ritchie, the C programming language. Yes it’s old, and about one specific language that you may never use. But it’s also very well written and can give good insight into how to tame computers. And it’s short.
Design Patterns by Gamma, Helm, Johnson, and Vlissides (the Gang of Four). Not so much a book to read as a reference with patterns to at least be aware of.
The Software Craftsman by Sandro Mancuso
It’s less of technical stuff, but more about the attitude one can (and should) have in our profession.
IMO this interview with the author sums it up nicely.
Structure and interpretation of computer programs (SICP) is a classic. It’s readable online or you can get a printed copy.
“Have you read your SICP today?” still rings in my head, occasionally.
This is a good book to start with small usefull projects in python: https://automatetheboringstuff.com/
I really wish this existed for other languages. Python is really Not It for me. Maybe this book will change my mind. I have heard about it a lot. Either way, thanks for the rec!
- Software Architects Handbook - Joseph Ingeno
- Game Programming Patterns - Robert Nystrom
- Tidy First - Kent Beck
First one I found the most useful.
Second one gave me a new perspective, even though I am not programming games, I could apply this new perspective to my regular code.
Third one is the nicest book on that topic. I hated “the classics” but I enjoyed this one a lot.
Bonus round:
- Etudes for Programmers - Charles Wetherell
It’s how I learned to code.
Seeing “Etude” out of a musical context feels so wild to me. That book grabbed my attention just because of that.
A philosophy of software design, by John Ousterhout.
Short book with some fresh approaches that i like way more than some of the established ones.
The Pragmatic Programmer, Your Journey to Mastery and Agile Software Development, Principles, Patterns, and Practices are both books I found very helpful.
For fun, read “The Difference Engine.” Alternate history/science fiction that askes what would have happened if Charles Babbage and Ada Lovelace had succeeded in creating a workable computer?
https://bookshop.org/p/books/the-difference-engine-william-gibson/1517442?ean=9780440423621&next=t
I researched a lot this topic, found some great books and some not so great. My top in my recommended reading order:
Algorithms + Data Structures = Programs
Niklaus Wirth
Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf
The Practice of Programming is the must.