Show The Graduate Center Menu

Programming Languages

Instructor: Assistant Professor Raffi Khatchadourian

Course Description

This course is intended to be a survey on the fundamental concepts and principles that underlie current and emerging methods, tools, and techniques for the design and implementation of modern programming languages. This includes the understanding and appreciation of topics in designing and implementing modern programming languages such as attribute grammars, operational, axiomatic, and denotational semantics, (static and dynamic) type systems, and functional programming and its relationship with mainstream Object-Oriented languages, frameworks, and libraries (APIs).


  • Attribute grammars
  • Operational semantics for Lisp
  • Operational semantics for an imperative language
  • Axiomatic semantics
  • Type systems
  • Concurrency and data structures for concurrent and distributed computing
  • MapReduce and Streaming APIs for mainstream Object-Oriented languages

Textbooks and Materials

While there are no required texts, there are readings from the books listed below. The books will be placed on reserve at the library or are available online:

Title Author
Formal Specification of Programming Languages: A Panoramic Primer Pagan
Formal Syntax and Semantics of Programming Languages Slonneger and Kurtz
The Formal Semantics of Programming Languages: An Introduction Winskel
The Study of Programming Languages Stansifer
Types and Programming Languages Pierce
Lisp 1.5 Programmer’s Manual McCarthy et al.
Semantics with Applications: A Formal Introduction Nielson and Nielson
Java SE8 for the Really Impatient Horstmann
Structure and Interpretation of Computer Programs Sussman and Abelson

Learning Goals

  • Be able to write attribute grammars and derivations of simple programs.
  • Be able to understand and define basic operational semantics.
  • Be able to understand and define basic axiomatic semantics.
  • Be able to formulate and prove type safety theorems.
  • Be able to formulate and reason about key object oriented programming features.
  • Be able to formulate and reason about key concurrency programming features.


Category Percentage
Assignments 20%
Project 25%
Participation 5%
Midterm Exam 25%
Final Exam 25%