Programming Languages Research

See my Publications page for a complete list of my publications with downloadable PDFs and links to data and source code.

Overview and expertise

My interest in programming languages is rooted in the belief that the languages we use shape the way we view the world, and that better languages can help us understand, solve, and explain more difficult problems.

My core areas of research expertise are:

  • domain-specific language (DSL) design and implementation
  • functional programming
  • type systems and type inference
  • all aspects of software variation

I also have secondary expertise in:

  • dependently typed programming and program verification
  • compilers, program analysis, and program transformation
  • human factors of programming languages and software engineering
  • visual programming languages
  • module systems and modularity

Lots of my work involves software variation, which broadly refers to large sets of related programs. A well-known example of software variation arises from use of the C preprocessor (e.g. #ifdef and related statements). In most large C projects, a huge number of different programs can be generated from a single codebase by running the preprocessor with different arguments, corresponding to configuring the software to run on different platforms or with different sets of features.

However, software variation can also arise in a variety of other ways, such as through exploratory programming, where variations are created through trial and error, and speculative program analyses, where variations are created on the fly in order to explore large numbers of hypothetical changes to a program.

I am the co-creator of the choice calculus, a simple formal language for modeling variation that lies at the heart of much of this work.


Note: these project pages are a work-in-progress. Some simply collect links to related papers together but are missing an introduction and overview.

Recent and ongoing work

  • Choice Calculus
    A simple, formal language for describing variation.

  • Variational Programming
    Efficiently computing with massive numbers of variations in data and code. Includes work on variational data structures and variational databases, and applications to solving large numbers of related SAT problems.

  • Variational Typing
    Efficiently infer types for massive numbers of related programs. Includes applications to problems in gradual typing.

Older work

Student mentoring and advising

From 2014–2021 I was a professor at Oregon State University and led a programming languages research group filled with amazing students. Working with these students was the highlight of my academic career, and I’m super proud of the work we did together.

During this time, I founded and co-advised a well-attended Programming Languages Reading Group and was the faculty advisor for the student-run OSU Functional Programming Club.

Below is a list of students that graduated from my group. Their graduate theses and project reports are included at the bottom of my Publications page.

Graduate students

Undergraduate students