ubuntuusers.de

Java ist crap

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

derMani schrieb:

Meiner Meinung nach ist das einfach historisch bedingt. Die alten Linuxer sind C-Freaks.... (zurecht). Maschinennahe Programmierung ist alles, jeder will jeden seinen Pointer selbst pflegen! Dann kommt da einfach so eine objektorientiere Sprache, erzeugt nichtmal handfesten binärcode sondern irgendeinen Bytecodequatsch und möchte sich auch noch unverschämter weise selbst um das Entsorgen von nicht mehr gebrauchten Objekten kümmern (Garbage-Collection).

Ein kompetenter Entwickler wählt das beste Werkzeug für den Job. Wenn jemand pauschal und immer darauf besteht, seinen Speicher selbst zu verwalten und bei jeder Gelegenheit mit Pointern um sich zu schießen, dann ist dieser jemand ein Vollidiot und sollte am besten überhaupt nicht programmieren. Glücklicherweise gibt es von diesen Vollidioten nicht allzu viele.

Das war reine IT-Blasphemie und für C/C++ -Programmierer einfach undenkbar ☺

Zunächst einmal gibt es keine Sprache, die C/C++ heißt. C und C++ sind zwei fundamental verschiedene Sprachen, daher macht es auch überhaupt keinen Sinn, von "C/C++-Programmierern" zu reden. Und abgesehen davon gibt es andere Sprachen wie z. B. Perl, Lisp, Scheme, Python, uvm. die sich auch in Hacker-Kreisen großer Beliebtheit erfreuen, obwohl sie noch auf wesentlich höherem Abstraktionsniveau angesetzt sind.

Zudem hat Sun sich selbst keinen Gefallen getan und die eigene Java-Implementierung verschlossen gehalten.

Das dürfte (neben den zahlreichen Mängeln in Sprache selbst) wohl der Hauptgrund dafür sein, dass Java in der OSS-Community eher nicht so beliebt ist.

Ein gutes Tutorial um eben fix Java-Coden zu lernen wirst du kaum finden, weil java eine professionelle und hochgradig umfangreiche Programmiersprache ist.

Ach deswegen bietet Sun selbst einen Haufen Java-Tutorials an.

Schnelle Lernerfolge und Ergebnisse wirst du eher mit PHP oder anderen Skriptsprachen erleben. Auch Delphi und Pascal sind deutlich simpler gestrikt als Java.

Dafür, dass Delphi "deutlich simpler gestrickt" sein soll als Java fehlt Java aber eine ganze Menge (z. B. Delegates, Properties, vernünftige Generics...).

Mit Java bekommt man eine vollwertige objektorientierte Programmiersprache die dieses Paradigma vollständig umsetzt.

Das ist schon seit 10 Jahren kein Alleinstellungsmerkmal mehr (abgesehen davon, dass der Wahrheitswert dieser Aussage umstritten sein dürfte). Ich weiß nicht, wie es den anderen hier geht, aber Java ist in meinen Augen eine absolut uninteressante Sprache mit extrem geringer Ausdrucksstärke. Für jeden Mist muss man rauhe Mengen an Boilerplate-Code schreiben; wenn's von Interesse ist, kann ich dafür gern mal ein Beispiel geben.

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

derMani schrieb:

Mit Java bekommt man eine vollwertige objektorientierte Programmiersprache die dieses Paradigma vollständig umsetzt.

Wow, echt? Da muss Sun an Java ja einiges verändert haben in letzter Zeit.

derMani

Avatar von derMani

Anmeldungsdatum:
24. Januar 2007

Beiträge: 260

Wohnort: Papenburg

DasIch schrieb:

derMani schrieb:

Mit Java bekommt man eine vollwertige objektorientierte Programmiersprache die dieses Paradigma vollständig umsetzt.

Wow, echt? Da muss Sun an Java ja einiges verändert haben in letzter Zeit.

Was fehlt dir? Sag jetzt bitte nicht Mehrfachvererbung. Das ist keine Anforderung der Objektorientierung, sondern höchstens ein Zusatz der hochgradig heikel ist und nu Probleme bereitet.

DocBriggs

Anmeldungsdatum:
7. April 2008

Beiträge: 335

Java ist eine spitzenmäßige Programmiersprache.

Wenn ich mir andere so ansehe, kann ich mit Java locker leben.

Hello World schrieb:

Das ist schon seit 10 Jahren kein Alleinstellungsmerkmal mehr (abgesehen davon, dass der Wahrheitswert dieser Aussage umstritten sein dürfte). Ich weiß nicht, wie es den anderen hier geht, aber Java ist in meinen Augen eine absolut uninteressante Sprache mit extrem geringer Ausdrucksstärke. Für jeden Mist muss man rauhe Mengen an Boilerplate-Code schreiben; wenn's von Interesse ist, kann ich dafür gern mal ein Beispiel geben.

Extrem geringe Ausdrucksstärke? Weil es glücklicherweise (einigermaßen) Konstrukte verhindert, die kein Schwein mehr versteht? Ich warte lieber Java-Code als C++-Zeug, soviel kann ich dir aber sagen. Das es gewisse Dinge in Java nicht gibt, hat seinen guten Grund.

Bei Java muss ich zum Teil 3 Zeilen schreiben, bei einer anderen Sprach vielleicht nur eine, aber dafür ist das zumindest einfacher nachzuvollziehen.

Plattformunabhängikeit ist natürlich kein Alleinstellungsmerkmal. Aber Java setzt das schon ganz gut um. Der Wahrheitswert ist umstritten, ich habe auch schon Programme geschrieben, die auf Windows anders liefen, als auf Linux. Vor allen Dingen wenn du noch mit SWT n´Stuff anfängst.

So manchesmal musste ich den Fehler dann aber auch bei mir selber suchen...

Hello_World

(Themenstarter)

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

DocBriggs schrieb:

Extrem geringe Ausdrucksstärke?

Ja.

Weil es glücklicherweise (einigermaßen) Konstrukte verhindert, die kein Schwein mehr versteht? Ich warte lieber Java-Code als C++-Zeug, soviel kann ich dir aber sagen. Das es gewisse Dinge in Java nicht gibt, hat seinen guten Grund.

"It is possible to write obscure code in any language. It matters more how a feature can be used well than how it can be misused." (Stroustrup).

Bei Java fehlen einfach viele Features, bei denen das Argument, dass dieses Konstrukt zu fehleranfällig oder zu kompliziert sei, nicht zieht. Was ist schlecht an Destruktoren, die zuverlässig am Ende des Blocks aufgerufen werden? Was ist schlecht an Methoden- und Memberzeigern? An vernünftiger Unterstützung für generische Programmierung? An Friend-Deklarationen? Und auch Features wie Operatorüberladung sind oft einfach sinnvoll. BigInteger usw. ist syntaktisch doch der reinste Krampf. Zumal man sich ja auch nicht entblödet hat, für String-Konkatenation dann doch ein + zu verwenden.

Bei Java muss ich zum Teil 3 Zeilen schreiben, bei einer anderen Sprach vielleicht nur eine, aber dafür ist das zumindest einfacher nachzuvollziehen.

Ach, wenn ich also die 10te Comparator-Implementierung schreibe, weil ich eine Collection irgendwelcher Objekte nach einem bestimmten Member sortieren will (z. B. Personen nach Vorname, Nachname, Geburtsdatum...), dann ist das Deiner Meinung nach übersichtlich? In C++ schreib ich mir ein Template und bin fertig.

Klar, auch in C++ gibt es Fälle, wo man Boilerplate schreiben muss, z. B. weil es keine Reflection gibt. Aber das hat dann in der Regel auch sehr gute Gründe (Reflection und GC brauchen halt Speicher, den man in einem embedded-System nicht hat).

DocBriggs

Anmeldungsdatum:
7. April 2008

Beiträge: 335

Hello World schrieb:

DocBriggs schrieb:

Extrem geringe Ausdrucksstärke?

Ja.

Nö.

Weil es glücklicherweise (einigermaßen) Konstrukte verhindert, die kein Schwein mehr versteht? Ich warte lieber Java-Code als C++-Zeug, soviel kann ich dir aber sagen. Das es gewisse Dinge in Java nicht gibt, hat seinen guten Grund.

"It is possible to write obscure code in any language. It matters more how a feature can be used well than how it can be misused." (Stroustrup).

Ja...es ist aber auch die Frage, wieviel obscure Code eine Sprache erlaubt. Der Mensch geht gerne den einfachen Weg, daher ist das Verbot gewisser Konstrukte in meinen Augen eine gute Sache.

Bei Java fehlen einfach viele Features, bei denen das Argument, dass dieses Konstrukt zu fehleranfällig oder zu kompliziert sei, nicht zieht. Was ist schlecht an Destruktoren, die zuverlässig am Ende des Blocks aufgerufen werden? Was ist schlecht an Methoden- und Memberzeigern? An vernünftiger Unterstützung für generische Programmierung? An Friend-Deklarationen? Und auch Features wie Operatorüberladung sind oft einfach sinnvoll. BigInteger usw. ist syntaktisch doch der reinste Krampf. Zumal man sich ja auch nicht entblödet hat, für String-Konkatenation dann doch ein + zu verwenden.

Das sind Dinge, die dir offiziell das Leben erleichtern, auf der anderen Seite aber auch "obscure Code" generieren. Operatorüberladung und haste nicht gesehen ist eine Art Luftlinie um zu einem bestimmten Ziel zu kommen. Aber der Code wird dadurch nicht besser.

Bei Java muss ich zum Teil 3 Zeilen schreiben, bei einer anderen Sprach vielleicht nur eine, aber dafür ist das zumindest einfacher nachzuvollziehen.

Ach, wenn ich also die 10te Comparator-Implementierung schreibe, weil ich eine Collection irgendwelcher Objekte nach einem bestimmten Member sortieren will (z. B. Personen nach Vorname, Nachname, Geburtsdatum...), dann ist das Deiner Meinung nach übersichtlich? In C++ schreib ich mir ein Template und bin fertig.

Java ist nicht perfekt.

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

derMani schrieb:

Was fehlt dir? Sag jetzt bitte nicht Mehrfachvererbung. Das ist keine Anforderung der Objektorientierung, sondern höchstens ein Zusatz der hochgradig heikel ist und nu Probleme bereitet.

Mehrfachvererbung bereitet keine Probleme, Leute die Mehrfachvererbung unüberlegt einsetzen tun es. Das sind halt unterschiedliche Ansätze "Der Programmierer ist doof und muss geschützt werden" vs. "Der Programmierer weiß was er tut", ich bevorzuge letzteren.

Ansonsten stört dass die Grunddatentypen keine Objekte sind aber am meisten nervt dass fehlen von Funktionen.

moron

Anmeldungsdatum:
22. April 2007

Beiträge: 302

DasIch schrieb:

Ansonsten stört dass die Grunddatentypen keine Objekte sind aber am meisten nervt dass fehlen von Funktionen.

Wenn du willst, nimmst du durchgehend die entsprechenden Wrapperklassen.

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

moron schrieb:

Wenn du willst, nimmst du durchgehend die entsprechenden Wrapperklassen.

Das es sie gibt macht die Sprache nicht besser.

Erunno

Anmeldungsdatum:
7. Juli 2006

Beiträge: 279

moron schrieb:

DasIch schrieb:

Ansonsten stört dass die Grunddatentypen keine Objekte sind aber am meisten nervt dass fehlen von Funktionen.

Wenn du willst, nimmst du durchgehend die entsprechenden Wrapperklassen.

Zumal Java Autoboxing beherrscht.

Hello_World

(Themenstarter)

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

DocBriggs schrieb:

Nö.

Doch :p

Ja...es ist aber auch die Frage, wieviel obscure Code eine Sprache erlaubt.

Programming languages don't write bad code, programmers do. (frei nach der NRA (deren Ansichten ich nicht teile, aber der Slogan ist gut)). Ein kompetenter Programmierer weiß was er tut und braucht keine Programmiersprache, die ihm das vorschreibt.

Bei Java fehlen einfach viele Features, bei denen das Argument, dass dieses Konstrukt zu fehleranfällig oder zu kompliziert sei, nicht zieht. Was ist schlecht an Destruktoren, die zuverlässig am Ende des Blocks aufgerufen werden? Was ist schlecht an Methoden- und Memberzeigern? An vernünftiger Unterstützung für generische Programmierung? An Friend-Deklarationen? Und auch Features wie Operatorüberladung sind oft einfach sinnvoll. BigInteger usw. ist syntaktisch doch der reinste Krampf. Zumal man sich ja auch nicht entblödet hat, für String-Konkatenation dann doch ein + zu verwenden.

Das sind Dinge, die dir offiziell das Leben erleichtern, auf der anderen Seite aber auch "obscure Code" generieren.

Wo ist der Unterschied, ob ich operator+= so definiere, dass subtrahiert wird, oder ob ich meine Methode zum subtrahieren "add" nenne? Beides ist genauso verwirrend, aber wenn man das Feature richtig benutzt, ist die Variante mit Operatoren besser zu lesen. Was genau ist jetzt toll daran, Operatorüberladung zu verbieten? Genauso sieht's mit Templates aus: klar, man kann Mist damit bauen, aber in den richtigen Händen sind sie ein extrem nützliches Werkzeug. Ein stumpfes Messer ist natürlich weniger gefährlich als ein scharfes, trotzdem hab ich lieber scharfe Messer. Und bei Sachen wie Destruktoren und Methodenzeigern wüsste ich wirklich nicht, wie man sie missbrauchen sollte. Da muss man sich schon regelrecht Mühe geben.

Java ist nicht perfekt.

Es geht nicht um Perfektion. Es geht darum, dass Java nicht kann, was Common Lisp vor 25 Jahren konnte.

DocBriggs

Anmeldungsdatum:
7. April 2008

Beiträge: 335

Aus deiner Signatur 😛:

"C-Programmierer sind wie Bauarbeiter - wer einen Schutzhelm trägt, ist kein echter Kerl"
Lerne auch Du jetzt C hassen in 10 Tagen!

Es geht nicht um Perfektion. Es geht darum, dass Java nicht kann, was Common Lisp vor 25 Jahren konnte.

Mit Java kannst du alles machen, was eine Hochsprache heutzutage so ausmacht. Du musst halt nur mehr umschreiben, umgehst damit aber auch so manche Falle.

Das dürfte am Ende aber zu einer Grundsatzdiskussion ausarten.

Ich sperre mich nur gegen die Aussage, Java sei nicht so mächtig wie andere Programiersprachen.

Bei C reicht mir schon sowas hier ums kotzen zu kriegen:

int a=1, b=2;
if (a=b) {
printf("a ist gleich b\n");
};

Siehe C hassen in 10 Tagen.

Hello_World

(Themenstarter)

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

DocBriggs schrieb:

Aus deiner Signatur 😛:

"C-Programmierer sind wie Bauarbeiter - wer einen Schutzhelm trägt, ist kein echter Kerl"
Lerne auch Du jetzt C hassen in 10 Tagen!

Und was hat das mit dieser Diskussion zu tun? In C bin ich gewungen, permanent auf niedrigem Abstraktionsniveau zu programmieren. Das ist letzten Endes auch eine Zwangsjacke, nur eine andere als bei Java.

Mit Java kannst du alles machen, was eine Hochsprache heutzutage so ausmacht.

"alles, was eine Hochsprache heutzutage so ausmacht" ist wohl mehr als nur schwammig. Es ist eine absolute Nullaussage.

Ich sperre mich nur gegen die Aussage, Java sei nicht so mächtig wie andere Programiersprachen.

Um das zu beurteilen, müsste man wohl erstmal definieren, was "mächtig" überhaupt heißen soll.

DocBriggs

Anmeldungsdatum:
7. April 2008

Beiträge: 335

Ich hab eigentlich keine Lust sowas zu definieren.

Jedem der Java kann weiß, dass man mit Java alles schnell und sauber programmieren kann (nicht embedded, ok). Es mag ja sein, dass das ein oder andere nicht ganz so toll gelöst ist. Aber, entschuldige, erzählen zu wollen, Java hätte eine extrem geringe Ausdrucksstärke ist in meinen Augen schlichtweg falsch.

Alles andere ist mir gerade echt zuviel Wortklauberei.

DocBriggs

Anmeldungsdatum:
7. April 2008

Beiträge: 335

Mit der Überschrift weiß ich jetzt schon, dass das hier ein witziger Thread werden dürfte.

Antworten |