Programming Languages

CSCI-GA.2110-003
Fall 2011

Time and Location


Lecturer Info

Cory Plock
plock `at' cs dot nyu dot edu
Room 328, WWH
Office Hours: Mondays 7:00- 8:00 PM

Grader Info

Changok Kim
changok.kim `at' cs dot nyu dot edu



Section Leader Info

Liana Hadarean
lianah 'at' cs dot nyu dot edu
Room 404, WWH
Office Hours: Monday 10-11 AM


Objectives

We will examine basic concepts underlying the design of modern general-purpose programming languages: types, control structures, abstraction mechanisms, inheritance, concurrency, garbage collection, constructs for programming in the large, etc. Implementation issues and data structures will be discussed. We will discuss a representative sample of languages across each of the imperitive, fuctional, logical, and object-oriented language paradigms. Our main goal will be to focus on key features, ideas, contributions, and influences of each language we discuss in the course. We will also discuss the purpose and importance of language standards. Coming out of this course, you should be able to better understand the languages you already know, reason about the pros and cons of each, more easily learn and understand new languages, and have an appreciation and understanding of both the theoretical and practical underpinnings.

Our goal is not to try and cover as many languages as possible, nor is it to spend considerable time on mundane syntax issues, nor focus heavily on any one language. It is also not a software engineering course where you will write large programs or work in groups. It is also not a compiler course where we will study deeply the full process of translating input to executable code, although we will briefly discuss this process and offer somewhat more detailed treatment on lexical analysis and parsing.

There will be programming assignments in several languages across all major language paradigms. The languages are chosen because of the interest of their features, not necessarily because of their wide use. We will touch on Algol, Ada, C++, Java, Scheme, Prolog, ML and mention others.

Prerequisites

Undergraduate courses in data structures and algorithms or equivalent, as well as familiarity and programming experience in C, C++, Ada, Java, Pascal or a similar language.

Texts

Mailing list

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:

cs.nyu.edu/mailman/listinfo/g22_2110_003_fa11

Please send all your questions to this list (not to the instructor) so that everyone can participate.

Course Outline

Grading

There will be two tests: a midterm and a final. In addition, there will be a number of programming assignments, and some non-programming homework. The weights will be:

Programming Assignments

There will be a number of paper and pencil assignments and programming assignments in various languages. In all cases, I will specify the compiler/interpreter to use, all of which will be freely available for download and will support all major OS/hardware platforms.

Cheating Policy

Don't do it! The work you hand in should be your own. You can read the department's policy here. Violations are taken very seriously; here is a quote from the link above:

"Disciplinary actions can vary in severity and can result in probation or termination from the graduate program."

If you find yourself falling behind, please see me before it's too late.