My primary research goal is 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.
My work to help these people falls in three main categories:
- Identifying useful code and other resources for training people
- Presenting code in a form tailored to each person's current need and knowledge
- Helping people learn the information they need within those resources
As much as possible, our research group tests ideas in multiple programming contexts, to explore how well results generalize. That way--again, as much as possible--our results are not bound to any particular programming tool or environment. In this sense, the ideas produced by research are much more valuable than the tools we happen to study or create to explore those ideas. We are willing to consider both textual and visual languages, as well as both commercial and academic programming tools.
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.
Problem: End-user programmers post many kinds of code to online repositories, but very little of it is reused
Solution: Heuristics can identify reusable code
- Helping LabVIEW users to create high-quality VIs, National Instruments 9/13-9/14 (grant: $54,096, my share: $54,096)
- Guiding the design of effective LabVIEW programs, National Instruments 1/12-5/13 (grant: $46,593, my share: $46,593)
- Automated detection of problematic code structures in visual programs, National Instruments 9/11-6/12 (grant: $10,000, my share: $10,000)
- A first empirical test of low ceremony evidence for assessing quality attributes, National Science Foundation 9/11-9/12 (grant: $62,101, my share: $62,101)
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.
Problem: Programmers try learning from online code examples, but the usual approaches are not particularly effective
Solution: Situated learning and targeted, interactive tutorials
- Enabling users to search for LabVIEW code--Phase 2: Evaluate, National Instruments 7/15-12/17 (grant: $66,042, my share: $66,042)
- Enabling users to search for LabVIEW code--Phase 1: Prototype, National Instruments 7/14-6/15 (grant: $58,281, my share: $58,281)
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.
Problem: Programmers forage for information by following complex but (somewhat) rational paths through code
Solution: Tools can aid foraging by tracking information needs and offering assistive support
- SHF: Medium: Collaborative Research: Information Foraging Theory: From Scientific Principles to Engineering Practice (REU Supplement), National Science Foundation 9/15-8/17 (grant: $16,000, my share: $8,000)
- SHF: Medium: Collaborative Research: Information Foraging Theory: From Scientific Principles to Engineering Practice (REU Supplement), National Science Foundation 9/14-8/15 (grant: $14,000, my share: $7,000)
- SHF: Medium: Collaborative Research: Information Foraging Theory: From Scientific Principles to Engineering Practice, National Science Foundation 9/13-8/16 (grant: $932,620, my share: $268,767)