Program Development Techniques

Fall 2007

T/Th 11:00am–12:15pm                KRB 205

Lab Monday by section                 WHL 009



Course Description
This course emphasizes controlling the complexity of software systems through general techniques common to all engineering design:
  • building abstractions to hide details and to separate specification from implementation
  • establishing conventional interfaces to allow the creation of standard, "mix & match " modules
  • establishing new languages for describing a certain class of designs, emphasizing some things and downplaying others

The primary purpose of this course is to give you a high-level picture of the possibilities of programming, i.e. an introduction to programming paradigms. With this knowledge, you will be able to consider the best way to tackle a problem without necessarily thinking about the language (and its abilities and limitations) first.

Topics include data abstraction, procedural abstraction, symbolic computation, object-oriented programming, functional programming, data-directed programming, embedded languages, data streams, and more. Students are encouraged to regard themselves as computer language designers and implementors rather than only language users.


Prof. Keith Decker

444 Smith Hall

Office Hours: T/Th 1pm–2pm



Our Class Movie

Handout for Exam 1

Handout for Exam 2 & final


HW1 [due 9/6] [files]  [soln]

HW2 [due 9/13]  [soln]

HW3 [due 9/20] [files] [soln]

HW4 [due 10/2] [files] [soln]

HW5 [due 10/18] [files]  [soln]

HW6 [due 10/30] [files]  [soln]

HW7 [due 11/27] [notes][files] [soln]

HW8 [due 12/4] [files] [soln]

Extra Credit [due 12/4]



Office: 102 Smith Hall

Hours: 9am-11am Monday



Structure and Interpretation of Computer Programs

by Abelson and Sussman

second edition