Benutzen Unternehmen viel lieber Java als andere Programmiersprachen?
Gute Frage und schwer zu beantworten, denn es keine Entscheidung, die meiner bescheidenen Meinung nach von den meisten Unternehmen mit Vernunft getroffen wird.
Die meisten Unternehmen schauen sich auf dem Markt um und gucken, was die anderen Unternehmen machen. Und dann suchen sie Leute. Und Java-Entwickler stehen an jeder Ecke. Besser kann es doch eigentlich nicht laufen, oder?
So finden sich in den bisherigen Antworten Sachen, die so meiner Meinung nach nicht stimmen und eher in den Bereich der Urban Legends geht.
Zum Beispiel “Java ist leichter zu erlernen als bspw. C++.” gehört dazu. Java ist einfach weniger. Weniger zu lernen bedeutet nicht, dass es leichter ist, sondern dass man sich über weniger Dinge einen Überblick verschaffen muss. Damit kann man dann Java, aber man kann deswegen eben noch lange nicht soviele Probleme sauber und Zuverlässig lösen, was damit in direktem Widerspruch zu der von jemand anderem getroffenen Aussage “Mit Java ist es einfacher, große Projekte robust abzuwickeln.” steht. Große Projekte würde ich grundsätzlich mit C++ angehen, Java würde ich hier sogar als kontraproduktiv ansehen. So muss man in Java mit der Zeit Dinge verstehen, die man in Java nicht formulieren kann. Das ist viel komplizierter, als es in C++ hinschreiben, also explizit unterscheiden und damit auch zu lernen, diese Dinge denken zu können.
Ich halte Java für die schwerer zu lernende Sprache.
Ebenfalls ein beliebter Mythos ist “Java ist Plattform unabhängig.”, denn um Java plattformunabhängig zu halten, habe ich in meiner Zeit als Java-Entwickler die notwendigen Funktionen nachimplementiert - und zwar in C++. Java ist von der Java-Plattform abhängig. Was die Plattform nicht freiwillig liefert, existiert eben nicht.
Ich selbst programmiere eine Software für Linux, Mac und Windows in C++ auf X64 und Arm-CPUs. Ich sehe jetzt nicht, wo da ein Vorteil für Java sein soll!?
Witzigerweise funktionieren die Mythen auch andersrum: ”Für die meisten Anwendungen sind die Einschränkungen, die durch Java entstehen (zB relativ langsame Programme) erträglich.”. So langsam ist Java gar nicht mal. Man sollte mit einem Faktor 2–10 zu C++ schon rechnen, aber die meiste Software, die in Java geschrieben wird, wartet sowieso vorrangig auf den Benutzer. Faktor 2–10 ist da relevant, wo es richtig um Leistung geht. Und wenn man das richtig ernst meint, geht man teilweise auch in den Assembler-Bereich, um selektiv AVX oder ähnliche CPU-Erweiterungen nutzen zu können. Das ist nicht mehr der Bereich, den sich normale FIAEs ernsthaft angucken.
Leider bringt Java Einschränkungen mit sich, die massive Probleme bei der Entwicklung bedeuten und das ist gerade bei großen Projekten teilweise katastrophal. Memory-Management beispielsweise: Darf die GC über viel RAM verfügen, wird sie das auch tun: Die Maschine wird also irgendwann anfangen zu swappen. Darf der GC nur über (zu) wenig RAM verfügen stürzt die Anwendung ab, obwohl der Rechner noch freien RAM hat. Selten dämliches Konzept und in C++ eigentlich auch vollkommen überflüssig, da gibt es in C++ bessere Konzepte, die in Java nicht formulierbar sind.
Kein Mythos ist folgender: “Daher gibt es mehr potentielles Personal, welches wiederum weniger Personalkosten bedeutet. (Java Entwickler verdienen im Schnitt weniger als zB C++ Entwickler)”. Das ist auch das, was Sun mit Java versprochen hat. Billigere Ausbildung - billigere Software aufgrund billigerer Programmierer. Mit dem Versprechen ist Java groß geworden. Gehalten wurde es nie. Software ist mit Java nicht billiger geworden, aber Java-Entwickler sind billiger. Wenn Software nicht billiger wird, aber die Entwickler, dann braucht man also mehr Java-Entwickler. Größere Teams brauchen mehr Führung, bzw. die Entwicklung der Software dauert einfach länger, so dass man billigere Entwickler länger bezahlen muss. Ich wiederhole mich, wenn ich sage, dass Java keine Vernunftentscheidung ist…
“Es gibt nur eben viele Unternehmen, die Java nutzen, weil es kostengünstig ist”. Inzwischen scheint mir eher das Problem, dass Java als Lehrsprache ein Selbstläufer ist: Frische Leute kommen vorrangig mit Java-Kenntnissen, daher denken sie in Java. Sie werden also Software mit Java schreiben, weil sie das kennen. Firmen, die Entwickler in anderen Sprachen suchen, haben entsprechend Probleme, qualifizierte Leute zu bekommen. Also nehmen sie, was bekommen: Java.
“Außerdem vermute ich dass ‘Freaks’, also talentierte Entwickler, von Java ziemlich gelangweilt (um es vorsichtig auszudrücken) sind.”. Nicht unbedingt gelangweilt, eher überfordert. Java ist im Vergleich zu C++ so schwach, dass ich mich um vieles kümmern muss, was mir C++ abnimmt, damit ich mich um wichtigere Probleme kümmern kann. In Java muss ich also entweder kleinere Probleme angehen oder werde überfordert. Als Java-Entwickler habe ich vorrangig vorhandene Probleme debuggt, weil ich als C++ Entwickler sehe, wie ich es in C++ geschrieben hätte und warum. Entsprechend kann ich mir besser vorstellen, was das Problem an einzelnen Stellen ist, weil ich es in C++ denken kann und verhindern könnte. Und an der Stelle wird aus “nicht gelangweilt” eher “genervt”. Warum soll ich eine moderne Programmiersprache nutzen, die mir Probleme vorsetzt, die eine alte Programmiersprache bereits gelöst hat?
Je größer ein Projekt wird, desto mehr Unterstützung brauche ich durch die Sprache. Und da ist Java schlussendlich ein massiver Designfehler und was man in C++ mehr lernen kann/musste, zahlt sich dann auch aus.
Wer in C++ so schreibt wie man Java programmiert, würde eher als Saboteur denn als fähiger Programmierer angesehen. In Java geht es nicht anders.