Structure and Interpretation of Computer Programs


Learning Objectives:


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:

o      building abstractions,

o      controlling interaction through conventional interfaces, and

o      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.


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):

o      Building abstractions:

        computational processes;

        higher-order procedures;

        compound data;

        data abstractions.

o      Controlling interactions:

        generic operations;

        self-describing data;

        message passing;

        streams and infinite data structures;

        object-oriented programming.

o      Meta-linguistic abstraction:

        interpretation of programming languages;

        embedded languages.

        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).