The syllabus presents the objectives, structure, guidelines and policies for the course. The policies are intended to guide students enrolled in the course.
MASSACHUSETTS INSTITUTE OF TECHNOLOGY
Department of Electrical Engineering and Computer Science
6.001 - Structure and Interpretation of Computer Programs
Fall Semester, 2002
Upon completion of 6.001, students will be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational solutions to abstract problems. In particular, students will:
- Be able to explain and apply the major mechanisms for control of complexity in large programming systems:
- building abstractions
- controlling interaction through conventional interfaces
- designing new languages
Be able to discuss issues of programming style and programming aesthetics.
Be able to read and modify a substantial (20 pages) Scheme program, if it is written in exemplary style.
- Be able to design and implement programs in Scheme that demonstrate the concepts covered in the course, specifically:
-Recursive and iterative processes and procedures
-Higher order procedures
-Object oriented methods
-Procedures with state
-Dispatch on type
- Be able to understand and modify an interpreter for a Scheme-like language, either at the level of a register machine description or at the level of a higher order language description.
Measurable Outcomes & Assessment Methods
Students completing 6.001 will have demonstrated an ability to:
- Design, implement and test short (1/2 page) recursive programs in Scheme that demonstrate the following concepts (measured by problem sets and quizzes):
- Building abstractions:
- computational processes
- higher-order procedure
- compound data
- data abstractions
- Controlling interactions:
Analyze the operation of a Scheme-like interpreter using the substitution and environment models (measured by problem sets and quizzes).
Design, implement and test at least one substantial (5 pages) program (measured by project).
6.001 is a large subject, but we have tried to design it so that you can receive a lot of personal attention. In particular, you are expected to participate actively in recitations and tutorials, and the quality of your participation will be a major factor in your grade.
In previous years, the entire class met twice a week for lectures, in "intimate" groups of 250 - 400. Over the past few terms, we have engaged in a major educational experiment, in which the lectures were replaced with online lectures, to which students were expected to listen, either in the 6.001 lab, or on their own computer. This term, based on positive feedback from last term's experiment, we are using the following plan. Most of the lectures will again be available online, and you are expected to listen to them before the associated recitation, as listed in the class calendar (which you can reach off the course web page). A selected set of lectures will be given live. These are marked clearly in the course calendar and you should note them now, so you don't forget. You are expected to attend those lectures, as the material is essential to setting the stage for each section of the course. Lectures are the primary vehicle for introducing and motivating new material, some of which is not in the book. All other lectures will be available online. It is essential that you listen to the lectures, as the recitations will assume you have already heard the material, and will build upon it.
The Registrar's office will have assigned you to a specific section of 6.001. In order to keep sections balanced, we ask you to attend that section. We will try to find a new section to accommodate you, but because of the need to keep sections reasonably balanced in size, we may not always be able to do so. Please do not contact us till until after Week 1 / Day 5, when we will be gathering information in section.
During the first week of sections, we will be distributing an information sheet, which we ask you to fill out and turn in. We will be using use the information on the form to schedule you for a regular weekly tutorial. A group of two or three people from the same section who would like to study together can request to be assigned to the same tutorial, though we cannot guarantee this due to schedule constraints.
The class is divided into sections of about 30 to 35 students. Each section meets twice each week. Recitations expand upon the material currently being introduced, as well as introducing supplementary material that is not directly covered in lecture. They also give you a chance to practice working with the material in an interactive setting. Recitations are the primary source of interaction with the staff, and your attendance at recitation is essential to good performance in this class. This is your opportunity to ask questions about the lecture material, to work through examples that reinforce the material, and to explore variations on topics introduced in lecture.
Tutorials will be scheduled in your recitation section during the first week of classes. Tutorials are 1 hour small group meetings held once each week, on Day 1 or Day 2. They provide you an opportunity to obtain individual help, to review homework assignments, and to have your progress in the subject checked. Attendance at tutorial is mandatory! If you are unable to attend a tutorial, you must contact your tutor in advance to make alternate arrangements for that week. If you miss a tutorial without prior arrangement with your TA, you will receive no credit for the weekly homework assignment associated with that tutorial, which will result in a drop in your grade for the semester.
The textbook for the course is Structure and Interpretation of Computer Programs, 2nd ed., by Abelson, Sussman and Sussman. This book can be obtained at a discount from Quantum Books. The book is also available (without the discount) from the MIT Press bookstore or the Coop. In addition, an online version is available, and can be found through the link on the course web page.
Your major source for subject materials is the 6.001 web page. On it you will find general announcements, a detailed syllabus and lecture schedule, downloadable implementations of Scheme (the programming language used in 6.001) for use on personal computers, copies of the projects, guidelines for preparing homework, specific information associated with each recitation section, and useful documentation.
Included on the web site (under "Scheme documentation and information on 6.001 Scheme") is the document: "Don't Panic: An Introductory Guide to the 6.001 Computer System''. You should browse through this handy reference manual before going to the lab, as it provides useful descriptions of the 6.001 system, Scheme and Edwin (an Emacs - like editor used in 6.001). It also contains useful information about how to use the 6.001 lab.
Problem sets are released weekly.
Each problem set will include questions associated with parts of the lecture, as well as additional questions intended to reinforce the material covered by the lectures. We strongly suggest that you do the lecture problems while listening to the lectures, and then complete the remaining problems at a time convenient to you. Your work will be reviewed by your TA, who will discuss it with you in tutorial.
Note that the lecture problems (that is, those associated with each lecture) are due by morning of the day listed, since you should have listened to the lecture before the associated recitation. The other problems are due by midnight on the due date listed.
In addition to the problem sets, there will be two or three substantial projects this term, each involving extensive programming that uses the 6.001 computing facility or a personal computer. The programming assignments have been planned on the assumption that you will do the required reading and other preparation before you start programming. It is generally much more efficient to test, debug, and run a program you have planned before beginning than to try to do the planning online. Students who have taken the subject in previous terms report that failing to prepare ahead for programming assignments generally ensures that the assignments will take much longer than necessary.
Not only is it more efficient to begin work on each problem set soon after it is distributed, but it is advantageous to complete your computer work early. If you use the 6.001 Lab, you'll find that there is larger demand for the laboratory facilities and for help from the laboratory assistants just before assignments are due.
Late homework will not be accepted.
In case of illness or absence from MIT, make arrangements to complete assignments with your recitation instructor and tutor.
Your grade in 6.001 will be determined by the following approximate weighting (though the staff reserves the right to consider other factors such as participation in adjusting this formula): two mid-term quizzes (25%), final exam (25%), projects (30%), and problem sets (10%) and course participation (10%). However, you must do the problem sets to pass the course; a passing grade based on the other parts may be converted to a failing grade if you do not turn in all the problem sets, where turning in a problem set means including a serious attempt to complete each problem set.
1. Homework: You are expected to do all the homework. While performance on exams is an indication of basic
competence, performance on homework is your major opportunity to demonstrate outstanding achievement in
6.001. Mediocre homework performance will result in a lower grade, even if performance on exams is good. It is
virtually impossible to get an A in 6.001 unless all homework assignments have been turned in. Missing more
than a couple of the homework assignments may result in a failing grade for the semester, regardless of
performance in exams, tutorials, and recitations. This applies to the weekly problem sets and to the
2. Participation in recitations: You are expected to participate actively in recitation and tutorials. Short review
problems will often be given in lecture, and these are to be worked on and prepared for the following recitation
where you may be called upon to provide your answer to that problem.
3. Participation in tutorials: You may be asked to explain or to expand upon your written homework solutions in
order to demonstrate your mastery of the material. Tutorial participation is mandatory! Students who miss a
tutorial without having made prior arrangements with their tutor will be given no credit for that week's homework
assignment; this will have a major impact on grades. Students who repeatedly miss tutorial should drop the
6.001 Policy on Collaborative Work
Most people learn more effectively when they study in small groups and cooperate in various other ways on homework. This can be particularly true in programming assignments, where working with a partner often helps to avoid careless errors. We are very much in favor of this kind of cooperation, so long as all participants actively involve themselves in all aspects of the work - not just split up the assignment and each do only a fraction.
We are structuring the work this term into two types: problem sets (including both the problems that you should do online as you watch each lecture and the online problems that you should turn in weekly in association with a pair of lectures) and projects. Please abide by the following guidelines with regard to these different types of work. Problem sets (all the online work) are designed to reinforce key concepts. These should be completed by each student individually, though seeking tutoring help from Lab Assistants or other staff is perfectly appropriate. Projects are designed to be larger scale activities, in which group activity is often a key component. For these projects, we encourage you to work with one or two other people. When you turn in your project, you must identify with whom you worked. We expect, however, that you are involved in all aspects of the project, and that you write up your results separately. When you hand in material with your name on it, we assume that you are certifying that this is your work and that you were involved in all aspects of it. Do not just turn in a copy of a single file, write your own versions. This means that you create this file directly, and not just annotate a copy that you received from someone else. We know that this may sound like replication of work, but an important part of learning the material is making the process an active one, which you do by ensuring that you can create and explain your solution.
Here is an example scenario of how a good collaboration might work:
Both (all) of you sit down with pencil and paper and together plan how you're going to solve things. You go together to a cluster and sit at adjacent machines. When one of you has a problem, the others look over your shoulder. You check after each problem to make sure that the others are all caught up. But in each case you write your own solution, seeking help from the others when you have difficulties. On the writeup, each of you lists the names of all of your collaborators.
Not listing the name of a collaborator will be deemed cheating. Similarly, remember that copying another person's work and representing it as one's own work is a serious academic offense and will be treated as such.
In general, we strongly encourage you to work as a group. It's a very effective way of catching conceptual and other errors, and of refining one's thinking and understanding.
See the discussion of the use of "bibles" below for additional information on use of materials in completing problem sets and projects.
Using your own computer
If you want to use your own computer, there are implementations of Scheme for Linux, Windows NT 4, and Windows 95 (sorry, no Macs) available. See the course web page for software and installation instructions.
The problem sets and projects are designed so that they should run on all of these implementations, and you can move your work between them if you find this useful.
6.001 is time-consuming; but the assignments are not intended to require excessive amounts of time. In past subject evaluation surveys, students have typically reported that they spend very close to the expected 15 hours per week on the subject. Spending enormous amounts of time in 6.001 is often the result of simply not asking for help when you need it. If you find yourself spending more time on 6.001 than you think you should, please speak to your recitation instructor. It is also possible to spend an excessive amount of time programming. This is often the result of failing to prepare properly, i.e., not reading the assigned text and exercises, understanding the distributed code, developing plans to solve the questions, etc.
In addition, please be aware that prolonged computer usage combined with poor posture or improper typing habits can result in conditions such as repetitive strain injury. Remember to take frequent short breaks and to consult the medical department for more information.