Mature scientific disciplines are characterized by their theories, synthesizing what is known about phenomena into forms, which generate falsifiable predictions about the world. In computer science, the role of synthesizing ideas has largely been through formalisms that describe how programs compute. However, just as important are scientific theories about how programmers write these programs. For example, software engineering research has increasingly begun gathering data, through observations, surveys, interviews, and analysis of artifacts, about the nature of programming work and the challenges developers face, and evaluating novel programming tools through controlled experiments with software developers. Computer science education research has done similar work, but for people with different levels of experience and ages learning to write programs. But data from such empirical studies is often left isolated, rather than combined into useful theories which explain all of the empirical results. This lack of theory makes it harder to predict in which contexts programming languages, tools, and pedagogy will actually help people successfully write and learn to create software.
We need scientific theories that synthesize what is believed to be true about programming and offer falsifiable predictions. Whether or not a theory is ultimately found to be consistent with evidence or discarded, theories offer a clear statement about our current understanding, helping us in prioritizing studies, generalizing study results from individual empirical results to more general understanding of phenomena, and offering the ability to design tools in ways that are consistent with current knowledge.
This Dagstuhl Seminar will explore the creation and synthesis of scientific theories, which describe the relationship between developers and code within programming activities. It will bring together researchers from software engineering, human-computer interaction, programming languages, and computer science education to exchange ideas about potential theories of programming. We expect theories to arise from many sources: untested but strongly-held beliefs, anecdotal observations, and assumptions deeply embedded in the design of languages and tools, as well as from review of empirical evidence on programming and application of existing theories from psychology and related areas. Our aim is to bridge this gulf: formulating deeply-held beliefs into theories which are empirically testable and synthesizing empirical findings in ways that make predictions about programming tools and languages.
To achieve this aim, the seminar has three specific goals. 1) Bring together researchers with diverse expertise to find shared understanding. 2) Create a body of theories, which make testable predictions about the effects of programming tools, languages, and pedagogy on developer behavior in specific contexts. 3) Propose future activities, which can advance the use of theories, including identifying studies to conduct to test theories and ways to use theories to communicate research findings to industry.
During this seminar, a few short talks will first review the nature, creation, and use of theories as well as existing evidence about developer behavior during programming activities. The main activity of the seminar will be work in small groups which will begin to sketch new theories of programming.
- society / human-computer interaction
- software engineering
- developer tools
- code navigation