Abstract: | The Software Engineering Apprentice is a model of programming instruction that focuses on “programming in the large.” We have developed a set of innovative laboratory programming exercises that can be used in a Fundamentals of Computer Science course sequence. The exercises revolve around a series of sophisticated “case studies”: complete software applications that we developed to exemplify good software engineering methods. In addition to functioning source code, the case studies include other software development artifacts: specifications, test plans, and design documents. As an alternative to the “build it from scratch then throw it away” mentality of most assignments in a first course, the Software Engineering Apprentice approach demands that students build upon large pre-existing software applications. Instead of the “language feature of the week” program assignments that are typical in these courses, the exercises we developed are modelled after tasks found in a real software development environment—testing, code comprehension, maintenance, modification, and enhancement. |