Structure and Interpretation of Computer Programs. (MIT course 6.001)
is the first course in the core of departmental subjects which is
required for all undergraduates in Electrical Engineering and Computer
Science.
The course introduces students to the principles of computation. It
uses the Scheme programming language, which is chosen for its
theoretical simplicity, its expressive power in dealing with
functional, imperative, and object-oriented programming styles, and
the fact that it is well-suited to writing interpreters
for a variety of languages.
Upon completion of the course, students should be able to explain and
apply the basic methods from programming languages to analyze
computational systems, and to generate computational solutions to
abstract problems. This includes:
-
Explaining and applying the major mechanisms for control of complexity
in large programming systems: building abstractions, controlling
interaction through conventional interfaces, and designing new
languages.
- Discussing issues of programming style and programming aesthetics.
- Reading and modifying a substantial (20 pages) Scheme program, if it
is written in exemplary style.
- Designing and implementing programs in Scheme that demonstrate the
concepts covered in the course: recursive and iterative processes and
procedures, higher-order procedures, object-oriented methods, data
abstractions, procedures with state, and dispatch on type
- Understanding and modifying interpreters, either at the level of a
register machine description or at the level of a higher-order
language description.
The course is based upon the popular textbook Structure and
Interpretation of Computer Programs, 2nd ed., by Abelson,
Sussman, and Sussman. The complete textbook is available online from the MIT
Press, and there are extensive course materials, exams, and sample
syllabi
on MIT OpenCourseWare.
The online material for 6.001 has been in use at MIT since the fall of
2000, with about 500 students each year. The material includes
recorded audio lectures by Prof. Eric Grimson that are matched to
lecture slides, full transcripts, and lecture handouts. There are
also weekly online interactive homework problems using the 6.001
tutor. With the tutor, students fill in answers and ask the system to
check and score their answers. They then submit the results, which
are maintained in a data base for use by the course instructor.
iCampus maintains a public implementation of the 6.001 tutor at
icampustutor.csail.mit.edu/6.001-public.
Anyone is free to use this for demonstrations or self-study.
Click here for help on
getting started with the iCampus 6.001 online public tutor.
iCampus invites faculty to use the online tutor for teaching classes.
If you want to do this, you should first experiment with the system
yourself, and then contact the iCampus Outreach Director to arrange
for your class to use a customized instance of the course. a
customized instance lets you provide your own messages
and set the due dates for the assignments. We will also give you
access to tools for managing student accounts and reviewing student
scores on the problems.
iCampus can provide only limited personal support for your
teaching, but we do invite you to participate in a self-help learning
community of students and teachers who are using this material.
Send mail to icampus@mit.edu to request a customized course
instance for your class.
Whether you are using this material for self study or for a class,
we invite you to download Scheme software and try some of the programming
projects developed for 6.001.
Students taking the course at MIT use MIT/GNU Scheme, which has
implementations for Linux and Windows X86 platforms. The software
and documentation are freely available at http://www.gnu.org/software/mit-scheme/.
You can find a collection of programming projects here
on MIT OpenCourseWare. In particular, "Project 0" on that page helps
students get started with the Scheme software and the integrated
editor and debugger.
Additional programming assignments, made available by the MIT
Press, can be found here.
|