Kies de Nederlandse taal
Course module: 202001039
Programming Paradigms
Course infoSchedule
Course module202001039
Credits (ECTS)15
Course typeStudy Unit
Language of instructionEnglish
Contact persondr. A. Hartmanns
PreviousNext 1
dr. F. Ahmed
dr. G. Caltais
Examiner M.E.T. Gerards
dr. A. Hartmanns
Contactperson for the course
dr. A. Hartmanns
Academic year2021
Starting block
RemarksB-TCS students register via Osiris; others contact Minor students: register for the minor!
Application procedureYou apply via OSIRIS Student
Registration using OSIRISYes
After successful completion of this module, the student is able to:
  • Describe the major programming paradigms (FP, LP and CP) and their essential characteristics and differences
  • Write basic programs in all major programming paradigms
  • Solve non-trivial programming problems in FP and CP
  • Explain the concepts and importance of typing, in terms of FP and CC
  • Explain and use the typical types and data structures in FP and CP
  • Explain and take advantage of the evaluation and execution mechanisms of FP (lazy evaluation) and CP (hardware-related aspects, concurrency models)
  • Explain and use the following concepts of FP: recursion, list comprehension, higher order functions, function composition, lazy evaluation.
  • Explain and use the following concepts of CP: interleaving, fairness, deadlock, memory models, synchronisation, locking.
  • Explain and use the following concepts of CC: syntactic and semantic analysis, scanning, parsing, run-time organisation, code generation, optimisation.
  • Write a compiler for a non-trivial imperative language with concurrency features generating a given (dedicated) instruction set.
Up until this point, the students have mainly learned imperative, object-oriented programming. This module will extend their awareness and ability in the following directions:
  • Non-imperative programming: in particular, the functional paradigm (extensively) and the logic paradigm (briefly)
  • Programming for concurrent systems: concepts, data structures and algorithms for multi-core and GPU-based parallelism
  • Programming language technology: parsing, compilation and code generation
These three strands are initially taught separately and come together in the module project, where the students develop a compiler for their own language with support for parallelism, generating code that runs on an extensible hardware emulator written in a functional language.
The module presents a mixture of
  • Lectures to provide an overview and motivation of the material
  • Exercise sessions to get familiar with the concepts
  • Laboratory exercises to practice the acquired skills
  • Small projects and a larger final project.
Assumed previous knowledge
Knowledge of programming (in Java) as taught for example in the module Software Systems.
Module 8A
Participating study
Bachelor Technical Computer Science
Required materials
Course material
Compiler Construction and Programming language technology: Engineering a Compiler (Torczon & Cooper)
Course material
Concurrent Programming and Concurrent and Distributed Programming: Java Concurrency in Practice, 1/E (Goetz, Peierls, Bloch, Bowbeer, Holmes & Lea)
Modulehandleiding met aanvullend materiaal on Canvas
Recommended materials
Course material
Learn You a Haskell for Great Good (Miran Lipovača), digital book:
Instructional modes


Project supervised

Project unsupervised


Functional and Logic Programming Project

Functional Programming Test

Concurrent Programming Test

Compiler Construction Test

Integrating Project

Kies de Nederlandse taal