His research investigates how fundamental concepts in the theory, implementation, and practice of programming languages can improve the software development process. His recent research has focused on the formal foundations of gradual typing: the seamless combination of static and dynamic type-based reasoning in a programming language. His past research has studied metaprogramming and generic programming.