Over the years, I have given at least 76 talks, of which 48 recordings are provided here.

Selected talks

These are talks that I have given multiple times over the years at various conferences. Each of them has a dedicated page with slides and the latest recording. If you want to share a particular talk, I would like to ask you to not link to a recording directly, but rather to the talk's page as linked here.

Everybody knows monads by now, so a talk about monads would hardly be worthwhile. Let's take it to the next level: monad transformers. You'll learn what they are, how they naturally emerge in your code base and how to make good use of them in Scala – and maybe even how to create your own.
Functional Mocking
Mocking is an infamous technique from object-oriented programming. The goal is to be able to test stateful systems in small pieces by simulating the behaviour of certain objects. The problem with mocking is that it usually requires heavyweight frameworks and clutters test code. There are countless rants on that topic, but this talk isn't one. Instead, we'll explore the functional approach in Haskell: Designing a small language supporting the desired behaviour, and then writing interpreters which can execute its semantics in various ways. Testing I/O code was never easier.
Numeric Programming with Spire
Numeric programming is a notoriously difficult topic. For number crunching, e.g. solving systems of linear equations, we need raw performance. However, using floating-point numbers may lead to inaccurate results. On top of that, as functional programmers, we’d really like to abstract over concrete number types, which is where abstract algebra comes into play. This interplay between abstract and concrete, and the fact that everything needs to run on finite hardware, is what makes good library support necessary for writing fast & correct programs. Spire is such a library in the Typelevel Scala ecosystem. This talk is an introduction to Spire, showcasing the ‘number tower’, real-ish numbers and how to obey the law.
Programmation en Logique
Prolog is one of the most underrated programming languages around; possibly because of its strange syntax and the unusual paradigm. But it is a very nice special-purpose programming language. In this talk, I introduce Prolog’s programming model, showcase some programming domains in which Prolog allows for very concise, elegant programs, and finally describe how it can also be used as a general-purpose tool.
How to test proper{t,l}y
Writing unit tests is pretty much established practice and in addition to that, property testing has caught up on popularity. Most functional languages have one, sometimes even many implementations. But “property testing” has a lot of aspects: randomized or exhaustive, minimization and generalization of counter examples, custom generators and filters, to name a few. Very often, property tests don't exploit all the features of the framework. In this talk, I'll give an overview of the state of the art of property testing and show some common use cases, techniques and pitfalls.
JS, Rust, Python and the Holy Graal
In the old times, way back, Java used to be the only JVM language. Later on, a few other players entered the field, such as Jython and JRuby. But those were just for scripting, right? It didn’t take long for compiled languages to catch up. With Scala and Kotlin, we have definitely entered the age of polyglot programming on the JVM. The Truffle project – part of GraalVM – is a promising approach to make it easy, efficient, and seamless to run alternative languages on the same VM as Java. This talk will look at the new age of polyglot programming and all the cool things we can do with it.
Theorems for Free
In the typed functional programming communities, there is much talk about “reasoning with types”. But rarely is this elaborated into something concrete. Just how can we extract tangible information from types beyond playing mere type tetris? The secret sauce is called parametricity, first described by John C. Reynolds, and later applied to Haskell by Philip Wadler in his seminal paper “Theorems for free!”.
A History of Enterprise Monads
The early 2010’s were exciting times for Scala. The language & ecosystem started to professionalize, both from a technical (binary compatibility) and a community point of view (many conferences were started). Not too long after Lightbend – then Typesafe – was founded, I registered the domain on a whim and put together a rudimentary website advertising a few FP-minded Scala libraries. Fast forward to today: Typelevel is known for a wealth of functional libraries, beginner-friendly educational resources, a series of conferences and a distinct ecosystem – including a custom compiler – within the Scala community. In this talk, I’d like to examine what got us there and into the mainstream.
Advanced Typing in TypeScript
TypeScript is a powerful language with a type system that has been designed towards common programming patterns in the JavaScript world. Coupled with outstanding type inference and IDE support, it makes programming a breeze. In this talk, we will take a look at some of the more advanced parts of the type system and how they can be used to create rock-solid APIs. As an example we will consider the very common problem of data validation and processing. I will show how to build a data pipeline from scratch.
How to integrate CBDC with DLTs?
Central Bank Digital Currency (CBDC) is gaining traction as a digital version of cash issued by central banks. Several countries have already implemented a CBDC, and many others are actively investigating or piloting one. What’s clear is that most of these systems run on their dedicated infrastructure, rather than on public and/or existing blockchains. This creates interoperability challenges, such as how to transact with CBDCs from existing smart contract ecosystems. This talk aims to provide an overview of how CBDCs can be designed to address these challenges, and to provide practical examples of how integration with existing systems could be achieved.
When testing just doesn't cut it
Writing unit tests is pretty much standard practice these days. Otherwise, how would you make sure that your code does what you expect? Yet, some software is mission-critical and merely testing a few examples – or even randomized testing – is not enough. To reach higher levels of assurance, we need proof: mathematical, formal proof. This session will be based on an example from industry, where we successfully verified the core of a financial application. I will describe the core architecture of the system and the mathematical foundations behind the verification, including the classes of problems that we can (or cannot) discover with this approach.

Ausgewählte Vorträge

Diese Vorträge habe ich über die Jahre hinweg auf mehreren Konferenzen gehalten. Jeder Vortrag hat eine eigens angelegte Unterseite, jeweils mit Folien und der jüngsten Aufzeichnung. Wenn du einen bestimmten Talk teilen möchtest, würde ich dich bitten, nicht die Aufzeichnung, sondern die hier verlinkte Unterseite zu verwenden.

Lieber ein Typparameter zu viel als einer zu wenig
So gut wie alle modernen Programmiersprachen erlauben es, Routinen zu parametrisieren – über Werte und über Typen. Für Letzteres gibt es verschiedenen Begriffe: „Templates“, „Generics“ oder aber „Parametric Polymorphism“. Diese Begriffe sollen hier einmal geklärt werden. Außerdem lernen wir die Vorteile von Typparametern kennen und warum Type Erasure in Java nicht nur richtig, sondern auch notwendig ist. Schließlich kommen wir auf Philipp Wadlers einflussreichen Artikel „Theorems For Free“ zu sprechen, welcher eine Technik beschreibt, mit der wir Aussagen über Programme nur anhand der Typen treffen können.
Das eierlegende Truffleschwein
Damals, ganz früher, da war Java noch die alleinherschende Sprache auf der JVM und konnte tun und lassen, was sie wollte. Später gesellten sich ein paar Skriptsprachen hinzu, wie zum Beispiel Jython und JRuby. Und die neuen kompilierten Sprachen wie Scala und Kotlin haben das Zeitalter der polyglotten Programmierung endgültig eingeläutet. Das zur GraalVM zugehörige Truffle-Projekt verspricht nun, es noch einfacher zu machen, auch eigentlich JVM-fremde Sprachen mit dem Ökosystem zu verzahnen.
Verifikation von Smart Contracts
Smart Contracts sind eine Technologie, mit der man Code auf Blockchains ausführt. Eine Vielzahl von Geschäftsfällen werden inzwischen durch solche Verträge abgebildet. Ethereum ist dafür eine beliebte Plattform. In diesem Vortrag wollen wir uns anschauen, wie man die Qualität des Codes sicherstellen kann.
Neuigkeiten in Scala 3
Seit geraumer Zeit in Arbeit, erschien die finale Version von Scala 3.0 im Mai 2021. Höchste Zeit, sich die verschiedenen Neuerungen anzuschauen. Denn es wurden nicht nur alte Features gestrichen, sondern auch die existierenden aufpoliert und konsistenter gestaltet. So gibt es beispielsweise vereinfachte Aufzählungstypen, die auch für Neulinge leichter verständlich sind. Darüber hinaus wagt Scala 3 auch den Schritt in Richtung Whitespace-basierter Syntax. Insgesamt hat das Team um Martin Odersky ein interessantes Paket geschnürt, so dass Programmieren in Scala noch mehr Spaß macht als früher. Auch für Fans von Kotlin und Java 8+ ist etwas dabei.
Hilfe, wir syncen!
Im Zeitalter der Smartphone-Apps sehen sich viele Entwickler:innen dem immer wieder gleichen Problem ausgesetzt: Wie synchronisiert man Daten zwischen den verschiedenen Clients? Vom Telefon, was zeitweilig offline sein kann, zum Tablet, was überhaupt nur im WLAN hängt, zur Weboberfläche. Auf keinen Fall darf man dem User Konflikte anzeigen, die verwirren nur! „Konfliktfreie verteilte Datentypen“ sind die Lösung; eine recht junge Technologie, die verspricht, alle diese Probleme anzugehen.
Was macht eigentlich ein Bundler?
In der Frontend-Entwicklung kommt man selten ohne JavaScript aus. Gestandene Backend-Profis sehen sich dann mit einer komplett neuen Toolchain konfrontiert, die vor unbekannten Fachbegriffen nur so strotzt. Ein Webpack möchte mit Loadern die Packages bündeln, aber selbstredend mit aktiviertem Babel-Support, damit man auch zu ES6 transpilieren kann. Wie meinen?! In Talk werden wir uns – ausgehend von JavaScript, CSS und HTML – die Aufgaben einer Frontend-Toolchain ansehen und deren Strategien, wie sie ein performantes Resultat erzeugen.
Was Kubernetes-Ingress-Regeln mit der Chomsky-Hierarchie zu tun haben
Eines schönen Tages kam ich auf die Idee, FizzBuzz in Kubernetes zu implementieren. Aber Lars, fragte mich der Engel auf meiner linken Schulter, geht das überhaupt? In Ingress-Regeln kann man doch nur reguläre Ausdrücke verwenden. Sogleich erwiderte der Teufel auf meiner rechten Schulter: Doch, denn die Teilbarkeit einer Zahl in beliebiger Basisrepräsentation ist regulär! Bevor der Engel noch etwas dazu sagen konnte, war ich schon längst im Kaninchenbau verschwunden und tat, was getan werden musste. Schaut euch diesen Vortrag an, in dem ich Noam Chomsky und Kelsey Hightower zum Weinen bringen werde. Vielleicht lernt ihr dabei auch noch etwas fürs Leben.
1000 auf einen Streich
Das man als Entwickler:in nicht nur Code, sondern auch Tests zu schreiben hat, ist ein alter Hut. Trotzdem ist es für viele eine lästige und monotone Arbeit. Außerdem ist es noch lange nicht garantiert, dass Unit-Tests auch wirklich alle Grenz- und sonstigen Fälle abdecken. Ein moderner Ansatz ist eigenschaftsbasiertes Testen, bei dem eine abstrakte Bedingung spezifiziert und dann vom Testframework automatisch überprüft wird. In diesem Vortrag gebe ich einen Überblick und zeige Beispiele, in welchen Domänen diese praktisch einsetzbar sind.

Other Talks

This is a partial list of other talks I gave. Only talks with recordings are listed here.