Hat Java seinen Zenit erreicht?

In den letzten Tagen mehren sich die Stimmen derer, die beginnen Java bereits abzuschreiben, bzw. sehr kritisch zu hinterfragen. Bill Synder machte den Anfang in seinem Artikel auf InfoWorld, in dem er Java als das neue Cobol beschreibt, welches gegen die zunehmende Konkurrenz ins Hintertreffen gerät. Dass der Artikel am 2. Weihnachtsfeiertag erschien mag erklären, warum er hier und da nicht ganz korrekt und präzise ist. Im Grunde aber redet Bill weniger von Java im Allgemeinen, als von Java mit all seinen Tools und Bibliotheken im Enterprise Bereich, wo es mit PHP, Ruby (on Rails) und .NET ernstzunehmende Konkurrenz gibt, die oftmals deutlich schneller zu vorzeigbaren Ergebnissen und im Vergleich stark reduzierter TCO (total cost of ownership) führen.

Nur wenige Tage später schreibt Bruce Eckel, ein vielgeachteter Berater und Autor, von seinen Gedanken und Gesprächen bzgl. des Status der Sprache und Plattform Java und dessen Zukunft. Seine Gesprächspartner waren u.a. Joshua Bloch (während der Javapolis), ebenfalls ein Java-Guru und Autor und langjähriger Sun Mitarbeiter, der erst kürzlich zu Google wechselte. Beide kommen überein, dass das Ende der evolutionären Entwicklung von Java bevorsteht.

Snyders Punkt ist unter anderem, dass die Skriptsprachen wie z.B. PHP und Ruby  (und Python, das er jedoch nicht namentlich nennt) und darauf aufbauende Frameworks sowie die relativ junge .NET Plattform aus dem Hause Microsoft es Entwicklern erlauben, deutlich agiler und produktiver zu entwickeln, als aufbauend auf der Java-Plattform,  welche zudem im Enterprise-Bereich in eine unüberschaubare Vielzahl immer neuer Bibliotheken, Tools und Frameworks zerfasert, die für eine ganze Reihe von Problemen verantwortlich zeichnen. Diese Zerfaserung macht es schwierig gezielt erfahrenes Personal zu finden. Stattdessen müssen sich neue Mitarbeiter erst einarbeiten, was zusätzlich wertvolle Ressourcen bindet. Die Programmierer selber stehen ständig vor der Situation nur einen Teil ihres Arbeitsbereichs überblicken zu können, weil es so viele andere Tools und Frameworks gibt, die sie nicht beherrschen.  Entwicklungs- und Deployment-Prozesse gestalten sich kompliziert und fehleranfällig, was das Testen, Warten und die Weiterentwicklung bremst.

Eckel und Bloch setzen in ihren Betrachtungen an einer anderen Stelle an und richten ihre Blicke auf die Sprache und Plattform selbst. Sun legt seit jeher Wert auf Abwärtskompatibilität von Sprache und Plattform. Dies führt sowohl in der API als auch bei den Sprachfeatures unvermeidlich zum Mitschleifen von Ballast. Als Gegenbeispiel führen sie Entwicklungen bei den Sprachen Python und Ruby und deren jeweiligen Plattformen an, die über die Zeit immer wieder kleinere und größere Änderungen erfahren haben, welche sehrwohl mit der Vergangenheit brachen. Der Verlust vollständiger Abwärtskompatibilität hat dabei aber nie dazu geführt, dass Entwickler den Sprachen den Rücken gekehrt hätten. Im Gegenteil.

Während gerade in den letzten Jahren mit den Entwicklungen von Java 5 und Java 6 Features eher aus Gründen des Marketings Einzug in Java hielten, legten die Entwickler von Ruby und Python immer Wert darauf die Sprache zu einem möglichst effizienten Werkzeug für die sie benutzenden Programmierer zu machen. Mit der Kompatibilität brach man nur dann, um in der Vergangenheit getroffene Designentscheidungenzu korrigieren wollte, um damit Sprache und Plattform zu verbessern und verfeinern. In dem Zusammenhang wird Josh Bloch nicht müde darauf hinzuweisen, dass eine komplexe Sprache, die viel Code für eine bestimmte Funktionalität erfordert, dem Programmierer immer deutlich mehr abverlangt als eine klare einfache Syntax, die mit weniger Code auskommt. Darüber können auch moderne IDEs mit Autovervollständigung (Code Completion) nicht hinwegtäuschen.

Gerade das teils bereits durchgeführte und teils geplante nachträgliche Hinzufügen von Features in Java misfällt sowohl Bloch als auch Eckel. Mit dem nachträglichen Einfügen von Generics und Closures in Java (welches zeitlich rein „zufällig“ mit deren Einführung durch Microsoft in C# zusammenfällt) wurde der Sprache Möglichkeiten zugefügt, weil sie gerade andernorts „in“ sind und nicht, weil die Java-Entwickler landauf landab sie dringend benötigt hätten. Eckel kommt zu dem Schluss, dass es besser sei ein Feature gar nicht hinzuzufügen, anstatt es nicht wohldurchdacht hinzuzufügen und führt auch hierzu Beispiele aus der Geschichte von C und C++ an.

Beide Artikel werfen einen kritischen Blick auf den aktuellen Stand und die Entwicklung von Java als Sprache und Plattform. Während es sicher zu früh ist nun bereits den Abgesang zu starten, ist es nicht zu früh wenn nicht gar zu spät, Designentscheidungen von Sun kritisch zu hinterfragen und auch abseits der ausgetrampelten Pfade nach Alternativen zu schauen, sei es Python, sei es Ruby oder sei es auch Scala.

Artikel wie diese beiden sind die eine Seite. Über die letzten Monate hinweg finden sich überall im Web Kommentare von Entwicklern, die Java den Rücken kehrten und verblüfft auf andere leichtgewichtigere und produktivere Alternativen umsattelten. Auch Programmiersprachen entwickeln sich weiter, entstehen und vergehen. PHP wird auch bei IBM, Oracle und SAP hoffähig und durch die Einstellung der Chefentwickler von JRuby und die Entwicklung von JavaFX versucht Sun Java auch für die agileren Skriptsprachen als Plattform zu öffnen.

Die Zeichen mehren sich und sind gut dokumentiert, dass die Dominanz von Java bröckelt und es seinen Zenit womöglich bereits überschritten hat.

Kommentare (10)

  1. Pingback: Mehr Kritik an Java und dessen Kritikern

  2. Hm. Sehr interessant deine Sichtweise. Ich komme aus dem universitären Umfeld, wo Java sehr verbreitet ist. Privat und als Freelancer brauche ich PHP. Es stimmt schon, dass Java sehr monströs und schwerfällig geworden ist.
    Ja, es gibt Bibliotheken wie Sand am Meer, aber soll das nicht auch eine Hilfe sein für Javaentwickler? Bibliotheken erleichtern Programmierern die Aufgabe, indem sie als Blackbox fungieren. Gibt es keine Bibliotheken, dann ist es nicht gut, denn man muss zu viel selber machen, gibt es zu viele Bibliotheken, dann ist es auch nicht gut, denn man hat keinen Durchblick mehr.

    Gehört die Softwarewelt den Skriptsprachen? … wir werden sehen.

  3. Nun, das ist eben genau das Problem. Für mich zerfasert sich die Java-Welt zu stark. Die Auswahl an Möglichkeiten um ein und dasselbe Ziel zu erreichen ist riesig. Man kann diese gar nicht alle evaluieren, sondern schaut sich vielleicht nur die populärsten Lösungsansätze an oder vertraut auf den Rat eines Entwicklers oder schaut ganz einfach wo man am ehesten Ressourcen zur Verfügung stellen oder nötigenfalls nachordern kann. Der Trend nun noch dynamische Sprachen auf die JVM aufzusetzen und für diese weitere Frameworks anzubieten macht es auch nicht eben übersichtlicher, könnte aber wie z.B. im Falle von Ruby on Rails über JRuby einen interessante Möglichkeit der Anbindung und Migration bieten.

    Was den reinen Sprachstandard betrifft gibt es eine Reihe von Beispielen, wie man es anders machen kann, siehe eben auch Ruby und Python. Die JFC sind ja schon länger ein Ort des Grauens, mit viel veraltetem Krempel, der als Ballast mitgeschleift wird und von neuen Sprachfeatures herzlich wenig profitiert.

    Ich arbeite auch wieder vermehrt mit PHP, sehe es aber eher als notwendiges übel. Für PHP spricht im Grunde nur die Verbreitung, aber für Sprach-Ästheten ist sie nun wirklich nichts ;)

  4. Hi Alex,

    gerade wenn man über Java redet, muss man ganz besonders auf den Einsatzbereich achten. Mit PHP oder Ruby kann es im „Heimbereich“ kaum konkurrieren, da bestimmte Sachen einfach wesentlich strikter und damit aufwendiger gehandhabt werden müssen. Aber genau das ist im kommerziellen Einsatz von Vorteil, da die Wartung und ein späteres Refactoring im Normalfall schneller und sicherer zu bewerkstelligen sind.
    Für PHP gibt es zum Beispiel nur im Zend Studio IDE überhaupt einen Ansatz für automatisches Refactoring, was einfach auf Grund der unheimlichen Flexibilität der Sprache sehr schwierig ist. Ruby ist da schon ein wenig schöner zu handhaben, aber für Leute mit C Hintergrund ein syntaktischer Albtraum :P
    Betrachtet man Java nicht als Sprache, sondern als Plattform, so ist es einfach unschlagbar. So ist die Möglichkeiten zur schnellen und sauberen Umsetzung von Lastverteilung zum Beispiel ein wichtiger Bonus im professionellen Umfeld.

    Schöne Grüße

    Daniel

  5. Wer ausschließlich einen „C Hintergrund“ hat, sollte sich vielleicht mal ein wenig auch mit anderen Sprachen beschäftigen. Die guten alten Perl-Gurus jedenfalls sollten mit Ruby sehr gut klar kommen.

    Lastverteilung sehe ich eigentlich nicht im Kontext einer Sprache oder Plattform, sondern im Kontext eines Gesamtsystems. In einer Webanwendung sollte ich im Bereich Frontend und BusinessLogik nicht direkt mit dererlei Problemen konfrontiert werden, das ist Sache der Sysadmins. Zuhauf belegen Beispiele aller Art, dass Lastverteilung unabhängig von Sprachen ist. Multi-Server-Setups gibt es für Web-Anwendungen jeglicher Art, egal ob sie in Perl, Java, PHP, Ruby, Python, ASP oder ColdFusion entwickelt wurden. Da sollte man m.E. auch keine unnötigen Abhängigkeiten induzieren.

    Ketzerisch kann man auch die Behauptung aufstellen, dass ich mit einem Monster on Java Application Server viel eher die Notwendigkeit habe, Last auf viele Schultern zu verteilen.

  6. Java ist Vergangenheit, gewöhnt Euch dran! Java ist dermaßen lahm das Sun den Kram kostenlos abgeben musste *ggg* im Ernst Java spielt z.B. bei Applikationsentwicklung keine Rolle nur im Web Bereich und da geht die Rolle immer weiter nach unten. Aber, auch .NET ist so eine Sache aber viel besser als der aufgelähte Java Kram. Die allgemeine Behauptung, das Java Platz 1 der verbreitesten Programmiersprachen einnimmt ist genauso falsch wie Aussagen das Technologien wie Bytecode oder MSIL die Zukunft seien! Auf Platz 1 steht und stand und wird immer stehen: C/C++ beide erzeugen (C++ ist OOP) native Compilate ohne .NET Java hingegen landet streng genommen max. auf Platz vier davor kommen noch PHP, C# und Ruby! Zwar liest man immer wieder Angebote wo man Java Freaks sucht aber oftmals lehrt man auch an Unis nicht mehr programmieren sondern stupide Java was für die Zukunft nix bringt guck ma hier:

    http://www.silicon.de/cio/wirtschaft-politik/0,39038992,39161513,00/java+ist+genauso+ueberfluessig+wie+web+2_0.htm

    Der Boom von dem Java Blödsinn ist schon seit Jahren vorbei nur die Leute wollen es nicht wahr haben! Wer heute Java-Applets auf seinen Seiten präsentiert wird ausgelacht im serverseitigen Bereich findet man ab und zu noch JSP

  7. das ist nicht nur eine subjektive Meinung sondern FAKT Java war vor 10 Jahren in, ist es aber schon lange nicht mehr und zwar hat die Bedeutung von Java mit der Entwicklung von PHP Ruby und .NET verloren Java kan weder in punkto Performance noch in Punkto Entwicklung mit halten und wird wie damals Cobol komplett bedeutungslos werden. Java ist eben eine Mode ERscheinung gewesen. Ich habe mir Java einmal angetan, das mach ich nie wieder! C++ das ist die Zukunft aber, da die Unis heute offenbar wengier Wert auf innere Werte legen sondern mehr Wert auf Mode Erscheinungen wird sich Java wohl leider noch ein Weilchen halten können

  8. Halte ich in diversen Punkten für ausgemachten Unsinn. Abgesehen davon schaffen Floskeln wie „das ist Fakt“ keine Fakten, sondern werden gerne zur Vortäuschung von Argumenten benutzt, wenn einem die eigenen ausgegangen sind.

    Der eine oder andere hat schon vergessen wie vor 10 Jahren ob der Angst vor den bösen Millenium Bugs alle Banken und Versicherungen ihre in Rente befindlichen Cobol-Coder für teuer Geld zurück geholt haben. Das zeigte mal grundsätzlich wie verbreitet, robust und ausgereift die Cobol-Codebase in seiner Domäne, der Finanzwelt, war und teils auch noch immer ist. Getreu dem Motto „Never change a running system“, vor allem nicht bei unternehmenskritischen Anwendungen.

    Ähnlich sieht es mit diversen Sprachen und Umgebungen aus, ob sie uns nun allen tagtäglich offensichtlich im Alltag begegnen oder nicht. C/C++ haben ihre Märkte, Objective-C kommt mit der zunehmenden Verbreitung von Macs, iPhones und iPads, …

    Ruby ist auch weiterhin kein Global Player und verdankt seinen Aufstieg einzig Rails. Python hingegen ist deutlich populärer da es auch abseits der Webentwicklung Märkte durchdringt. U.a. löst es immer weiter Perl auf Unix-Systemen ab.

    Neben dem Tiobe Index und ähnlichen Marktanalysen kann man auch einfach mal schauen was die Großen der Branche so machen: Bei Oracle sidn sämtliche Tools und Frameworks in Java entwickelt und mit dem Kauf von Sun.. naja ihr könnt es euch denken ;)

    Die Google App Engine ist.. tataaa.. eine JVM Implementierung von Google.

    Wer die letzten 15 Jahre zufällig auf diesem Planeten gelebt hat dürfte das Phänomen des Internets kennen. Wenn wir von Web-Technologien reden ist praktisch nie die Rede von C/C++, denn hier spielt es nur sehr peripher eine Rolle, die nichts direkt mit Web zu tun hat, nämlich als Sprache / Umgebung um hardwarenahe Betriebssystemkomponenten zu entwickeln.

    Schauen wir auf die vorhandene und im Einsatz befindliche Codebasis der diversen Sprachen und Umgebungen, dann ist ganz klar, dass allein schon aus rein marktwirtschaftlichen Gründen Java in nächster Zeit nicht verschwinden oder signifikant abbauen wird.

    Nach 4 Jahren Pause werde auch ich bald wieder in Java entwickeln und zwar um meine damaligen Anwendungen zu pflegen und weiterzuentwickeln. Eine komplette Neueentwicklung eines laufenden Systems mit dem alle soweit zufrieden sind ist schlichtweg unsinnig, da Ressourcenverschwendung. Und wenn es etwas gibt, dass wir alle nicht dermaßen über haben, dass wir damit nur so um uns werfen könnten, dann sind das Ressourcen – die sich letzten Endes allesamt in Geldbeträgen darstellen lassen.

  9. Okay, vielleicht habe ich es doch etwas zu pauschalisiert und übetrieben sorry. In Zukunft sollte ich mehr darauf achten, da sicherlich alle Sprachen und Computer ihre Berechtigung haben.

  10. Also defakto hat jede Programmiersprache ihre Existenzberechtigung allen vorran stelle ich fest, das die folgenden am häufigsten unter Windows/MacOS/Linux eingesetzt werden das wären: C/C++, Java, C#, Perl, Python, PHP, Basic, VB.Net und ja auch Pascal ;-) alle anderen Sprachen insbesondere Exoten wie Profan spielen eine eher geringe Rolle. Ob man nun nativ compiliert oder auf einem Framework bzw. einer VM arbeitet ist dem Kunden/Benutzer sowieso egal defakto wird oftmals auch vergessen das spezialisierte Basic-Dialekte wie PureBasic, RealBasic oder Blitz3D sehr häufit zum Einsatz kommen.

    Aber egal welche Sprache, für den Kunden zählt nur das das Produkt läuft wie und womit man es gebaut hat spielt dabei keine Rolle viel wichtiger ist doch, das eine App gut zu bedienen ist und stabil läuft.

Kommentare sind geschlossen.