My research goal has primarily been to discover how to deliver targeted lifelong learning to programmers by helping them to find, reuse, and learn from code. Advancing personalized learning is a National Academy of Engineering Grand Challenge. My personal focus, being in computer science, is on supporting personalized learning of programming skills.
My main target population is the end-user programmer workforce: those diverse multitudes in a broad range of industries who consider their main job to be something other than programming. Examples include scientists, engineers, marketing specialists and mechanics. Such people have widely disparate concerns and expertise. A training system for one group of people will not suffice for others, and indeed, each person will typically have distinctive needs and expertise at a given moment in time.
At present, all of these projects are on hiatus, while I am serving as an Associate School Head for Online and Continuing Education.
Our studies show the vast majority of code posted to repositories by end-user programmers (people who use their own code) is never reused by anybody. Much of this code is too specialized or low-quality to justify reuse. Our approach is to develop heuristics for identifying reusable code. Such heuristics can be used to create repository search engines that filter code examples based on reusability, as well as to create programming tools that inform people about where code needs to be improved during reuse.
We integrate selected code examples and other resources into targeted, interactive tutorials to support learning. Our systems may recommend different resources to different programmers at different points in time, depending on their individual interests and background.
Helping people find information in code
Professional programmers spend a third of their time during maintenance just navigating through code to find information. In collaboration with Professor Margaret Burnett, we are investigating how to reduce the time needed for people to find information in code. Our research has shown that Information Foraging Theory (IFT) can be adapted to account for how programmers navigate. Our approach is to develop models that track and predict where programmers need to go in code. We incorporate these models into tools that help programmers quickly obtain this information.