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