On this page:
History of Programming Languages

History of Programming Languages



In this seminar course, we will study themes in the programming language research area from a historical perspective.
This idea of "several steps" is distinct from the modern idea of publishing every single thought that occurred to someone over breakfast so that the dean can get a high count for her yearly report.
The primary goal is to understand some of the major themes in the discipline as it exists today and how these themes evolved in several steps. Initially, the seminar will focus on two themes close to the instructor’s heart: how semantics emerged and how languages evolved that do not adhere to the common idea of a fixed syntax, scope, and semantics. The choice of other themes will entirely depend on students’ interests and preferences. All programming language themes are welcome.
The secondary goal is to develop basic skills for understanding and describing research themes. Every student will learn to approach a theme by reading a series of papers, preparing an annotated bibliography, and presenting the key steps in the evolution of the theme.
The intended audience consists of PhD students who will write a dissertation in the area and MS/undergraduate students who wish to deepen their understanding of the programming language area. PhD students at all stages of research will benefit. Someone close to the writing stage will have a chance to develop the bibliography for the chapter on background work; students at an early stage can use this opportunity to find, refine, or reject an idea for dissertation research.

Prerequisites Ideally, a PhD student should have taken Intensive Principles of Programming Languages. An undergraduate or an MS student should have taken Principles of Programming Languages and studied some additional topics of interest outside of courses.

Chosen First Topics



Cameron Moy


higher-order contracts



Helena Dworak


relational programming, Kanren (tentative)



Olek Gierczak


gradual typing semantics



Lucy Amidon


programming languages and operating systems



Josh Goldman


type inference, origins and brittleness



Donald Pinckney


functional reactive programming



Andrew Wagner


session types



Mitch Gamburg


pi calculus



Ryan Guo


system F type systems



Daniel Melcer


automatic differentiation



Michael Ballantyne


hygienic macro expansion



Jared Gentner


macro definitions

Chosen Second Topics

Cameron Moy


run-time verification

Olek Gierczak


logical relations in PL

Lucy Amidon


dependently typed logic (tentative)

Donald Pinckney


compiler generation (tentative)

Andrew Wagner


the expression problem