Lecture Notes: Theory (and Practice) of Programming Languages

Welcome! In this course, we study programming language concepts and paradigms in the context of contemporary software engineering practice. This version of the course is normally taught by Konstantin Läufer and focuses on functional and concurrent programming languages with examples and projects mostly in Scala.

We maintain these lecture notes using GitHub. We also offer PDF and ePub formats for offline/mobile reading.


These notes are still being written, so expect a few rough edges. But we’re getting closer! Your contributions are highly welcome! Please submit issues and pull requests.


add sample projects, activities, tests, and (tiered) master list for presentations