A colleague recently asked me for a list of technical books/blogs/resources that are worth reading. I realized that I don’t really have such a list of things – I’ve mostly organically learned by being interested, reading books recommended to me online or in-person, reading technical blogs I’ve learned about from Hacker News, or Reddit, or Twitter, or just following interesting people on Twitter.
So I thought I’d put together and keep this list updated on interesting technical blogs/books/resources I’ve found useful over the years. I’ll attest that everything listed below I’ve read at some point (no guarantee I remember it anymore!) and found useful.
Books
- Systems Performance: Enterprise and the Cloud by Brendan Gregg – A book by Brendan Gregg, a famous performance engineer who’s worked at Sun, Joyent, and Netflix. The author has done a lot of work on eBPF/Linux perf and tooling around it, as well as evangelizing it, and made the “Flame Graph” famous/created it. The book is good for clarifying your thinking around how performance of a computer system works. I think early on in your career it’s very easy to just think “This program is slow cause it’s poorly written” or “This system is slow cause it’s written in Java”, but not really have an understanding of what makes a program or system “slow”. This book gives you a useful framework to how to think about performance and how to debug it.
- The Design and Implementation of the FreeBSD Operating System – A great book to help build a mental model of how Operating Systems actually work, and clarify what is a feature of the CPU exposed by the OS, and what is purely an OS abstraction. If all you’ve ever done is your university course on Operating Systems, it doesn’t really help much understand how unix pipes work, or how they’re implemented. Definitely a book I didn’t read all of it, but parts of it are enough to build up your confidence that you can understand the OS layer as necessary.
- Computer Architecture: A Quantitative Approach – A beast of a book about how modern CPUs work. Definitely didn’t read this whole thing, but useful to read certain sections as it interests you, and help to build up your mental model of how modern out-of-order, speculative execution, NUMA CPUs work today.
- Oral history of Robert P. Colwell – This is perhaps the most fascinating oral history/interview I’ve ever read. I remember devouring this late one night on my poor phone and staying up late into the night to finish it I was so gripped by his tales. The absolute highlight for me occurs on page 154, where he talks about how the P6 was the first CPU architecture to support speculative execution, and unless you could be 100% certain there was literally no bugs at all in the speculative execution engine, you’d be worried about potentially a bug leading to dead-lock, or infinite loop, and essentially causing the CPU to become a brick. So the question is what do you do? Their answer was that since they could work out a priori how many cycles the longest sequence through the speculative execution engine could be, they implemented “dead man timer” to just rollback everything if the dead man timer ever triggered(!!). This whole read made me greatly appreciate the insane reliability of CPUs.
- The Soul of a New Machine – A great non-fiction telling of a small team of computer engineers racing to build a new CPU and computer. One of the few books that accurately captures the feeling of working at a startup, and the feeling of working on technical projects. Expertly written with amazing characters.
Blogs
- The ryg blog – A blog by Fabien Giesen about CPU Architecture, GPU optimization, Compression, and all things graphics-y and math-y. Some standouts include Why do CPUs have multiple cache levels? and Metaprogramming for madmen.
- Marc’s Blog – A blog by Marc Brooker, a Distinguished Engineer at AWS, mostly about distributed systems and databases, with some more AI sprinkled in these days.
- Dan Luu’s Blog –
- Eli Bendersky’s The Green Place –
Twitter/Social Media/Aggregators
- Hacker News – As much as people like hating on it, and how you’ll see the same ~100 articles at least 2-3 times a year, it’s still a great resource to find new things and learn from useful comments. Just don’t make it your entire personality.
- @jfbastien – JF Bastien is a systems/compiler engineer who’s worked on both Chrome and WebAssembly and has done lots of work on C++ and LLVM. A great follow for the knowledge, but also makes lots of great/terrible puns and dad jokes.
- @MarcJBrooker – The twitter of Marc Brooker listed in the Blog section.
Talks
- Growing a Language by Guy Steele – A very fun talk with an amusing gimmick explaining the original design philosophy of Java. Guy Steele is also a legend in the Scheme/Lisp world for his work there as well.