Advanced Programming, MSc CS
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
- Functional probabilistic programming
- The main prerequisite that Advanced Programming builds on is the basic functional programming including higher-order
functions, anonymous functions (or lambdas, delegates or
anonymous inner classes), side-effect-free programming,
generic types, and methods. This can be obtained by following the course Functional Programming (BSWU or K-SDT).
The following, somewhat less critical, 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 and Implementation' or equivalent.)
- You should also be able to 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 should know basic algorithms and data structures (sorting,
searching, collection data structures and basics of
- You should know basic discrete mathematics (sets, functions, relations)
- You have followed an introductory course on programming
Note for SD students: You may not meet the prerequisites for this course. Preferably contact Søren Debois (email@example.com) before enrolling.
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
- Design and implement solutions using lenses, reason about lenses
Ordinary examExam type:
A: Written exam on premises, External (7-point scale)
A11: Written exam on premises. Open book exam.