Lectures: 2 sessions / week, 1.5 hours / session
Recitations: 1 session/ week, 1 hour / session
Lecturer: Michael Ernst
In order to take this course, you should have fairly extensive programming experience, some background in language implementation, and a mathematical repertoire including sets, functions, and proofs. The course will be intensive, involving substantial programming assignments and problem sets as well as a significant amount of reading.
We will be using SCHEME+, Scheme with added datatype and pattern matching facilities, for all the programming assignments. Those who know Scheme should have no trouble picking up the new features. Those students not versed in Scheme should be prepared to spend additional time learning the language during the first few weeks of the course. We will be offering a tutorial on SCHEME+ to help bring people up to speed.
This course is intended primarily for Computer Science graduate students. Computer science undergraduates and graduate students from other departments are welcome to take the course as enrollment permits. However, be aware that the course is substantially more challenging than an undergraduate course.
Each recitation instructor leads one one-hour recitation. This is an interactive forum for answering your questions and going over examples of current material. Please come prepared and bring questions!
Professor Ernst will be available after class and by appointment. The recitation instructor is available during designated office hours. At times other than those listed above, you may call or visit your recitation instructor in his office. However, please keep in mind that your instructor may not always have the time to talk to you in such situations. In order to guarantee that the instructor will have time to see you, it's a better idea to set up an appointment with him ahead of time via electronic mail.
There is no required text for this course. The reading material will instead consist of course notes and handouts given out during lectures.
The course notes include the chapters of a book in progress.
The handouts consist of occasional copies of classic papers from the programming languages area.
If you have any comments on the material in the handouts or course notes, especially the draft chapters of the book, please talk to us.
All students are encouraged to acquaint themselves with:
Abelson, Harold, and Gerald Jay Sussman with Julie Sussman. Structure and Interpretation of Computer Programs. 2nd ed. MIT Press, 1996. ISBN: 0262011530.
This excellent text (hereafter referred to as SICP) is used as the basis of the introductory course in computation (6.001). It is outstanding for its high-level view of computer science (emphasizing controlling the complexity of large systems and the use of computer languages as a means of expression) as well as the density of wonderful examples that can be found between its covers (a symbolic mathematics package, a constraint system, a digital logic simulator, a logic language interpreter,a compiler, etc.) SICP, as well as several other books we will reference during the course.
You will be given weekly problem sets throughout the term. Problem sets will typically have both pencil-and-paper problems and programming problems. Be forewarned that many of the problems, especially the programming assignments, are challenging and may take a significant amount of time. Plan your time accordingly. Don't wait until the last minute to start your problem sets!
You may write up the non-programming problems in any reasonable (but legible) format. Problem sets are graded on content, not form. In particular, it is not necessary to typeset your problem sets. We discourage you from wasting your time with a text formatter unless you find it convenient to do so. Some guidelines for the programming assignments are included in the last section of this handout.
If you do not think you will be able to complete a problem set on time, you may request an extension from your recitation instructor. The more advanced the notice you give your instructor, the more likely you are to be granted an extension. Extensions requested on the due date will be denied. And note that, usually,problem sets are handed out on Tuesday and are due the following Tuesday, and solutions may be discussed in the Friday recitations. Problem sets will not be accepted after solutions have been handed out.
This policy implies that you must be realistic in scheduling your time and should begin working on your problem sets well in advance of the due date.
There will be two exams in the course:
a. A 1.5 hour in-class midterm. This exam will cover the course material up to and including the lecture on Control II.
b. A 3 hour exam during finals week. This exam will cover all of the material from the course.
Your grade will be computed based upon your final exam, your midterm quiz, your problem set grades, and your recitation instructor's recommendations. The last time this course was taught, the weighting on these factors was 40%, 30%, and 30%, for the final, midterm, and problem sets respectively, with the instructor's recommendations coming into play in borderline cases. (This is just to give you a sense for the relative weighting; we do not guarantee that the weighting will be the same this year.) Your recitation instructor's opinion of your understanding of the material is formed primarily by the quality and clarity of your problem set solutions as well as your classroom participation.
There are many people who can answer your questions or help you better understand the course material. Your recitation instructor leads an hour-long recitation once each week, holds office hours, and also grades your papers. Make good use of your instructors! Feel free to talk with them after class and during office hours; make appointments to see them at other times. You can always send them electronic mail.
When looking for help, don't overlook other students — not only those who have taken the course in the past, but your classmates as well. Your classmates are a valuable resource; don't forget about them! In fact, we suggest that other students be your first "line of defense" when you have a question about course material. When possible, you should first pose your question to at least one classmate before bringing it to an instructor.
In 6.821 you are likely to learn just as much (if not more) from other students as you are from your classroom experiences. Since we believe that collaboration fosters a healthy and enjoyable educational environment,we encourage you to talk with other students about the course and to form study groups. We especially encourage collaboration between students who were (or are) MIT Course 6 undergraduates and students from other departments and institutions.
Unless otherwise instructed, feel free to discuss problem sets with other students and exchange ideas about how to solve them. However, there is a thin line between collaboration and plagiarizing the work of others. Therefore, we require that you write up your own solution to each problem set. In keeping with the standards of the scientific community, we also require that you give credit where credit is due. If you make use of an idea that was developed by (or jointly with) others, please reference them appropriately in your work. For example, if person X gets a key idea for solving a problem from person Y , X's solution should begin with a note that says “I worked with Y on this problem." and should say 'The main idea (due to Y ) is : : :' in the appropriate places.
When working on problem set problems, it is perfectly reasonable to consult public literature (books, articles, etc.) for hints, techniques, and even solutions. However, you must reference any sources that contribute to your solution.
Problem sets and solutions from previous terms of 6.821 are not considered to be part of the 'public' literature. We require you to refrain from looking at any problem set solutions from previous terms of 6.821 (unless, of course, we explicitly tell you to do so). It is our policy that consulting previous problem set solutions constitutes cheating.
Most of your programming assignments will involve extending or modifying code that we provide. You should turn in all the code that you write. If you make substansive modifications, you should turn in the entire program with your changes clearly marked. If you only make minor changes or they are limited to a few procedures, it is only necessary to turn in those procedures with a note indicating how your modifications interact with the unchanged code.
To convince your graders that your program correctly implements the desired functions, you should
a. provide an English language description of each function and the role it plays and
b. demonstrate the correctness of your program on a sufficient test suite.
You should provide both of these pieces of information — they are not mutually exclusive.