I work particularly on enabling features within languages, ones that open up
significant new areas of functionality without major changes in the language.
Some of my work on the Grace language grew pattern-matching
and typing functionality out of standard object-oriented features with minimal
intrusion on the rest of the language, which was influential on other
languages. Similarly, my work with Timothy Jones on models
of object-based inheritance explored several styles
of code reuse from multiple angles, investigating trade-offs and which
existing functionality supported which paradigms.
I created Tiled Grace, the first dual-mode
block-based/textual hybrid programming system, and continue to explore further
interfaces for programming beyond the conventional lines-of-text editor. I
have a particular focus on systems to support non-programmers and novices, or
people who do not see themselves as programmers but want to instruct the
computer on a task. My work with Deacon McIntyre on a graph-based system for
creating cellular automata won an award at VL/HCC.
I am a long-time developer of GoboLinux, a Linux
distribution with a unique filesystem-driven package management approach,
and was the principal designer of its “Aliens” system for integrating
third-party package managers like RubyGems and CPAN into the operating
system. I am interested in operating system design at the user level,
particularly how the system can facilitate users constructing novel
connections and integrations between unrelated software to suit their needs,
began with my work building on the Lively Kernel in 2010.
I continue to explore models for supporting ad-hoc user-centred system-level
Compositional programming languages and other underexplored paradigms
Concatenative programming languages facilitate composition of computations
over other operations, and I have worked on finding where this and other
unconventional paradigms are constructive, including where they can be
integrated with other systems.
I have done significant work on the Grace language, an
object-oriented language aimed at introductory teaching, where I focused on a
number of features to assist novice learners, including restricted
sublanguages, error reporting, and user interfaces. I have also explored
instructional delivery for atypical students and measures for identifying
learners who can benefit from targetted interventions.