NYU, Graduate Division, Computer Science Course, CSCI-GA.3110-001 

 Honors Programming Languages 

 Patrick Cousot 

 Spring 2016 

Prerequisites, Description, Schedule, First class, Office Hours, Textbook, Homework, Midterm, Spring Recess, Personal Project, Last Class, Reading Day, Final, Academic integrity, Requirements, Grading, Course content


The course is opened to PhD students and Master students eager to study at the PhD level, which presupposes basic knowledge in mathematics (set theory and logic), the practice of programming in any high-level programming language, and basic knowledge in formal methods.

Students without this minimal background will not fully benefit from the course.

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 and programming models. Moreover research in programming languages is very active, so that 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, models, concepts, and tools to cope with legacy, portability, inter-operability, scalability, safety and security challenges in programming.

Basic concepts of programming languages

Languages are designed out of basic ideas, concepts, models, 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 and abstractions. Examples are static and dynamic languages, typing and type inferrence, object-orientation, modularity, data organization, allocation and handling (e.g. stack, heap), control structures (iterators, recursion), abstraction (functions, objects), environment accessing (scripting), reflexion (self-modification of behavior), shared-variables/communications concurrency, etc. Moreover modern programming languages come with advanced tools (for example to verify the correctness of programs) which underlying principles must be well understood to be able to use these tools.

Which languages to learn

The course will introduce a panorama of programming languages concepts underlying the main programming language paradigms (such as imperative, functional, object-oriented, logic, concurrent, and scripting languages) and present in detail the formal methods (code semantics, specification, and verification) used in modern high quality assurance tools for software safety and security. A programming project (design and implementation of an interpreter/compiler for an dynamic object-oriented mini-language) will be programmed in OCaml, a multiparadigm language introduced at the beginning of the course and supporting imperative, functional, and object-oriented programming styles.

Class Hours:

Tuesday and Thursday, 3:30PM—4:45PM, WWH 312.

First class:

Tuesday, January 26, 2016 (see the
Spting 2016 academic calendar).

Office Hours:

Tuesday/Thursday, 2:00PM—3:15PM, WWH 405, by email appointment only, to avoid wait lines.


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


The careful reading of the course notes is mandatory. The homework exercices are facultative and given for encouraging the improvement of one's knowledge and self-training in the perspective of the exams. No answers to homeworks are given. Students are encouraged to discuss and compare their solutions with other students and, in case of doubts, to ask for help during office hours.


Thursday March 10th, 2016

Spring Recess (no classes scheduled):

Monday, March 12th, 2016 — Sunday, March 20th, 2016, see the
Official University Academic Calendar

Personal project:

Last Class:

Tuesday, May 7th, 2016

Reading Day:

Tuesday, May 10th, 2016


Thursday May 12th, 2016

Academic integrity:

See the
NYU computer science department commitment to academic integrity and the Academic Integrity of the College of Arts and Science

Course requirements:

Midterm, programming project, oral presentation of a programming language, and final exam.


Midterm (20%), oral presentation of a programming language (20%), programming project (30%), and final exam (30%).

The course content is online

© P. Cousot