CS 37: Structure and Interpretation of Computer Programs

Fall 2009
Swarthmore College
Professor Charles Kelemen

Course Description

Welcome to Structure and Interpretation of Computer Programs. This course continues the development of computer problem solving techniques begun in CS21 and CS35. Not only will we solve problems using the features provided by a given programming language, we will learn how to enhance programming languages to make solving problems easier. Abstraction techniques for controlling the complexity of programs will be emphasized. Abstraction is an important skill applicable to almost all areas of engineering design. By studying programs that make repeated and deep use of abstraction, you will learn how to generate precise specifications from vaguely formulated and perhaps partially understood descriptions. This is a skill that is essential in writing large computer programs and will be useful in all intellectual endeavors. Throughout the course, we will be using a dialect of the Lisp programming language, called Scheme. Scheme's great flexibility and power, combined with its very simple syntax, will allow us to concentrate on exploring interesting computer science concepts, without getting sidetracked by irrelevant and distracting details of syntax or other language idiosyncrasies. Topics to be covered include functional programming, recursion, data abstraction, higher-order procedures, lists and symbol processing, sets, object-oriented programming and local state, stream processing, binding, scope, and a number of other semantic issues in programming language design. The course culminates in the development, modification, and extension of an interpreter, written in Scheme, for a substantial subset of the Scheme language itself.

Course Materials

We will be using DrScheme which is public domain software. DrScheme is available in a variety of formats including Mac, Windows, Linux, and Unix. We will use version 372. Do NOT use the more recent releases or you will have trouble sooner or later. Class periods will consist of a combination of lectures and hands-on interaction at the computer. I will assume that you have read the assignments before coming to class. Many of the in-class exercises will come directly from the text. The textbook we will be using is Structure and Interpretation of Computer Programs, 2nd Edition, by Abelson, Sussman, and Sussman. It is an excellent book, worth buying and having a well-thumbed version on your shelf. It is also fully available on-line at: http://mitpress.mit.edu/sicp/full-text/book/book.html


The final exam will be at the time and date scheduled by the registrar. Until this is announced, do not plan to be finished until after Dec. 19, 2009.

As of 1 Oct, the final exam for CS37 has been scheduled by the registrar for Wednesday 12/16/2009, 9:00am-12:00pm in SC240. Plan to attend.

Please turn OFF all cell-phones. No vibrating. No texting.

Labs

Lab assignments will typically be available on Friday and be due at 11:29 pm the next Thursday.

You are encouraged to work with a partner on each lab assignment.

You will turn in your lab assignments electronically (no hardcopy printout is necessary). In order to receive credit for an assignment, you must do the following: