Die Wahrheit ueber Java
In meinem Studium begegne ich schon wieder dieser lästigen Programmiersprache Java.
Gibt es irgendwen, der diese Sprache liebt? - keine Ahnung (Vermutlich wenige)
Gibt es irgendwen, der diese Sprache hasst? - Auf jeden Fall!
Es fällt natürlich sofort auf, Java sieht syntaktisch aus wie C++ und auch wie C aus, bis auf kleine Unterschiede. Auch Semantisch gibt es nur wenige Unterschiede.
Doch wer diese Unterschiede mal genau anschaut, stellt fest, dass diese grundsätzlich nur ein Wegfall von Funktionalitäten bedeuten.
Was sticht bei Java besonders hervor und wird besonders gelobt? Die Virtual Machine. Aber ist dies etwas besonderes von Java?
Ich meine in Erinnerung zu haben, dass ein Verantwortlicher sagte, dass Java einfach sein soll.
So ist die praktische Eigenschaft von C++, welche auch von C noch abstammt, Zeiger zu ermöglichen weggefallen. Hier werden einige noch sagen, nicht so wichtig, es gibt ja Referenzen. Man kann wirklich auf Zeiger verzichten, besonders wenn man beachtet, dass diese so einige Probleme mit sich ziehen und in Java nicht sonderlich praktisch wären.
Ein Wegfall, den man wohl nocht verkraften kann.
Ist diese Eigenschaft etwas besonderes von Java? Ganz im Gegenteil, die gab es zuvor schon bei Smalltalk und bei Self. Dieses Konzept waren sogar noch ein ganzes Stück interessanter bei diesen, denn sie erlaubten den Stand zu erhalten und sogar das Programmieren zur Laufzeit. “Compile time every time.”
Java erlaubt dies nicht. Über die Geschwindigkeitsunterschiede kann man noch diskutieren.
Auch die Eigenschaft, dass durch die VM es möglich ist, die Software ohne neukompilieren auf anderen Architekturen laufen zu lassen, ist schon von Smalltalk und Self bekannt.
Es wird behauptet, dass Java objektorientiert sei. Doch weshalb gibt es dann noch Primitivtypen wie int? Erst in neueren Versionen von Java gibt es einen Integer-Objekttyp und verhält sich wie ein Objekt, wird aber von vielen nicht verwendet, weil er nicht kompatibel zum Primitivtypen int ist, der bei vielen Aufrufen weiterhin verlangt wird.
Apropos int: Einen unsigned Primitivtypen gibt es garnicht.
Hier wurde kräftig gespart. Oberatoren gibt es nur bei den Primitivtypen und einen einzigen bei String. Man kann auch keine erzeugen! Bei der Syntax beim Übergang von C++ zur Java ging dies komplett verloren, womit Java wieder sich zu C und Vorgänger gesellen kann.
Vorrangetrieben wird Java von Sun (nun Oracle). Self wurde gar zugunsten Java einstellt, obwohl Self um einiges interessanter und moderner war. Die Nachfrage war halt bei Java größer.
Dieses Kalkül werden wohl nur ganz wenige Javaprogrammierer kennen, obwohl es so eine sehr hohe Mächtigkeit hat und in anderen Programmiersprachen, besonders in den Funktionalen, schon so verbreitet ist, dass man garnicht mehr dran denkt, was das denn so besonderes ist.
In Smalltalk die einzige Möglichkeit, sinnvoll zu programmieren, In Java komplett unbekannt.
Man sieht, dass Java von jeglichen bereits bekannten Programmiersprachen und Konzepten abgekupfert wurde, statt etwas neueres, besseres und einzigartigeres zu schaffen.
Dabei fielen viele Dinge wieder unter den Tisch, die erst gerade erfunden wurde. Besonders die sehr praktischen Eigenschaften, wie Operatoren und alles ist ein Objekt, wodurch man nicht zwischen Objekt und Nichtobjekt unterscheiden muss.
Als hätte da sich keiner Gedanken zu gemacht. Die Semantik ist bei Perl schon zuviel und bei Java zu wenig durchdacht. Während man sich bei Perl wie in Terminator fühlt, meint man beim Programmieren in Java, man hätte Heide mit halber Geschwindigkeit laufen.
Woher kommt diese große “Beliebtheit” von Java?
Dies ist nur eine Vermutung, aber vermutlich wurde Java bei den Managern beliebt. Diese “Entscheider” bekamen Java mal gezeigt und konnten es ein wenig verstehen. Somit trugen sie ihrer IT auf, in Java zu programmieren.
Diese Entscheidung war also definitiv nicht rational. Geld ist grundsätzlich nicht rational, die Menschen denken beim Thema Geld immer egoistisch.
Doch muss Programmieren auch nicht immer rational sein. Es darf auch Spaß machen!
C und C++ sind nicht für Virtual Machines, mag wer wohl entgegenhalten und Smalltalk und Self hatten eine recht einfache Syntax und Semantik werden wohl andere entgegenhalten.
Bei Smalltalk und Self war dies Absicht und sehr wohl durchdacht. Es sollte einfach sein, in diesen Sprachen zu programmieren und es sollte sich wie eine natürliche Sprache anfühlen.
Wer will C und C++ in eine Virtual Machine stecken? Interessant wäre dies. Man hat es halt nur nicht dafür entwickelt, denn vor C gab es noch keine Virtual Machines.
Weshalb dann gegen Java wettern, wenn doch diese ganzen Beispiele genauso Macken haben?
Ganz einfach:
Java kam nach all diesen Sprachen. Statt nun eine Vereinigung dieser tollen Sprachen auf Basis, wir picken das uns das Beste heraus, wurde nur Oberflächlich jede Sprache betrachtet und nur eine kleine Haupteigenschaft genommen und n&aum;her auf Nebeneigenschaften, durch die diese Haupteigenschaften erst interessant wurden, einzugehen.
Die Zielgruppe sind Programmieranfänger und Leute, die nicht mehr lernen wollen.
Fortgeschrittene Programmierer werden diese Sprache längst ausgereizt haben.
Noch bin ich diese Schuldig, aber kommen noch. ;)