Wednesdays 5:00 - 6:50
Room 109, Warren Weaver Hall
Professor Edmond Schonberg
Instructor: Edmond Schonberg (firstname.lastname@example.org)
Office hours: CIMS 420. Wednesday 3:00p m to 5:00 pm and by appointment.
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.
Undergraduate courses in data structures and algorithms, familiarity and
programming experience with one of the following: C, C++, Ada,Java, or Pascal.
Programming assignments, midterm, final examination. Assignments count for
40% of the grade, but you must hand in all assignments.
Michael Scott: Programming Language Pragmatics (Morgan Kaufman 2009)
This is a excellent recent text that covers both language design and
compiler fundamentals. In your readings for this course you don't need to
study sections that deal with translation and compiler construction issues,
but that material is interesting, and you will examine it in more detail when
you take the Compiler Construction course. The latest edition of the book has
just appeared, but you can use an earlier edition if you have a copy of it.
John Barnes: Programming in Ada2005 Addison Wesley
We will mention Ada in several contexts because the language design highlights some
fundamental issues about programming in general. This is the standard text
on the language. We will also use on-line materials listed below.
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.
We will discuss functional languages, specifically Scheme and ML, for which
there is abundant on-line documentation. The older book by Ravi Sethi:
Programming Languages, Concepts and Constructs, has several good chapters
on functional languages. For ML, a good pragmatic reference is "ML for the
working Programmer" by Paulson.
We will discuss scripting and so-called very high level languages, and
focus on Python and Perl, There is abundant on-line documentation for both, and
several programming texts and users guides from O'Reilly.
All students should register themselves with the class list, which is used for
all technical discussions concerning the course. To
register, go to the following web page, and follow the instructions:
g22_2110_001_fa11 class list
You can also subscribe by sending an e-mail message to
contents of the message should be the single line:
you will be notified in return that you are a list participant. Please send
all your questions to this list (not to the instructor) so that everyone can
You are free to do the programming assignments on any machine you choose,
either the NYU servers, some other machine at work, or a personal computer
at home. For each programming assignment, Indicate what compiler you used.
Assignments must be submitted electronically. Send plain text, not Word files
or other exotic formats. For executable programs, provide the test data and the
output, and indicate the compiler you used. Send the assignments to: