Prerequisites

Text Materials

Course Goals

The purpose of the course is to introduce the fundamental concepts and
methods of the complete spectrum of programming paradigms. The traditional
styles of programming
languages -- imperative languages (e.g., Pascal, C, etc.) and object-oriented
languages (e.g., C++, Java, etc.) -- do not provide a full appreciation of
programming concepts.
Several other substantially different styles offer an expanded view of
useful programming ideas.
These alternative styles are explored, including
both their relation to, and influence on, modern languages. Students should
gain insight into the central ideas of the other major paradigms, be equipped to
more easily learn new programming languages when they are encountered, and
obtain a deeper understanding of languages that are already familiar.

Two new languages will be presented in considerable detail. These languages are
uncomplicated in the sense that each is organized around a single conceptual idea
and adheres to it faithfully. But the fundamental ideas are quite different from
customary languages, and it will require active involvement to achieve
a solid understanding of each of them in the available time. In particular,
the computer facilities should be used to explore and experiment beyond the
programming assignments.

Course Administration

There will be two in-class exams, a final exam,
plus regular homework assignments. The
weighting of these items in grade determination is as follows:

homework

20%

exam I

20%

exam II

20%

final exam

35%

subjective

5%

The exams are all open book/notes and emphasize problem solving skills.
Exam 1 will be given on Monday, October 17, and the
second exam will be given on Friday November 18.
The final exam is scheduled for 12 PM (noon), Thursday December 15.

You are encouraged to consult sources other than our texts (even if there is no
directed reading assignment), including both reserve books and on-line material.
You are also encouraged to discuss the course topics with your classmates since it
is a genuinely helpful learning activity to formulate your own thoughts about the
material sufficiently to express them to others. But since the homework counts as
a significant portion of your grade, it is expected that submitted work will be strictly
your own; the department has explicit procedures for cheating that are described
in the CS Undergraduate Handbook.