My favorite software books are Rebuilding Rails, and Crafting Interpreters. Last week, one of my coworkers recommended an article called Learn Suspense by Building a Suspense-Enabled Library. I loved it.
Here's what I like about these resources. They:
- assume the reader uses the abstraction they're describing,
- do not assume the reader understands the design choices behind those abstractions,
- blend code and exposition.
It's the most effective way I've found to level up my technical abilities. Both the author and reader know what they expect to build by the end, and they can derive the eventual system from first principles. Readers walk away with very high fidelity mental models of how their day-to-day tools work under the hood.
I think the next step for me is to rebuild more tools from scratch without a resource to guide me. A few months ago, I took a stab at it: building a small library to drive Swift UI with TypeScript. This was an initial attempt to build my own React Native. I found it very interesting and rewarding. Every engineer should do this with their most-used tools.