Teaching

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 and as professor at Hohenheim. 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.’.

Basics of Computer Science


The course is addressed to Bachelor students who want to acquire technical basics about the functioning of information systems. In addition to basics about computers and programming, algorithms for common problems, data structures, and computer networks are introduced. Further, the students learn the basics of Python programming and will apply it for data analytics. The lecture takes place in a Blended learning format with a flipped-classroom approach, i.e., the lecture is fully recorded, and physical/virtual in-class sessions complemented the understanding with Q\&A sessions, case studies, or discussions with students.

Computational Thinking


This module provides essential knowledge of the technological foundations of information systems. Based on this, students will be able to assess technology, develop software, and acquire fundamentals of adaptive software systems as well as data analytics. The students will learn basic concepts of computer hardware (von Neumann architecture) and system software (operating systems concepts), programming fundamentals in Python, as well as algorithms and data structures (searching, sorting, lists, hash-tables, trees). This includes understanding the basic architectures of modern information systems, software implementation, how to model problems in algorithms/software, and how to solve them using modern programming languages. The lecture also follows a Blended learning approach as described above.

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.

Introduction to Machine Learning in Python


In the first part of the elective course, the Master’s students will learn the basics of programming and how to work with Python. After an overview and self-training of basic programming concepts, the focus is set on acquiring programming skills for the application and evaluation of machine learning. Students learn about the most basic ML models and how to implement them in Python. Subsequently, Deep Learning will be the subject of discussion along with practical training sessions using PyTorch. Additionally, metrics and concepts for evaluating ML models are taught. The course is offered as a completely online course.

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.

Statistics for Food Science and Biotechnology


The mandatory course is addressed to Bachelor students of food science and biotechnology. In addition to a theoretical introduction to the topic, practical exercises using real data examples with Excel, R, or Python are part of the course. The addressed contents of the course include: Events and quantity systems, descriptive and exploration of data; Probability theory (one-dimensional and multivariate), random variables; Parameter estimation; Statistical tests and hypotheses; and regression analysis, correlation analysis, variance analysis. We offer this course in Blended learning format.

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.