Dan Grossman Teaching Materials
I developed these materials for an introductory graduate-level course on programming languages that I taught almost annually from 2003–2012. The materials on this page have been suitably cleaned up and extracted from any particular course offering so that they should be easy for others to adapt in whole or, more likely, in part. Instructors are welcome to modify and post modified materials however they wish. There is no need to retain my name.
Most of the students in my courses were top Ph.D. students in areas other than programming languages. My goal was to impart the field of programing languages' emphasis on well-defined software, precise definitions, model-building, and rigorous proofs, which should serve all computer-scientists well. An important secondary goal was to make the research literature more approachable and to provide an essential starting point for junior researchers seeking to contribute to programming languages.
As usual for this sort of course, few formal pre-requisites are assumed. Mathematical maturity, programming ability, and familiarity with proofs by induction are important for handling the material and, just as importantly, appreciating it.
The course material is organized into 26 "lectures" plus a Caml programming tutorial, with slides (pdf) and other materials linked to below. Because I do not have corresponding reading notes, instructors will likely want enough expertise to know most of the content already. They will also surely want to modify/reorder/add/delete content, so below the list of lectures are all the source materials, instructions for using them, and a graph that approximates dependencies among lectures.
I use these materials in a 10-week (quarter, not semester) course with 2 80-minute lectures per week. Many lectures do not correspond to 80 minutes: Lectures 1, 2, 12, 17, 18, 19, 24, 25, 26, and possibly others are shorter; some others are likely longer. Overall there is more material than I can cover in 10 weeks, so I usually skip some or all of the material in lectures 13, 14, 18, 19, 25, and 26. Conversely, there may be too little material for a semester, but there are many great topics for which I have not developed materials, such as type inference, modules, programming with laziness, monads, type classes, denotational semantics (cf. lecture 5), Hoare logic, abstract interpretation, pi calculus, etc.
(Caml tutorial and what depends on it not shown)
Instructions for editing and compiling lecture slides (nothing very complicated):
.tex
files that every lecture's .tex
file includes (via \input
):
lecture_defs.tex
defines macros for things like the title and instructor of the course. Edit this
once to affect all lectures' title slides and footers. It also has basic Beamer configuration that you do not
need to change unless you prefer different styles.
lang_defs.tex
defines macros relevant to PL semantics that are used in more than one lecture.
\pause
command so that material appears incrementally, i.e., a very simple form of
animation. By default, running pdflatex
will cause each incremental version to appear on its own slide,
as you want for presentation. Conversely, the documentclass option handout
renders \pause
irrelevant so there is only one slide with all the content. At the top of each lecture's .tex
file are two lines,
one commented out, for easily toggling this behavior.
handout
option. The 6up pdf files above were
made with the handout
option followed by using Adobe Acrobat to "print" the file using
these non-standard options: landscape orientation, 6-pages per sheet, fit to printable area. While there are command-line
tools to automate printing 6-up, I have not found their output as visually pleasing.
Please do not post solutions to these exercises. Instructors may contact me for sample solutions.
In a 10-week term, I recommend these 5 assignments (though I'm least satisfied with Homework 4):
* Contact me for the Homework 4 code. It contains a solution to Homework 3, so it should be mailed to students or posted in an appropriately private place.
Here are additional homework problems that work well. You might prefer them or have a longer course.
I have also used this end-of-term reading/writing assignment: pdf tex
The list of suggested papers for the writing assignment should be updated so that it emphasizes recent work. Other instructors will surely have great additonal suggestions. Choosing papers at the right difficulty level — requiring some additional reading by students but remaining approachable after (and only after) taking most of the course — is crucial. I also believe a list of 15-20 papers is about the right length; it gives a diverse set of options without asking students to peruse vast amounts of the literature.
The midterm exams are 80 minutes long and cover material up through lecture 10:
The final exams are 110 minutes long and predominantly cover material not covered on the midterm:
Naturally there are many great graduate-level PL courses. The courses above are those I am aware of that are most similar to my materials and have significant materials available on-line. Please let me know of others.
Please let me know how you are using these materials and how they can be improved. Even typos are helpful.
Last updated: June 2020