Die Macht des Umdenkens: Funktionale Programmierung im Trend
Die Konzepte des funktionalen Programmierens existieren schon lange. Doch derzeit erleben sie ein Comeback. Für Entwickler Felix von der ING in Deutschland hat das auch gute Gründe: Funktionales Programmieren ist besonders geeignet für aktuelle Themen wie Parallel Computing oder globale Web-Dienste. Trends, die zukünftig noch wichtiger werden. Deshalb erklärt und verbreitet Felix den Ansatz leidenschaftlich in Vorträgen – und nutzt die Methode natürlich auch im Entwickler-Alltag bei der ING. Einblicke in ein neues Paradigma für Programmierer.
„Corona“ war schuld – wie so oft im Jahr 2020: ING-Entwickler Felix musste seinen neuen Vortrag über funktionale Programmierung zunächst auf Eis legen. Die IT-Fachtagungen, auf denen er ihn halten wollte, entfielen oder wurden verschoben. Sein Anliegen ist dadurch aber nicht weniger aktuell. Zumal das Trend-Thema in vielen Teams eher unbekannt ist und in der Lehre oft nur am Rande behandelt wird. Dabei ist „funktionales Programmieren unverkennbar die Zukunft,“ so von Felix. „Einen Großteil der Probleme, die wir heute in der Softwareentwicklung haben, hat man damit nicht mehr.“ Und es kann sogar innerhalb etablierter Java-Ökosysteme eingesetzt werden.
Zurück zur Funktion: Die neue Aktualität
Funktionale Programmierung – warum jetzt, beziehungsweise warum erst jetzt? Wie Felix erklärt, ist der Ansatz seit den 1940ern bekannt: Er stammt aus der Mathematik, Pioniere waren David Hilbert und Kurt Gödel, Alan Turing und Alonzo Church. „Aber damals war die Zeit nicht reif. Die Technologie war nicht weit genug, da war das noch ein trockenes Forschungsthema.“ Inzwischen hat sich fast alles geändert, und die Theoreme wandern in die Praxis. Dank der gewachsenen Rechen- und Speicherkapazität, aber auch wegen neuer Anforderungen an Skalierung und Parallelisierung. Und das sind eben jene Aspekte, bei denen funktionale Programmierung bestechende Vorteile aufweist gegenüber dem objektorientierten Ansatz, der seit den 1980ern die Branche dominiert.
Ein Paradigmenwechsel
Sich darauf einzulassen, fordert Programmierern aber echtes Umdenken ab. „Das ist ein kompletter Paradigmenwechsel“, betont Felix. Funktionale Sprachen wie Haskell bestehen nicht aus Befehlen, sondern aus reinen mathematischen Funktionen. Variablen sind unveränderlich, äußere Zustände spielen keine Rolle. Objektorientierte Programmierung in „imperativen“ Sprachen wie C und Java ist demgegenüber durch abgekapselte Objekte und prozedurale Befehlslogik geprägt. Das hat seine Vorteile: Anschauliche Objekte erleichtern die Abbildung von Systemen. Und die Nützlichkeit des imperativen Vorgehens kennen wir vom Kochrezept, das ebenfalls eine Befehlssequenz ist: Man nehme Mehl, füge Milch hinzu, etc. Im Kontrast dazu wirkt der funktionale Ansatz auf viele Java-Programmierer zunächst fremdartig, und das nicht nur wegen der ungewohnten Terminologie. In der funktionalen Welt werden keine Befehlslisten abgearbeitet: Es werden vielmehr Funktionen aufgerufen, wobei Funktionen auch Funktionswerte und rekursiv verschachtelt sein können.
Skalieren, Parallelisieren, Typsysteme
Eine zentrale Pointe des funktionalen Paradigmas ist das Vermeiden von „Seiteneffekten.“ „In den Seiteneffekten liegt einfach ein Grundproblem des imperativen Ansatzes“, so Felix: „Daten werden im Speicher abgelegt – und verändert. Und diese Veränderung erschwert oft die Parallelisierung, die man heute aber braucht.“ Schon in einem Smartphone werkeln ja etliche Prozessorkerne. Auf Parallelisierung kommt es auch beim Bereitstellen von Webdiensten an. Das funktionale Programm ändert nun aber keine Daten, sondern erzeugt neue Daten im Speicher. Das vermeidet typische „Concurrency“-Probleme wie „Data Races“ oder synchronisierte Blöcke. Gut für die Geschwindigkeit – und die Skalierbarkeit, da z.B. keine Datenbereiche gesperrt werden müssen. Aber auch das Testen wird erleichtert. Funktionale Typsysteme gewährleisten, dass viele Fehler schon während des Programmierens auffallen. Deutlich attraktiver, als wenn Probleme erst in der Laufzeit auftreten und dann am Wochenende akuten Servicebedarf auslösen.
Anwendungen und Empfehlungen
Imperativ vs. funktional – für ING-Entwickler Felix geht es dabei nicht um ein Entweder-Oder: „Das imperative Paradigma wird nicht verdrängt!“ Für Aufgaben mit Schritt-für-Schritt-Logik bleibt es auch in Zukunft der Ansatz der Wahl. Für andere ist funktionale Programmierung aber einfach besser. Sie ist übrigens schon lange im Business bewährt. 1987 hat Ericsson die funktionale Sprache Erlang für Telekom-Anwendungen entwickelt – ein Einsatzbereich, bei dem Hochverfügbarkeit und Parallelität zählen. Interessierte müssen aber nicht unbedingt eine rein funktionale Sprache erlernen. Auch im Java-Ökosystem ist der Stil umsetzbar. Nicht zuletzt, weil Java selbst funktional ergänzt wurde. Eine noch elegantere Alternative für die Java-Laufzeitumgebung wäre für Felix die Sprache Kotlin: „Das ist eine Art besseres Java.“ Kotlin ist leicht zu lernen, wird von Google unterstützt und wird seit 2019 sogar für Android-Entwicklung präferiert. Bei seiner Entwicklungsarbeit für die ING setzt Felix übrigens neben Kotlin auch die funktionale Java-Business-Library VAVR ein. Darüber hinaus ist eine Beschäftigung mit funktionalem Programmieren aber für jede/n Entwickler/in auch ein grundsätzlicher Gewinn: Umdenken schult schließlich das Gehirn, sich neuen Lösungswegen zu öffnen.
Programmieren für die ING
Ein vermeintlich akademischer Ansatz, der plötzlich große Aktualität gewinnt: Felix‘ passionierter Einsatz für funktionales Programmieren zeigt, wie die IT-Experten der ING über den Tellerrand hinausdenken – ein Beispiel für die herausfordernde IT-Arbeitswelt der ING. Sie ist eben kein gewöhnliches Finanzinstitut, sondern eine innovative Universalbank mit dynamischer Digitalstrategie. Dafür sucht die ING ständig neue Kräfte an den Standorten Frankfurt a.M. und Nürnberg. Eine attraktive Chance für ambitionierte ITler: Geboten werden agile Strukturen, globale IT-Community im Konzern, ein großzügiges Bildungsbudget. Sowie die Freiheit, sich weiterzuentwickeln und z.B. Konferenzen zu besuchen. Wie Felix, der seinen Vortrag bei nächster Gelegenheit auf einem verschobenen Kongress vorstellen wird – so „Corona“ denn mitspielt. Alles Weitere über IT-Karrieren bei der ING findet sich auf der Job-Seite der ING.