How to become an advanced programmer

Advanced programming module

Start of lectures

Monday, 10/22/2018, 10:15 a.m., CAP3 - HS.2

target group

Students in the 1-subject bachelor's degree in computer science, in the 2-subject master's degree in computer science, in the master's degree in business information systems and students with a minor in computer science

This module also includes the Inf-FPKonz module (advanced programming concepts). In this case, the first part of the concurrent and distributed programming does not have to be heard, but the module begins with the functional programming on Monday, November 5th, 2018!


Solid programming skills including object-oriented programming with Java, such as can be acquired in the basic programming module.


In this lecture advanced programming concepts that go beyond the programming learned in the first semesters are presented. Using different programming languages, the concepts of the most important programming paradigms are taught. Concepts for concurrent and distributed programming are presented and practiced using the Java language. Modern functional programming techniques are shown using the example of the Haskell language. Logical and constraint-oriented programming is taught in the Prolog language.

Functional programming in practice

Functional programming is a focus of the lecture. This is due to the fact that functional programming techniques and language constructs lead to better structured programs and can therefore be found in many modern programming languages ​​in a partially restricted form. This is explained in more detail in a recent article in CACM magazine. The general rule is that the use of functional programming Functional programming languages ​​are not only of academic interest, but they are also being used more and more in practice. For example, Jane Street Capital, a financial trading firm with offices in New York, London and Hong Kong, uses the functional language OCaml for its applications (there is also a blog on this). The Galois company, headquartered in Portland (Oregon, USA), uses functional programming languages ​​and concepts to develop safety-critical systems.

The reason why functional programming is used in the financial sector is also due to the fact that errors in software can cause existential problems, as can be seen in the case of Knight Capital.

Here are a few more reports on the industrial use of functional programming:

Researchers at Microsoft, in an article in CACM magazine, demand that computer science students learn functional programming languages ​​as early as possible. And of course there are also jobs for Haskell programmers.


An internship is part of the Inf-FortProgP module. This takes place after the lecture and the first examination period from February 25th to March 8th, 2019. Since successful participation in the internship is a prerequisite for admission to the written exam, attendance is mandatory for this internship. For the internship there is a separate Registration required. Information on this will be provided in the preliminary meeting for the internship on February 26, 2019. A preliminary discussion and introduction to the internship will take place on February 25, 2019, 9:00 a.m. in the CAP3-HS2.

Module exam

At the end of the lecture there is a written final exam after the internship. The prerequisite for admission to the exam is regular processing of the exercises (see below) and successful participation in the internship.

The first module examination will take place on Wednesday, March 13, 2019, from 10:00 a.m. to 1:00 p.m. in Olshausenstraße 75 (lecture halls 1, 2, 3, 4). The second module exam will take place on Tuesday, April 2, 2019. Prior registration in the StudiDB is required to participate.

Supplementary materials for the lecture

There is a script for the lecture (in PDF format, only accessible within the CAU Kiel!), Which will be revised parallel to the lecture. This script is not a textbook, but it contains the approximate course of the lecture. Therefore, in addition to reading the script, the lecture should always be attended to be informed about the current status!

Slides and programs:


  • G. Hutton: Programming in Haskell, 2nd Ed., Cambridge University Press, 2016
  • R. Bird: Introduction to Functional Programming using Haskell, Prentice Hall, 1998
  • S. Thompson: Haskell - The Craft of Functional Programming, Addison-Wesley, 1996
  • L. Sterling, E. Shapiro: The Art of Prolog, 2nd Ed., MIT Press, 1994
  • T. Frühwirth, S. Abdennadher: Constraint-Programming, Springer, 1997
  • D. Lea: Concurrent Programming in Java, 2nd Ed., Addison Wesley, 2000
  • P. Hyde: Java Thread Programming, Sams Publishing, 1999


In order to take part in the module examination, the exercises must be processed regularly and sensibly. For this purpose, it is recorded for each task whether it was processed sensibly ("meaning points"). For admission to the exam, at least 50% of the meaning points must be achieved in each of the three areas of concurrent / distributed programming, functional programming and logical programming.

The submission of the exercises should primarily take place via the iLearn exercise system. To do this, you have to register in the iLearn training system.

The programming languages ​​dealt with in the lecture are installed on the institute's computers and free implementations of Java, Haskell and Prolog are also available on the Internet.

Note on using Prolog: The freely available SWI Prolog system can be used to solve the exercises. In order to have an easier introduction to Prolog, one should first use an extension for SWI-Prolog in this lecture, which implements a better search strategy. There are two ways of doing this (provided that the SWI-Prolog is installed and can be started by calling ""):

  • For Unix / Linux: Copy this bash script into a directory in your own path. Then you can use the command to call up the extended SWI Prolog system. Alternatively, you can put the bash script in the directory where the Prolog programs are and then call the SWI Prolog system with the command.
  • For other systems: Copy this Prolog program into the directory where the Prolog programs are located and start the SWI Prolog system with the command.

After starting SWI-Prolog, you can load your own program as usual and try it out. It should be noted that when using this extension, the Prolog programs do not contain any negations or cuts and also do not import any other modules, which is not used at the beginning anyway.