Given that I started my career (lo these many years ago) as a research librarian, it’s not much of a surprise that books are my favourite way to learn new things or dig deep into a specific subject. Sure, I spend a lot of time reading blogs, documentation, and academic articles—it can take years to write a book, and I like to keep up with things before they get to the multi-year mark—but for an in-depth exploration of pretty much anything, books are my go-to.
I read, on average, one book a week. It takes me much, much longer than that to get through a book on a technical topic. Since reading a dense technical book is a big investment of time and mental effort, I thought it might be nice to share an abbreviated reading list of programming-related reading I’ve done. If you’re interested in some of the same things that I am, maybe one of the books on this list will inspire you to cozy up with a nice book, a notebook, and a cup of tea.
Two Scoops of Django
For my first professional developer job, I was working with Python + Django. I was learning on the job, but feeling overwhelmed by the sheer volume of things to learn. Two Scoops is the canonical Django guide to best practices, and really helped me get a handle on how Django applications are structured (and why!). I took this on a long train journey across Europe a few weeks after starting my job, and kept it on my desk for reference throughout the rest of my time at the company.
The Well-Grounded Rubyist
Thanks to General Assembly’s Web Development Immersive program, I had a bit of familiarity with Ruby to draw on when I transitioned from full-time Python to full-time Ruby. My first task at Happy Bear was to learn Ruby proficiently by working through some of the Matasano Crypto challenges. The Ruby docs and a lot of searching + Stack Overflow gave me a decent start with understanding bitwise operations, but The Well-Grounded Rubyist taught me how to structure my Ruby code into modules and gave me some much-needed context and detailed explanations of the various methods available in Ruby’s standard library. This book is incredibly well-written and thorough, and I highly recommend it to anyone who wants to learn Ruby well.
The Rails 4 Way/The Rails 5 Way
I picked up The Rails 4 Way after I’d been working on Rails applications with Happy Bear for a few months. By that time, I’d had the opportunity to work with several different codebases for our clients and had lots of questions about the different approaches and file structures I’d seen. The Rails 4 Way demystified Rails for me. This book is really dense (essentially a glorified/annotated version of the Rails documentation) but as a reference tool it’s indispensable. I’m not sure I’d recommend reading through it cover-to-cover for everybody, but for me at that particular stage in my career, it was revelatory. I put the things I learned into practice immediately, extracting classes into decorators and taking a close look at the initializers and routing set up in all the codebases I worked with. I “learned” Rails with General Assembly, but I really understood Rails after reading this book.
Working with Unix Processes
It’s a common problem for anyone new to working with technology: The more you learn, the more you understand (and feel overwhelmed by!) how much you don’t know. Imposter syndrome has dogged me through almost every job I’ve had, but I felt it particularly acutely when trying to debug problems around threading, server configuration, and memory usage for one of the applications I was responsible for maintaining. Since Ruby is a garbage-collected language, it’s easy to overlook the importance of understanding how forking processes can impact memory allocation. This book covers a lot of ground in a small number of pages. I’d recommend it for anyone interested in working with Ruby on Unix.
High-Performance Browser Networking
High-Performance Browser Networking is not for the faint of heart. It literally took me an entire year to read this book—but, considering it’s 700+ very dense pages of detailed information about networks and protocols, I’m not too ashamed to admit that. Starting with the speed of light and ending with WebRTC and covering everything in between (and I do mean everything), after reading it I’ve internalised an understanding of latency and bandwidth and have a very thorough grasp of how the transition from HTTP 1 to 2.0 is changing the way we develop applications and package assets for the web. I didn’t take detailed notes whilst reading this book—I don’t think I ever would have gotten through it, and I would essentially have been annotating every single page—but I did stuff my brain chock-full of a lot of contextual information that starts coming back to me quickly when I page through it again, or have to look up what UDP stands for for the fifteenth time.
Designing Data-Intensive Applications
I’m currently reading this, and it’s an utter delight so far. Author Martin Kleppmann has taken on the Sisyphisian job of collecting and sifting through thousands of resources, from documentation, blog posts, academic articles, and books, covering the past several decades of computing, and he’s somehow managed to collate all of these sources into an eloquent and informative read. I can tell this is going to be another one that will take me a long time to get through, but reading it is sure to be an enjoyable experience and the information it contains will serve me well for decades.
I’m not always in the mood to knuckle down with a dense technical book, but sometimes I want something a bit less fluffy than a novel. I’ve read a couple of books about developing software with easy, approachable prose—some light summer beach reading, if you will.
Dreaming in Code
An entertaining read detailing the software development process—part narrative, part case study, this book does a great job of making the process of building high-quality software seem impossible.
The Lean Startup
Maybe it’s because I spent so much of my career in established, long-running industries like libraries, or universities, but I really chafe against the jargon of product management approaches. Any time someone around me starts throwing out the words “agile”, “lean”, “kanban” I have to physically suppress my eyes from rolling out of my head. I’m sorry, I can’t help it. It’s so clear that iterating quickly and putting users first is the best approach for developing useful products that I find it hard to believe there was ever another way of doing this, or that we needed a manifesto written by a group of cis white men in order to land on it. The Lean Startup describes a way of defining and building products that is so eminently sensible it’s become a must-read for every start-up founder, but it’s a great read even if you’re not planning to go start your own company.