Teaching has always been a passion of mine.
As an undergraduate student, I have been a teaching assistant for a lecture that taught basic programming in Java and Haskell.
As a PhD student, I have been a lecturer, organizer, and teaching assistant for lectures on various topics in theoretical computer science.
This includes both undergraduate-level lectures on the basics of theoretical computer science and graduate-level lectures on the theory of automata and games.
You can find some of the material I have created for these lectures below.
Games with perfect information
During my time as a PhD student at TU Braunschweig, I have conceptualized and held a lecture on games with perfect information.
A game is a system in which several entities, called players, influence the behavior.
Games can be used not only to model real games (video games, board games, ball games, and so on), but they are also useful to model capitalist systems with the players being the participants in a free market.
A game with perfect information is a sequential board game where the players whenever they have to make a choice know the full history, e.g. the previous choices of the other players.
There is no randomness and no hidden information.
Some board games like chess satisfy this definition, but this setting is also important in theoretical computer science as it can be used to model e.g. verification problems, scheduling problems, and synthesis problems.
Below, you can find the lectures notes for this lecture, which include exercises.
You can also find links to the pages for the lecture at Technische Universität Braunschweig in the summers of 2017 and 2018 with additional information.
Introduction to functional programming
I have given a brief introduction to functional programming in Haskell, focussing on monads.
Originally, this material was presented in a series of four talks (~360 minutes) in the context of a lecture on semantics that was given at Technische Universität Braunschweig by Roland Meyer and Jürgen Koslowski in the summer of 2018.
I recently went through the material, reorganized it, and uploaded it to Github.
However, one should note that this is only the material accompanying the lecture, i.e. it does not contain full lecture notes.
Concurrency theory
In the winter of 2017/2018, I haven given a lecture on concurrency theory together with my former colleague Prakash Saivasan.
Concurrency theory is a subarea of theoretical computer science that studies the theory of concurrent programs, in particular the verification of such programs and automata models that help with this task.
In our lecture, we have focussed on Petri nets, an automata model that is particularly suitable for modelling concurrent systems.
We have also discussed the theory of weak memory models, in particularly the theory of total store ordering, the memory model for the x86 architecture.
Below, you can find the lectures notes for this lecture, which include exercise.
Parts of these lectures notes are based on notes by Roland Meyer that were created for an earlier iteration of the lecture.
You can also find links to the pages for the lecture at Technische Universität Braunschweig with additional information.
Notizen zu Berechenbarkeits- und Komplexitätstheorie [in German]
In meiner Zeit als Doktorrand an der Technischen Universität Braunschweig habe ich im Sommersemester 2017 zusammen mit Roland Meyer die Vorlesung Theoretische Informatik 2 gehalten.
In dieser Vorlesung werden zwei wichtige Themengebiete der theoretischen Informatik vermittelt, nämlich zum einen die Berechenbarkeits- und Entscheidbarkeitstheorie und zum anderen die Grundlagen der Komplexitätstheorie.
Es geht also darum, welche Berechnungs- und. Entscheidungsprobleme von Computern gelöst werden können bzw. wie effizient diese Probleme von Computern gelöst werden können.
Ich bin der Hauptautor der Vorlesungsnotizen zu dieser Vorlesung.
Diese Notizen basieren zum Teil auf handschriftlichen Notizen von Roland Meyer, wurden von mir allerdings substantiell ausgearbeitet.
Einige meiner früheren Arbeitskollegen haben ebenfalls zu diesen Notizen beigetragen.
Videos zu Berechenbarkeits- und Komplexitätstheorie [in German]
Während der Coronapandemie habe ich im Sommersemester 2022 zur oben genannten Vorlesung Theoretische Informatik 2 zusammen mit Peter Chini und Roland Meyer Vorlesungsvideos erstellt.
Im folgenden verlinke ich die von mir erstellen Videos.
Diese sind auf den Servern der Technischen Universität Braunschweig gehostet.
Für das Verständnis ist es empfehlenswert, auch die von meinen Kollegen erstellen Videos zu schauen.
Diese können über den unten angegebenen Link gefunden werden.
-
Unentscheidbarkeit
-
Unentscheidbare Probleme kontextfreier Sprachen
-
Grundlagen der Komplexitätstheorie
-
Die Komplexitätsklasse P
-
Die Komplexitätsklasse NP
-
Die Hierarchiesätze