My mission is to help people harness the power of computation in its many forms, in particular, through computer programming. I accomplish this through two paths:

I lead the Pioneer Programming Languages group at Grinnell where we investigate problems at the intersection of programming language theory, systems, human-computing interaction, and computer science education. Most recently, we have developed type-theoretic foundations for program synthesis and applied those foundations to build practical tools to support the automation of type-directed programming. We have also built undergraduate-focused tools to support discrete mathematics education and the integration of program analysis into such courses.