2. Januar 2023 von Jürgen Warias
Die Programmiersprache Clojure - ein neuer Wettbewerber in der Versicherungsbranche?
In kaum einer anderen Branche wird so sehr auf etablierte Technologien gesetzt wie in der Versicherungswirtschaft. Ist es Gewohnheit, mangelnde Flexibilität oder vielleicht die Angst vor etwas Neuem? Zu den am häufigsten eingesetzten Technologien gehören JBoss, TomEE bzw. JavaEE, Cobol und R. In meinem Blog-Beitrag stelle ich die deutlich jüngere Programmiersprache Clojure vor und zeige ihren Nutzen sowie mögliche Vorteile im Vergleich zu R für die Softwareentwicklung in den Branchen Banking und Insurance.
Was genau ist Clojure und inwiefern ist diese Sprache eine ernstzunehmende Konkurrenz für R?
Die Programmiersprache R, die 1993 und damit rund 14 Jahre vor Clojure veröffentlicht wurde, hat sich in der Versicherungsbranche etabliert. Entwickelt wurde R von Statistikern. Damals standen statistische Berechnungen und grafische Darstellungen im Vordergrund. Clojure hingegen ist ein moderner Lisp-Dialekt mit interaktiver Entwicklungsunterstützung. Das bedeutet, dass man mit Hilfe von REPL (Read, Eval, Print, Loop) in einer Konsole Code direkt auf dem Interpreter ausführen kann. Es ist eine vielseitige Sprache, die für Fullstack-, Web- und Mobile-Entwicklung, Scripting und die Erstellung von DSLs verwendet wird. Die Grundidee bei der Entwicklung von Clojure war, den Prozess der Softwareentwicklung zu vereinfachen und zu beschleunigen. Der Autor, Rich Hickey, hatte vor der Entwicklung von Clojure C++ an der New York University unterrichtet und an Informationssystemen gearbeitet, wo er häufig mit Standardproblemen konfrontiert wurde, wie z.B. "Gehört der Song zum Interpreten oder umgekehrt? Daraus entstand die Motivation, eine Programmiersprache zu entwickeln, die den Entwickler bei der Lösung solcher Probleme besser unterstützt. So ist die Sprache im Vergleich zu R sehr universell einsetzbar, da unter anderem jede Java-Bibliothek verwendet werden kann. Voraussetzung sind lediglich Grundkenntnisse in Java und OOP. Dadurch ist auch die Integration von Clojure-Anwendungen in bestehende Systemlandschaften sehr einfach.
Darum ist Clojure für die Branchen Banking und Insurance besonders geeignet
Clojure bietet eine deutlich bessere Unterstützung für komplexe mathematische Berechnungen als die am weitesten verbreiteten Programmiersprachen wie Java, C++ und C#. Aus diesem Grund wird Clojure immer häufiger im Finanzsektor eingesetzt. R ist auch die Standardsprache in Wirtschaft und Wissenschaft, wenn es vor allem um statistische Probleme geht. R ist auch von Haus aus sehr breit einsetzbar, da es (wie zum Beispiel bei SPSS) Weiterentwicklungen für eine universelle Einsetzbarkeit gab, die aber immer auf den ursprünglichen Schwerpunkt fokussiert blieben. Dass Clojure selbst keine grafische Unterstützung bietet, ist definitiv kein Nachteil gegenüber R, da man praktisch jede Java-Bibliothek, die in den letzten >15 Jahren entwickelt wurde, einbinden kann. Hinter R steht eine große Community, die selbst im kommerziellen Bereich ihresgleichen sucht. Auch die Clojure-Community ist aktiv dabei, diese weiter zu stärken.
Zielgruppe
Da die bei den Versicherungsunternehmen angestellten oder beauftragten Aktuare eher selten über Programmierkenntnisse verfügen, ist die Zielgruppe eher die interne IT sowie IT-Unternehmen, die Software für Versicherungsunternehmen bereitstellen oder deren Teams unterstützen.
Referenzen
Bekannte Unternehmen, die Clojure einsetzen, sind beispielsweise Walmart, die Citi Group und auch die NASA. Auch in anderen Branchen gibt es kleinere und größere Unternehmen, die Clojure von Anfang an eingesetzt haben oder auf Clojure umgestiegen sind. Bei Walmart haben acht Entwicklerinnen und Entwickler rund 20 Services entwickelt, die unter anderem jeden Einkauf aus über 5000 Filialen, den Webshops und mobilen Apps erfassen und verwalten. Unter anderem werden Kassenbons für spätere Reklamationen und Umtausch gespeichert. Über die Laufzeit des Projekts gibt die Quelle leider keine Auskunft. (Quelle: https://cognitect.com/blog/2015/6/30/walmart-runs-clojure-at-scale) Bei Walmart heißt es aber, dass im Vergleich zu anderen Programmiersprachen fünf bis zehn mal weniger Code geschrieben werden musste. Unmittelbar nach dem Rollout soll das neue System einen Black Friday Ansturm schadlos überstanden haben.
- Die Citi Group ist die größte Finanzgruppe der Welt und setzt Clojure erfolgreich zur Erfassung von Finanzinformationen ein, um jederzeit einen Überblick über Investitionen und Risiken zu haben.
- Die NASA hat ihr “Earth Science Data Information System (ESDIS) project” und ihr “Common Metadata Repository (CMR)” mit Clojure realisiert. Ersteres stellt Informationen aus Beobachtungen unseres Planeten nicht nur der NASA selbst, sondern auch einer stetig wachsenden Community zur Verfügung. Diese umfasst längst nicht mehr nur Wissenschaftler, Regierungen und andere Entscheidungsträger, sondern auch die breite Öffentlichkeit. Das zweite ist ein Repository für wissenschaftliche Metadaten für “NASA EOSDIS”. Ich möchte an dieser Stelle nicht zu sehr ins Detail gehen. Vielmehr möchte ich anhand der Referenzen hervorheben, dass Clojure-Applikationen aus der Erfahrung heraus entstanden sind,
- mit deutlich weniger Code auskommen, als bei Applikationen in anderen Programmiersprachen,
- das in der Entwicklung dadurch weniger Fehler/Bugs entstehen,
- das performant riesige Datenmengen verarbeitet werden können,
- ein flexibler und vor allem zuverlässiger Einsatz möglich ist und
- es große, renommierte Unternehmen gibt, die Clojure bereits vertrauen.
Die Einstiegshürde bei Clojure
Erfahrung mit LISP-Sprachen ist ein großer Vorteil, aber die meisten Clojure-Entwickler haben einen Java-Hintergrund. Dies mag daran liegen, dass Clojure-Anwendungen auch auf der Java Virtual Machine laufen, wodurch die gleiche Plattformunabhängigkeit wie bei Java gegeben ist. Es gibt auch eine JavaScript-Implementierung namens ClojureScript und eine CLR-Implementierung. Das Makrosystem von Clojure ist mit dem anderer Lisp-Umgebungen vergleichbar.
Technisches
Es werden die aus Java bekannten Standarddatentypen wie Long, Double, String, Boolean etc. angeboten. Wie in vielen anderen funktionalen Programmiersprachen sind unveränderliche Datentypen ein wesentlicher Bestandteil. Durch geschickte Implementierung kann ein zu großer Kopier-Overhead vermieden werden. Ansonsten ist das Typsystem dem von Java sehr ähnlich.
123 ; Long 1.23 ; Double "Hello" ; String true ; Boolean
Komplexe Datentypen sind mit speziellen Prä- und Suffixen ebenfalls möglich:
42N ; clojure.lang.BigInt 3.14159M ; java.math.BigDecimal 1/3 ; clojure.lang.Ratio #"[A-Za-z]+" ; java.util.regex.Pattern
Ein HelloWorld-Programm für die REPL könnte z.B. so aussehen:
(ns clojure.examples.hello
(:gen-class))
(defn sum-of-numbers [x y]
(println (format "x + y = %d" (+ x y))))
(sum-of-numbers 10 25)
Unterstützte IDEs
Hier werden die sieben besten IDEs mit Plugins oder Unterstützung für die Entwicklung mit Clojure vorgestellt. An erster Stelle steht Cursive, eine IDE, die selbst in Clojure geschrieben wurde und auf IntelliJ basiert. Eclipse mit dem Plugin Counterclockwise kommt dagegen nur auf Platz 5 hinter Emacs, VS Code und Atom.
Performance
Häufig kritisiert wird die lange Startzeit von Clojure-Anwendungen, die durch die Ausführung in der JVM bedingt ist. Vergleichbare Systeme, die in Python oder Ruby geschrieben sind, starten oft in weniger als 100ms. Zur Laufzeit sollten Clojure-Systeme in der Geschwindigkeit mit Java-Systemen vergleichbar sein, eben weil sie in der JVM laufen. Die Probleme aus der Anfangszeit von Java sind längst Geschichte, so dass man heute kaum noch einen Performance-Unterschied zu nativen Programmiersprachen messen kann. Tipps zum Feintuning gibt es im Netz zuhauf. Natürlich hängen die Verbesserungsmöglichkeiten immer von der zugrundeliegenden Anwendung ab, wie bei anderen Sprachen auch.
Support
Zusammen mit Cognitect bietet Rich Hickey technischen Support an.
Zusammenfassung
Dieser Artikel hat gezeigt, dass Clojure in den üblichen Anwendungsbereichen der Banken- und Versicherungsbranche mit R mithalten kann und darüber hinaus durch die Möglichkeit der Einbindung von Java-Bibliotheken wesentlich breiter einsetzbar ist. Damit ist Clojure ebenso universell einsetzbar wie Java, C++ oder C# mit dem zusätzlichen Vorteil der Unterstützung komplexer mathematischer Berechnungen. Durch die Ausführung auf der JVM ist die Integration von Clojure-Anwendungen in bestehende Systeme einfacher als bei R. Da es sich bei beiden um funktionale Sprachen handelt, ist die Einstiegshürde ähnlich zu sehen. Dass sich der Einsatz von Clojure für neue Projekte lohnen kann, zeigen die oben aufgeführten Referenzen.
Auch interessant: