Official course description:
Full info last published 31/07-19

Advanced Programming, Master (Professional education)

Course info
ECTS points:
Course code:
Offered to guest students:
Offered to exchange students:
Offered as a single subject:
Price (single subject):
10625 DKK (incl. vat)
Master programme
Master in Software Engineering
Course manager
Full Professor
Assistant Professor
Teaching Assistant
Teaching Assistant (TA)
Teaching Assistant
Teaching Assistant (TA)
Teaching Assistant
PhD student
Course semester
Efterår 2019
26 August 2019
31 January 2020
Exam type
ekstern censur
Grade Scale
Exam Language

This course addresses advanced programming techniques, with a special attention on functional programming and its applications. The course is a perfect balance of theory and practice, with focus on the Scala programming language.


The student who passes this course will know relevant advanced programming techniques for designing, testing and executing challenging realistic programs in Scala, in a correct and efficient way. Such techniques, although learned in the Scala programming language, are relevant for many other mainstream programming languages used in industry. 

  • Introduction to Scala 
  • Property-based testing 
  • Monads and streams 
  • Call-by-name and lazy programming 
  • Immutable data-structures 
  • Purely functional parallel programming 
  • Finger trees 
  • Lenses and data synchronization

Formal prerequisites
You can program in Java (You will survive the course if you can program well in C# or any other main stream object-oriented language, but your experience may be steeper) - You know basic functional programming including higher order functions, anonymous functions (or lambdas, delegates or anonymous inner classes), side-effect-free programming, generic types and methods - You know basic algorithms and data structures (sorting, searching, collection data structures and basics of algorithms complexity) - You know basic discrete mathematics (sets, functions, relations) - You have followed an introductory course on programming languages The above competences can be obtained by following an introductory programming course, an introductory algorithms course and a course on programming languages ('Programmer som Data' or Programming Language Concepts or equivalent.). If you have followed all these courses you are well qualified. I øvrigt skal man opfylde IT-Universitetets generelle optagelseskrav.
Intended learning outcomes

After the course, the student should be able to:

  • Design, test and execute functional programs in Scala
  • Use expressive types (polymorphism, type functions, higher-kinded types) to document library interfaces
  • Recognize monadic structures in computation, use libraries following monadic structure and design monadic libraries
  • Reason about eager and lazy evaluation, including advantages and disadvantages of either
  • Reason about API designs in pure and stateful style, including exploring various designs and considering advantages and disadvantages of either
  • Use eager and lazy evaluation to design data structures and benefit from existing lazy data structures such as streams
  • Implement solutions based on research-based methods presented in relevant papers in library and language design
Learning activities

13 weeks of teaching consisting of lectures and exercises Weekly lectures and exercises plus 2 mini projects. In the exercises (and the associated homework exercises) you learn to test and design functional programs in Scala, with a particular emphasis on API and library design. The lectures provide an overarching reflection over the patterns and techniques used, as well as they prepare you for solving the exercises. However most time is spent on small practical exercises and projects, resembling the exam questions. Training building solutions based on research happens by reading research papers and implementing programs based on them.

Mandatory activities
Two mandatory mini-projects in two person groups graded pass/fail. Both mini-projects must be graded pass for exam qualification. More-over you have to complete all home-works before the exam, also in two person groups (Home works are not graded, but you must hand-in your solutions to demonstrate that you worked on them; Handing in solutions prepared by other groups is not acceptable). Homework assignments are published weekly. There will be two mini projects, one roughly mid semester, and one towards the end. If you missed the deadline for home works, or failed/missed a mini-project(s), there will be a resubmission deadline about 2 weeks before the exam.

The student will receive the grade NA (not approved) at the ordinary exam, if the mandatory activities are not approved and the student will use an exam attempt.

Course literature

Paul Chiusano. Runar Bjarnason. Functional Programming in Scala. Manning 2014

Ordinary exam
Exam type:
A: Written exam on premises, external (7-trinsskala)
Exam variation:
A11: Written exam on premises. Open book exam. You are allowed to use all aids (books, notes, software and online resources).
Exam description:

Duration of exam: 4 hours The same set of questions as for bachelor students, plus additional one concerning the ILO: "Implement solutions based on research-based methods presented in relevant papers in library and language design"

Time and date
Ordinary Exam - on premises Mon, 16 Dec 2019, 09:00 - 13:00