Technical Reading List
Last updated: 1/21/2024
Table of Contents
Books
- Crafting Interpreters, Robert Nystrom
- The best introductory work on programming language design and implementation, covering a basic treewalk interpreter and a more complicated, but realistic, bytecode interpreter. Notably, it covers language features like closures and object-oriented classes in depth, both of which are usually brushed aside. Also, it’s extremely readable and has cute illustrations!
- Butterick’s Practical Typography, Matthew Butterick
- The best introductory text on typography and the basics of graphic design I’ve found. If you’re time-strapped, you can check out its introductory chapters, “Typography in ten minutes” and “Summary of key rules”, for the highlights. I try to follow its principles for any site or app I build.
- Designing Data-Intensive Applications, Martin Kleppmann
Papers
- “Programming as Theory Building”, Peter Naur
- A ten-page paper that changed how I think about programming. Naur argues that programming is exactly “theory building”, in the sense of “figuring out how to solve a problem”, with the implication that a “program” is not just the literal text but also the representation in the programmer’s mind. As a result, it is difficult, if not impossible, to “revive” a program with a new team, without first doing the work of theory building themselves!
Sites
- Simon Willison’s Weblog, Simon Willison
- The best voice to listen to on LLMs right now. Simon coined the term “prompt injection” and has been an early explorer of what LLMs can do; as of late 2023, “Making Large Language Models work for you” is my favorite introduction. His TILs are also often interesting and inspired my own TILs.
- Computer Things, Hillel Wayne
- Hillel’s newsletter is always interesting, often covering esoteric programming languages or obscure software engineering techniques. His “Advice for new software devs who’ve read all those other advice essays” is useful even for those with an intermediate level of experience.
- jvns.ca and Wizard Zines, Julia Evans
- Julia has an iconic “I’m just as confused as you are” style of writing about complex technical topics like networking, operating systems, and version control. Her printable zines are a handy reference for all kinds of technical topics.
- Hacking with Swift, Paul Hudson
- The single best resource for iOS development (yes, even better than Apple’s own docs). The free “100 Days of SwiftUI” course in particular is a great place to start if you’re completely new to iOS development.
- Bits About Money, Patrick McKenzie
- Explores finance and fintech from a technologist’s perspective, albeit with a unique (read: sometimes hard-to-follow) style. His post about buy-now-pay-later services like Affirm and Afterpay was the first explanation of BNPL that I finally understood.
Talks
- “Is Software Engineering Real Engineering”, Hillel Wayne
- Hint: the answer is yes. Hillel actually went and talked to “traditional” engineers who crossed over to software, or vice versa. The insights are fascinating — apparently the biggest thing missing from “traditional” engineering is version control!
- “Inventing on Principle”, Bret Victor
- A classic talk about deciding what to work on. The first half is a little slow, but serves as an important example for the principles Bret explores in the second half.
- “Email vs Capitalism, or, Why We Can’t Have Nice Things”, Dylan Beattie
- Email development is notoriously complex and painful. This wide-ranging talk discusses why that is historically and some of the best practices for email development today.