A case study describes a programming problem, the process used by an expert to solve the problem, and one or more solutions to the problem. Case studies emphasize the decisions encountered by the programmer and the criteria used to choose among alternatives. Questions interspersed in the presentation help engage the learners in the case study, allowing them to "think along" with the expert by making predictions, helping with parts of the solution, or analyzing alternatives. More comprehensive questions ask students to modify the solution, apply the ideas to new problems, detect bugs in related problems, and reflect on their own methods for solving problems. Two collections of case studies are Designing Pascal Solutions: A Case Study Approach (W.H. Freeman, 1992) and Designing Pascal Solutions: Case Studies Using Data Structures (W.H. Freeman, 1996), both by Michael Clancy and Marcia Linn.
Case studies engage students in a kind of "apprenticeship" with an expert programmer. Linn and Clancy ("The Case for Case Studies of Programming Problems", Communications of the ACM, March 1992) elaborate on their advantages, which include the following:
We've been teaching object-oriented programming (using Scheme and C++) in the first two courses for CS majors here at Berkeley for several years. A number of aspects of object design seem to cause students difficulty:
Case studies can help. I'm working on developing cases appropriate for use by introductory students, and will report on my progress at the workshop.
Mike Clancy is Senior Lecturer and Coordinator of Lower-Division Courses in the Computer Science Division at the University of California, Berkeley.
He is co-author of the two case study collections listed above, and has long been a missionary for the case study approach to teaching. As a researcher, he focuses on various aspects of education in programming and computer science, including curriculum, laboratory management, and uses of technology.