Java vs. C++



  • Hallo,

    ich komme aus der C++-Welt, doch es geht mir gerade um Java.

    Ich hab seit Jahren C++ gemacht, weil ich war mal ein Jüngerle, wollte Spiele programmieren, und stieß auf C++.

    Jetzt schreibe und (ein bisschen) lese ich C++ seit ungefähr 6 bis 8 Jahren.

    Dann dacht ich mir, ein guter Programmierer, der kann mehr als nur eine Sprache.

    Und dann habe ich Java gemacht.

    Und ich hab immer total viele Flamewars über Java und C++ gelesen und habe nicht so gerafft warum das so ist.

    Und da ich ein paar Wochen Java gelernt habe, wollte ich mal fragen, was denn so Kacke im Vergleich von beiden ist?

    Ich habe da drei Sachen auszusetzen:

    C++ ist besser, weil...

    [list][]Mehr Typsicherheit irgendwie. Java Generics find ich im Gegensatz zu C++-Templates echt kacke! Ich hatte sogar schon Probleme bei nem simplen Factorial!
    [
    ]Operatorüberladung
    [*]Explizite throw -Angabe in der Funktionssignatur.

    Also, wie gesagt, ich häng bei C++. Java konnte ich nicht mal weiterlernen, da ich durch Arbeit und so gerade mehr neuerdings mit Python beschäftigt bin.

    Das schwierigste daran, eine neue Sprache zu lernen, ist, ohne in einer Referenz nachschauen zu müssen, was was ist. Findet ihr nicht? In C++ muss ich garnet mehr inner Referenz nachschauen. Einfach drauf losprogrammieren, fast komplettes <algorithm> im Kopf.

    Tja, so ist das halt, wenn man Jahre nur auf einer einzigen Sprache hängt.

    So isses!



  • cppvsjava schrieb:

    Und da ich ein paar Wochen Java gelernt habe, wollte ich mal fragen, was denn so Kacke im Vergleich von beiden ist?

    Jenseits dieser Frage habe ich keine andere in Deinem Beitrag entdeckt. Zur Antwort: Java ist zu Recht eine der beliebtesten Programmiersprachen. Es gibt natürlich Unterschiede zu anderen Sprachen und selbstverständlich kann man diese Unterschiede aus mehreren Blickwinkeln betrachten. Was die einen positiv bewerten, bewerten andere negativ. Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.



  • Java ist gut fürs Money Making also beruflich proggen. In allen anderen Bereich ist C++ besser.



  • Java ist gut fürs Money Making also beruflich proggen. In allen anderen Bereich ist C++ besser.

    du weißt aber schon das mehr Geld mit C/C++ Entwicklung verdient wird - oder?



  • Kann sein, dass der Stundenlohn für C++ höher ist, es gibt aber viel mehr Stellenangebote für Proggen mit Java. 😞



  • Kann sein, dass der Stundenlohn für C++ höher ist, es gibt aber viel mehr Stellenangebote für Proggen mit Java.

    .Net, Java und viele anderen halten sich doch eher die Waage - dein Post klang aber so als wenn man nur mit Java Geld verdienen kann - und das ist eben mehr als nur falsch



  • cppvsjava schrieb:

    Und da ich ein paar Wochen Java gelernt habe, wollte ich mal fragen, was denn so Kacke im Vergleich von beiden ist?

    Ist ganz einfach: Garbage Collection



  • Begun teh flamewar haz. 🕶



  • If Java had true garbage collection, most programs would delete themselves upon execution.



  • Gregor schrieb:

    Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.

    im bereich der schnittmenge ist man mit java besser bedient als mit c++. und für alles darunter ist man mit c besser bedient als mit c++. kurz gesagt: c++ ist irgendwie obsolet. nur etwas für liebhaber aber ohne praktischen vorteil.



  • Von wegen C++ und typsicher!

    int x = 2;
    
    if (x = 1) {
        std::out << "Na klaro!" << std::endl;
    }
    


  • ShadowClone schrieb:

    Von wegen C++ und typsicher!

    int x = 2;
    
    if (x = 1) {
        std::out << "Na klaro!" << std::endl;
    }
    

    deswegen z.b. sind die macher von java bis heute sehr stolz auf ihre sprache.
    boolean ist da eben keine teilmenge von int. 😉



  • swapper schrieb:

    Gregor schrieb:

    Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.

    im bereich der schnittmenge ist man mit java besser bedient als mit c++. und für alles darunter ist man mit c besser bedient als mit c++. kurz gesagt: c++ ist irgendwie obsolet. nur etwas für liebhaber aber ohne praktischen vorteil.



  • Kenner des C++ schrieb:

    swapper schrieb:

    Gregor schrieb:

    Flamewars über "Java vs. C++" gibt es, weil sich die Anwendungsbereiche der beiden Sprachen teilweise überschneiden.

    im bereich der schnittmenge ist man mit java besser bedient als mit c++. und für alles darunter ist man mit c besser bedient als mit c++. kurz gesagt: c++ ist irgendwie obsolet. nur etwas für liebhaber aber ohne praktischen vorteil.

    naja, etwas. wie die meisten hier. 🙂



  • Eigentlich will ich diese leidige Thema nicht befeuern, aber von Java -> C++ fehlt mir nur richtige Introspektion und die extrem einfache Testbarkeit. Andersrum fehlt mit ne riesige Tonne Features.
    Und die extrem strikte Objektorientierung und das Fehlen von Features vernichtet hunderte coole Software Designs und Abstraktionen.
    Ich schreibe lieber C++, wegen der Freiheit die mir die Sprache bietet.
    Dafür muss ich nicht immer wieder die gleichen ausgelutschten Argumente bedienen.
    C++ kann so viele Programmierparadigmen bedienen, da erscheint mit der Vergleich schon fast wie ein Vergleich zwischen einem roten Apfel (Java) und einem ganzen Fruchtkorb.



  • 5cript schrieb:

    Eigentlich will ich diese leidige Thema nicht befeuern, aber von Java -> C++ fehlt mir nur richtige Introspektion und die extrem einfache Testbarkeit. Andersrum fehlt mit ne riesige Tonne Features.
    Und die extrem strikte Objektorientierung und das Fehlen von Features vernichtet hunderte coole Software Designs und Abstraktionen.
    Ich schreibe lieber C++, wegen der Freiheit die mir die Sprache bietet.
    Dafür muss ich nicht immer wieder die gleichen ausgelutschten Argumente bedienen.
    C++ kann so viele Programmierparadigmen bedienen, da erscheint mit der Vergleich schon fast wie ein Vergleich zwischen einem roten Apfel (Java) und einem ganzen Fruchtkorb.

    C++ hindert mich sicher zu programmieren. In Java kann ich z. B. alle Membervariablen als final deklarieren, solange ich sie im Konstruktor initialisiere. Geht zwar auch mit C++, aber sobald ich das Objekt z. B. in eine QList stecke, fängt der Visual C++ Compiler an zu meckern, dass der Copy Konstruktor fehlt. Geht komischerweise wunderbar unter Linux, weil dort die Zuweisung evtl. durch memcopy realisiert ist (ich weiß es ehrlich gesagt nicht).

    Ganz ähnlich, wenn ich einen Standard-Konstruktor vermeiden will und stattdessen einen mit mehreren Argumenten wähle, um sicherzustellen, dass alle Membervariablen vom Benutzer sinnvoll initialisiert werden: QList braucht einen Default-Konstruktor, dadurch kann dann der Benutzer das Objekt mit einem Default-Konstruktor instanziieren und ein paar Member-Variablen setzen und den Rest uninitialisiert lassen. – Die Sicherheit ist dadurch verloren gegangen. Das sind alles Probleme, die ich erst seit C++ kenne und die andere moderne Sprachen nicht haben.



  • ShadowClone schrieb:

    C++ hindert mich sicher zu programmieren. In Java kann ich z. B. alle Membervariablen als final deklarieren, solange ich sie im Konstruktor initialisiere. Geht zwar auch mit C++, aber sobald ich das Objekt z. B. in eine QList stecke, fängt der Visual C++ Compiler an zu meckern, dass der Copy Konstruktor fehlt. Geht komischerweise wunderbar unter Linux, weil dort die Zuweisung evtl. durch memcopy realisiert ist (ich weiß es ehrlich gesagt nicht).

    Ganz ähnlich, wenn ich einen Standard-Konstruktor vermeiden will und stattdessen einen mit mehreren Argumenten wähle, um sicherzustellen, dass alle Membervariablen vom Benutzer sinnvoll initialisiert werden: QList braucht einen Default-Konstruktor, dadurch kann dann der Benutzer das Objekt mit einem Default-Konstruktor instanziieren und ein paar Member-Variablen setzen und den Rest uninitialisiert lassen. – Die Sicherheit ist dadurch verloren gegangen. Das sind alles Probleme, die ich erst seit C++ kenne und die andere moderne Sprachen nicht haben.

    Dann kann man Java auch emulieren und mit referenzen / zeigern arbeiten. Wenn das Objekt default-Konstruierbar sein muss: wrappen (unique_ptr, for instance).
    Sonst soweit auch erstmal ein Problem mit Qt...



  • Java hat das Problem, dass final nicht const ist. Das stimmt. Insgesamt halte ich es aber für sicherer.

    Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.

    Zu Qt: Ja, mag ein Problem von Qt sein, aber Qt macht C++ erst interessant. Crossplattform-Entwicklung macht man bei C++ mit Qt. Die Konkurrenz deckt bestenfalls eine Teilmenge von Qt ab. Qt bietet wirklich alle Standard-Techniken in einem Guss an.



  • ShadowClone schrieb:

    Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.

    Demnach besteht Java nur aus Eiweiß.



  • floorball schrieb:

    ShadowClone schrieb:

    Zum Wrappen: Das habe ich später auch im Internet gelesen, aber dass ich dann Objekte auf dem Heap anlegen muss, ist auch nicht das Gelbe vom Ei.

    Demnach besteht Java nur aus Eiweiß.

    Größtenteils, ja. Und dank Qt, wird C++ auch zu einem Eiweiß-Klumpen, wenn man so vorgehen will, wie ich es oben beschrieben habe.