CS 37: Structure and Interpretation of Computer Programs

Announcements | Schedule | Grading | Homework | Integrity | Links


This course will emphasize abstraction techniques necessary for designing large and complex programs.

Instead of more a common language like C, Java, or Python, we will be using a dialect of Lisp called Scheme. Scheme allows programming abstractions to be constructed more simply than is possible in a language like C. This power will let us deal with core computer science concepts without focusing on idiosyncratic syntactic details of the language.

The topics we will cover in this class include functional programming, recursion, data abstraction, higher-order functions, lists, trees, and sets, object-oriented programming, binding and scope. The course culminates in the development and implemention of an interpreter, written in Scheme, which will cover a large subset of the Scheme language itself.

Class periods will contain both lecture and hands-on components. For this reason, attendance will be taken at each class.

This course assumes completion of CPSC 035.

Class information

Room: Science Center 240
Time: Tuesday, Thursday 1:15pm–2:30pm
Text: Abelson, Sussman and Sussman, Structure and Interpretation of Computer Programs, 2nd edition. (Available for purchase, or in its entirety online)

Professor: Richard Wicentowski
Class Time: Tues/Thurs 1:15-2:30
Location: Science Center 240

Office: Science Center 251
Phone: (610) 690-5643
Office hours: Wednesday 9:30-11:30 am, and by appointment



In the schedule below, the reading listed next to each day is the reading that we will be discussing in class on that day, not that night's reading assignment. You must come to class having already done the reading listed next to each day.

1 Jan 22   Basic Scheme / Lists
Section 1.1
Jan 24   #1
2 Jan 29   Recursion and Iteration
Section 1.2 - 1.2.2
Jan 31 Last Day to Add/Drop (Feb 01) #2
3 Feb 05   Abstractions with Higher Order Procedures
Section 1.3
Feb 07   #3
4 Feb 12   Data Abstraction (Section 2.1)
Hierarchical Data (Section 2.2)
Sets and Trees (Section 2.3)
Feb 14   #4
5 Feb 19  
Data Representations (Section 2.4)

Feb 21

Exam 1

6 Feb 26   Object Oriented Programming
Chapter 3 Introduction & Section 3.1
Feb 28  
7 Mar 04   #5
Mar 06   Mutable Data
Section 3.3

Mar 11

Spring Break

Mar 13

8 Mar 18   Mutable Data
Section 3.3 (continued) (continued)
Mar 20   Streams
Section 3.5
9 Mar 25  
Mar 27   OCaml
* OCaml reference book (Ch 2)
* Programming Languages (PDF)
10 Apr 01   #8
Apr 03  
11 Apr 08  

Apr 10

Exam 2

12 Apr 15   Interpreter Project
Section 4.1
Part 1
Apr 17   Part 2
Extn A
13 Apr 22   Part 3
Apr 24   Part 4
Extn B
14 Apr 29   Part 5
May 01   Part 6
Extn C


Grades will be weighted as follows:

20%Final Project
5%Class Pariticipation and Attendance

Homework Policy

Homework assignments will generally be assigned in Thursday's class and will typically be due the midnight before the next Thursday's class.

You are encouraged to work with a partner on all assignments.

You will submit your homework electronically using the handin37 program. You may submit an assignment multiple times, each submission overwriting the previous one. Only the final submission will be graded.

Late work will not be accepted except in extreme situations and only if you contact me well in advance of the deadline. Even if you do not fully complete an assigment, you may submit what you have done to receive partial credit.

Academic Integrity

Academic honesty is required in all work you submit to be graded. With the exception of your partner on assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work. You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your assignments in any capacity.

All code you submit must be your own with the following permissible exceptions: code distributed by me as part of the class, code found in the course text book, and code worked on with your assignment partner. You should always include detailed comments that indicates which parts of the assignment you received help on, and what your sources were.

Please see me if there are any questions about what is permissible.

Below are some external links which may be helpful to you.

How to Design Programs by Felleisen, Findler, Flatt and Krishnamurthi
Concrete Abstractions by Hailperin, Kaiser and Knight
The Scheme Programming Language by Dybvig
xkcd #224 and #297 (humorous, not helpful)