Intention-Based Diagnosis of Novice Programming Errors

As the development of intelligent tutors and intelligent computer-assisted instruction proliferates, the first books on such development are now appearing. Previously, interested readers had only Brown and Sleeman's Intelligent Tutoring Systems (Academic Press, 1981) and various technical papers (including articles by Woolf and Cunningham, Merrill, and Dear in the summer 1987 issue of IEEE Expert). William Clancey's Knowledge-Based Tutoring: The GUIDON Program (MIT Press, 1987) will soon join this burgeoning body of work-as will Etienne Wenger's Artificial Intelligence and Tutoring Systems: Computational Approaches to the Communication of Knowledge (Morgan Kaufmann, 1987), and Greg Kearsley's AI and Instruction (Addison-Wesley, 1987). These works will describe existing tutors and offer suggestions for developing others. W. Lewis Johnson details the development and operation of Proust, the Pascal tutor. Johnson, Eliot Soloway, and others at Yale created Proust to diagnose, report, and explain bugs in novice programs. Proust functions as a human tutor would. Specifically, it seeks to understand the intent of student programmer code and relate it to the code's actual behavior. While Proust does not contain a tutoring component, we can eventually use its diagnoses for teaching. Johnson's well-organized book moves readers gradually from a system overview to more detailed chapters on each of Proust's aspects, amply illustrating design discussions with template descriptions, samples of "buggy" student programs, and Proust's analyses of those programs. When analyzing problems, Proust requires (1) a description containing the problem's name, object, and goal definitions, and (2) plans for implementing goals. Objects are "data quantities" the program manipulates-namely, the data set to be averaged. Goals are "'requirements" the program must meet. Plans are collections of "component patterns, each of which matches one or more Pascal statements." To predict the novice programmer's intent, Proust must identify the probable interpretation or path taken by students from problem description to solution. To accomplish this, Proust (1) Gets the problem description, (2) Extracts the goal agenda, (3) Selects a goal, (4) Retrieves a set of implementation plans containing expert, novice, and "buggy" plans, (5) Maps goals and plans onto the student program, previously parsed into Pascal primitive components, and (6) Explains any plan differences by constructing new interpretations using plan-difference rules.