Slides:

Mailing List:

Objectives:

We will examine basic concepts underlying the design of
modern programming languages: types, control structures, abstraction mechanisms,
inheritance, concurrency, constructs for programming in the large, etc. This is
not a programming course per se, but there will be programming assignments in
several languages, imperative and functional. The languages are chosen because
of the interest of their features, and not necessarily because of their wide
use. We will touch on Ada, C++, C#, Java, LISP, ML, Python, Scheme, and mention
many others.

Course Work:

Assignment 2:
A choice of either APL or Python. Due date: March 30.
For this assignment,
you can look further afield in the ACM assignments and go to a previous
year if you like, or to regional competitions. Part of the assignment
is to choose a problem that really shows off the chosen language
effectively. Include in the documentation a discussion of why you
chose the particular assignment you did. Note: digital roots and scramble
sort are not allowed.

Assignment 3: Scheme. Due date: April 13.
The same as assignment 2, except scheme as the
language.

Assignment 4: ML. Due date: April 27.
Recode the example you chose in assignment 3 in
ML. Include in the documentation a discussion of Scheme vs ML for
the problem you chose.

Recommended Textbooks

Michael Scott: Programming Language, Pragmatics (Morgan Kaufman 2000)

This is an excellent recent text that covers both language design
and compiler fundamentals. In your readings for this course you don't need to
study any section that has to do with translation and compiler construction, but
that material is interesting, and you will examine it in more detail when you
take the Compiler Construction course.

John Barnes: Programming in Ada95

You must have some good text on C++ and on Java. For C++,
the 3rd edition of

Stroustrup: the C++ programming Language

is
the standard
reference. For Java, the language definition is given in:

Gosling, Joy and Steele: the Java Language Specification.

For both languages, there
are several
introductory texts by Horstmann that are very well-written, and innumerable
others.

Several people asked for an easy reference for learning Scheme (unlike the
official reference manual already on the web page). Dr. Goldberg recommends:

APL:

Ada:

You can use the GNAT compiler on all servers at NYU. All the
needed files are in /usr/local/pkg/gnat/bin/, so you should place this directory
in front on your path. If your test program is called numbers.adb, you create an
executable for it simply by writing: