The way we think about programs, and the way we communicate programs (from user to machine, as well as from user to user and machine to user) are disconnected to some degree. This disconnection makes it difficult for humans to reason about programs written for computers, and likewise computers to reason about programs written for humans.

My research can be broadly organized into two categories:

  1. The design and implementation of domain-specific languages (DSLs);
  2. Work in programming environments that assist users and developers in utilizing tools and resources more effectively.

As a natural side-effect of the connection between these categories, my work in each area lends itself to advancement in the other.


  • Choice Calculus
    A simple, formal language intended as the lambda calculus of variation research.

  • Explanation-Oriented Programming
    A new programming paradigm focused around the construction of explanations as a primary program output.