Aversion gegen Java



  • 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.



  • Mirek schrieb:

    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.

    umgekehrt. java versucht, sofort zuschlagende destruktoren zu etablieren.



  • volkard schrieb:

    umgekehrt. java versucht, sofort zuschlagende destruktoren zu etablieren.

    Du sprichst von WeakReference/SoftReference, oder was meinst du?



  • [quote="Mirek"]

    hustbaer schrieb:

    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.

    Eher andersherum. Das IAutoCloseable Feature von Java versucht sich RAII anzunähern. Wobei GC und RAII unterschiedliche Ziele haben.



  • Techel schrieb:

    Das IAutoCloseable Feature von Java versucht sich RAII anzunähern. Wobei GC und RAII unterschiedliche Ziele haben.

    Tja, letztlich ist es doch auch gut, dass Java von seinen Verwandten lernt und sich weiterentwickelt. Schließlich sind alle objektorientierten, C-basierten Sprachen Geschwister und keine Feinde.


Anmelden zum Antworten