Programming Paradigms
This course examines key design decisions and major differences between programming languages, focusing on characteristics such as state, control flow, process communication, data types and modularity.
These decisions shape everyday engineering: git branches instantly because it never overwrites data, allowing access to all previous states; WhatsApp serves hundreds of millions of users on message-passing concurrency; Android adopts Rust because most security vulnerabilities are memory errors that the language design rules out through its type system. These concepts, however, have a wider scope than any single technology or programming language that only make some design choices default. As AI assistants generate more of the code, recognizing the paradigm beneath an unfamiliar program becomes a core engineering skill. In this course, we will learn to identify and apply these design decisions through study, practice, and implementation.
Twelve sessions, every Wednesday 12:30–16:15: a 2×45 min lecture, then a 2 h lab with homework. We already know Java, C#, Python and some C; we will read and write OCaml and other languages as the ideas require them.
Session titles are listed from the start. Topics, languages and lab material appear for each session as we reach it — later sessions may still change.
Sessions
| Session | Lecture material | Lab | Homework |
|---|---|---|---|
| 1 Intro | Slides | — | — |
| Part 1 Data & functions sessions 2-5 | |||
| 2 Persistent Data Structures | Slides tour.ml | Handout Lab Code | Part E OCaml |
| 3 Algebraic Data Types | — | — | — |
| 4 Functional Programming | — | — | — |
| 5 Higher-Order Functions | — | — | — |
| Part 2 Concurrency sessions 6-8 | |||
| 6 Asynchronous Programming | — | — | — |
| 7 Multi-Threading | — | — | — |
| 8 Message Passing | — | — | — |
| Part 3 Types & abstraction sessions 9-12 | |||
| 9 Static Type Systems | — | — | — |
| 10 Polymorphism | — | — | — |
| 11 Data Abstraction | — | — | — |
| 12 Declarative Programming and Conclusion | — | — | — |
Exam format
Oral exam. The exact modalities will be announced in September.
Materials
Slides, handouts and lab code live in the course repository, linked from each session page as the course runs. Clone it once and git pull for updates.