Java vs C++



  • Hi Leute,

    ich hab mich letzte zeit mal mit java geschäftigt.
    was mir auffiel, irgendwie sind der grösste teil
    der java-programmierer komisch.

    die vergöttern java, haben warscheinlich nen altar zu hause
    und singen god bless java, ka.

    fast in allen büchern machen die zb c++ schlecht,
    im allgemeinen, alles was komplizierter ist, ist für die böse.

    pointer in c++ sind se am meckern

    zitat aus Java ist auch eine Insel

    Beispiel   Dass das Pfuschen in C++ leicht möglich ist und wir Zugriff auf 
    private Elemente über eine Zeigerarithmetik bekommen können, zeigt das 
    folgende Programm. Für uns Java-Programmierer ist dies ein abschreckendes Beispiel. 
    #include <string.h>
    #include <iostream.h>
    class Ganz_unsicher {
    public:
      Ganz_unsicher() { strcpy(passwort, "geheim"); }
    private:
      char passwort[100];
    };
    void main()
    {
      Ganz_unsicher gleich_passierts;
      char *boesewicht = (char*)&gleich_passierts;
      cout << "Passwort: " << boesewicht << endl;
    }
    
    Dieses Beispiel demonstriert, wie problematisch der Einsatz von Zeigern sein 
    kann. Der zunächst als Referenz auf die Klasse Ganz_unsicher gedachte Zeiger
     mutiert durch die explizite Typumwandlung zu einem Char-Pointer boesewicht. 
    Problemlos können über diesen die Zeichen byteweise aus dem Speicher 
    ausgelesen werden. Dies erlaubt auch einen indirekten Zugriff auf die privaten 
    Daten.
    

    Für uns Java-Programmierer ist dies ein abschreckendes Beispiel. hehe
    das zieht sich durch mehrere bücher und lernmaterialien, wo jede andere
    programmiersprache neben java schlecht ist.

    und dann die vergötterung ihres garbage collectors, der ihre objekte
    von allein zerstört nach ner einer funktion.

    zeigen nich die vor und nachteile, wie ich aus anderen büchern
    von anderen sprachen kenne,im ganzen recht subjektiv.

    ist das euch auch schon mal aufgefallen? sollte man nich objektiv sein?
    ich finde java ja ganz gut, aber lese sehr ungern über java, da wird einem
    teileweise schlecht.



  • das sind halt die dummen Buzzword-Manager, die auf oberflächliche "Argumentationen" reinfallen



  • #include <iostream.h>, void main()... Da lach ich ja nur! 😃

    Ich kenn das von meinem Chef, der is auch totaler Java Anhänger... Wenn der mal ins schwärmen kommt... Und auf keinen Fall darf man etwas gutes über C++ sagen, das kann er garnicht haben! 🙂

    grüße



  • Hallo,

    fairerweise muss ich natürlich zugeben, dass dieses Beispiel absoluter Nonsens ist und mich musste mich selbst auch darüber ärgern, als ich dass in diesem Buch gelesen habe (war ja selbst auch mal absoluter C++ Fan, aber damals war C noch der größte "Feind" für mich). Auf der Microsoft Security DVD gibt es ein ganz ähnliches Beispiel zum Risiko Stack Overflow, das zwar mehr Sinn macht, aber trotzdem immer noch realitätsfern ist, nachdem ich kein char-Array verwende werde, wenn es doch die Klasse string gibt.

    Dieses "Problem" hat man aber in vielen anderen Bereichen der Programmierung ebenfalls. Das ist in dem Sinn kein stupides C++ Bashing von Java Programmierern, die es nicht besser wissen, sondern füllt halt einfach das Buch/den Artikel und hinterlässt bei all jenen, die die andere Seite nicht kennen einen guten Eindruck (einfach Marketing). Was glaubt ihr was ich in Büchern mit Microsoft .NET als Thema über Java lese? Die Ignoranz tut hier genauso "weh", wie eben in diesem Fall bei euch.

    Ich würde euch empfehlen solche Kommentare, Behauptungen einfach zu ignorieren und weiterzulesen. Ihr macht euch das Leben doch nur selbst schwer, wenn ihr auf so etwas auch noch eingeht.

    Bezüglich den Aussagen, dass Java Programmierer "Garbage-Collector"-geile Pointer-Nicht-Versteher sind (frei interpretiert) würde ich fast schon die Schließung des Threads empfehlen, da solche Aussagen in 90% der Fälle zu einem Flamewar ausarten.

    grüße



  • na so meinte ich das nicht, finde es halt besser wenn man objektiv bleibt
    und die vor und nachteile schildert und jeder selbst abwägen kann was er
    will, ich verstehe pointer auch nich immer, aber zwingt mich auch keiner
    sie zu benutzen deswegen mache ich sie nicht schlecht.

    und ich finds schlimm das lehrer und dozenten die einem das beibringen sollen
    teilweise noch schlimmer sind, hab von nem kumpel sein ausbildungsmaterial
    hier, wenn ich das zeigen würde, würde man teilweise in schallendes gelächter
    ausbrechen.

    klar gibts dieses schlecht machen in vielen bereichen, hab hier auch
    schon closed threads gesehen c++ und vb.

    viel mir halt nur grad bei java sehr gravierend auf.

    das java was kann zeigt mir zb chrome, nen java spiel falls ihr das kennt.
    war davon beeindruckt:)

    hab mir schon viele sprachen angeguckt, und mich für c++ entschieden.
    aber mache nicht nur c++, weil es nich grad für alles optimal is.
    mache auch gerne andere sprachen.

    ich reg mich auch nich drüber auf finds eher lustig.



  • Ein sehr netter Rant über Java: Execution in the Kingdom of Nouns



  • kingruedi schrieb:

    Ein sehr netter Rant über Java: Execution in the Kingdom of Nouns

    geil:

    ...advocating Object-Oriented Programming is like advocating Pants-Oriented Clothing.

    😃 😃



  • adonis schrieb:

    ich verstehe pointer auch nich immer, aber zwingt mich auch keiner
    sie zu benutzen deswegen mache ich sie nicht schlecht.

    Wenn du Pointer nicht verstehst, kann es schnell passieren, dass deine C++ Anwendung langsamer wird als eine gleiche Java Anwendung.



  • Ich behaupte mal, die allerwenigsten sind überhaupt dazu in der Lage, objektiv das Thema Java vs C++ zu behandeln. Denn die allerwenigsten kennen alle Feinheiten beider Sprachen gut genug und in den meisten Fällen gibts eh kein richtig oder falsch.

    Wenn Dich o.g. kostenloses Online-Buch stört, dann versuchs doch einfach mal mit einem richtigen Buch, z.B. Thinking in Java von Bruce Eckel. Der kennt nämlich auch die "andere Seite" und beschreibt sie in seinem Buch Thinking in C++. 😉

    gez. ein Java-Progger



  • NaN schrieb:

    Wenn Dich o.g. kostenloses Online-Buch stört, dann versuchs doch einfach mal mit einem richtigen Buch, z.B. Thinking in Java von Bruce Eckel. Der kennt nämlich auch die "andere Seite" und beschreibt sie in seinem Buch Thinking in C++. 😉

    Glaub mal nicht, das in "Thinking in Java" nicht ganz ähnliches gebracht wird. Auch dort wird andauernd ein Bezug zu C++ hergestellt und die Vorteile von Java werden herausgearbeitet.

    Zum Beispiel da beim GC:

    Thinking in Java 3rd edition schrieb:

    With Java, the garbage collector is designed to take care of the problem of releasing the memory (although this doesn't include other aspects of cleaning up an object). The garbage collector "knows" when an object is no longer in use, and it then automatically releases the memory for that object. This (combined with the fact that all objects are inherited from the single root class Object and that you can create objects only one way-on the heap) makes the process of programming in Java much simpler than programming in C++. You have far fewer decisions to make and hurdles to overcome.

    oder da:

    Thinking in Java 3rd edition schrieb:

    What has impressed me most as I have come to understand Java is that somewhere in the mix of Sun's design objectives, it appears that there was the goal of reducing complexity for the programmer. As if to say "we care about reducing the time and difficulty of producing robust code." In the early days, this goal resulted in code that didn't run very fast (although there have been many promises made about how quickly Java will someday run) but it has indeed produced amazing reductions in development time; half or less of the time that it takes to create an equivalent C++ program. This result alone can save incredible amounts of time and money, but Java doesn't stop there. It goes on to wrap many of the complex tasks that have become important, such as multithreading and network programming, in language features or libraries that can at times make those tasks easy. And finally, it tackles some really big complexity problems: cross-platform programs, dynamic code changes, and even security, each of which can fit on your complexity spectrum anywhere from "impediment" to "show-stopper." So despite the performance problems we've seen, the promise of Java is tremendous: it can make us significantly more productive programmers.

    ...oder hälst Du das für Objektivität? 😉



  • Tja, so ist es halt. Was man nicht kennt, ist grundsätzlich erstmal ablehnenswerter als das, was man kennt.
    Dass man mit C++ viel Unsinn anstellen kann, ist ja kein Geheimnis. Wer sowas macht, zeigt aber einfach nur seine Unfähigkeit, da im Standard eigentlich alles dazu geschrieben steht.
    Das "Böse" im Beispiel sind übrigens auch nicht die Zeiger, sondern der Cast, weil das Typsystem nunmal verhindert, dass ein Ganz_unsicher Zeiger einfach so einem char Zeiger zugewiesen werden kann. Mal ganz abgesehen vom Rest der Anwendung. 🙄
    Ich verstehe auch nicht, warum es immer wieder Leute gibt, die eine der Sprachen verteufeln. Ich sehe sie weniger als Konkurrenten, sondern vielmehr als Ergänzung.



  • @Gregor: OK, wenn es danach geht, gibt es wahrscheinlich überhaupt kein rein objektiv geschriebenes Buch. Denn sobald man auch nur einen Vergleich zwischen zwei Sprachen macht, ist man schon nicht mehr objektiv.

    Aber es gibt eben Menschen, die möchten auch mal über den Tellerrand schauen. Ich hatte bei Thinking in Java (4th Edition) bisher nicht das Gefühl, dass C++ in irgendeiner Weise schlecht gemacht wird. Er beschreibt zwar Vorteile von Java gegenüber C++, aber wer auch nur ein bißchen mitdenkt, der merkt, dass Java sich diese Vorteile häufig mit Nachteilen in anderen Bereichen erkaufen muss. Gerade beim Thema Garbage Collection liegt das ja auf der Hand.

    Davon abgesehen schreibt er aber halt Fakten:

    This (...) makes the process of programming in Java much simpler than programming in C++. You have far fewer decisions to make and hurdles to overcome.

    Das ist halt so. Und das sollte eigentlich jedem - egal ob Java oder C++ Programmier - schon klar sein. Für mich hat das wenig mit "C++ schlechtmachen" zu tun. Du könntest auch genug stellen aus dem Buch quoten, wo er sich kritisch über Java äußert.


  • Administrator

    NaN schrieb:

    This (...) makes the process of programming in Java much simpler than programming in C++. You have far fewer decisions to make and hurdles to overcome.

    Das ist halt so. Und das sollte eigentlich jedem - egal ob Java oder C++ Programmier - schon klar sein. Für mich hat das wenig mit "C++ schlechtmachen" zu tun. Du könntest auch genug stellen aus dem Buch quoten, wo er sich kritisch über Java äußert.

    Dieser Satz hat für mich sogar gar nichts mit C++ Schlechtmachen zu tun, sondern dann eher Java. Das heisst ja nichts anderes, dass man in Java Hilfsmittel hat. Doch Hilfsmittel heisst für mich automatisch auch Einschränkungen. Daher gefällt mir C++ automatisch besser ^^

    Und zum ganzen Zeugs Java vs C++. Soll doch jeder das programmieren was er am liebsten tut. Wieso sollte ein Java-Programmierer C++ proggen, wenn er mit Java zufrieden ist und andersrum? Die, welche immer wieder auf die Programmierer der anderen Sprache losgehen, zeigen schlussendlich nur, dass sie vom ganzen keine Ahnungen haben und zudem nicht viel Grips haben. Es ist immer so, dass die eine Sache für dies gut ist und die andere Sache für was anderes. Eine ultimative super Sprache wird es nie geben. Oder dann ist es halt die Bitsprache ^^

    Kommt mir vor wie die Religionen. Judentum, Christentum, Islam usw. Alle kommen vom gleichen Ort, alle glauben grundsätzlich an den gleichen Gott, aber alle bekämpfen sich ^^

    Grüssli



  • mhh meine erfahrung ist eher dass man so die wichtigsten sprachen
    können sollte und dazu noch ein paar script sprachen.

    zumindest sehe ich das so, wenn man nach jobs sucht.
    und meine erfahrung is auch das man nicht weit kommt wenn man sich
    festbohrt bei einer sprache und die wehement verteidigt.

    zumal sich eine sprache nicht immer für alles eignet, oder die optimale
    lösung ist.

    um das prinzip von spiele programmierung zu lernen nehme ich nicht c++,
    es dauert halt einfach zulange. wenn ich mir die grundprinzipien angeeinget
    habe dann versuche ich das in c++.

    programmieren lernen allerdings find ich in c++ besser, weil ich
    da die grundlagen im programmieren lernen kann, ohne mich gleich mit
    oop auseinanderzusetzen.

    ich mag auch basic sprachen, um mal was schnell auszuprobieren optimal.

    für mich hat jede sprache ihre vor und nachteile, hauptgrund für mich
    mit c++ zubeschäftigen war, dass ich es mag die kontrolle über alles zu haben,
    auch wenn ich mir da sehr viele fehler einbauen kann, aber übung macht ja den
    meister 🙂

    PS: bin erstaunt das der thread noch nich closed is, gratz an euch:)



  • The Perils of JavaSchools

    auch ein interessanter Artikel über die Probleme die dadurch entstehen, dass an vielen Universitäten fast nur noch Java unterrichtet wird.



  • kingruedi schrieb:

    The Perils of JavaSchools

    auch ein interessanter Artikel über die Probleme die dadurch entstehen, dass an vielen Universitäten fast nur noch Java unterrichtet wird.

    Andererseits liefert das auch einen entsprechenden Markt für Schulungen, Zertifizierungen, etc.. um sich herauszuheben aus der Masse. Das "Problem" ist halt, dass es keine grundlegenden Dinge gibt, die man zum Aussortieren hernehmen kann, denn alles was für manche zu kompliziert werden könnte, sind bestimmte APIs, Frameworks, etc..



  • jemand`` schrieb:

    kingruedi schrieb:

    The Perils of JavaSchools

    auch ein interessanter Artikel über die Probleme die dadurch entstehen, dass an vielen Universitäten fast nur noch Java unterrichtet wird.

    Andererseits liefert das auch einen entsprechenden Markt für Schulungen, Zertifizierungen, etc.. um sich herauszuheben aus der Masse.

    BTW: Ich wollte schon immer mal fragen, ob es etwas wie auf der folgenden Seite auch im C++ Umfeld gibt:

    www.javablackbelt.com

    ...würde mich sehr interessieren. (...ohne jetzt den Sinn und Unsinn solcher Multiple-Choice-Tests zu diskutieren.)



  • Gregor schrieb:

    jemand`` schrieb:

    kingruedi schrieb:

    The Perils of JavaSchools

    auch ein interessanter Artikel über die Probleme die dadurch entstehen, dass an vielen Universitäten fast nur noch Java unterrichtet wird.

    Andererseits liefert das auch einen entsprechenden Markt für Schulungen, Zertifizierungen, etc.. um sich herauszuheben aus der Masse.

    BTW: Ich wollte schon immer mal fragen, ob es etwas wie auf der folgenden Seite auch im C++ Umfeld gibt:

    www.javablackbelt.com

    ...würde mich sehr interessieren. (...ohne jetzt den Sinn und Unsinn solcher Multiple-Choice-Tests zu diskutieren.)

    ich progge euch eh alle an die Wand 🕶



  • kingruedi schrieb:

    Ein sehr netter Rant über Java: Execution in the Kingdom of Nouns

    Das ist richtig gut!



  • jemand`` schrieb:

    kingruedi schrieb:

    The Perils of JavaSchools

    auch ein interessanter Artikel über die Probleme die dadurch entstehen, dass an vielen Universitäten fast nur noch Java unterrichtet wird.

    Andererseits liefert das auch einen entsprechenden Markt für Schulungen, Zertifizierungen, etc.. um sich herauszuheben aus der Masse. Das "Problem" ist halt, dass es keine grundlegenden Dinge gibt, die man zum Aussortieren hernehmen kann, denn alles was für manche zu kompliziert werden könnte, sind bestimmte APIs, Frameworks, etc..

    Das Problem ist eher, dass die Leute ein immer unpraktischeres Basiswissen bekommen. Es ist nun mal wichtig, dass jemand weiß wie Pointer funktionieren und wo die Probleme liegen. Es ist auch genau so wichtig, dass ein Programmierer viele unterschiedliche Programmiervarianten kennen lernt. Die Ausbildung ist eben die Zeit, in der das Denken geprägt werden soll.

    Als Personalchef würde ich niemanden einstellen, der nur eine Programmiersprache kann oder der die üblichen Schrott-Kombinationen hat wie Java und PHP oä. Aber leider bin ich kein Personalchef 🙂



  • Naja, versteht ihr unter "eine Programmiersprache können"? Die Syntax beherrschen? Ein Hello World schreiben können? Geht schnell. Die Sprache richtig beherrschen? Dauer (je nach Vorwissen) lange, ich würde mal sagen: Jahre.

    Ich würde von mir mal behaupten, dass ich Java recht gut beherrsche (5 Jahre Erfahrung). Wenn ich jetzt mit C++ anfangen würde, dann könnte ich vielleicht in ein paar Jahren sagen, dass ich diese Sprache gut beherrsche. Aber beherrsche ich dann auch noch Java gut? Ich denke nicht, denn in einigen Jahren hat sich jede Sprache weiterentwickelt. Es gibt neue Frameworks, Libs etc.

    Und was hat bitte ein Unternehmen von einem Programmierer, der zwar mehrere Sprachen ein bißchen beherrscht, aber keine richtig? Was soll das bringen? Wechselt ihr vielleicht alle paar Monate das Projekt und damit auch die Programmiersprache? Oder sind die Projekte in der Regel nicht vielleicht so komplex, dass man doch länger daran arbeitet und die eingesetzte Sprache auch perfekt beherrschen sollte?

    My 2 cents...


Anmelden zum Antworten