Das heutige Java ist die Lingua franca der Programmierwelt: Als Sprache ist es leichter zu lernen als C/C++, liest sich normaler als Perl/Lisp und ist professioneller zu verwenden als VB/PHP. Es gibt fast niemanden, der Java nicht versteht, daher wird ein Konzept, wenn man es in Java schreibt, für alle verständlich.
Und als Plattform hat Java eine allumfassende Klassenbibliothek, eine extrem optimierte virtuelle Maschine und tief verwurzelte Open-Source-Projekte. Das Ergebnis ist, dass man, egal was man tun möchte, theoretisch – und sogar in 99 % der Fälle praktisch – in Java umsetzen kann.
In dem Moment, in dem ich diese Worte schreibe, werden auf der Welt Zehntausende Zeilen Java-Code geboren. Wenn also "niemand benutzt es mehr" die Todeslinie für eine Technologie ist, dann ist Java eindeutig lebendig und geht es ziemlich gut; wenn "eine Stelle finden zu können" die Todeslinie ist, dann ist Java noch viel mehr voller Leben. Die Situation im Inland ist mir nicht klar, aber auf jeder Jobsuch-Website in Europa oder Amerika kann die Suche nach Stellen mit Java als Schlüsselwort leicht seine dominante Stellung zeigen, womit es C++ schlägt und PHP tritt.
Niemand fragt, warum es lebt; wir halten es für selbstverständlich, dass es lebt, so wie ich nie frage, ob es morgen, wenn ich zur Arbeit gehe, noch Arbeit geben wird – zugegeben.
Aber dann könnten wir genauso gut sagen, Java habe Unsterblichkeit erlangt. Denn wenn man TIOBE nach den beiden oben genannten Definitionen durchgeht, stellt man fest, dass keine einigermaßen bekannte Programmiersprache (und die dahinterstehende Technologie) wirklich gestorben ist. Visual Basic lebt noch, Delphi lebt noch, COBOL lebt, Fortran lebt, und sogar FoxPro lebt.
Was noch speziellere Beispiele angeht: Haben Sie schon vom IBM-AS/400-System gehört? Mein letzter Arbeitgeber verwendet es noch. Die Programmierer, die es warten, bekommen lächerlich hohe Einstiegsgehälter, weil zwanzig Jahre der zentralen Geschäftslogik des Unternehmens darin stecken – wenn es ausfällt, fällt alles aus. AS/400 lebt ebenfalls.
Wenn ich also sage "Java, geh sterben / ist tot", was bedeutet "tot"? Ganz einfach: Niemand liebt es mehr.
Die Antwort in genau diesem Abschnitt, die Niemöllers Gedicht neu schreibt, ist ein perfektes Echo auf Paul Grahams "von allen großartigen Programmierern, die mir einfallen, kenne ich nur einen, der freiwillig in Java programmieren würde": Neun von zehn Leuten, die Java schreiben, tun das "weil die Arbeit es erfordert" – der verbleibende eine, weil er nichts anderes kann. Unter allen Beweggründen zum Programmieren, die ich mir vorstellen kann, ist "weil die Arbeit es erfordert" der entmutigendste.
Die Gesundheit von Prostata und Wirbelsäule opfern, stundenlang vor dem Bildschirm sitzen und das Schreiben von Programmen in Java ertragen, nur um den Lebensunterhalt zu verdienen – ich finde es sowieso langweilig. Wenn du noch lachen kannst, gut für dich.
Und wenn du nicht gerade aus dem Jahr 1995 angereist bist, solltest du erkennen können, dass das heutige Java tatsächlich nicht so liebenswert ist.
Was Sprachfeatures angeht, ist es treffender zu sagen, dass seine Probleme bereits viele ausgereifte Workarounds haben, als zu sagen, es habe keine größeren Probleme – wie etwa statische Methoden, die nicht überschrieben werden können, überflüssige Checked Exceptions und halbherzige Generics. Wirklich unangenehm sind die Features, die ihm fehlen – ich kann sagen, dass struct, delegate, async/await, Event-Handler, Accessor, Unterstützung für Operatorüberladung (nun, dieses ist nicht unbedingt eine gute Sache) und sogar Typinferenz in C# in Java alle fehlen (oder nur durch Drittanbieter-Bibliotheken umgesetzt werden können, die an der Oberfläche kratzen), ganz zu schweigen von echten Runtime-Generics. Einzeln betrachtet würde man denken, jeder Punkt sei nichts, aber wenn sich alle anhäufen, wird C# viel liebenswerter als Java.
Diese Features mögen irgendwann in Java auftauchen, so wie Java 7 schließlich switch auf Strings und try-with-resources bekam und Java 8 schließlich Lambdas bekam. Aber bis sie auftauchen, musst du ausharren, zusammen mit dem aufgeblähten, komplexen und zungenbrecherischen technischen Labyrinth von Java EE. Und dank Oracle weißt du nicht, wie lange du ausharren musst – als Referenz: Java 8 entspricht ungefähr .NET Framework 3.0, und .NET Framework 3.0 stammte aus 2006, als der größte Akteur auf dem Mobiltelefonmarkt Nokia war.
Nach jedem Maßstab ist Oracle kein Unternehmen, das Tools mit Blick auf Entwickler verbessert. Es wird von Entwicklern stärker gehasst als Microsoft, das zumindest die gut organisierte und detaillierte MSDN-Dokumentationsbibliothek hat, die mittelmäßige, aber sich ständig verbessernde Open-Source-Plattform CodePlex und einen glatzköpfigen dicken Kerl, der auf der Bühne durch sein Hemd schwitzt und „developers developers developers“ schreit.
Und was hat Oracle getan? MySQL am Straßenrand zurückgelassen, um die Hunde zu füttern. Die OpenOffice-Entwicklergemeinschaft aus dem Haus geworfen. Absurderweise Android verklagt.
Dass James Gosling genau zu der Zeit zurücktrat, als Sun von Oracle übernommen wurde, nennt man also Weitblick.
Kein Wunder, dass alle darum wetteifern, neue Sprachen auf der JVM zu erfinden und andere Sprachen auf die JVM zu portieren. Nur sind diese Versuche in ihren Bemühungen zu verstreut, und keiner konnte die Szene dominieren und der Java-Gemeinschaft Hoffnung geben.
Unsere derzeitige Situation ist, dass seit 2007 niemand mehr Java ME geschrieben hat; abgesehen von ein paar IDE-Projekten ist das berühmteste Programm in Java SE nur Minecraft; Java EE und Android sind die einzigen beiden Teile von Java, die noch quicklebendig sind. Dalvik ist eine separate Fraktion, dazu gibt es nichts zu sagen. Die JVM auf *nix ist tatsächlich der einzige verbleibende Eckpfeiler von Java als Plattform. Sie hatte zuvor nie einen richtigen Konkurrenten – entweder zu unreif oder zu substanzlos – und dieser Zustand hielt bis zum 12. November 2014 an.
Und das ist die Antwort auf deine Frage: Microsoft, dessen CEO vor mehr als einem Jahrzehnt sagte, „Linux sei ein Krebsgeschwür“, unterstützt jetzt offiziell seine Kernwertschöpfungsplattform, die auf Linux läuft, und sie ist quelloffen und kostenlos.
Alle Service-Provider weltweit, die dir einen unter Linux laufenden virtuellen Host verkaufen können, wurden über Nacht plötzlich zu .NET-Hosting-Dienstleistern. Menschen, die Java nicht lieben, haben plötzlich eine neue Wahl: umfassende Dokumentation, guter Support, klare Roadmap, starke Community, benutzerfreundliche Tools, Zuverlässigkeit auf Unternehmensniveau, und das Beste ist, dass 90 % der bisherigen Java-Erfahrung nahtlos übernommen werden können.
Ich habe nie gesagt, dass die Ergebnisse davon sofort eintreten würden. Aber wenn ich darüber nachdenke, wie allgegenwärtig Java einst war – es läuft sogar heute noch in deiner SIM-Karte – und doch könnte es innerhalb meiner Lebenszeit zum COBOL von 1973 werden, lässt mich das spüren, wie vergänglich die Dinge sind. Ich glaube, bestehende Java-Systeme werden allmählich zu Legacy-Code werden, und die Leute werden sie weiter warten, nur weil sie gewartet werden müssen.
Neue Kämpfe werden dennoch entstehen. Immerhin ist ein mageres Kamel größer als ein Pferd, und eine Gruppe Ratten kann noch eine ganze Weile an einem Kamelkadaver nagen – um den Schmerz zu lindern, den deine zarte Seele beim Lesen dieses Satzes erleiden könnte, gebe ich zu, dass ich nur ein Floh auf einer der Ratten bin, die an Java nagen (hmm? Eigentlich leidest du überhaupt nicht? Siehst du, selbst du liebst Java nicht) – dies wird zweifellos ein langer Prozess sein. Wenn du also ein neuer Java-Programmierer bist, musst du dir keine Sorgen um deine berufliche Entwicklung machen. Es sei denn, die Menschheit erfindet Unsterblichkeitstechnologie, wirst du den Tag nicht erleben, an dem du keinen Job findest, weil du nur Java kennst.
Selbst im schlimmsten Fall, wenn du dich wirklich selbst in eine solche Sackgasse manövrieren kannst, kannst du genauso gut früh ins Management wechseln.
Abschließend habe ich nicht "geschrien", dass Java sterben soll, denn dies ist weder eine Erklärung noch ein Fluch, sondern lediglich eine Schlussfolgerung, die ich nach Betrachtung der aktuellen Situation gezogen habe. Natürlich ist "sterben soll" schwer ohne emotionale Färbung zu interpretieren, genauso wie es schwer ist, beim Tippen von kill -9 nicht den Eindruck zu erwecken, dass ich diesen Prozess hasse. Obwohl ich ihn wirklich nicht hasse. Wenn ich ihn hasse, dann nur für einen Moment.
Außerdem ist diese Art von Rhetorik, dass "großartige Programmierer nur das Werkzeug wählen, das zur Lösung des Problems am besten geeignet ist, und nicht darüber streiten, wer gut oder schlecht ist" – die erste Hälfte stimmt, die zweite Hälfte ist völlig ein Mythos. Nicht jeder ist ein Pragmatiker. Es gibt viele großartige Programmierer, die darüber streiten, welche Werkzeuge gut oder schlecht sind. Die Leute, die das sagen, müssen mehr lesen.
Interessenerklärung und Haftungsausschluss:
Ich bin derzeit Java-Programmierer. Genauer gesagt: Wenn ich während meines Vollzeitjobs Code schreibe, sind 60 % davon Java, einschließlich EJB, JPA, JSF, Swing und sogar GWT. Das letzte Mal, dass ich ernsthaft mehr als zehn Zeilen C# geschrieben habe, ist acht Jahre her. Ich habe angefangen, diese Antwort zu schreiben, weil mir langweilig war, während ich auf einen Flug wartete. Ich hätte nicht erwartet, so viel zu schreiben. Ich versuche niemanden zu überzeugen, also wenn du anderer Meinung bist, ist das deine Sache.
Quelle: Zhihu