In the following, in alphabetical order, this page presents the courses which I have taught as a doctoral student and which I have redesigned and taught independently during my post-doc time. The language of instruction in the Master’s courses was English, in the Bachelor’s courses mostly German.

Advanced Programming

The course provides students with in-depth knowledge of various programming paradigms. Besides an overview of such paradigms, the paradigms of object-oriented programming and parallel programming are in the foreground. Students also receive a basic introduction to the programming language C++. The course is rounded off by insights into distributed programming, web programming, and hardware-related programming with FPGAs and GPUs.’.

Fundamentals of Distributed Systems

This module introduces basic principles of modern information systems. These systems are characterized by their distribution. Accordingly, this course focuses on architectures of distributed information systems as well as the basics of communication in these systems. Students learn concepts such as communication middleware, application protocols, data exchange formats, synchronization, replication of services and data, and peer-to-peer communication.

Self-aware Computing Systems

Self-aware computing systems learn and revise models about themselves and their environment at runtime and use these models to analyze the system state and environment and identify necessary adaptations to achieve defined system goals. This course considers concepts, current application domains and implementation details for self-aware computing systems. This includes techniques of machine learning for proactive detection of critical states of the system or its environment as well as intelligent analysis of adaptation possibilities. Based on practical case studies in the area of load balancing between servers in cloud computing as well as autonomous driving, the theoretical constructs are manifested in practice-relevant examples.

Self-organizing Software Systems

In this module, concepts and algorithms for self-organizing and self-adaptive software systems are taught. These systems consist of various autonomous resources. Through cooperation, an emergent, common behaviour is created. In order to maintain the Quality of Service level, these systems must continuously adapt to react to influences in the system or in the environment. The course content includes implementation-specific details such as biologically-inspired approaches to the coordination of system units (e.g. ant algorithms or swarm behaviour) as well as machine learning for adaptation decisions.

System Software

This module offers an introduction to concepts and architectures of system software. System Software enables application developers to work at higher levels of abstraction. ´ The course includes aspects of process execution, parallel programming, scheduling, communication, resource management in local and distributed systems, middleware, and memory management.

Technical Basics of Information Systems

This course provides basic knowledge in the field of information systems and offers students interested in IT a systematic introduction to the following topics: Information processing, algorithms and data structures, complexity analysis of algorithms, distributed systems and computer networks, as well as software development. Additionally, the course includes an introduction to object-oriented programming with Java.