Reviewing code is a skill
A discussion on code review with short case studies and links to research on expertise.
Musings on compilers, programming languages and software engineering.
A discussion on code review with short case studies and links to research on expertise.
A worked out example of different job queueing semantics and how they affect workloads.
A close examination on the supposed benefits of effect systems, framed as a conversation between two programming language designers.
A spin on the old folk tale Six Blind Men and the Elephant.
An in-depth guide to programming with assertions and advocating for the use of assertions at work, based on ~6 years of experience spread out across a variety of codebases.
Reflections on a one-line bug fix that took two days to figure out, and the unspoken assumptions in how we talk about bugs.
A discussion on substantive theories of program design, with the running example of concurrent file modifications.
Discussion on notions of software complexity as defined by Rich Hickey, John Ousterhout and Zach Tellman.
Discussion and counter-points to the necessity of being able to judge outcomes in unfamiliar contexts, for being a good leader.
Musings on the representation, propagation and handling of errors in existing programming languages, as well as thoughts on future systems. (15K+ words)
Thoughts on how compiler and database optimizers should evolve in the future, focusing on predictability and guarantees instead of smarts and heroics
Notes on why I left the Swift team at Apple, with some reflections for job seekers and junior people.
Thoughts, feelings, some personal history and musings on Strange Loop as an event, an experience and as an idea.
Recently, I turned on UBSan for a fledgling work project. It went a little more sideways than I was expecting.
A discussion of some of the downsides of Zig's implementation of generics, and why other programming languages should think super hard before adopting a similar system.
A report of my positive and negative experiences with Go after using it for 6 months at work.
A discussion of different developer tools which (can) build on top of a compiler, and how those affect compiler design.
An argument for why you should have a written agenda and minutes for meetings that you organize. Loosely inspired by Graydon Hoare's "Not Rocket Science rule of Software Engineering."
An introduction to Flatt's "Bindings as Sets of Scopes", with discussion on why scope sets are great, how they could be helpful for implementing name resolution for languages without macros, and what a name resolution library based on scope sets could look like.
A discussion on the benefits and drawbacks on tagged unions and ML-style pattern-matching, originally intended as a response to Nelson Elhage's Tagged unions are overrated .
An argument against snarky comments, even tongue-in-cheek ones, in programming communities, suggesting an approach to actively steer a discussion with varying opinions in a more productive direction.
Guidelines on learning and using Haskell: covers editor integration, CI, library choices, application architecture, debugging, profiling and addresses some common concerns.
An informal survey of the design space for ad-hoc polymorphism in a programming language.
In spring 2018, I took the Cornell CS 4120/4121 course on compilers. Our team chose to implement the compiler in Haskell; this is the post-mortem report. It assumes some Haskell knowledge.
A future history of programming languages.
A bedtime story about ordinal numbers.
After her adventures in the strange and esoteric Wonderland, Alice was in a bad mood. She refused to venture outside, lest she fall into a rabbit hole again. Instead, she would sit in front of the computer all day, reading all there was to read on the internet. One of her favourite pastimes was to read about mathematics...