Warum wird die Programmiersprache Java von einigen Programmierern so sehr gehasst?
Ich hatte das in früheren Fragen entnehmen können und habe es auch schon außerhalb von GuteFrage von Menschen gehört. Java wird als schlecht bezeichnet, als veraltet, als sehr langsam und als ein Sicherheitsrisiko. Nach eigener Einschätzung ist Java nichts davon.
Wieso wird diese Programmiersprache dann teilweise so negativ dargestellt?
6 Antworten
Wieso wird diese Programmiersprache dann teilweise so negativ dargestellt?
Ich denke, in vielen Fällen ist es einfach plumpes Bashing. Entweder wird etwas nachgeplappert, was irgendwo einmal aufgeschnappt wurde oder es werden einfach nur Probleme aus der Vergangenheit so extrem hochgehalten, als bestünden sie noch immer.
Um die ganz konkreten Gründe zu erfahren, empfehle ich stets, noch einmal genauer nachzuhaken und entgegen falsche Thesen zu argumentieren. Dabei merkt man auch, ob sich die gegenüberliegende Person tatsächlich einmal mit Java beschäftigt hat oder eben noch nicht.
Durchaus, und das möchte ich nicht wegreden, lassen sich zu Java einige Nachteile finden. In der Technologie selbst, nur auf die Sprache bezogen und ebenso beim Lizenzträger (Oracle). Es gibt sogar einen eigenen Wikipedia Artikel, der Java detaillierter kritisiert: https://en.wikipedia.org/wiki/Criticism_of_Java.
Doch darauf möchte ich nun nicht weiter eingehen. Viel mehr konzentriere ich mich einmal auf die einzelnen Punkte, die du gehört/gelesen hast:
Java wird als schlecht bezeichnet, (...)
Das kann man überspringen, da kein Ansatz besteht, darauf einzugehen.
(...) als veraltet (...)
Das lässt sich in gewisser Weise nachvollziehen. Aber nicht in dieser direkten Art, denn Java wird noch immer weiterentwickelt und hat auch in den letzten Versionen wieder einige neue Features hinzubekommen. Sei es mehr Typinterferenz, ein Multistringliteral, verkürzte switch-cases, etc..
So eine Bewertung (veraltet) ist sicherlich eher ein Vergleich, wie Java im Vergleich zu anderen Sprachen (C#, Kotlin, Swift, ...) wirkt, die noch größere Schritte gehen, um Code kurz formulieren zu können. Java zieht in der Hinsicht meist nur nach bzw. versucht es zumindest.
Einfache Beispiele dafür bieten der safe navigation- und der null-coalescing-Operator (folgend in C#):
var name = person?.ContactInformation?.Name ?? "Joachim";
Die gibt es in Java nicht. In Java 8 wurde stattdessen die Optional-Klasse eingeführt, die solche Fälle handhaben soll. Diese verkürzt zwar ebenso - etwas, fühlt sich im Vergleich zu anderen, neueren Sprachen aber viel behäbiger an. Es ist mehr Schreibarbeit notwendig.
Trotz alledem sollte bei solchen Gefühlen/Vergleichen nicht vergessen werden: Java-Änderungen werden stets unter Bedacht gefällt, denn sie sollen das ursprüngliche Konzept von Java nicht verwaschen. Ob beispielsweise der Weg in Richtung funktionaler Syntax der Weg ist, den die Java-Entwickler einschlagen wollen, bezweifle ich.
(...) als sehr langsam (...)
Java gehört heutzutage zu den Programmiersprachen mit der besten Performance und findet auch deshalb öfter Anwendung. Das ist also ganz klar eine Kritik, die der Vergangenheit angehört.
Es lassen sich verschiedene Ursprünge dafür benennen:
- Meist angeführt wird die Kritik, dass die JVM längere Zeit braucht, um erst einmal hochzufahren. Das stimmt, hat sich über die Jahre hinweg aber immer weiter verbessert.
- Schon früh traf man für Java die Entscheidung, die Sprache im Web einsetzen zu wollen. Damals noch für Applets, die im Browser liefen. Um eine Webseite mit Applets auszuführen, musste der Browser also zunächst die dazugehörige Anwendung herunterladen, um sie dann in einer JVM zu starten.
- Auf einigen alten Systemen laufen noch alte JVMs. Das betrachte ich allerdings eher als Wartungsproblem.
- Die JIT-Kompilierung war in den allerersten Versionen von Java noch kein Bestandteil der Technologie.
- Reflection / Classloading war damals langsam, hat sich aber enorm gebessert (was nun dennoch kein Aufruf a la Reflection for everyone sein sollte)
- Das Swing-Toolkit war zu Beginn seiner Entwicklung noch nicht sonderlich performant. Dies war ein Grund, wieso Eclipse SWT entwickelt wurde (was die Lage dennoch nicht sonderlich verbessern konnte 😁).
Generell nehmen die grundlegenden Design-Entscheidungen von Java (Portabilität und Sicherheit) Performance-Einbußen bewusst in Kauf. Sei es die Handhabung in einer VM, verschiedene interne Sicherheitschecks (einfaches Beispiel: Bounds checking für Arrays) oder die Verwaltung des Speichers via GC.
Bekanntermaßen sind diese Entscheidungen jedoch nicht einmal ein absolutes Alleinstellungsmerkmal für Java. Garbage Collection beispielsweise findet man sowohl in älteren Sprachen (Smalltalk, Haskell, Lisp), als auch in neuen (C#, Dart, Go, ...).
(...) und als ein Sicherheitsrisiko (...)
An sich ist es gerade die VM, die mit für zusätzliche Sicherheit sorgt, immerhin wird die Java-Anwendung nicht direkt auf dem System ausgeführt und kann im Vorfeld validiert werden.
Dennoch gab es damals (vor ungefähr zehn Jahren; also zu Zeiten von Java 7) einigen Wirbel um Sicherheitslücken in der Technologie (lies beispielsweise hier), wofür Oracle stark in der Kritik stand. Bis zu einer Entwarnung hat es immerhin ungefähr ein Jahr gedauert.
Es werden sich auch heute einige (kleinere) Sicherheitslücken finden lassen und sei es nur bei den Tools, die auf Java basieren (z.B Hibernate, Tomcat). Dies ist allerdings kein Alleinstellungsmerkmal für Java und lässt sich in der Regel durch den aufmerksamen Entwickler stopfen/beheben, wenn dies nicht schon ein Framework tut.
Naja man sagt gerne, dass man in Java Ewigkeiten braucht um etwas zu schreiben was man in Python in einer Zeile geschrieben hätte, die Syntax ist halt naja bissl Oldschool und da wäre noch die Tatsache das Java von Oracle ist und viele Leute Oracle auch einfach nicht mögen, ich persönlich finde es auch entspannender Python oder Kotlin zu schrieben, die sind da eher etwas moderner.
Naja das ist meine Einschätzung das ist wohl auch Geschmackssache, aber ich für meinen Teil finde die Syntax von Kotlin sehr viel besser, die Typsicherheit sehr elegant gelöst und wie Python ist es sehr viel schneller geschrieben weil es einfach kürzer, kompakter ist, in Java bekommt man eben dadurch dann sehr schnell riesige Codekonstrukte die wiederum mühsam zu lesen sind das ist zumindest meine Sichtweise, nichtsdestotrotz kann man nicht sagen dass Java wirklich unbeliebt ist, denn nach wie vor wird es vom größten Teil der Wirtschaft in Deutschland genutzt.
Die Sprache hatte in älteren Versionen das Problem, dass sie moderne Konzepte aus anderen Sprachen nicht umgesetzt hatte und die JVM war in manchen Implementierungen früher wirklich relativ langsam und sie ist es immer noch sofern sie sich gegen C oder C++ messen sollte, was aber klar ist. Gegenüber anderen Sprachen wie C# ist sie gleich schnell und natürlich auch schneller als jede Skriptsprache.
Gerade in den Anfangszeiten wurde aber Java gerne mit C oder C++ verglichen, wogegen sie nun mal wirklich langsam ist.
Das Sicherheitsrisiko lag darin begründet, weil ältere Versionen der JVM teilweise heftige Sicherheitslücken aufgewiesen haben. Diese wurden zwar behoben, aber da viele Nutzer mit Java auf ihrem Rechner die JVM nicht aktuell gehalten haben, konnte man dadurch eben gerne über Java Applets in den Computer einbrechen. Allerdings gibt es diese Applets heute nicht mehr. Es waren also meiner Meinung nach nicht die Sicherheitslücken direkt das große Problem (die gibt es ja bei anderen ähnlichem VMs wie der .NET Runtime auch), sondern der Umstand, dass man mit Java Applets Code von Webseiten auf der JVM laufen lassen konnte und dieses Applet anschließend mit der JVM die Sandbox des Browsers ausgehebelt hat.
Ich denke es ist eher das Thema OOP. JAVA ist sehr populär. Deshalb gibt es dort massig publizierte DOs und DONTs die Entwickler mit der Sprache assoziieren. Sag' mal einem Entwickler, was er zu tun und zu lassen hat. Das geht regulär sozial schief.
Andere Programmiersprachen eröffnen Entwicklern sich eine neue Domäne zu erschließen, ohne den vermeintlichen Ballast anderer Sprachen mitzuschleppen, weil sie meinen "Neue Sprache, neues Glück!"
Entsprechend wird insbesondere in der Anfangszeit einer Programmiersprache viel schlechter Code produziert. Wenn es eine neue Programmiersprache ist, hat man eine Ausrede.
Man muss aber auch sagen, dass JAVA sehr mächtig ist, weshalb viele Entwickler die Tiefe des Verständnisses der Sprache in ihrem Leben nie erreichen. Ich arbeite mittlerweile 20 Jahre mit JAVA und habe mir bis heute nicht alle Ecken erschlossen.
JAVA realisiert Objektorientierung. Das stellt Entwickler vor die Herausforderung, sich mit der Realität auseinanderzusetzen. Und genau da haperts. Wenn jemand esoterisch unterwegs ist, sieht man das auch an dem Code, den er schreibt.
Java wird deutlich seltener kritisiert als jede andere Programmiersprache. Richtig ist: Die Erfindung von Java war der bislang letzte große Meilenstein in der Geschichte der Programmiersprachen.
Java und C# — letzteres entstanden in Nachahmung von Java — sind derzeit die beiden modernsten und (neben C) auch nützlichsten und am weitesten verwendeten Programmiersprachen überhaupt.
Wer behauptet, Jave wäre zu langsam, veraltet oder gar weniger sicher als andere Programmiersprachen, weiß einfach nicht, von was er redet.
Es gibt eine große Klasse von Programmierfehlern, die zu machen mit Java gar nicht erst möglich ist. Allein das macht Java schon besonders wertvoll.
Die Syntax ist oldschool? Wie kommst du denn darauf?