Software Construction 


Software Construction is based on the premise that

programs are written for people, not computers.

Accordingly, the course focuses on the design and implementation of maintainable programs and how to present such programs to others.

Before taking Software Construction, students are expected to know the fundamentals of programming and computation, including:

  • basic data organization (lists, trees, some graphs),

  • basic processing of data (iterating over trees, graphs), and

  • a basic model of computation (incl. functions, objects, assignment)

During the course, students synthesize that knowledge and learn the fundamental tools for maintaining programs:

  • testing (focusing on unit testing),

  • design of new, simple data structures (how to use basic data structures to fit a new problem), and

  • checkable program specification techniques (simple type systems, behavioral contracts, and sequence contracts)

The course has nine assignments, one each week. The first two assignments expose students to the idea of modifying large programs and the design of a subscription-notification architecture. For assignments three through nine, students build and modify their own software. To date, the final product has been a complete implementation of an existing board game (e.g., Scrabble or Parcheesi), including a rules manager, a GUI, automated players, and networked play.

The course is organized as a studio course, following the tradition of art and architecture school. Each week, students present their programs and (with the instructor's guidance) learn from each others' experience. Final grades are based on the quality of the students' code and the quality of their presentations, with an emphasis on the later code and the later presentations.

Last modified: Thursday, February 17th, 2005
HTML conversion by TeX2page 2004-09-11