The goal of this course is to teach how fundamental programming language techniques, algorithms and systems work by writing their miniature versions. The course covers multiple paradigms including functional, object-oriented, imperative and logic, as well as end-user programming environments like spreadsheets. Examples will be given using the F# programming language, which will be briefly introduced.
This course is no longer taught, sorry!
The course was taught in 2023/24 and 2025/26, but it will not run in its original form in the future. All the course materials (code and video recordings) are available below, and so you can follow it on your own if you're interested! We incorporated a lot of the material from this course into the labs of the new course Principles of Programming Languages (NPRG084).
Looking for a replacement? Check out Tomas Petricek's current teaching!
Course archives
- Course page for 2025/26 with the latest slides & videos and code (the best place if you want to follow the course on your own)
- Course page for 2023/24 older video recordings with one file per lecture (earlier versions with some smaller differences)
- Source code on GitHub and Lecture recordings on YouTube
