Mit Clojure können wir eine ganze Menge Dinge erledigen. Ganz im Ernst.
In diesem Beitrag möchte ich einen anderen, nicht weniger wichtigen Aspekt hervorheben: Produktivität. Mit Clojure bekommen wir eine ganze Menge Dinge erledigt. Ganz im Ernst.
Zugegeben, ich war leicht schockiert und ein wenig erschrocken, als ich kürzlich über den Tweet von @ZackMaril stolperte, in dem er behauptete, Clojure sei eine sterbende Sprache. Eine riesige Diskussion wurde ausgelöst, und seitdem wurde viel geschrieben. Eine Zusammenfassung findet sich im Beitrag von Arne Brasseur, der auch einen guten Einblick in die Gemeinschaft hinter Clojure bietet. Eric Normand hat heute eine weitere Abstraktionsebene hinzugefügt und einige weitere Links in der Drama-Ausgabe des purelyfunctional.tv-Newsletters dieser Woche gesammelt.
Ich teile Dan Lebreros Meinung über Clojure. Clojure hat mir Lektionen erteilt und Konzepte vorgestellt, die ich nicht mehr missen möchte. Zuallererst liebe ich die eingebauten unveränderlichen Sammlungen. Unveränderlichkeit als Standard ist ein Meilenstein in meinem Leben als Entwickler. Ich vergleiche es mit Git-Pair-Programming, kontinuierlicher Integration und IntelliJ IDEA (jetzt natürlich mit Cursive ). Es gab eine Zeit, in der ich von all diesen Dingen noch nicht einmal wusste. Jetzt kann ich mir nicht mehr vorstellen, jemals ohne eines dieser Tools zu arbeiten.
Mein Team arbeitet nun schon seit fast drei Jahren mit Clojure. Wir kamen aus einer reinen Java-Welt und beschlossen, ein polyglottes Team Wir wählten Clojure, Scala und Python als unsere Hauptsprachen. Keiner der Entwickler, die seither zu uns gestoßen sind, hatte zuvor Erfahrung mit Clojure oder Scala. Mit unserer Pair Programming-Routine und unserer Microservice-Architektur gelingt es uns jedoch, Neulinge schnell einzuarbeiten.
Aus dieser Erfahrung heraus kann ich bezeugen, dass Clojure mehr als einfach zu erlernen ist. Neue Teammitglieder - von studentischen Praktikanten bis hin zu erfahrenen Hackern - sind in der Regel innerhalb von Tagen und nicht Wochen produktiv. Unsere "nicht-technischen" Teammitglieder - Produktionsleiter, Geschäftsdesigner und dergleichen - haben ebenfalls angefangen, Clojure zu hacken und sind nun in der Lage, einige ihrer Aufgaben zu automatisieren und den Entwicklern zu helfen.
Die Tatsache, dass Clojure kaum Syntax hat, und sein Streben nach radikaler Einfachheit tragen dazu bei, dass es leicht erlernt werden kann. Dies steht im Gegensatz zu z.B. dem syntaxlastigen Scala.
Stell dir die folgende Situation vor: Du willst eine Änderung an deiner Software vorzunehmen. Nach deinem Bauchgefühl könnte es den Nachmittag dauern. Du setzt dich mit deinem Pair/Buddy zusammen und diskutierst das Problem. Du bist TDD-Anhänger, also schreibst du einen Test, der die noch zu entwickelnde Funktionalität voraussetzt. Er ist rot. Du sagst: "Ok. Bevor wir mit der Codierung beginnen, lass' mich das schnell in einem einfachen Pseudocode formulieren". Dein Partner führt den Test aus. Er ist grün. Ihr seht euch an: "Sind wir fertig? " Ihr seht euch den Code noch einmal an. Ihr seid fertig. Es sind jetzt 20 Minuten vergangen.
Diese Erfahrung hättest du meinem ehemaligen Java-Entwickler-Ich nicht erklären können, egal wie sehr du dich bemüht hättest. Und doch passiert es jeden Tag. Clojure hat diese Art, die eigenen Gedanken scheinbar mühelos in funktionierenden Code zu verwandeln, die ich von keiner anderen Sprache kenne. (Es gibt natürlich eine Menge Sprachen, die ich nicht kenne).
Bei der Analyse eines Clojure-Codes tritt der Code selbst schnell in den Hintergrund und gibt den Blick auf das eigentliche Problem frei. Auch hier sind es die minimalistische Syntax und der Fokus auf Einfachheit, die es leicht machen, über den Code nachzudenken. Die Sprache erfordert nur einen geringen mentalen Aufwand bei der Untersuchung von Problemen. Das gilt selbst dann, wenn man das Problem mit jemandem bespricht, der Clojure überhaupt nicht kennt. Es dauert nur wenige Minuten, bis die Diskussion von der Analyse des Codepfads zu den geschäftlichen Aspekten des Problems übergeht.
Dies gilt auch für Bibliothekscode, der oft erstaunlich prägnant ist und Ihnen eine gute Chance gibt, das Innenleben einer Bibliothek zu verstehen. Auch dies ist nicht unbedingt der Fall, wenn es sich um eine Sprache handelt, die mehr Syntaxoptionen bietet.
In der jüngsten Diskussion wurde oft gesagt, dass Clojure ein Team nicht per se produktiver macht. Ich denke, das Gegenteil ist der Fall. Die Designentscheidungen von Clojure führen zu einer erstaunlich produktiven Sprache.
Es ist effizient, neue Funktionalität zu entwickeln. Es gibt wenig Hindernisse bei der Analyse von Problemen und der Erforschung von unbekanntem Code. Sie verfügt über ausgezeichnete Werkzeuge. Sie macht Spaß. Stirbt sie aus? Nein, verdammt! Wenn man es töten wollte, müsste man es mir erst aus meinen kalten, toten Händen entreißen.
Ich kann nur vermuten, dass wir stellvertretend für eine ganze Reihe von Teams in einer ganzen Reihe von Unternehmen stehen, die sich glücklich und still an der Produktivität von Clojure erfreuen. No Drama
PS: In diesem Beitrag habe ich eine Menge Eigenschaften von Clojure ausgelassen, die ebenfalls dazu beitragen, dass es eine ausgezeichnete Wahl ist. Dazu gehören die hervorragende Abwärtskompatibilität, einfache und dennoch leistungsfähige Nebenläufigkeitsprimitive, JVM und Javascript als Ziellaufzeit und vieles mehr. PPS: Wir verwenden immer noch Scala. Wir mögen es sogar. Zumindest - aber nicht nur - wegen der sehr unterschiedlichen Herangehensweise an die Programmierung. Ein Problem aus zwei verschiedenen Blickwinkeln zu betrachten, ist ein Wert an sich. Polyglott rockt! PPPS: Hupe , wenn du Clojure liebst!
[…] With Clojure we get a whole lot of stuff done. Seriously. […]
Hi Peter, great question!
We as a team were in the fortunate position to build a new thing from scratch. We were used to developing rather large systems and and decided to go for a microservice architecture now. So there were two paradigm shifts to handle at the same time. Luckily they were of mutual benefit. Treating an HTTP-response as the function of the request is an excellent stepping stone to FP. Doing so in a small, simple service makes it easier to do so in a new programming paradigm.
Generally I see three ways in that teams are transitioning from Java to Clojure:
1) Build something new from scratch.
2) Factor out some functionality from a monolithic software into smaller services.
3) Adopt some tools (like lambdacd-pipelines, or oscillator) that are written and configured in Clojure.
For the first the transition seems to be the easiest. For the third least so. Still it is not a big problem.
Schöner Artikel - macht neugierig auf Clojure!
I’m desperately trying to get clojure into our company – it’s a tough sell, with no success so far:
People simply do not believe that it will be way better that their existing environment.
Thank you very much for your post – it’s very encouraging!
Honk honk!
Honk!
Honk Honk!
Just wrote first lines of clojure again today.
I love it
To Christian. How did you manage the paradigm shift? Its a huge shift from OO to Lisp. From object interaction to functional composition, from mutable to immutable data structures. How much re-learning was involved?
Hi, what are your Scala use cases - in contrast to Clojure? And because I'm getting used to Scala: 1/2 honk ;)
We have received your feedback.