Coding is hard —

Many tools and languages make it easy to add accidental complexity.

Accidental complexity creates unnecessary cognitive load.

If we constantly battle cognitive load, we get exhausted, unhappy and frustrated.

but does it have to be that hard?

There are tools and techniques that manage complexity well.

Using those tools and techniques reduces cognitive load.

So that you can be energetic, happy and joyful while coding.

About

Hi 👋

We're Dirk, Thomas, David and Beat and we're excited to connect and grow the functional programming community in the lovely city of Tübingen.

Tü.λ—Functional Programming Night Tübingen is a space for everyone interested in functional programming, whether you're a seasoned expert or just curious to learn. Each meetup features insightful talks, delicious food, and plenty of opportunities to connect with like-minded people.

Looking forward to see you at the next edition of Tü.λ—Functional Programming Night Tübingen!

07.05.25

The next meetup will take place on the 07.05.25 at the itdesign office, Friedrichstraße 12.

18:45 Doors open & Welcome

Lightning Talk: Tail Call Optimization in JavaScript (Thomas)

Lightning Talk: Fluid Type Scales (Beat)

Simplifying CSS: No more breakpoints, less mental workload, less typing

Short break

Lightning Talk: (maybe you?)

Food, talking, coding, whatever

22.00 End

26.03.25

This meetup took place on the 26.03.25 at the itdesign office, Friedrichstraße 12.

18:45 Doors open & Welcome

Building a Large-Scale, Streaming-Based Logging and Monitoring Solution (Marcus)

In a semiconductor fab, numerous processes play a role in manufacturing a microchip. Keeping track of the manufacturing process, recording all the data and metrics that occur in the different steps, sending alerts when parameters indicate production problems, and correlating the data with the resulting product is essential for a successful and efficient production.

We show how we have built a large-scale logging and monitoring solution of a large and heterogenous legacy enterprise IT infrastructure that controls semiconductor manufacturing. Our streaming-based system uses Riemann and handles more than 5,000 events per second, stores terabytes of logs and metrics persistently in Elasticsearch and Prometheus, and provides visualizations with Kibana and Grafana and real-time alerting.

Food, talking, coding, whatever

22.00 End

15.01.25

This meetup took place on the 15.01.25 at the itdesign office, Friedrichstraße 12.

18:45 Doors open & Welcome

Explaining Functional Programming (Beat)

Most of us have been there—explaining functional programming is hard. This talk first gathers the prerequisites for understanding functional programming and then provides a template for explaining it. In the meantime, it touches on the history of programming, programming languages, and some general concepts such as coupling and complexity.

Short break

Lightning Talks (Spontaneous 👀)

Food, talking, coding, whatever

22.00 End

06.11.24

This meetup took place on the 06.11.24 at the itdesign office, Friedrichstraße 12.

18:45 Doors open & Welcome

Really Functional Data Structures (Marvin)

Last time, David showed us functional data structures in the form of persistent data structures. In this talk, I want to show you data structures that are defined entirely by functions themselves - no classes, structs, bitmaps, etc.! Knowing about such structures not only tickles the brain, but can also lead to a better intuition for solving problems functionally. Furthermore, one of the data structures shown can be used for space-efficient encodings of fractals and fun animations.

Short break

Decoupled by Default – Funktionale Programmierung in der Softwarearchitektur (Markus)

Kopplung – das Maß der Abhängigkeiten zwischen Modulen – ist das zentrale Konzept der Softwarearchitektur. Die herkömmliche Sicht auf Kopplung ist die, dass hohe Kopplung dann entsteht, wenn man nicht aufpasst beim Programmieren: wenn man nicht gegen explizite Schnittstellen programmiert, wenn man kein Visitor-Pattern verwendet, wenn man nicht Dependency Injection verwendet …

Kopplung, so scheint es, ist das Resultat von Unterlassung. Die Kopplung wieder zu senken, erfordert dann ausdrückliche Gegenmaßnahmen.

Dieser Vortrag zeigt eine alternative Sichtweise: Viele Arten von Kopplung entstehen aufgrund von Unzulänglichkeiten der Programmiersprache. In funktionalen Sprachen treten diese Kopplungsarten teilweise gar nicht auf oder zumindest ist die Werkseinstellung dieser Sprachen dergestalt, dass Kopplung vermieden wird. Das zeigen wir im Vortrag insbesondere mit Blick auf den Umgang mit geteiltem Zustand und Plattformabhängigkeiten. Am Ende zeigen wir, dass auch funktionale Programmierer nicht automatisch vor allen Arten unnötiger Kopplung sicher sind. Wir zeigen, wie der Ansatz des Denotational Design dort Abhilfe schaffen kann, indem die Semantik von Schnittstellen in den Vordergrund gerückt wird.

Food, talking, coding, whatever

22.00 End

28.08.24

This meetup took place on the 28.08.24 at the itdesign office, Friedrichstraße 12.

18.45 Doors open & Welcome

Simple development environments with Nix (Beat)

Setting up development environments is more complex than it should be. Nix makes entering development environments as easy as running nix develop, making them simple and reproducible. This talk explores what an ideal workflow could look like and walks through a project setup with Nix, outlining its benefits and deficiencies.

Short break

Persistent Data Structures: From Lists to Hashmaps (David)

Functional programmers cannot use the same data structures and algorithms that imperative programmers are used to. Functional data structures make it easier to reason about what our code does, but have different performance characteristics. This talk will introduce some of the basic and advanced techniques we use when we implement functional data structures efficiently.

Food, talking, coding, whatever

22.00 End

18.04.23

This meetup took place on the 18.04.23.

Mach Deine eigene Programmiersprache! – Makros in Clojure (Kaan Sahin)

Fehlen Dir List-Comprehensions aus Python in Deiner Sprache? Findest Du C# toll wegen async? Benutz einfach Clojure und Makros, dann kannst Du diese Features einfach selbst schreiben!

Makros aus gängigen Programmiersprachen, wie beispielsweise Präprozessormakros in C++, werden dem Makrobegriff nicht gerecht. In Clojure sind Makros ein mächtiges Werkzeug und erlauben es, die Programmiersprache auf natürliche Art und Weise zu erweitern. Dabei sind Makros wesentlich mehr, als einfache Syntaxerweiterungen.

Wir schauen uns in diesem Vortrag Clojure und dessen Makrosystem an und zeigen Beispiele aus der Praxis.

Food, talking, coding, whatever

22.00 End

17.01.23

This meetup took place on the 17.01.23.

Komponierbare Komponenten (Markus Schlegel)

Mit React kam die Welt der Webentwicklung zum ersten Mal mit der funktionalen Programmierung in Kontakt und war verliebt. Doch das Versprechen simpler, nachvollziehbarer Programmlogik wird bei komplexeren Anwendungen oft nicht eingelöst. Das grundlegende Problem ist, dass wir unsere Programmstücke im Frontend zwar Komponenten nennen, uns aber die wichtigste Zutat aus der funktionalen Programmierung fehlt, um diese Benennung rechtfertigen zu können: Komposition. Dass es auch anders geht, zeigt dieser Vortrag.

Food, talking, coding, whatever

22.00 End

18.03.21

This meetup took place on the 18.03.21.

Funktionales Taktisches Design (Michael Sperber)

Funktionale Programmierung passt gut zu Domain-Driven Design (DDD): Für funktionale Programmierer:innen bietet taktisches Design eine Brücke zu einer funktionierenden Applikationsarchitektur. Funktionale Programmierung hingegen vereinfacht mit ihrem Fokus auf unveränderliche Daten den Umgang mit Aggregaten.

Wo DDD sich auf konkrete Modelle nah an der Domäne konzentriert, setzt funktionale Programmierung auf Abstraktion. Während Abstraktion in der OO-Welt oft kritisch gesehen wird, kann sie - systematisch eingesetzt - Architektur und speziell Domänenmodelle signifikant verbessern: Sie findet Kombinatoren in scheinbar flachen Modellen und benutzt Algebra, um die entstehenden Strukturen zu beschreiben. Heraus kommen einfachere und flexiblere Modelle als ihre konkreten Pendants, die oft vorher unbekannte Aspekte der Domäne zutage fördern.

Der Vortrag zeigt, wie DDD um diese Techniken erweitert werden kann und wie diese zu effektiverem taktischen Design führen.

Food, talking, coding, whatever

22.00 End

21.07.20

This meetup took place on the 21.07.20.

F# (Andreas Weizel)

Wir lernen F# kennen, eine funktionale Programmiersprache aus der Microsoft .NET Welt. Was zeichnet sie aus und in welchen Welten kann man damit unterwegs sein? Windows? Linux? Vielleicht sogar in der Web-Entwicklung?

Food, talking, coding, whatever

22.00 End

21.04.20

This meetup took place on the 21.04.20.

Einführung in Elm

Elm ist eine reine funktionale Programmiersprache mit dem Fokus sichere Webapplikationen zu schreiben. Bei dem Vortrag/Workshop werden wir uns die Grundlagen der Sprache anschauen und im Anschluss auch eine kleine App bauen, die mit einem Server kommuniziert.

Food, talking, coding, whatever

22.00 End

03.09.19

This meetup took place on the 03.09.19.

Funktionale Programmierung in Kotlin (Aleks Dimitrov)

Kotlin ist die neue, hippe JVM-Sprache mit sehr guter Java-Integration und vielen neuen Features. Aus Sicht der funktionalen Programmierung fehlt gegenüber Scala jedoch ein richtig ausdrucksstarkes Typensystem und der Fokus auf FP.

Wie man mit ein paar Kniffen trotzdem sehr brauchbar selbst abstrakte Konzepte wie Applicative und Monad in Kotlin benutzen kann, und welche gewohnten FP-Konstrukte dem Kotlin-Programmierer zur Verfügung stehen möchte ich in diesem Vortrag vorstellen.

Food, talking, coding, whatever

22.00 End

09.07.19

This meetup took place on the 09.07.19.

Effect Handlers (Jona)

Effects are all around us: promiment examples of (control) effects include dependencies on configuration or other modules, exceptional control flow, asynchronous calls to remote APIs, nondeterminism, probabilisitic control flow and many more.

Algebraic effect handlers are a promising way to structure effectful programs in a modular way. In this talk, I present the Scala library Effekt, which makes use of both the functional and object oriented features of Scala. In particular, we follow FP best practices and make the use of effects explicit in the type of a program. We also follow OO best practices and separate the effects into interfaces, programs using the interfaces and implementations of those interfaces.

Using Scala's features of intersection types, trait/mixin-composition, implicit parameter passing and first class modules (as objects), Effekt offers interesting extensibility properties.

Food, talking, coding, whatever

22.00 End

05.02.19

This meetup took place on the 05.02.19.

Elixir & BEAM (Ron Kirschler)

Food, talking, coding, whatever

22.00 End

13.11.18

This meetup took place on the 13.11.18.

Monaden (Philipp Schuster)

Food, talking, coding, whatever

22.00 End

18.09.18

This meetup took place on the 18.09.18.

Nix(OS) (Michael Weiss)

Nix ist ein funktionaler Paketmanager und NixOS die darauf basierende Linux-Distribution. Bei dem Vortrag geht es hauptsächlich um die Konzepte hinter Nix(OS) um einen schnellen Überblick über die Vor- und Nachteile zu bekommen.

Food, talking, coding, whatever

22.00 End

10.07.18

This meetup took place on the 10.07.18.

Pragmatic, frameworkless functional programming in Scala (Michał)

Food, talking, coding, whatever

22.00 End

05.06.18

This meetup took place on the 05.06.18.

Die letzte Iteration der For-Schleife (in JavaScript)

Short break

Currying oder Wie man Funktionen Geduld beibringt

Food, talking, coding, whatever

22.00 End

If you want to attend the meetup, please tell us about it so that we can plan accordingly (order enough pizza!) 🙂

If you want to give a talk at one of the next meetups, please add them as an issue to this GitHub Repo here.
In case you need some inspiration, either take a look at all the previous talks on this website, or take a look at all the talks suggested so far here.

Contact

Do you want to keep posted about the next event or continue the discussion? Maybe you even want to contribute a talk yourself?

Join our Matrix Room