GGrantIndex
← Search

SHF: Small: Knowledge Acceleration for Programming

$532,000FY2018CSENSF

Carnegie Mellon University, Pittsburgh PA

Investigators

Abstract

Programming is a critical skill that is vital for the future of work and having a globally competitive workforce. While there are many resources available for programmers to learn the details for writing code, an increasing amount of the time all programmers spend is not on writing code but instead on choosing among and adapting the growing amount of existing code and libraries available to them. One study reported that the most frequent programmer activity is searching for and trying to understand unfamiliar code, and more than 30% of all searches are for determining which APIs to use and how to use them. However, after each sense-making episode in which a programmer gains knowledge for themselves, their work is essentially lost, with no one else benefiting. Although there are many tools to help programmers find the answers, there are very few tools to help programmers make use of the knowledge gained performing the task, or share that knowledge with others. Capturing the work that programmers do in foraging, navigating, and organizing code-relevant information could significantly benefit later programmers interested in similar information. By referencing the captured knowledge from the resulting code, this can provide design rationale for why the API is used that way, which is one of the most often missing pieces of documentation. Furthermore, by making it easier for programmers to build off one another's knowledge, this proposed work has the potential to reduce common security vulnerabilities that arise from programmers not learning from others' mistakes, leading to more secure and correct code. In this research the PI aims to help the initial programmer collect, navigate, and organize knowledge to meet their goals, while capturing this knowledge and making it useful for later programmers with similar needs. This project studies the sense-making processes that programmers engage in while searching for and organizing knowledge for themselves, as well as studying which work that they do is useful for others. This project investigates how programmers spend their time searching for and making sense of complex information for themselves in order to accomplish their goals, including choosing among different APIs or methods within an API, adapting code snippets found on the Internet to meet their needs, or trying to learn unfamiliar code to fix an error or add a new feature. When performing tasks like these, programmers continually are making hypotheses, proposing questions, and discovering answers, both about the details as well as the meta-level questions such as the design rationale of why the decisions were made. These studies will inform the design, development, and evaluation of tools to support both the initial and later programmers. This research has the potential to significantly accelerate the speed at which programmers can create correct code by helping them gain relevant knowledge faster. This award reflects NSF's statutory mission and has been deemed worthy of support through evaluation using the Foundation's intellectual merit and broader impacts review criteria.

View original record on NSF Award Search →