Javascript ist König – was ist passiert?
13. August 2018
Javascript ist die Lingua Franca des Internets. Seit 2015 ist NPM die grösste Sammlung an Open-Source-Bibliotheken. Javascript hat sich innert kürzester Zeit von einer Browser-Skriptsprache zu einer führenden Programmiersprache entwickelt. Ein eindrücklicher Aufstieg – mit überraschenden Gründen.
Der Aufstieg einer Skriptsprache
Vor nicht so langer Zeit galt Javascript (JS) als Skriptsprache, um dezent die Funktionalität von Formularen zu erweitern. Die grossen Aufgaben überliess man lieber „richtigen“ Sprachen im Backend. Heute ist JS dominanter Player in der Open Source Welt. Dies wird durch Zahlen besonders deutlich: Mit 2.3 Mio. Pull Requests auf JS-Projekten (siehe octoverse.github.com) ist JS die populärste Sprache auf Github. Auf der serverseitigen JS-Welt ist NPM (Node Package Manager) mit über 600‘000 Packages das grösste Package Repository. Mit Node hat JS seinen Platz auf dem Server erobert, und kämpft sich gerade seinen Weg auf den Desktop: Neue Anwendungen wie z.B. der Editor Atom laufen in einer JS-Laufzeitumgebung. Auch in der Mobile-Entwicklung hat JS seinen fixen Platz; primär in Hybrid-Frameworks, aber auch zunehmend auf die Zielplattform kompiliert.
JS hat also eine gewaltige Reise zurückgelegt. Aber hat sich die Sprache dermassen verändert? Ein bisschen, ja, aber nicht mehr als andere Sprachen.
Die weniger offensichtlichen Gründe
Die Verbreitung von JS wurde massgeblich durch die Webbrowser vorangetrieben. Die Möglichkeit, einen grossen Teil der Entwicklung direkt im Browser zu erledigen, hielt die Einstiegshürde klein; durch die Verbreitung der Sprache in der Webentwicklung war es für Entwickler bald einmal normal, auch ein wenig JS programmieren zu können. Und dennoch – dass JS auch im Backend führend werden könnte, war vor wenigen Jahren noch undenkbar.
JS-Profis wussten schon immer, dass die Sprache in manchen Aspekten den „richtigen“ Sprachen nicht nur ebenbürtig, sondern überlegen ist. Jetzt, da funktionale Programmierung zunehmend Einzug hält, wird dies erst vielen bewusst; funktionale Konstrukte werden bei den etablierten Sprachen nachgerüstet.
Asynchronität als zentrales Paradigma
Der vermutlich wichtigste Erfolgstreiber aber hat eigentlich gar nicht so viel mit JS als Sprache zu tun – es ist das Paradigma der asynchronen Programmierung von Node. Der grosse Durchbruch der Asynchronität als zentrales Paradigma einer grossen Community darf sich die serverseitige JS-Plattform auf die Fahne schreiben. Ob zu Recht, ist streitbar, schliesslich wurde Asynchronität schon Jahre zuvor z.B. von Erlang mit dem Actor Pattern ausgereift, und auch Nodes Kernstück, der asynchrone Event-Loop, ist nicht hausgemacht. Das Vorgespurte ist mit Node weltbekannt geworden: „Wir leben in einer asynchronen Welt“ als Axiom der Web-Entwicklung in Zeiten, die von APIs, Microservices und Push-Daten definiert werden. Mit Serverless Backends scheint sich dieser Trend fortzusetzen.
Vielleicht war die Asynchronität bei Node gerade deshalb so erfolgreich, weil die Plattform zu einem Zeitpunkt bekannt wurde, an dem die Hardware zunehmend horizontale Skalierung vorgab, und weil es eben noch nicht so viele andere (konkurrierende) Paradigmen in JS gab. Weil die Sprache simpel ist, konnte sie diesen neuen Trend leicht aufnehmen.
Javascript hat sich wegen seiner Einfachheit durchgesetzt und war dadurch in der Lage, den Trend der Asynchronität aufzunehmen, wo andere schon überladen waren.
Die (späten) Erweiterungen mit einem Package Manager, mehreren Modulsystemen und leistungsfähigen Entwicklungsumgebungen waren dann eher Hausaufgaben. Sie entstanden während dem Boom, und sind nicht ursächlich dafür.
Wie weiter?
Gerade die neue Führung von NPM muss man durchaus auch kritisch betrachten. Sind die enormen Zahlen einfach Ausdruck von Popularität oder auch ein bisschen von Chaos? Zwar begünstigt Vielfalt und Veränderung das finden optimaler Lösungen, jedoch kann man sehr schnell den Fokus auf das eigentlich zu lösende Problem verlieren und beschäftigt sich alsbald mit Meta-Fragen, insbesondere der Kompatibilität zwischen Bibliotheken. Schon jetzt hat die JS-Welt einen grossen Teil ihrer einstigen Leichtigkeit eingebüsst.
Wohin die Reise führt, wird sich zeigen. Eine Erkenntnis aus der Erfolgsgeschichte von JS für die Softwareentwicklung im Allgemeinen ist jedenfalls, dass schlanke Systeme grosse Vorteile haben. Insbesondere können sie ernsthaft auf neue Bedürfnisse reagieren.
Der vollständige Beitrag in der Open Source Studie 2018 Schweiz als pdf -->Fachbeitrag Roland Brand