This post continues our series on up-and-coming PL researchers who are about to embark on independent research careers. This week, we feature Bill Harris, who will start as an assistant professor at Georgia Tech in Fall 2014.
I double-majored in computer science and mathematics at Purdue University from 2003 – 2007. While I was at Purdue, I worked on a senior project, with Zach Tatlock and supervised by Antony Hosking, and took a series of excellent graduate course from Suresh Jagannathan on compilers and programming languages. Between those experiences, by the time that I graduated, I knew that I wanted to do research in PL. I’m currently wrapping up my PhD work at the University of Wisconsin-Madison, where I’ve been advised by Somesh Jha and Thomas Reps. While in grad school, I’ve done a series of research internships, working primarily with (1) Sriram Sankaranarayanan at NEC Labs, (2) Aditya Nori at MSR Bangalore, and (3) Sumit Gulwani and Rishabh Singh at MSR Redmond.
What is the sort of research that you like to do?
In my research, I try to find cases where programmers have identified a hard programming problem in the wild. I then identify some aspect of that programming problem that can be automated, and apply techniques from program analysis and synthesis to carry out that automation. My thesis work was motivated by the programming problems that were uncovered by the secure-systems community in the process of designing systems with new, security-focused API’s; we addressed those problems using techniques from game-based synthesis. In my work on end-user programming at MSR Redmond, we worked on programming problems encountered by Excel users with limited programming knowledge, and we addressed those problems using techniques from inductive program synthesis.
We’d like to read one paper of yours to get a flavor of your work. Which one should that be, and what’s it about?
One good paper would be “Spreadsheet Table Transformations from Examples”, Harris and Gulwani, PLDI 2011. The work in that paper was motivated by a case study of Excel help forum threads that led us to realize that often, Excel users need to perform highly-repetitive transformations of the layout of cells in a spreadsheet. While many end users typically lack the programming knowledge to write an Excel script to implement the transformation, they are typically very good at providing input-output examples that describe how a hypothetical script should behave. Before our work, they provided these examples to an expert user to obtain a satisfying script; our work allows them to provide such examples to an automatic script synthesizer.
The key technical challenges that we solved in the course of doing the work were to design a domain-specific language that could express practical transformations, but supported an efficient synthesis algorithm that could take a set of inputs and efficiently find a set of programs that implemented the examples.
What new problems are you exploring, or plan to explore once you start
your faculty job?
One case where I’m trying to improve PL techniques is in the domain of shape analysis, which actually was one core foundation of the techniques that we used in my thesis work. I’m currently part of a collaboration between researchers at Wisconsin and Berkeley on reducing shape analysis problems to visual games that can be solved by programmers, or even game players with no programming experience.
Two problems in security that I plan to explore using PL techniques include problems in verifying security protocols and fabricating trustworthy circuits at untrustworthy plants. I’ve begun to explore how PL techniques for reasoning about languages of trees and constructing verified compilers can be applied to solve these two problems, respectively.
What are the things about PL research and the PL community that you like the most?
I really like how the PL community encourages you to keep one foot each in the camps of the foundations of computer science and systems building. On one hand, I feel that PL research gives you a rich mathematical language for finding and solving problems in abstract terms, so that your work can be reused by researchers in a variety of contexts. On the other hand, I feel that PL research allows you, once you’ve solved an interesting problem in the abstract, to build a real system that demonstrates its usefulness.
What would you like to see more of in the PL community?
My impression from primarily studying the literature on program analysis is that analysis developers put in herculean efforts to solve very difficult analysis problems, often without allowing themselves to make any assumptions about the language used. I think that it would benefit the field considerably to more tightly integrate language and analysis design. Obviously there has been some excellent work, entire workshops and conference sessions of it, dedicated to this principle, but I feel that it should be brought even more into focus.
What advice would you have for graduate students who want a faculty job in the next couple of years?
In short, I would recommend doing your work with an eye toward how it will be viewed by a researcher outside of your topic. The faculty application process is unique in how it enables you to interact with top researchers outside of your topic, but this brings its own challenges. In the next couple of years, work to find problems that will of course be appreciated by researchers in the PL community, but whose motivation is also clear at some level to someone outside of PL. Work to understand how your techniques are related to techniques developed in other fields. In my case, the techniques that I used in my thesis were related quite closely to techniques developed by the AI community to solve planning problems, much more than I realized before I began applying for faculty jobs.