Node.js vs. Java: Ein epischer Kampf um Entwickler-Mindshare

In der Geschichte des Rechnens war 1995 eine verrückte Zeit. Zuerst erschien Java, dann folgte JavaScript. Die Namen ließen sie wie verbundene Zwillinge erscheinen, die neu losgelöst waren, aber sie könnten unterschiedlicher nicht sein. Einer von ihnen ist kompiliert und statisch typisiert; der andere interpretiert und dynamisch getippt. Dies ist nur der Anfang der technischen Unterschiede zwischen diesen beiden wild unterschiedlichen Sprachen, die sich dank Node.js inzwischen auf eine Art Kollisionskurs verlagert haben.

Wenn Sie alt genug sind, um damals schon da zu sein, erinnern Sie sich vielleicht an Javas frühen, epischen Höhepunkt. Es verließ die Labore und sein Hype-Meter steckte fest. Jeder sah darin eine Revolution, die bei nichts weniger als einer vollständigen Übernahme des Computers aufhören würde. Diese Vorhersage war nur teilweise richtig. Heute dominiert Java Android-Telefone, Enterprise Computing und einige eingebettete Welten wie Blu-ray-Disks.

Trotz seines Erfolgs hat Java auf dem Desktop oder im Browser nie viel Traktion erreicht. Die Leute haben die Leistungsfähigkeit von Applets und Java-basierten Tools angepriesen, aber Gunk hat diese Kombinationen immer durcheinander gebracht. Server wurden zu Javas Sweet Spot.

Inzwischen hat sich das, was Programmierer anfangs für den dummen Zwilling hielten, bewährt. Sicher, JavaScript hat ein paar Jahre lang mitgemacht, als HTML und das Web einen Borg auf die Welt zogen. Mit AJAX hat sich das geändert. Plötzlich hatte der dumme Zwilling Macht.

Dann wurde Node.js erzeugt und drehte die Köpfe der Entwickler mit seiner Geschwindigkeit. JavaScript war auf dem Server nicht nur schneller als erwartet, sondern häufig auch schneller als Java und andere Optionen. Die stetige Ernährung mit kleinen, schnellen und endlosen Datenanfragen hat Node.js seitdem häufiger gemacht, da Webseiten dynamischer geworden sind.

Während es vor 20 Jahren undenkbar gewesen sein mag, sind die Quasi-Zwillinge jetzt in einen Kampf um die Kontrolle über die Programmierwelt verwickelt. Auf der einen Seite stehen die tiefen Grundlagen solider Technik und Architektur. Auf der anderen Seite stehen Einfachheit und Allgegenwart. Wird sich die Compiler-gesteuerte Welt der alten Schule von Java behaupten, oder wird die Geschwindigkeit und Flexibilität von Node.js dazu beitragen, dass JavaScript weiterhin alles auf seinem Weg verschlingt?

Wo Java gewinnt: Solides Fundament

Ich kann die Entwickler lachen hören. Einige sterben möglicherweise sogar an Herzversagen. Ja, Java hat Pannen und Fehler, aber relativ gesehen ist es der Rock of Gibraltar. Der gleiche Glaube an Node.js ist viele Jahre entfernt. Tatsächlich kann es Jahrzehnte dauern, bis die JavaScript-Crew fast so viele Regressionstests schreibt, wie Sun / Oracle zum Testen der Java Virtual Machine entwickelt hat. Wenn Sie eine JVM starten, erhalten Sie 20 Jahre Erfahrung von einem soliden Kurator, der entschlossen ist, den Unternehmensserver zu dominieren. 

Die JavaScript-Welt holt schnell auf. Wenn ein Großteil des gesamten Webs von der JavaScript-Ausführungs-Engine abhängt, werden unzählige Kanten für das Polieren aller Kanten aufgewendet. Alle Innovationen haben jedoch einen Nachteil, da sich die neuen Funktionen möglicherweise schneller verbreiten, als die Entwicklerbasis sie aufnehmen kann. Entwickler alter Schulen sind oft verwirrt von Code, der mit den neueren ECMAScript-Syntaxverbesserungen gefüllt ist - und dieser neue Code stürzt einige ältere Browser leise ab. Das endlose Angebot an innovativen Präprozessoren wie CoffeeScript und JSX mag für Entwickler, die diese Funktionen wünschen, großartig sein, aber sie erschweren es dem Rest von uns, eine zufällige Datei zu öffnen und sie sofort zu verstehen.

Java hat seinen Anteil an neuen Funktionen und Optionen, ist jedoch größtenteils eine stabile Plattform. Das erleichtert Entwicklern, die etwas für die Ewigkeit bauen, das Leben erheblich.

Wo Node.js gewinnt: Ubiquity

Dank Node.js findet JavaScript auf dem Server und im Browser ein Zuhause. Code, den Sie für einen schreiben, wird höchstwahrscheinlich auf beiden gleich ausgeführt. Im Leben ist nichts garantiert, aber dies ist so nah wie im Computergeschäft. Es ist viel einfacher, sich an JavaScript für beide Seiten der Client / Server-Kluft zu halten, als etwas einmal in Java und erneut in JavaScript zu schreiben, was Sie wahrscheinlich tun müssten, wenn Sie sich entscheiden würden, die in Java für das geschriebene Geschäftslogik zu verschieben Server an den Browser. Oder vielleicht besteht der Chef darauf, dass die Logik, die Sie für den Browser erstellt haben, auf den Server verschoben wird. In beiden Richtungen erleichtern Node.js und JavaScript die Migration von Code erheblich.

Der Vorsprung von Node in dieser Welt scheint sich nur zu erweitern. Die ausgefeiltesten Webframeworks wie React entscheiden in letzter Sekunde, ob der Code auf dem Server oder auf dem Client ausgeführt werden soll. Eines Tages wird es auf dem Client und an einem anderen Tag auf dem Server ausgeführt. Eine intelligente Logik trifft die Entscheidung im Handumdrehen basierend auf dem Lade- oder Ersatz-RAM oder etwas anderem. Einige Frameworks senden JavaScript als Abfrage an die Datenbank, wo es ausgeführt wird. Ihr Code könnte überall ausgeführt werden und es wird schwieriger, Schritt zu halten, da keine Postkarte nach Hause gesendet wird. Sei einfach glücklich, denn du musst nicht über die Details nachdenken.

Wo Java gewinnt: Bessere IDEs

Java-Entwickler verfügen über Eclipse, NetBeans oder IntelliJ, drei erstklassige Tools, die gut in Debugger, Dekompilierer und Server integriert sind. Jedes hat jahrelange Entwicklung, engagierte Benutzer und solide Ökosysteme, die mit Plug-Ins gefüllt sind.

In der Zwischenzeit geben die meisten Node.js-Entwickler Wörter in die Befehlszeile und Code in ihren bevorzugten Texteditor ein. Ja, einige der besten Texteditoren wie Atom haben umfangreiche Sammlungen von Plug-Ins, die fast alles können, aber selbst dann scheint Node.js eher altmodisch als Eclipse zu sein. Bald werden wir unsere Maus durch einen Atari-Joystick ersetzen.

Einige Entwickler verwenden Eclipse oder Visual Studio, die beide Node.js unterstützen. Das wachsende Interesse an Node.js bedeutet natürlich, dass neue Tools hinzukommen, von denen einige, wie IBMs Node-RED, faszinierende Ansätze bieten, aber sie sind noch weit davon entfernt, so vollständig oder dominant wie Eclipse oder IntelliJ zu sein.

Das Seltsame ist, dass die Entwickler diese Tools anscheinend nicht verwenden. Die Kommandozeile sollte vor 35 Jahren mit der Ankunft des Mac verschwinden, aber niemand sagte es den Node.js-Entwicklern. Die Optionen sind da. WebStorm ist beispielsweise ein solides kommerzielles Tool von JetBrains, das viele Befehlszeilen-Build-Tools enthält.

Wenn Sie nach einer IDE suchen, die Code bearbeitet und jongliert, sind die neuen Tools, die Node.js unterstützen, natürlich gut genug. Wenn Sie jedoch Ihre IDE bitten, Sie bearbeiten zu lassen, während Sie den laufenden Quellcode bearbeiten, wie ein Herzchirurg eine Brust aufschneidet, sind Java-Tools viel leistungsfähiger. Es ist alles da und alles lokal.

Wo Node.js gewinnt: Datenbankabfragen

Abfragen für einige der neueren Datenbanken wie CouchDB und MongoDB werden in JavaScript geschrieben. Das Mischen von Node.js und ein Aufruf der Datenbank erfordert kein Schalten, geschweige denn das Erinnern an Syntaxunterschiede. 

Inzwischen verwenden viele Java-Entwickler SQL. Selbst wenn sie die Java-Datenbank verwenden - früher Derby, eine in Java für Java-Entwickler geschriebene Datenbank - schreiben sie ihre Abfragen in SQL. Sie würden denken, sie würden einfach Java-Methoden aufrufen, aber Sie würden sich irren. Sie müssen Ihren Datenbankcode in SQL schreiben und dann Derby das SQL analysieren lassen. SQL ist eine nette Sprache, aber sie unterscheidet sich grundlegend von Java, und viele Entwicklungsteams benötigen unterschiedliche Personen, um SQL und Java zu schreiben.

Um die Sache noch schlimmer zu machen, verwenden viele Java-Codierer aufwendige Bibliotheken und Schemata, um die Daten aus der SQL-Abfrage in Java-Objekte zu konvertieren, damit sie sie in Vorlagen umwandeln können. Es ist ein verrückter Prozess und letztendlich ziemlich verschwenderisch.

Wo Java gewinnt: Typen 

Viele der Einführungskurse in die Programmierung verwenden weiterhin Java, da viele ernsthafte Programmierer statisch typisierten Code sowohl aus Gründen der Einfachheit als auch der Sicherheit bevorzugen. Der Code fühlt sich nur strenger an, nachdem der Compiler die offensichtlichen Fehler entdeckt hat.

JavaScript holt jedoch auf und einige Entwickler wechseln zu TypeScript, einer statisch typisierten Obermenge von JavaScript, die die gesamte Magie der Typprüfung anwendet, bevor sie etwas ausspuckt, das im JavaScript-Stapel Ihres Browsers ausgeführt wird. Wenn Sie Typen lieben, reicht dies möglicherweise aus, um JavaScript zu nutzen. Oder Sie könnten die Nachahmung einfach als die aufrichtigste Form der Schmeichelei erkennen und sich an Java halten, das von Anfang an statisches Tippen umfasste.

Wo Node.js gewinnt: Syntaktische Flexibilität

JavaScript war früher eine einfache Sprache, um unerwünschte Warnfelder anzuzeigen und die Formulareingabe zu überprüfen. Dann erstellte die Entwicklergemeinde viele verschiedene Versionen der Sprache, die in etwas für den Browser übersetzt werden konnten. Es gibt die CoffeeScript-Crowd, die eine Handvoll verschiedener Syntaxen anbietet, um den Geschmack für sauberere Interpunktion zu befriedigen. Es gibt die React / Vue-Crowd, die HTML und JavaScript miteinander vermischt, nur weil es sauberer ist. Es gibt TypeScript für die Typliebhaber und LiveScript für die Anhänger der funktionalen Sprache.

Sie werden auch in der Java-Welt eine enorme Menge an Kreativität finden, aber aus irgendeinem Grund wird dies bei vielen Vorprozessoren nicht zum Ausdruck gebracht. Es gibt eine Reihe von Sprachen wie Kotlin, Scala und Clojure, die in Bytecode für die JVM umgewandelt werden, aber irgendwie fühlen sie sich unterschiedlich genug an, um sich als separate Sprachen abzuheben. Alle Präprozessoren machen JavaScript-Programmierern, die verschiedene Arten der Formulierung oder Interpunktion ihres Codes lieben, mehr Spaß.

Wo Java gewinnt: Einfacher Erstellungsprozess 

Komplizierte Build-Tools wie Ant und Maven haben die Java-Programmierung revolutioniert. Aber es gibt nur ein Problem. Sie schreiben die Spezifikation in XML, einem Datenformat, das nicht zur Unterstützung der Programmierlogik entwickelt wurde. Sicher, es ist relativ einfach, Verzweigungen mit verschachtelten Tags auszudrücken, aber es ist ärgerlich, von Java auf XML umzuschalten, nur um etwas zu erstellen. Mit JavaScript gibt es keine Schaltvorgänge. 

Node.js hatte früher den einfacheren Build. Sie würden einfach den Code bearbeiten und dann auf "Ausführen" klicken. Das war damals. Da die Node-Entwickler den Prozess "verbessert" haben, haben sie Präprozessoren hinzugefügt, die Ihren bevorzugten Subdialekt von JavaScript verwenden und ihn in etwas ausführbares verwandeln. Dann muss der Node-Paketmanager die richtige Bibliothek finden. Meistens funktioniert dies nur, aber manchmal nicht, und dann verbringen Sie Zeit damit, nach der richtigen Versionsnummer eines Artefakts zu suchen, das Sie selbst in einem separaten Schritt erstellen. Und wenn Sie einen Fehler im Artefakt-Repository begehen, wird diese Versionsnummer angezeigt und Sie müssen die Kilometerzählerräder erneut drehen.

Java hat auch einen komplexen Erstellungsprozess, der der Node.js-Methode ziemlich ähnlich ist, aber es fühlt sich nicht so an, als wäre es komplexer geworden. Irgendwie scheinen Maven und Ant jetzt Teil der Java-Stiftung zu sein. Viele der rauen Kanten sind längst verschwunden und die Builds funktionieren nur noch häufiger. Wenn es ein absolutes Maß an Build-Aufwand gäbe, könnten die beiden Sprachen ähnlich sein, aber die schnelle Explosion der JavaScript-Komplexität bedeutet, dass Java gewinnt.

In Verbindung stehendes Video: Node.js Tipps und Tricks

In diesem Erklärvideo lernen Sie verschiedene Techniken kennen, mit denen Sie Ihre Erfahrung in der Knotenentwicklung verbessern können.

Wo Node.js gewinnt: JSON

Wenn Datenbanken Antworten ausspucken, bemüht sich Java, die Ergebnisse in Java-Objekte umzuwandeln. Entwickler werden stundenlang über POJO-Zuordnungen, Ruhezustand und andere Tools streiten. Die Konfiguration kann Stunden oder sogar Tage dauern. Schließlich erhält der Java-Code nach der gesamten Konvertierung Java-Objekte. Und wenn es um die Konfiguration geht, hält die Java-Welt immer noch an XML fest und bietet sogar zwei wichtige Parser an, um Entwicklern mehr Gründe zu geben, sich zu ärgern.

Heutzutage geben viele Webdienste und Datenbanken Daten in JSON zurück, einem natürlichen Bestandteil von JavaScript. JSON ist mittlerweile so verbreitet und nützlich, dass viele Java-Entwickler das Format verwenden, und eine Reihe guter JSON-Parser sind auch als Java-Bibliotheken verfügbar. JSON ist jedoch Teil der Grundlage von JavaScript. Sie brauchen keine Bibliotheken. Es ist alles da und bereit zu gehen.

Wo Java gewinnt: Remote-Debugging

Java bietet unglaubliche Tools zur Überwachung von Maschinenclustern. Die JVM ist tief verwurzelt und verfügt über ausgefeilte Profiling-Tools, mit denen Engpässe und Fehler erkannt werden können. Auf dem Java Enterprise Stack werden einige der fortschrittlichsten Server der Welt ausgeführt, und die Unternehmen, die diese Server verwenden, haben das Beste an Telemetrie gefordert. Alle diese Überwachungs- und Debugging-Tools sind ausgereift und können von Ihnen bereitgestellt werden.

Wo Node.js gewinnt: Desktop

Möglicherweise werden dort einige Java-Applets ausgeführt, und ich verwalte noch einige Java-JAR-Dateien, auf die ich klicken kann, um sie auszuführen, aber die Desktop-Welt ist größtenteils weitgehend Java-frei. JavaScript hingegen erfasst immer mehr Aktionen, da der Browser die meisten Rollen für unseren Desktop aufnimmt. Als Microsoft Office neu schrieb, um im Browser zu arbeiten, war der Würfel gefallen. Wenn Sie sich immer noch fragen, gibt es interessante Optionen wie Electron, mit denen Sie Ihren Webcode in eine eigenständige Desktop-App verwandeln können.

Wo Java gewinnt: Handhelds

Android-Apps werden häufig in Java geschrieben und 90 Prozent der neuen Telefone verwenden eine Android-Version. Viele Leute benutzen nicht einmal mehr Desktops, weil die Telefone für alles gut genug sind.

Natürlich gibt es ein bisschen Verwirrung. Viele Entwickler schreiben Node.js Webanwendungen, die auf die mobilen Browser sowohl auf dem iPhone als auch auf den Androids abzielen. Wenn dies gut gemacht wird, ist die Leistung oft gut genug.