One of my 2022 goals was sticking to a consistent nonfiction reading habit of 1 hour a day, 7 days a week. While I only mostly succeeded, I ended the year with a 33-book-long book list. Here are my favorites books of last year, along with a short review and a key insight.
Every Layout by Heydon Pickering and Andy Bell
Big Idea: Layout should be about the relationship between elements and how they change, not the elements themselves.
A great little book that changed the way I think about web layout and layout separation of concerns when it comes. It also contains some great information about the inner workings of the CSS layout spec that are often missed by developers who find CSS mystifying. The bulk of the book contains a series of fundamental layout relationships along with how to implement them in multiple web technologies. Learning these fundamental layouts is a great way to break down complex designs into modular layout components.
Fun fact, I used the layout patterns in the book in my day job in the form of CSS layout utilities.
The Mom Test by Rob Fitzpatrick
Big Idea: Don't ask users about future potential solutions. Ask about their past experiences and specific pains.
How often have you gotten enthusiastic responses about the latest feature you are in love with, only to release it and find it hardly gets used? The Mom Test help you conduct better customer interviews and separate the problems users don't care enough to fix from the features that solve real pain points they are willing to commit to today.
Philosophy of Software Design by John Ousterhout
Big Idea: Good software design is about dealing with the fundamental nature of complexity and our need for information hiding.
This is one of my favorite books on software development – it attempts to build a philosophical framework for what it means to write good software. From the definition of complexity to tactical red flags like 'when the same knowledge is used in multiple places'. While I don't agree with all of the book's recommendations, I wish I had this book earlier in my career to provide a framework for evaluating software design principles.
Designing Data-Intensive Applications by Martin Klepperman
Big Idea: Build fault-tolerant systems by finding general-purpose abstractions with good guarantees then build everything on those guarantees.
It's hard to pin down a single big idea for this book since it is chock full of them. While I mostly work on the front end, this book is a must-read for anyone interested in building and understanding scalable applications. This is one of those books that can never be replaced by blog posts or StackOverflow answers, it builds a strong mental shelf of database topics and how they relate to each other, something that you can refer back to for years to come.
Badass: Making Users Awesome by Kathy Sierra
Big Idea: Users don't evangelize to their friends because they like the product but because they like their friends.
This book is packed full of insights on what it means to build a product so good that your users will market it for you. I wish more software are built with these principles in mind – instead of the addiction-based model that is so common these days. This book made me much more mindful of the increase in cognitive resources any new features would cause.
Reactive Design Pattern by Roland Kuhn with Brian Hanafee and Jamie Allen
Big Idea: Nondeterminism is a necessary evil due to hardware limitations.
Another really good book on creating scalable and fault-tolerant applications, this time through the use of functional reactive programming. While a lot of the message-passing / functional programming paradigms are familiar to AngularJS developers, I found the fault tolerance and recovery patterns very insightful – reminds me of Release It! by Michael T. Nygard.
The Timeless Way of Building by Christopher Alexander
Big Idea: The central task of 'architecture' is the creation of a single, shared, evolving, pattern language that everyone contributes to, and everyone can use.
As someone with 'architect' in my job title, I occasionally find myself reading about architecture to try and live up to my role. Christopher Alexander coined the term design patterns in the Timeless Way of Building, and I found the rest of the book equally applicable to the art of software. A long-lasting piece of software -- like a medieval village – is a living thing, and its never-ending stream of maintenance and repairs is what gives it its final shape.
A particular story from the book has not left my mind since the initial reading :
Suppose that I am trying to make a table for the blackbirds in my garden. In winter, when the snow is on the ground, and the blackbirds are short of food, I will put food out for them on the table. So I build the table; and dream about the clusters of blackbirds which will come flocking to the table in the snow. But it is not so easy to build a table that will really work. The birds follow their own laws; and if I don’t understand them, they just won’t come. If I put the table too low, the birds won’t fly down to it. If it is too high in the air, or too exposed, the wind won’t let them settle on it. If it is near a laundry line, blowing in the wind, they will be frightened by the moving line. Most of the places where I put the table actually don’t work. I slowly learn that blackbirds have a million subtle forces guiding the in their behavior. If I don’t understand these forces, there is simply nothing I can do to make the table come to life. So long as the placing of the table is inexact, my image of the blackbirds flocked around the table eating is just wishful thinking.
I hope we can all chase fewer software fads and learn more about blackbirds in 2023.