My research is directed at enabling programmers to write programs that, as much as possible, look like their design. I believe that programs that clearly express the design structure they implement are easier to maintain, because questions about what a part of the program does, why it does that, and what other parts of the program depend on that behavior become easier to answer.

In pursuit of this goal, most of my research has been in programming language design and implementation, but I am also interested in programming environments, coding styles, and other kinds of tools.

I have worked extensively in the area of aspect-oriented programming (AOP). I had the good fortune to lead the fantastic Xerox PARC team that developed aspect-oriented programming and the AspectJ programming language. Some of my current research in the Software Practices Lab is AOP related. I am also beginning to work on a new project, as outlined in my 2007 OOPSLA Keynote talk, which is available from my talks page. Another recent focus is the development of CPSC 110, the department's new introductory course for first year students. The course is based on the TeachScheme! curriculum using the forthcoming second edition of the How to Design Programs book.

If you are interested in being a graduate student in my group please see the department's information for prospective graduate students. You may also send me a letter, but if you do so, please describe in specific terms the work you have done, the work you would like to do, and why you would like to pursue that work as part of my group.