Advancing Programmers' Personalized Learning

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:

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.

Identifying useful code 

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

Related funding

  • 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)

Packaging code in a tailored form 

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

Related funding

  • 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

Related funding

  • 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)