Software Engineering, in particular interactive program transformation, automated refactoring, concurrency and parallelism, object-oriented frameworks, software testing, and software evolution
Software constantly changes. It is widely known that at least two-thirds of software costs are due to evolution, with some industrial surveys claiming 90%. However, programmers perform most software changes manually, which makes software development more expensive, time-consuming, and error-prone than it should be. Just as machinery fostered the industrial revolution, I hope that my research on automating software changes will foster a revolution in software technology.
My research is driven by two important questions: (i) what software changes occur most often in practice and (ii) how can we automate them to improve programmer productivity and software quality? Answering these questions is relevant for practice, as well as intellectually challenging and rewarding.
I enjoy connecting seemingly unrelated areas of computer science and making novel contributions. For example, connecting parallel computing with interactive techniques from software design, adapting proven software engineering principles into the world of spreadsheet developers, designing scalable program analyses using data mining techniques, etc. I devise techniques and theories that generalize to solve larger classes of problems, as well as build and deploy tools for automating program changes.
Automating changes is challenging as it requires complex code transformations that span multiple, non-adjacent program statements and requires deep inter-procedural analyses that globally reason about objects shared through the heap. A key problem is designing program analyses that are accurate yet fast enough to be used in an interactive tool.
I validate rigorously my research by employing empirical methods (e.g., case studies, controlled experiments, inter- views) in the evaluation stage (did we built the tool right?) and also in the formative stage (are we building the right tool?). I place high value into starting a new research direction with empirical explorative studies.
I happily go the extra mile necessary to move my research into practice. I maintain strong ties with the industry groups building the major integrated development environments (IDEs), and I contribute to open-source software.