My approach to problem solving emphasizes tool-building and automation. This includes code generation, transformation and other language-oriented techniques. When solving mysteries, I understand and reason about code before jumping into a debugger.

Notable personal projects

This is a library of miscellaneous utilities for the Racket programming language. It features records, cursors (zippers and lenses), unrestricted generators, algebraic effects, gratuitous experiments in syntactic sugar, and more.