Programming Paradigms SW7 · Autumn 2026 · AAU Copenhagen

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

SessionLecture materialLabHomework
1 IntroSlides
Part 1 Data & functions sessions 2-5
2 Persistent Data StructuresSlides tour.mlHandout Lab CodePart 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.