CS 37: Structure and Interpretation of Computer Programs

Announcements | Schedule | Grading | Labs | Integrity | Links
 

Introduction

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.

This course assumes completion of CPSC 035.

Class information

Room: Science Center 240
Class Time: MWF 9:30 am – 10:30 am
Lab Time: M 2:40 pm – 4:10 pm
Text: Abelson, Sussman and Sussman, Structure and Interpretation of Computer Programs, 2nd edition. (Available for purchase, or in its entirety online)

Professor: Richard Wicentowski
Office: Science Center 251
Phone: (610) 690-5643
Office hours: Thursday 10:30 am – noon, and by appointment


Announcements

Lab 1 is due Sunday night at midnight.

Schedule

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.


Grading

Grades will be weighted as follows:

30%Labs
45%Exams
20%Final Project
5%Class Pariticipation and Attendance

Lab Policy

Lab assignments will typically be assigned in lab on Monday and be due the following Sunday evening at midnight. You are strongly encouraged to start early and ask questions early if you get stuck. Some labs may take a considerable amount of time, so you should begin working on assignments well before the due date.

Most of the lab assignments will use the Racket programming language. You can download Racket for Mac, Windows, or Linux.

You are encouraged to work with a partner on all labs. You can work with a different partner each week except during the interpreter project when you must work with the same partner for 3 consecutive weeks.

Because we will discuss the solutions to lab assignments in class, late assignments will not normally be accepted; however, special exceptions can be made if you contact me well in advance of the deadline. Even if you do not fully complete an assignment, you should submit what you have done to receive partial credit.

You will submit you assignments electronically using the handin37 program. You may submit your assignment multiple times, but each submission overwrites the previous one and only the final submission will be graded.

Academic Integrity

Academic honesty is required in all work you submit to be graded. With the exception of your partner on lab 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 lab 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 lab 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 lab partner. You should always include detailed comments that indicates which parts of the lab 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.

Racket
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, #297 and #312 (humorous, not helpful)