Society is undergoing a digital transformation. More and more aspects of life are touched by software. Programmers often write new software by combining pre-existing pieces of software in novel ways. These pre-existing pieces, called programming interfaces, are written by other programmers, to be reused. However, the creators of programming interfaces often do not know enough about how their work gets used by others. Users often face barriers in deciding which of a set of interfaces they should choose, and how to use them. This project will conduct studies to learn about the unmet needs of programmers and then create novel tools to support the design, comparison, and use of programming interfaces. For this investigation, the team will develop a software infrastructure that automatically analyzes and processes large sets of online code.
This research will deepen our understanding of unmet information needs of programming interface designers and users, and how these are reflected in community usage data. To address the unmet needs, the team will perform an iterative design process, developing novel tools, interaction techniques, and implications for helping developers understand the big picture of existing code repositories. This is expected to help make emergent software design choices within a community explicit, rather than implicit, and for improving code quality. The research is based on an approach called code demography: the study of recurring patterns in large code corpora. It will apply code demography to investigate: (1) how to use programming interfaces in a particular context; (2) how to design and evolve a programming interface; and (3) how to assess and select among multiple programming interfaces with similar capabilities.
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.