NYU, Graduate Division, Computer Science Course, G22.3110-001 

 Honors Programming Languages 

 Patrick Cousot 

 Spring 2011 

Prerequisites, Description, Schedule, Office Hours, Textbook, Requirements, Grading, First course, OCaml Course content


Basic practice of programming in any high-level programming language.

Course Description:

Objective of the course: learning how to learn programming languages

Programming is one of the basic activities of computer scientists which implies to know one or several programming languages. In the history of computer science thousands of programming languages have been invented, implemented, and used. Moreover each language has many revisions, dialects for different computers and operating systems, and domain-specific variants. It is therefore impossible to know all programming languages. Moreover, computer scientists are very likely to use many programming languages during their career that simply did not exist at the beginning of their career. Hence, it is extremely important to learn how to learn new programming languages. This is precisely the main objective of this course which provides a methodology to learn and use programming languages.

Basic concepts of programming languages

Languages are designed out of basic ideas and programming styles that can be explained and understood independently of a particular languages and have as many instances as programming languages emboddying these features. The course will extensively study such features. Examples are typing and type inferrence, object-orientation, modularity, data allocation and handling (eg stack, heap), control structures (iterators, recursion), abstraction (functions, objects), environment accessing (scripting), reflexion (self-modification of behavior), etc.

Which languages to learn

The course will introduce a panorama of programming languages representative of the main families of programming languages (such as imperative, functional, object-oriented, logic, scripting). A programming project (design and implementation of an interpreter for an object-oriented mini-language) with be programmed in OCaml, a multiparadigm language introduced at the beginning of the course


Tuesday and Thursday, 3:30PM—4:45PM, WWH 312
Office Hours: By email appointment on Thursday, 2:00PM—2:30PM, CIWW 405


None, all information (including course notes) is provided online by the instructor.

First course:

Tuesday January 25st, 2011
Due to the participation of the instructor to the
12th International Conference on Verification, Model Checking, and Abstract Interpretation (VMCAI 2011), January 23—25, 2011 Austin, Texas, USA (see the accepted papers) and the 38th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL 2011), January 26—28, 2011 Austin, Texas, USA (see the program), the first course will be given by Benjamin Goldberg.

Course requirements:

Homeworks (exercices), individual oral presentation of a programming language, programming project, midterm and final exam.


Homeworks (10%), individual oral presentation of a programming language (20%), programming project (30%), and final exam (40%).

The course content is online

© P. Cousot