On HN, we often hear about books like SICP or TAOCP, but what other influential books should everyone read, even in 2024?
My experience has been that 'programming' is largely about learning best practices, single responsibility, modularity, writing efficient, clean code. There are no real special books necessary for this, just read the industry standard recommendations.
But if you want to set yourself apart from others you need to study software design and architecture, and follow the big industry names on social channels. Designing software is more of an art and figuring out how to do it isn't immediately obvious or easily attainable from books. It takes years of experience and wide reading, and a lot of what I've learned about it has come from social media, not books.
* Thinking Forth by Leo Brodie
* Lisp In Small Pieces by Christian Queinnec
* Compilers (the Dragon Book) by Aho, Sethi, and Ullman
* Smalltalk-80 (the Blue Book) by Goldberg and Robson
But on the non-technical side, the book that probably had the biggest impact on my career was "What Color Is Your Parachute" by Richard Bolles. It is what convinced me I could transfer my skills from video game dev into another field and how to come up with a plan to do so.
- Structure and Interpretation of Computer Programs: this helped me understand the different types of recursion; how a problem can be modeled for the code to solve and how those designs can evolve and how the paradigm I'm using (functional or OOP) can help me
- Refactoring: this book helped me understand the different patterns we can use to alter code. Giving them a name and symptoms is a great way to apply and communicate with other coders. I recommend this book to everyone.
- The little Lisper: this really helped me get recursion. Like really. Although I could use a refresher.
- Clean code: look... this book is bad. Like, really bad. But, at the time I read it, and in the languages I used (Python, C, R) we didn't have many rules on how to write and organize our programs. And I wanted to improve on that skill. And this book gave me pointers and made me think about those ideas. I don't recommend it around, because for many people Clean Code can become a dogma really easily. But if you can question and critique and reach out to other resources and is an advanced beginner to coding, I can see this book bringing value.
- An Elegant Puzzle and Staff Engineer by Will Larson: those helped me get clarity on the role of the technical team in an organization. A team that produces code as the main driver of impact in a product/service. I lump them both because I read them back to back and don't remember, exactly, which is which. But une is more focus on a tech leader and the other a tech specialist.
- Unix and Linux System Administration Handbook: whenever I need to interact with some unix technology, this book delivers in terms of giving me a nice historical view and presenting the common tooling around the tool. This helps me interact with stuff programmatically much better. Be it GRUB, X, SAMBA, this book gave me the necessary introduction I needed, much more organized and thought out and with useful references than the average blog post you will find in the wild.
And I'd like to recommend this Ask HN on problem solving books
Not a book but I learned what not to do and what to avoid in my earliest days of programming from the super opinionated tool JSLint.
This was my go to reference to learn CSS https://www.amazon.com/CSS-Pocket-Reference-Visual-Presentat...
As for language design I am mostly self taught through a lot of trial and error. For me it’s all about functions and variable scope. After that everything else is just a statement, expression or a data structure. With that I can write just about anything, make it scale, and keep it super simple to read.
Refactoring by Martin Fowler
System/370 Principles of Operation by IBM
There is a reason why electrical/computer engineering graduates tend to outperform CS graduates in both general skill and the job market. If you understand how computers do the stuff they do, and can think in that manner, thinking in higher level abstractions becomes very easy.