The Programmer's Burden: Developing Expertise in Programming
Robert L. Campbell, Norman R. Brown, and Lia A. DiBello
Our goal in this chapter is to describe and illustrate a developmental approach to programming knowledge. We argue that the prevailing practice of making binary noviceexpert comparisons is of little value in the psychology of programming. We argue instead for a constructivist developmental approach, which uses Piagetian structural interviews and longitudinal tape diaries to gather information, and which builds multiple-level sequence models to describe the development of programming skill. With clinical interviews, we have elicited information about the learning histories of expert programmers. With tape diaries, we have followed the course of learning by individual programmers for up to 2 months. From these sources, we propose a developmental sequence of types of problems that programmers try to solve when learning the Smalltalk language.
We believe that our approach can lead to more detailed developmental descriptions of programming knowledge, to improvements in programming education, and to the construction of expert systems to aid in learning to program. This chapter presents the case for a developmental approach to expertise in programming and, in a schematic way, charts the evolution of our current research. We establish the importance of expertise in programming as a research area and criticize the current reliance on a binary novice-expert paradigm in psychological research in programming. We describe the basic assumptions of a constructivist developmental approach to expertise in programming.
Because there were no prior developmental analyses of programming skill for us to test, we chose an exploratory research strategy. In Study 1, we gave structured interviews to expert professional programmers in a range of specialties. We found that expert programmers are often able to describe major qualitative changes that occurred in their development.
We found these results encouraging but realized that our investigations needed a sharper focus. It became clear to us that programming is not a unitary developmental domain. We decided to focus on object-oriented programming (specifically the Smalltalk language) as our domain. We found object-oriented programming interesting in part because of widespread reports that experienced procedural programmers "become novices again" when learning Smalltalk. We also wanted to try a prospective, longitudinal research technique that might uncover details of programmers' learning paths likely to be missed in retrospective interviews.
In Study 2, we asked professional programmers who were beginning to learn Smalltalk to keep "tape diaries" of all of their work sessions for periods of up to 2 months. From the tape diaries, we were able to document in detail the programming tasks that the programmers worked on and the difficulties they reported. We found that our professional programmers used learning strategies that required them to take up the "programmer's burden" of understanding what happens in each line of Smalltalk code. Such strategies run counter to the incen-