Aversion gegen Java



  • Ist es aber nicht so, dass sehr viele Projekte in Java entwickelt werden?

    Ich glaub als C++ Programmier würde man schon etwas länger suchen / weniger Auswahl haben.



  • annotation schrieb:

    Ist es aber nicht so, dass sehr viele Projekte in Java entwickelt werden?

    Ja, sicher. Java ist aktuell die mit Abstand am häufigsten genutzte Programmiersprache: http://www.tiobe.com/tiobe_index.
    Danach folgt erstmal lange Zeit nichts und dann kommt C, auf dem zweiten Platz.

    Ich nehme an, dass die massive Nutzung von Java Android zuzuschreiben ist. Während C im Mikrocontroller-Bereich seit vielen Jahren der unangefochtene Platzhirsch ist.



  • Ich arbeite seit ca. 16 Jahre beruflich mit Java, davor C++.

    Java wird heute massiv im Enterprise-Bereich (Inhouse-Individual) eingesetzt, also viel auf Application-Server. Das bekommen User gar nicht mit, auch die in den Unternehmen selbst nicht. Denn das Java läuft ja auf der Server-Seite.

    Aber auch viele bekannte Internet-Seiten, wie XYscout24.de, sind Java-EE Anwendungen.

    Warum? Weil Java heute ein sehr gutes Ökosystem in dem Bereich hat. So wie C++ im Games-Bereich ein sehr gutes Ökosystem aufweisen kann.

    Da kann man Java mögen oder nicht, es sind Fakten.

    Und was die Startzeiten angeht: die sind auf einem Server sowas von egal. Der läuft ja optimalerweise ewig ohne Restart durch. Und wenn er mal neu gestartet werden muss, gibt es ja noch den Loadbalancer, da laufen ja noch die anderen nebenbei.

    Auch was den JIT angeht, irgendwann ist die Anwendung einmal komplett zur Laufzeit übersetzt.

    Es gibt natürlich auch mit Java Memory-Leaks und auch sonst fehlerhaften Code. Aber das ist nicht schlimmer als andere Sprachen. Am Ende ist das Ökosystem einfach für Enterprise einfach super.

    Und nein, ich bin trotzdem kein Java-Fan. :p Aber ich bin Profi! Und ein Profi darf sich nunmal nicht zu sehr von Emotion leiten lassen. 🙂

    Man muss dazu sagen, das sich die Java-Sprache, die Java VM und Java Runtime die letzten 20 Jahre weiter entwickelt haben!
    Es gibt ja Generics (sind keine Templates, aber eine deutliche Unterstützung!), Lambdas, Asynchrone Sprachelemente usw.

    Ja, sogar so etwas wie RAII gibt es. (ich weiß, ist weit her geholt, aber sie versuchen es)

    Die JavaVM unterstützt auch direkt Scriptsprachen. Eine Einbindung in die eigene Anwendung ist damit recht einfach.

    Und JavaFX 2 (ist was anderes als das ursprübgliche JavaFX 1) ist auch eine sehr interessante GUI-Technik, die das elend langsame Swing ablöst! Vor 15 bis 20 Jahren konnte man regelrecht zu sehen, wie sich eine Swing-GUI aufbaut. Mit Java FX 2 ist man auf einem komplett anderen Planeten. 👍

    Wer natürlich generell eine Java-Aversion hat, den wird man nicht mehr mit Java friedlich stimmen können. 😉



  • Mirek schrieb:

    Btw, ich persönlich mag Java und C. Diese Kombination dürfte wohl eher selten sein.

    Muss nicht sein... Ich mag vor allem C++ und nicht C. Aber ich hab zumindest kein Problem mit Java. Ich habe auch eine Weile damit gearbeitet. Ich hab überhaupt keine Abneigung gegen Java, mag das aber auch nicht direkt.
    Wie Artchi geschrieben hat, das Ökosystem im Enterprise Bereich ist sehr gut. In dem Bereich habe ich eben auch gearbeitet und meine Vorstellung von Webanwendungen davor war PHP und print "<html>\n"... Ich fands dann auch toll, Backends mit Java zu entwickeln.
    Die Sprache an sich finde ich aber nicht wirklich toll. Ich habe davor noch viel C# gemacht und sprachlich gesehen war Java ein Rückschritt. Ist es immer noch, C# hat sich seitdem wieder ein gutes Stück weiterentwickelt. Allein schon das Vergleichen von Strings mit equals finde ich immer noch zum Kotzen.
    Der Hauptgrund, warum ich C++ bevorzuge, sind die Projekte. Ich will im Endeffekt im Moment einfach nicht mehr im Enterprise Bereich arbeiten. Das hat paar Jahre Spass gemacht, aber dann wurde es mir zu eintönig und ich habe neue Herausforderungen gesucht. Ich arbeite jetzt im CAD/PDM Bereich und finde es einfach viel spannender und abwechslungsreicher. Und dann kommt jetzt zusätzlich ins Spiel, dass mir auch das Optimieren viel Spass macht und ich das mit C++ viel besser im Griff habe.
    So gesehen habe ich auch die oben zitierte Aussage von SeppJ. Ich "brauche" Java als Sprache nicht. Da gibts sehr viele Kompromisse und Vereinfachungen, die es in C++ nicht gibt. Und das ist wohl auch eindeutig so, dass viel mehr Leute viel schneller mit Java zurechtkommen, als mit C++. Mich eingeschlossen, ich habe eine ganze Weile gebraucht, um mich mit C++ anzufreunden. Aber da ich das schon kann, will ich die vereinfachte und eingeschränkte Welt von Java eigentlich nicht. Außer, ich würde wieder Enterprise Anwendungen schreiben, aber da eben auch nicht wegen der Sprache an sich und nicht wegen der Runtime.



  • Mirek schrieb:

    Ja, sicher. Java ist aktuell die mit Abstand am häufigsten genutzte Programmiersprache: http://www.tiobe.com/tiobe_index.
    Danach folgt erstmal lange Zeit nichts und dann kommt C, auf dem zweiten Platz.

    Tiobe ist sehr mit vorsicht zu geniesen, wobei das an der Tatsache nichts ändert das Java bei vielen Indizes in der Regel recht weit oben (Platz 1-3) rangiert. Allgemein sind viele C-Basierte Sprachen (C, C++, C#, Java...) meist im oberen [Rang 1-10] Umfeld angesiedelt.



  • Mein persönlicher Grund gegen das Benutzen von Java ist einfach fehlende Ausdrucksstärke, es fühlt sich wie in einem Sandkasten mit Gittern an. Das Vorhandensein einer VM ist eher weniger das Problem, siehe Android. Wie Wutz bereits ausdrucksstark geschrieben hat, ist ein Design bei Java einfach unauffindbar, das fängt bei drangeklöppelten Generics an, geht über Operatorenspezialisation und hört bei try-with-resources auf. Besonders Letzteres ist meiner Meinung nach ein Stich ins Auge, da ist mir RAII viel angenehmer, als ein lumpiges try() überall hinein werfen zu müssen



  • asc schrieb:

    Allgemein sind viele C-Basierte Sprachen (C, C++, C#, Java...) meist im oberen [Rang 1-10] Umfeld angesiedelt.

    Der Grund dafür ist aber sicher nicht ihre C-Basiertheit, sondern viel mehr ihre große Akzeptanz unter den Programmierern weltweit. Dann entsteht auch eine große Codebasis, was die Beliebtheit der Sprache(n) weiter verstärkt.


  • Mod

    Mirek schrieb:

    asc schrieb:

    Allgemein sind viele C-Basierte Sprachen (C, C++, C#, Java...) meist im oberen [Rang 1-10] Umfeld angesiedelt.

    Der Grund dafür ist aber sicher nicht ihre C-Basiertheit, sondern viel mehr ihre große Akzeptanz unter den Programmierern weltweit. Dann entsteht auch eine große Codebasis, was die Beliebtheit der Sprache(n) weiter verstärkt.

    Die Akzeptanz ist aber wiederum eine Folge der C-Basiertheit.



  • Lol.
    Versteht ihr unter "C-basiert" dass sie C-ähnliche Syntax haben oder was? Davon abgesehen hat Java mit C wohl kaum etwas gemein. Klar, beides sind imperative Sprachen, aber das war's dann auch schon.

    Trotzdem bin ich der Meinung dass genau die C-ähnliche Syntax wichtig ist um schnell breite Akzeptanz zu bekommen. Weil es die Einstiegsbarriere senkt.



  • hustbaer schrieb:

    Versteht ihr unter "C-basiert" dass sie C-ähnliche Syntax haben oder was?

    Yepp, das sollte aus dem Gespräch eigentlich ersichtlich sein.
    Die Maschinennähe und die schwache Typisierung von C waren nicht gemeint. 😉


  • Mod

    hustbaer schrieb:

    Lol.
    Versteht ihr unter "C-basiert" dass sie C-ähnliche Syntax haben oder was?

    So habe ich das zumindest gemeint.



  • Mirek schrieb:

    hustbaer schrieb:

    Versteht ihr unter "C-basiert" dass sie C-ähnliche Syntax haben oder was?

    Yepp, das sollte aus dem Gespräch eigentlich ersichtlich sein.

    Wo?



  • hustbaer schrieb:

    Mirek schrieb:

    hustbaer schrieb:

    Versteht ihr unter "C-basiert" dass sie C-ähnliche Syntax haben oder was?

    Yepp, das sollte aus dem Gespräch eigentlich ersichtlich sein.

    Wo?

    Ab dem Beitrag von asc: "Allgemein sind viele C-Basierte Sprachen (C, C++, C#, Java...) ..."



  • Hm, OK. Für mich ist das daraus nicht ersichtlich. Man kann es vielleicht erahnen. Für mich ist es der Begriff "C-basiert" dabei so dermassen falsch eigenwillig verwendet, dass ich nie fix davon ausgehen würde dass er mit der Bedeutung verwendet wurde.

    Aber egal.

    Noch etwas zum Thema:

    Ich mag Java auch nicht. Muss ich gottseidank auch nicht, da ich beruflich nicht damit zu tun habe. Die Gründe sind ähnlch denen die Mechanics beschrieben hat.
    str.equals(str2) ist einfach zum Kotzen.
    Daran kann man sich sicher gewöhnen, aber wenn man es nicht gewohnt ist, und keinen Grund hat sich daran zu gewöhnen, dann ist es erstmal grauslich.

    Oder die fehlende Type-Inference ala var/auto. Grund dafür dass es das nicht gibt ist... die wollen das einfach nicht. Weil sie schlauer sind als alle anderen.
    Siehe http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4459053

    Und ganz schlimm finde ich dass Java keine userdefinierten Value-Types hat. Dadurch werden bestimmte Dinge einfach lästig zu optimieren -- man muss z.T. extrem hässlichen und schlecht gekapselten Code schreiben wenn er performant laufen muss. Mehr oder weniger trifft das auf jede Sprache zu, bei Java ist es allerdings viel krasser als bei z.B. C++. C# liegt irgendwo dazwischen.



  • hustbaer schrieb:

    Oder die fehlende Type-Inference ala var/auto. Grund dafür dass es das nicht gibt ist... die wollen das einfach nicht. Weil sie schlauer sind als alle anderen.

    Ich habe den Eindruck, dass bei Java ein bisschen die C-Philosophie Einfluss hatte. Das KISS-Prinzip. Die Sprache soll nicht überladen mit Features sein.

    Aber seitdem Lambda Expressions und Streams Einzug gehalten haben, scheint das auch nicht mehr wirklich zu gelten.



  • Ich hab' das nicht selbst nachrecherchiert, aber ein Freund von mir der viel mit Java macht und sich mit der Entstehung/Geschichte dahinter befasst hat, hat mir erzählt dass der Java-Erfinder eine Sprache "für Doofe" machen wollte bei der man möglicht wenig falsch machen kann. (Wobei "für Doofe" jetzt nicht übermässig abwertend gemeint ist, gemeint sind Programmierer die sich sowohl von den Fähigkeiten als auch der Motivation im unteren Bereich des mittleren Drittels bewegen. Also die Leute mit denen grosse Firmen notgedrungen auch arbeiten müssen.)
    Und dass er daher auch das Featureset entsprechend beschnitten/künstlich klein gehalten hat. Weil's halt immer unübersichtlicher wird je mehr Features/Sprachkonstrukte man hat. Ist aber wie gesagt hörensagen.
    C# 1.0 war ja ähnlich - da waren ja auch nur ein paar wenige Dinge mehr enthalten als in damals aktuellen Java Version.

    Später wurden beide Sprachen dann erweitert - wobei C# die Vorreiterrolle übernommt hat, aber darum geht's ja eigentlich nicht.

    Durch das "möglichst einfach halten" ergeben sich bei Java mMn. ein paar krass schlimme Dinge - die ich ganz bei den Gründen warum ich Java nicht mag vergessen hatte 😃
    z.B. "default access" sollte mMn. "private" sein, und nicht "internal". Oder die "alles ist virtual" Sache. Auauauauweh. Gut, es gibt final, aber auch hier wieder: falscher Default.

    Andrerseits könnte ich C++ da genau so kritisieren. Dass Klassen per Default copyable sind und Konstruktoren per Default "implicit" finde ich auch doof.



  • hustbaer schrieb:

    Ich hab' das nicht selbst nachrecherchiert, aber ein Freund von mir der viel mit Java macht und sich mit der Entstehung/Geschichte dahinter befasst hat, hat mir erzählt dass der Java-Erfinder eine Sprache "für Doofe" machen wollte bei der man möglicht wenig falsch machen kann.

    Das deckt sich durchaus mit dem was ich so gehört habe. Zu der Zeit gab es schon C++. Und erste Erfahrungen mit dieser Sprache, waren recht ernüchternd. Java war angetreten, das zu beheben. Manuelle Speicherverwaltung, Pointerarithmetik, Typecasting von allem in jedes, Destruktoren und Mehrfachvererbung, wurden als Ursachen des Übels ausgemacht.

    Das war in der Anfangszeit. Aber inzwischen hat sich viel getan. 🙂



  • Mirek schrieb:

    Destruktoren

    Das ist mein größter Kritikpunkt.



  • @Mirek
    Jo weiss nicht. Destruktoren sind so ziemlich das coolste Feature von C++. Ohne Destruktoren wäre C++ mMn. komplett witzlos.

    Umgekehrt sehe ich den schlechten Support für deterministische Finalisierung auch als riesen Problem in der ganzen "managed" Welt (C#, Java, ...).

    Klar, IDisposable/AutoClosable helfen. Aber das Gelbe vom Ei is des auch net.

    EDIT: Das Interface heisst AutoClosable, nicht IAutoClosable. Peinlich. Aber hey, ich bin ja kein Java-Mann, ich muss das nicht wissen 🙂



  • hustbaer schrieb:

    @Mirek
    Jo weiss nicht. Destruktoren sind so ziemlich das coolste Feature von C++. Ohne Destruktoren wäre C++ mMn. komplett witzlos.

    Diese Aussage habe ich jetzt nicht erwartet. Aber gut, das liegt wohl an einem nicht vorhandenen GC. Soweit ich weiß, existieren in C++ Idiome, die mittels Destruktoren eine Äquivalenz zu einem GC zu schaffen versuchen. Smartpointer und so. Ich bin diesbezüglich aber nicht so auf dem Laufenden.


Anmelden zum Antworten