Java vs. Googles Go: Ein epischer Kampf um Entwickler

Go vs. Java ist kein gut aufeinander abgestimmter Kampf zwischen Gleichen. Eines ist ein monströses Schwergewicht, das die Branche seit Jahren dominiert. Der andere ist ein schäbiger, leichter Newcomer, der viel Jugend und Versprechen zeigt, aber nur wenige Schläge hat.

Java und Go befassen sich auch mit verschiedenen Nischen. Eine richtet sich direkt an serverseitige Web-Apps, ein Bereich, in dem die andere einst ein wichtiger Akteur war. Der andere ist dem Leben in den Racks entwachsen und ist jetzt eine beliebte Wahl für Geräte.

Aber nicht jeder hat sich auf der Serverseite von Webanwendungen von Java entfernt. Territory Go greift an und frisst sich an Javas Basis auf. Und der Wechsel ist kein besonders großer Sprung, da sich die beiden in vielerlei Hinsicht ähneln. Beide sind liebevolle Hommagen an C, wenn nicht sogar darunter, zumindest an der Oberfläche, an der sich viele Entwickler mit Syntax auseinandersetzen. Sie sind sowohl unkompliziert als auch zwingend erforderlich und haben genügend strukturelle Ähnlichkeiten, sodass es nicht schwierig ist, Code zwischen beiden zu konvertieren. (Das TardisGo-Projekt ist beispielsweise ein Tool, mit dem Go in Java, C # oder JavaScript umgewandelt wird.)

Betrachten Sie dies als ein Käfig-Match, bei dem zwei Cousins ​​von verschiedenen Seiten der Programmierspuren um Ihren nächsten Anwendungsstapel konkurrieren.

Die lange Geschichte von Java bringt Netzwerkeffekte mit sich, die allen helfen

Java gibt es seit 1995 und zieht jedes Jahr mehr Gedanken an. Von winzigen eingebetteten Prozessoren bis hin zu massiven Serverchips läuft Java dank seiner agilen Just-in-Time-Maschine schnell und effizient. Android ist zu einem Segen für Java geworden, als die mit Abstand beliebteste Plattform in der mobilen Welt. Aus diesem Grund bleibt Java in Rankings wie dem Tiobe-Index und PyPL der Spitzenreiter. Diese breite Akzeptanz bedeutet, dass es viel Code zur Wiederverwendung gibt, und ein Großteil davon ist Open Source, um Ihr Leben zu vereinfachen. Sie werden auf den Schultern von Riesen stehen, wenn Sie anfangen, die bazillion Zeilen frei verfügbaren Java-Codes zusammenzufügen.

Die kurze Geschichte von Go macht es sofort relevant

Klar, es ist cool, kostenlosen Java-Code aus dem Web zu schnappen. Aber warten Sie, es ist für Java 1.3 geschrieben und Ihr Chef möchte, dass Sie Java 1.8 verwenden. Keine Sorge, Sie können es wahrscheinlich mit ein wenig Umschreiben wieder zum Laufen bringen. Lassen Sie uns diese Frist noch einmal verschieben ... und noch einmal. Alter Code mag wie ein Geschenk erscheinen, aber es ist nicht immer ein Slam Dunk, und manchmal ist es mehr Ärger als es wert ist.

Die kurze Geschichte von Go bedeutet andererseits, dass es für die heutigen Webstandards geschrieben wurde. Von den Tagen, als Applets die Welt dominieren würden, ist keine Kruft mehr übrig. Es gibt keine längst vergessenen Ideen wie Java Beans oder J2EE, die als verlockende Belästigungen herumstehen. Es ist einfach neu und darauf ausgelegt, wie Menschen heute das Web aufbauen.

Mit Java können Sie auf andere Sprachen tippen

Die JVM ist die Grundlage für Dutzende interessanter Sprachen, die zur Laufzeit von Java abhängen. Jedes kann einfach mit Ihrem Code verknüpft werden, sodass Sie einen Teil in Kotlin und einen anderen in Scala schreiben und möglicherweise alles mit Clojure zusammenkleben können. Wenn Sie Sprachen wie Python, JavaScript oder Ruby verwenden möchten, können alle drei Sprachen direkt in Java ausgeführt werden, wobei Emulatoren verwendet werden, die häufig die erste Wahl sind. Java gibt Ihnen die Freiheit, jedes Subteam und Teilprojekt die richtige Sprache für den Job auswählen zu lassen, während es noch in derselben JVM ausgeführt wird. Sie müssen es nicht verwenden, aber die Gelegenheit ist immer da.

Go fördert die Harmonie

Ja, Sie können eine Superclever-Anwendung zusammenfügen, die das Beste aus Neuem und Trendigem mischt und für jeden Teil Ihres wunderbaren Magnum-Opus auf der JVM die absolut beste Sprache auswählt. Sie können sogar Oldies wie Rexx und Common Lisp einmischen, um ihren Platz in der Computergeschichte der 70er Jahre zu ehren. Viel Glück beim Finden von jemandem mit dem gleichen Geschmack und Talent, der diesen Turm von Babel pflegen wird. Abgesehen vom Einmischen einiger gut gestalteter Bibliotheken ist es nicht immer ein guter Plan, Rube Goldberg beim Entwerfen von gutem Code zu emulieren. Manchmal ist es zweckmäßig und notwendig, aber das bedeutet nicht, dass es ein guter Plan ist. Harmonie und Beständigkeit erleichtern allen das Leben. Die Go-Welt liefert das.

Javas JVM ist schlank und leistungsstark

Java-Klassendateien werden häufig in Hunderten von Bytes gemessen. Die JAR-Dateien, die sie miteinander verbinden, sind normalerweise nur wenige Megabyte groß. Java-Code selbst ist klein, da die virtuelle Maschine so viel Leistung für die Speicherverwaltung und -sicherheit bietet. Wenn Sie vorhaben, viel Code zu verschieben, ist es sinnvoll, die Funktionalität in einem gemeinsamen Laufzeit-Tool zu belassen. Die Zentralisierung bietet weitere Vorteile. Wenn in den niedrigsten Java-Ebenen ein Sicherheitsproblem auftritt, müssen Sie den gesamten Code nicht neu kompilieren und neu verknüpfen. Viele Probleme werden allein durch ein Upgrade der JVM gelöst.

Go erstellt das komplette Paket

Die JVM ist wunderbar, bis Sie feststellen, dass Sie die falsche Version installiert haben. Wenn Sie eine mit Java 1.8 gepackte JAR ausführen möchten, aber nur die Version 1.6 der JVM haben, werden Sie erst dann irgendwohin gehen, wenn Sie sie gefunden haben. Der Go-Compiler erstellt Binärdateien, die zur Ausführung bereit sind. Ja, sie sind ein bisschen groß, aber das liegt daran, dass Go den gesamten zusätzlichen Code für Sie in die Binärdatei einfügt. Es ist alles in einem einfachen Paket enthalten.

Java macht Threads kinderleicht

Es ist keine leichte Aufgabe, verschiedene Teile eines Programms unabhängig voneinander auszuführen. Java gewann frühe Fans, weil sein Modell für Threads einfach zu verstehen und leistungsstark genug war, um nützlich zu sein. Die JVM leistet gute Arbeit beim Zuordnen von Threads zu verschiedenen Kernen auf dem Computer. Es ist nicht einfach, aber das liegt an der Komplexität des Problems, nicht an Java. Go-Benutzer mögen ihre Goroutinen und Kanäle lieben, aber sie fügen einem bereits knorrigen Durcheinander eine weitere knotige Ebene der Komplexität hinzu. Sie werden sich fragen, ob es sich um einen grünen Thread oder einen Betriebssystem-Thread handelt. Dann werden Sie sich über die Komplexität der Synchronisationskanäle wundern. Java ist einfacher.

Go erleichtert die Fadenbelastung auf intelligente Weise

Javas Threads und Synchronisationsprimitive erledigen zwar die Aufgabe, sind jedoch mit hohen Kosten verbunden. Das Erstellen und Zerstören von Threads ist so mühsam und speicherintensiv, dass Java-Programmierer sie immer mit Thread-Pools recyceln. Java hat die Traktion auf dem Server verloren, da jeder Treffer auf der Website einen eigenen Thread benötigt. Go hat ein geringeres Gewicht und flexiblere Objekte, sogenannte Goroutinen, die mit intelligenten Synchronisationswarteschlangen, sogenannten Kanälen, verknüpft sind. Während die meisten Server mit 1.000 oder vielleicht 10.000 Java-Threads die Nase vorn haben, berichten die Leute regelmäßig, dass sie Hunderttausende von Goroutinen auf derselben Hardware ausführen.

Das Modell von Go ist anspruchsvoller und moderner, weil es jünger ist. Das Gebiet hat viel über die Bereitstellung ausgefeilter Multiprozessor-Algorithmen gelernt, und Sie können dies auch nutzen.

Java-Tools haben sich bewährt

Die Reife von Java bedeutet, dass Sie viele großartige Optionen für Tools haben: Eclipse, IntelliJ und mehr. Es gibt ausgefeilte Build-Tools wie Ant und Maven, und die wichtigsten Repositorys sind für die Verarbeitung von Java-Code optimiert. Es gibt auch Meta-Code-Analysen für alles, von der Durchsetzung von Code-Regeln bis zur Suche nach Rennbedingungen. Sie funktionieren möglicherweise nicht mit Ihrer Version des Codes, tun dies jedoch häufig. Deshalb ist Java so ein Moloch.

Go-Tools sind modern und neu

Go wurde für die moderne Multithread-Welt entwickelt und die Code-Tools sind für die heutigen Herausforderungen optimiert. In den Debugger und die Laufzeit ist ein Race Condition Detector integriert, sodass es viel einfacher ist, mit bösen Problemen umzugehen. Der Quellcode kann von Golint und einem statischen Analysegerät namens "Go Vet" geprüft werden, das eine Reihe von Heuristiken zum Abfangen von schlechtem oder sogar schlecht geschriebenem Go-Code aufweist. All dies und mehr sind optimiert, damit Ihr Code auf einem Multicore-Computer schnell ausgeführt werden kann.

Java hat die Konstrukte, die Sie wollen

Im Laufe der Jahre hat sich die Java-Community viele Funktionen gewünscht. Manchmal wurden sie gewährt. Verschlüsse, Generika, Lambdas und mehr wurden hinzugefügt. Wenn es eine neue Idee in Programmiersprachen gibt, besteht eine gute Chance, dass jemand sie in die Java-Welt eingeführt hat. Es ist vielleicht nicht ideal, aber die Optionen sind da. Dank der fortschreitenden Entwicklung von Java können Sie den brillanten Code schreiben, den sich Ihr Gehirn vorstellt.

Go vermeidet Konstruktionsverwirrung

Die Freiheit, Dutzende cleverer Codierungsstrukturen zu verwenden, klingt großartig, bis alle im Team damit beginnen. Dann wird es schwieriger, den Code eines anderen zu lesen, weil dieser das clevere Feature A verwendet, während sich Ihr Gehirn an das clevere Feature B gewöhnt. Die kombinatorische Verwirrung verstärkt sich mit jedem Entwickler, der sein Lieblingskonstrukt in die Mischung einbringt.

Go hingegen wurde so konzipiert, dass es einfach ist. Es wurde explizit so gebaut, dass ein guter Programmierer in wenigen Stunden Go lernen kann. Es gibt nicht Dutzende cleverer Ideen, die Hunderte von Dokumentationsseiten füllen. Das mag beim Schreiben von Code einschränkend sein, aber es ist entspannend, wenn Sie Code von anderen im Team lesen. Jeder verwendet die gleichen Redewendungen, weil jeder die gleichen Kernfunktionen verwendet. Es ist nicht nur eine Erfahrung zur Teambildung wie Outward Bound. Es geht um Effizienz.

Java ist ausgereift

Alter bringt Weisheit, Reife und Stabilität - all die Gründe für die Wahl einer breiten, ausgereiften Codebasis, die mehr als zwei Jahrzehnte tief ist. Die Kinder lernen heute zu Beginn ihrer Reise mit der Informatik weiterhin Java, und die dominanteste Plattform, Android, baut darauf auf. Wenn es keinen guten Grund gibt, sich zu ändern, sollten Sie bei den Besten bleiben.

Go ist eine saubere Tafel

Manchmal ist es am besten, die Vergangenheit hinter sich zu lassen. Fortschritt bedeutet schließlich oft, neu anzufangen. Go bietet Ihnen die Möglichkeit, mit einem sauberen, gestochen scharfen und modernen Werkzeug zu arbeiten, das für das optimiert ist, was wir heute tun. Es ermöglicht Ihnen, die Einfachheit und die Freiheit zu genießen, die Vergangenheit hinter sich zu lassen.

Und einfach, weil Google Go gestartet hat, um die Codierung für seine endlosen Serverfarmen zu vereinfachen, heißt das nicht, dass es nicht größer werden kann. Einige verwenden es bereits, um Drohnen, Roboter und andere Geräte zu betreiben. Können Smartphones weit zurückliegen?

Zum Thema passende Artikel

  • Tippen Sie auf die Go-Sprache von Google
  • Die besten Go-Sprach-IDEs und -Editoren
  • Rückblick: Die vier großen Java-IDEs verglichen
  • Angular vs. React: Ein epischer Kampf um die Meinung der Entwickler
  • Java vs. Node.js: Ein epischer Kampf um Entwickler
  • PHP vs. Node.js: Ein epischer Kampf um Entwickler
  • Python vs. R: Der Kampf um den Gedankenaustausch der Datenwissenschaftler
  • 21 heiße Programmiertrends - und 21 werden kalt
  • 9 Lügen Programmierer sagen sich
  • Karriere-Hacks: Professionelle Do's und Don'ts für Entwickler