# Syllabus

## Course Meeting Times

Lectures: 3 sessions / week, 1 hour / session

## Objective

Concepts and techniques for the design and implementation of systems that are evolvable—that are easy to adapt to variations in the set of problems that they are designed to address. Exploratory behavior—means for decoupling goals from strategy. Escape from the constraints of expression-based language. Working with partially-specified entities. Managing multiple view points.

Strategies include language layering, generate-test separation, and propagation. Techniques to be discussed are generic operations, combinators, backtracking, dependencies, and incremental refinement.

## Readings

The readings for this subject will be taken from a variety of sources. There will be assigned readings with each problem set. All of the books we need will be on reserve in the library. You will need SICP (Abelson, Sussman, and Sussman; Structure and Interpretation of Computer Programs). Material from that book will be referred to quite often. This book is available online, but dead trees are often easier to work with.

Abelson, Harold, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. 2nd ed. Cambridge, MA: MIT Press, 1996. ISBN: 9780262011532.

You will also need to consult the MIT/GNU Scheme documentation.

## Assignments

We will distribute an assignment on Wednesday almost every week. The default arrangement is that the assignment is due on Wednesday the next week. Most of the assignments will require the use of a computer running MIT/GNU Scheme, which runs on most systems, including GNU/Linux, Windows, and Mac OS. This is free software. We will provide any other software needed.

See this link to find out what is meant by "free software".

## Projects

Just before spring break you will propose an extended project, which will be due by the end of the term. In this project you will design and build a significant piece of symbolic-manipulation software. If you don't come up with a great idea yourself, we have some ideas that you might pursue. You will be expected to write elegant code that can be easily read and understood by us. You must supply a clear English explanation of how your software works, and a set of test cases illustrating and testing its operation. You will present a brief summary and demo in class near the end of the term.

## Grades

The grades for this subject will be determined by a combination of classroom participation, homework, and project work. There are no examinations in this subject. We expect you to be at every class and to work every problem set.

## Collaborative Work

Many people learn more effectively when they study in small groups and cooperate in various other ways on homework. 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. When you hand in a paper with your name on it we assume that you are certifying it as your work and that you were involved in all aspects of it. Even if you work with others you should do the write up separately, and you should indicate the names of any collaborators for each part of the assignment. However, we encourage you to make the final project a team effort with a joint presentation and write up, so please try to find collaborators early in the term for this work.