Auftragsentwicklung mit Clojure?

Keine Kommentare

Clojure Logo

Beating the Averages“ betitelte Paul Graham im Jahr 2001 seinen berühmten Artikel über die Vorteile von Lisp in der Produktentwicklung. 2013, 55 Jahre nach der Erfindung dieser Gattung von Programmiersprachen, ist Clojure, ein Lisp für die Java Virtual Machine, in aller Munde. Ob Startup oder Produktteam, Forschungsinstitut, Bank oder Zeitungshaus, Clojure scheint einen guten Eindruck zu hinterlassen.

Trotzdem spielt diese seit 2007 aktiv entwickelte Programmiersprache hierzulande im Beratungsgeschäft beziehungsweise in der Auftragsentwicklung praktisch keine Rolle. Warum und wie wir das ändern möchten, darum soll es in diesem Artikel gehen.

Rahmenbedingungen

Um aber grundsätzlich als Berater eine Programmiersprache mit gutem Gewissen empfehlen zu können, müssen einige Voraussetzungen erfüllt sein. Lassen Sie uns vor diesem Hintergrund einen Blick auf Clojure werfen:

Sieht man von dem Verbreitungsgrad ab (dazu mehr im letzten Abschnitt), sind so die wichtigsten Risiken hinsichtlich des Einsatzes einer neuen Technologie adressiert.

Vorteile

Es würde den Rahmen des Artikels sprengen, im Detail auf alle relevanten Sprachfeatures einzugehen. Stattdessen möchte ich an dieser Stelle die Aspekte von Clojure hervorheben, die es aus meiner Sicht sowohl für Kunden wie auch für Anbieter zu einer ausgezeichneten Programmiersprache für die Auftragsentwicklung machen:

  • Clojure ist verhältnismäßig leicht zu erlernen. Die Anzahl der Syntaxelemente ist erheblich geringer als in funktionell vergleichbaren Sprachen. Die Syntax selbst ist sehr regelmäßig. Die Möglichkeit der interaktiven Entwicklung im REPL vereinfacht den Zugang zur Programmiersprache und zu Bibliotheken erheblich.
  • Clojure isoliert Zustand und macht Zustandsmanipulation explizit. Dadurch entfällt in der Praxis eine ganze Kategorie häufig auftretender Softwarefehler.
  • Die interaktive Natur der Softwareentwicklung mit Clojure verkürzt Feedback-Zyklen auf allen Ebenen. Dadurch eignet sich die Sprache insbesondere für Rapid Prototyping und agile Vorgehensweisen.
  • Clojure ist ausdrucksstark. Idiomatischer Clojure-Code kann im Vergleich zu Java-Code desselben Funktionsumfangs um eine Größenordnung weniger Lines of Code haben. Während Lines of Code keine an sich sinnvolle Metrik ist, ist die Diskrepanz hier so groß, dass sich daraus ein realer Wartungsvorteil ergibt.
  • Die Clojure-Community legt größten Wert auf das Konzept der „Einfachheit„. Diese Haltung spiegelt sich in idiomatischem Code, Architekturansätzen, vielen Bibliotheken und der generellen Ausrichtung der Sprach-Weiterentwicklung wieder und hat einen positiven Effekt auf Wartbarkeit und Robustheit.
  • Als funktionale Programmiersprache motiviert Clojure die Verwendung nebeneffektfreier Funktionen. Solche reinen Funktionen sind sowohl leichter testbar als auch einfacher verständlich als objektorientierter Code mit vergleichbarem Funktionsumfang.
  • Clojure eignet sich durch seine speziellen Datenstrukturen und das Konzept des Software Transactional Memory besonders für die im Bereich der serverseitigen Software häufig benötigte Abbildung nebenläufiger Prozesse.

In der Kombination mit den zuvor genannten Rahmenbedingungen ergibt sich das Bild einer Programmiersprache, die schlüssige Antworten auf wichtige Fragen wie Produktivität, Lernkurve und Wartungskosten geben kann.

Perspektiven

Das aus meiner Sicht größten Hindernis für die weitere Verbreitung von Clojure ist das im Vergleich mit Java geringe Angebot an Entwicklungskapazitäten. Während sich die meisten anderen Befürchtungen für den Einsatz der Sprache objektiv adressieren lassen, kann der Eindruck eines Anbietermarkts nicht ohne weiteres ausgeräumt werden. An dieser Stelle möchten wir bei codecentric ansetzen:

Wenn Sie Interesse an dem Thema haben, würden wir uns freuen, mit Ihnen ins Gespräch zu kommen. Hinterlassen Sie hier einen Kommentar oder schreiben Sie uns unter clojure@codecentric.de.

 

 

 

Nils ist leidenschaftlicher Programmierer mit fast zwei Jahrzehnten Erfahrung im Entwurf und der Realisierung von Softwarelösungen für kleine und große Unternehmen.

Lag sein Fokus ursprünglich im Bereich der Java-Entwicklung mit Spring, und später im Coaching von Entwicklungsteams bei ihren Auseinandersetzungen mit den Prinzipien des Software Craftsmanship und der agilen Softwareentwicklung, so beschäftigt es sich seit einiger Zeit vornehmlich mit den Themen Anforderungs- und Produktmanagement in der Softwareentwicklung.

In seiner aktuellen Rolle ist er verantwortlich für die codecentric Digitization Labs und unterstützt Kunden in den frühen Phasen der Entwicklung neuer digitaler Produkte.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.