Before working on graphics, I was involved with Craig Chambers's Cecil research group. The Cecil group researches issues in programming language design and implementation, particularly with respect to OO languages.
As a member of the Cecil group, I developed predicate dispatching with Craig and Mike Ernst, originally as a way to unify the language constructs of ML-style pattern matching and Cecil-style multiple dispatch. In many modern programming languages, a call to a function name can resolve to one of several possible implementations at runtime, depending on some aspect of the dynamic program state. The applicability of each implementation is controlled via some language feature (such as an ML pattern or an OO type hierarchy). Predicate dispatching makes applicability explicit by guarding each implementation with a logical predicate over class tests and arbitrary program expressions. Predicate dispatching turns out to be a powerful generalization and unification of method selection techniques in many programming languages, and a useful framework in which to understand and compare these languages.
I feel that there is still a massive gulf between our ability to conceive of solutions to computational problems and the usefulness of our tools for expressing those solutions. Programming languages are so incredibly complex relative to the programs they are used to express. My (ongoing) goal in this research area is to make the process of programming as simple as possible. This has ramifications in language design, compiler design, environments, and support tools.