I like playing jazz on clarinet and piano, programming in languages with fancy type systems, watching (and sometimes performing in) improv, an occasional run or swim, singing, foosball (2015 MIT intramural champions!), and the decrement-jump-if-nonzero 8051 assembly instruction.

Various Projects and Writing

Coding Interview Tips and Tricks

This is a compendium of advice I have for coding interviews and algorithm design in general. For advice on proving correctness of algorithms, this similar page might be helpful.


My presentation at SIGBOVIK 2017. Applying serious math to a less serious problem. See the paper for more content and the SIBOVIK website for more context.
[slides] [video] [paper]

Hairy Ball Theorem

A video explaining a relatively nontechnical proof of the hairy ball theorem. I really like Minute Physics and thought the format might lend itself well to pure math. I hope to make more of these one day!

\(2 \times 2 \cong\! 4\): An Introduction to Category Theory

My final paper for MIT 18.504, Seminar in Logic. Planning to write about categorical logic, I read a lot of material on that, but by the time I had written the introductory background I was already over the page limit.

Recursion Theorem

A presentation for MIT 18.504, Seminar in Logic. An explanation of recursion theorem by relating it to the Y combinator from \(\lambda\)-calculus.


A report on a system I created with Daniel Shaar for a final project in MIT 6.945, Adventures in Symbolic Programming. The goal was to automatically infer “obvious” function arguments to reduce code clutter and make code more robust to future change.

The Banach-Tarski Paradox

A handout supplementing my Splash class “The Banach-Tarski Paradox: Speed Run!”, which covers a 50-minute-long subset of the handout’s material. It’s meant to fill in holes left by the class and be a starting point for students interested in exploring the finer details deeply.