Department of Electrical Engineering and Computer Science

6.001--Structure and Interpretation of Computer Programs

Spring Semester, 2003



General Information


Issued/released: Tuesday, February 4, 2003



Welcome to 6.001!


We are distributing this organizational memo in printed form, but in general all information about 6.001 will be placed on the 6.001 web page located at





You should check this page regularly for announcements, schedules of when lectures are due, and more detailed information about 6.001.



Contact information


(Virtual) Lecturer, Instructor in Charge: Prof. Eric Grimson –  Office: 400 Technology Square, NE43-V-607, Ext: 3-5346, Email:


Course secretary: Jill Fekete--Office: 400 Technology Square, NE43-V-606, x3-6693, Email:

Recitation changes contact: Jill Fekete by email ONLY:


Scheduled exams: (mark these on your calendar now)



Subject meetings


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 10-250, 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 in 10-250.  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 lectures can be accessed via the 6.001 online tutor system, which will be described in recitation section, and which is reached by clicking the appropriate link on the course web page:


The first time you use the tutor, it will ask you to set up a username and password. You will find a button “Choose a Lecture” on the main tutor page that will take you to the lecture page.  As well, you can use the “Set Preferences” button to set your choice of how you want to view the lectures.  We plan to allow viewing of the lectures by PowerPoint (instructions on how to load a PowerPoint viewer are provided on the web site), as a Java Script, or as an HTML presentation.  If you prefer not to listen to the audio, the latter two methods also will provide text annotations to go with each slide.  Details on the use of the tutor are described below.




The Registrar’s office will have assigned you to a specific section of 6.001 – please ignore this assignment.  Because of special circumstances in the class, we are going to redo the section assignments.  During the first lecture (today!) you will be filling out a form, which we will use to assign you to a section.  We will post section assignments on the web site later this afternoon. In order to keep sections balanced, we ask you to attend that section.  If for some reason you cannot, you MUST contact Jill Fekete ( BY EMAIL asking to switch sections.  Jill will try to find a new section to accommodate you, but because of the need to keep sections reasonably balanced in size, she may not always be able to do so. Please do not contact Jill until after the first day of recitations.


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 25 to 30 students. Each section meets twice each week (on Wednesday and Friday). 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 one-hour small group meetings held once each week, on Mondays or Tuesdays.  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.



Course Materials


The textbook for the course is Structure and Interpretation of Computer Programs, Second Edition 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, onto the 6.001 online tutor system.  This tutor is found by clicking the appropriate link off the course web page:


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.  As you will see, the tutor system provides you with an opportunity to check your answers.  This will provide you with feedback as to which problems you have understood, and which still need work.  Please note that once you press the “submit” button, the answers for that question will be locked in.  This is equivalent to your turning in your answers to the TA, and thus you cannot change them.  Your answers must be submitted by the due date listed on each problem set. 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 9:00 AM of the day listed, since you should have listened to the lecture before the associated recitation.  The other problems are due by 24:00 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.




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 on-line as you watch each lecture and the on-line 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 on-line 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 version.  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.  Also note that if you are having trouble solving a problem, please take advantage of the Lab Assistants.  Part of their responsibility is to answer questions and provide advice and guidance on the course material. 


See the discussion of the use of “bibles” below for additional information on use of materials in completing problem sets and projects.


The 6.001 Programming Laboratory


The laboratory facility for 6.001 is located on the fifth floor of Building 34. The room contains 40 Pentium III personal computers, laser printers, and network servers. These PCs were donated to MIT by Intel in 1999. There are sign-up sheets in the lab that you can use to reserve machines, in the event that they become difficult to access.


The 6.001 laboratory is staffed by undergraduate lab assistants  (LA’s) who are there to help with the assignments and answer questions about the system. Perhaps more so than the availability of machines, a key benefit to your working in or visiting the lab is the opportunity to get help from the lab assistants. Lab coverage hours will be posted. Please do not attempt to cajole lab assistants into staying beyond these hours--they work long hours as it is, and they need occasional sleep.


The 6.001 Lab is reserved for the exclusive use of students in 6.001. You'll find it convenient to work here because the Lab Assistants are available to help you, and you can share the warmth and camaraderie of your classmates while you work on problem sets. If you want to use your own computer, the 6.001 staff provides implementations of Scheme for Linux, Windows NT 4, and Windows 95 (sorry, no Macs). 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. For example, you might start problem set at home, then spend some time debugging it in the lab where the Lab Assistants can help you, and then finish things up at home.


6.001 is not officially supported on Athena. The implementation of Scheme on Athena that runs on Linux machines should be compatible with the 6.001 implementations, although we do not guarantee that it can run all the problem sets.  Other versions of Scheme on Athena are likely not to be compatible with 6.001.


The lab machines are set up as Athena machines in the following manner, however.  They will automatically save all your work in your Athena home directory (in ~/u6001/work by default).  You can perform most Athena operations on these machines.  Please note that this is not a supported Athena platform, so don't bug I/S employees with problems.  Send all bug reports, comments, and questions about the lab setup to


Using your own computer


You'll find it convenient to work in the 6.001 lab because the lab assistants are available to help you, and you can share the warmth and camaraderie of your classmates while you work on problem sets. In addition, you can send email to if you are in need of technical assistance with the Scheme system.


If you want to use your won computer, the 6.001 staff supports implementations of Scheme on machines running Athena-Linux, GNU/Linux, Windows 95, NT, 2000 or XP.  We do not support Macintoshes.  Furthermore, if you use Athena, you can only run Scheme from an IBM or a Dell computer.  Finally, you cannot run Scheme from a dialup Athena machine.. If you have a PC capable of running Scheme, we suggest that you install it there, since it will be convenient for you to work at home. The 6.001 lab is probably the best place to work if you want help, however, since that is staffed by knowledgeable and friendly Lab Assistants.


See the course web page for software and installation instructions (found at 


One way you can use Athena is as a repository for your own working files, and for transferring the files between the 6.001 Lab and your personal machine. See the 6.001 problem set web pages for information on transferring files.


During the semester, we will place copies of the 6.001 project code on the web page, so this can be downloaded by people doing 6.001 on PCs. (Most of the problem sets will not require that you load pre-designed code, but the projects will generally build upon code that we provide for you.)




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.


Getting Help


The 6.001 staff is always willing to help you. If you feel that you are getting lost, cannot understand the statement of a problem, have a gripe about the way things are being done, or have any other problem that we might be able to help with, please come see us. We hope that you will develop a good relationship with your tutor and recitation instructor as the term progresses. Do not hesitate to call for help.


For additional tutoring resources, we recommend that you contact MIT Tutorial Services at 3-8406, who can put you in touch with tutors who are experienced in giving help with 6.001.




6.001 Bibles


Collections of past 6.001 homework assignments and solutions are available in various living groups. A database of 6.001 problem sets and solutions is also available on the 6.001 Web page and in the 6.001 locker on Athena.  This material must be used very carefully. It is legitimate to use bibles as a source of supplementary problems for additional practice, to try to test and increase your understanding of the material.


It is not legitimate to use bibles a source of code or solutions to any of this year’s assignments. Doing so is not only likely to hinder your learning the material, it is intellectually dishonest and a form of cheating. In recent terms several students made use of bibles in this way, resulting in disciplinary action taken against them. Do not copy from bibles. Solve the problems on your own, or with assistance from the teaching staff.

Return to 6.001 Home Page