Ist es sinnvoll heute noch C++ anzufangen?



  • Hallo,

    Die Frage betrifft mich selbst nicht, aber ich werde immer wieder von Leuten gefragt, wie man am besten Programmieren lernen und irgendwie kennen die meisten Leute C++ und denken es sei die "beste" Programmiersprache. Ich weiss nicht so recht, was ich den Leuten da raten soll.

    Meiner Meinung nach stellt es sich so dar:

    - In den low-level Anwendungsgebieten wird beinahe ausschließlich auf C gesetzt und nicht auf C++. Der Linux Kernel ist ja komplett in C geschrieben, der Großteil des Windows Kernels ebenfalls und die allermeisten Treiber werden auch in C programmiert. Es scheint mir auch so, daß viele Systemprogrammierer eine Abneigung gegen C++ haben und die Sprache keinen sinnvollen Mehrwert auf diesem Gebiet bringt.

    - In den high-level Anwendungsgebieten gibt es bequemere Alternativen mit Sprachen wie C# und Java. Gibt es da Gebiete wo man C++ meinetwegen C# (unter Windows natürlich) vorziehen sollte? Vor allen Dingen unter dem Gesichtspunkt, daß Microsoft ja mit C++/CLI langfristig auch auf die .NET Plattform umsteigen will und unmanaged code im Userspace vielleicht eines Tages gänzlich abgeschafft sein wird.

    Was gibt es für Awendungsgebiete, wo C++ heute noch Sinn macht und was würdet ihr den Leuten raten, wenn sie fragen, ob sie C++ lernen bzw. nutzen sollen? Ich sehe heutzutage keinen Grund für C++ mehr, aber ich bin mir auch nicht so 100%-ig sicher.



  • Lennard_ schrieb:

    Meiner Meinung nach stellt es sich so dar:

    - In den low-level Anwendungsgebieten wird beinahe ausschließlich auf C gesetzt und nicht auf C++.

    Das stimmt so nicht. Es hängt von der Plattform und dem Anwendungszweck ab. Ada, C und C++ werden üblicherweise eingesetzt.

    Lennard_ schrieb:

    Der Linux Kernel ist ja komplett in C geschrieben,

    Leider, das merkt man dem Linux Kernel immer wieder an. Vieles ist einfach schlecht umgesetzt und unnötig kompliziert, weil die Programmierer mit C++ überfordert waren und statt dessen auf C gesetzt haben.

    Lennard_ schrieb:

    - In den high-level Anwendungsgebieten gibt es bequemere Alternativen mit Sprachen wie C# und Java.

    Das trifft nur auf Programme zu bei denen Performance nicht am höchsten priorisiert ist oder andere Resourcen knapp sind. Speicher kritische Programme sind ebenfalls nicht gut in Sprachen mit GC zu implementieren.

    Lennard_ schrieb:

    Was gibt es für Awendungsgebiete, wo C++ heute noch Sinn macht und was würdet ihr den Leuten raten, wenn sie fragen, ob sie C++ lernen bzw. nutzen sollen?

    SciTech (Number Crunching etc. da kommt im Grunde nur Fortran und C++ in Frage), Embedded, Desktop Anwendungen mit hohen Resourcen Anforderungen.



  • ~john schrieb:

    Leider, das merkt man dem Linux Kernel immer wieder an. Vieles ist einfach schlecht umgesetzt und unnötig kompliziert, weil die Programmierer mit C++ überfordert waren und statt dessen auf C gesetzt haben.

    du kannst jeder Zeit einen Linux-Fork machen, der den Quelltext von C nach C++ portiert und dann kannst du damit den Linux Entwicklern zeigen, wie man es 'richtig' machen muss.



  • supertux schrieb:

    du kannst jeder Zeit einen Linux-Fork machen,

    In grauer Theorie kann man so etwas machen, in der Realität scheitert das effektiv daran, daß ein solcher Kernel nicht mehr Kompatibel zu Linux wäre. Und Kernel für POSIX OS gibt es schon verschiedene.



  • Lennard_ schrieb:

    Was gibt es für Awendungsgebiete, wo C++ heute noch Sinn macht und was würdet ihr den Leuten raten, wenn sie fragen, ob sie C++ lernen bzw. nutzen sollen? Ich sehe heutzutage keinen Grund für C++ mehr, aber ich bin mir auch nicht so 100%-ig sicher.

    Es gibt keinen Grund mehr, C++ zu lernen. Wie ich in einem anderen Thread bereits erwäht habe, wird C++ nur noch in Nischenanwendungen wie MS-Office, Windows, Google, Firefox, IE, OpenOffice, KDE, Photoshop, Java, Adobe Reader oder World of Warcraft verwendet (ich habe noch ein paar unwichtige Programme ergänzt). Heutzutage sind die Rechner einfach so schnell und haben so viel Arbeitsspeicher, dass man die mit C++ nicht so leicht voll stopfen kann, dass die Anwendung ins Stottern gerät. Daher nimmt man lieber Java oder C# oder so etwas. Sonst läuft der Rechner einfach zu flüssig und es werden keine neuen PCs mehr verkauft.

    Auch hat C++ den Nachteil, dass es Standardisiert ist. Wenn Du heute professionell Programme in C++ entwickelst, läufst Du Gefahr, dass die Programme in 5 Jahren immer noch ohne deprecated-Warnungen übersetzbar sind und Du dadurch arbeitslos wirst. Besser Du nimmst eine Sprache eines einzelnen Herstellers, der alle paar Jahre Features durch andere ersetzt, so dass Du als Programmierer wieder einen Auftrag bekommst um diesen Features nachzuprogrammieren.

    Java hat auch schönere Features. Beispielsweise wird der Destruktor einer Java-Klasse möglicherweise irgendwann aufgerufen. Oder vielleicht auch gar nicht. Das ist doch viel spannender als in C++, wo es genau eine Stelle gibt, wo aufgeräumt wird. Und wenn Du geringe Latenz haben willst, ist es doch eine interessante Herausforderung, die Java-VM dazu zu überreden, seinen GC möglichst nicht dann laufen zu lassen, wenn Dein Programm eigentlich die CPU braucht.

    Bei C# wiederum bleibt Dir erspart, darüber nachzudenken, welches Betriebssystem Du verwenden willst. Auch in Zukunft wird es Windows sein (na klar gibt es Mono - zumindest so lange es nicht zu erfolgreich ist und MS es weg klagt).



  • supertux schrieb:

    ~john schrieb:

    Leider, das merkt man dem Linux Kernel immer wieder an. Vieles ist einfach schlecht umgesetzt und unnötig kompliziert, weil die Programmierer mit C++ überfordert waren und statt dessen auf C gesetzt haben.

    du kannst jeder Zeit einen Linux-Fork machen, der den Quelltext von C nach C++ portiert und dann kannst du damit den Linux Entwicklern zeigen, wie man es 'richtig' machen muss.

    Das kann er natürlich nicht. Labern kann er, aber das nicht.



  • Es gibt keinen Grund mehr Java zu lernen. Java wird nur noch in Nischenanwendungen http://java.sun.com/products/jfc/tsc/sightings/ (und anderer unwichtiger Software von z.B. Oracle und IBM) verwendet. Heutige Rechner sind so langsam und haben so wenig Speicher, dass der minimale Overhead von Java für jegliche Art von Programmen schon viel zu viel ist. Spiele in Java kann man sich z.B. gar nicht vorstellen.

    Auch hat Java den Nachteil, dass es überall gleich läuft. Wenn du heute professionell Programme in Java auf einem bestimmten System entwickelst, läufst du Gefahr, dass die Programme auf anderen Betriebsystemen oder Hardwardware ohne probleme laufen und du dadurch arbeitslos wirst, da du diese nicht auf andere Systeme anpassen musst. Besser Du nimmst eine Sprache die zwar für alle Systeme standardisiert ist, aber trotzdem überall anders ist, sobald du über diesen Standard hinaus willst.

    C++ hat auch schönere Features. Beispielsweise kannst du genau bestimmen wann reservierter Speicher wieder freigegeben wird. Oder du gibst diesen Speicher vielleicht auch gar nicht frei. Das ist doch viel spannender als in Java, wo es automatisch für dich freigegeben wird. Und wenn Du geringe Latenz haben willst, ist es doch eine interessante Herausforderung, guten C++ Code zu schreiben, anstatt sich darauf zu verlassen, dass die Java-VM mit dem integrierten JIT-Compiler deinen code automatisch optimiert.



  • Es ist sinnvoll, C++ "anzufangen", wenn es für Deine Zwecke geeignet ist. Der Zweck heiligt die Mittel heißt es ja so schön.



  • C++ ist eine aussterbende Sprache, mit jeder neuen Prozessor generation ein Stück mehr.



  • C++ ftw! 👍



  • wtf c++?



  • Ich habe Herrn Prof. Dankert vor einiger Zeit um eine erneute Aktualisierung seines wahrhaft großartigen Statements für C++ gebeten. Er hat es bisher nicht ergänzt, komplett verändert oder zurückgezogen. Offensichtlich hat er keine aktualisierte Empfehlung zu diesem Thema:
    http://www.rzbt.haw-hamburg.de/dankert/ccppjava.html/

    Hieran erkennt man, dass die Landschaft komplex geworden ist und sich so geändert hat, dass C++ inzwischen ernsthafte Konkurrenz erhalten hat, nicht zuletzt durch C# (Java-Clon von MS).

    Im Lowlevel-Bereich beherrscht die geniale Sprache C noch das Feld, was die Mächtigkeit und Klarheit dieser einfachen Sprache unterstreicht.



  • Tja - immer noch kaum Lästereien 😉

    Ich habe mal mit eingetippten Hexdumps auf einem 6510/6502 angefangen, dann
    Assembler und dann, über dBASE und (gezwungenermaßen) etwas Basic bei C gelandet.
    Bis jetzt habe ich da keine Einschränkungen bemerkt die es notwendig machen
    würden auf etwas anderes umzusteigen.

    Als Ergänzung würde mich das interessieren. Für einen Kunden habe ich mal ein
    kleines ava-Programm gebaut (er hatte es nicht hinbekommen), etwas PHP und C++
    auch mal herumgespielt. Überzeugt hat mich eigentlich keins so weit, darauf
    umzusteigen.

    Mal sehen was sich da noch so tut.



  • tntnet schrieb:

    Java hat auch schönere Features. Beispielsweise wird der Destruktor einer Java-Klasse möglicherweise irgendwann aufgerufen.

    welcher destruktor? sowas gibts nicht in Java.
    🙂



  • +fricky schrieb:

    tntnet schrieb:

    Java hat auch schönere Features. Beispielsweise wird der Destruktor einer Java-Klasse möglicherweise irgendwann aufgerufen.

    welcher destruktor? sowas gibts nicht in Java.
    🙂

    Und wie willst du dann wissen, ob er mal aufgerufen werden könnte?



  • ...dass der minimale Overhead von Java...

    haha 😃 rofl. made my day.

    unser schulrechner ( = langsam) packt ein 3D spiel (unreal 2001) mit 30 FPS,
    aber den roboter in der javavm kann er mit nur 10-fps von A nach B bewegen (2D)

    nein im erst. im vergleich performance ist C und C++ sehr weit oben.
    C++ hat den vorteil dass es objektorientiert ist und damit strukturierter
    als C ist (C ist auch schön).

    guckt euch ein modernes spiel an. kein minispiel auf einer webseite, sondern
    eins im laden. ich wette mich euch zu 99% sind die in C++ geschrieben, bei
    allen spielen auf meinem pc ist das so. kann jeder mit dem CFF explorer
    nachprüfen.



  • einfach irgentwer schrieb:

    ich wette mich euch zu 99% sind die in C++ geschrieben, bei
    allen spielen auf meinem pc ist das so.

    wie ging doch gleich der spruch mit den millionen fliegen, die sich nicht irren können? ne, im ernst, performancekritische teile so'nes spiels (grafikengine, usw.) kann man doch in C machen und alles andere in Java oder C# z.b.
    und dass rein interpretierende skriptsprachen wie z.b. LUA und Tcl in spielen eingesetzt werden, ist auch nix neues.
    🙂



  • tntnet schrieb:

    Auch hat C++ den Nachteil, dass es Standardisiert ist. Wenn Du heute professionell Programme in C++ entwickelst, läufst Du Gefahr, dass die Programme in 5 Jahren immer noch ohne deprecated-Warnungen übersetzbar sind

    die gefahr läuft man garantiert nicht 😉



  • +fricky schrieb:

    wie ging doch gleich der spruch mit den millionen fliegen, die sich nicht irren können? ne, im ernst, performancekritische teile so'nes spiels (grafikengine, usw.) kann man doch in C machen und alles andere in Java oder C# z.b.
    und dass rein interpretierende skriptsprachen wie z.b. LUA und Tcl in spielen eingesetzt werden, ist auch nix neues.
    🙂

    natürlich. immer zwischen den sprachen wechseln. main kann in jedes programm
    noch eine sprache oder script einfügen. das heißt nicht das ich sie benötige.
    lua fungiert als eben dieses script. man kann auch ein OS auf C-basis und mit
    java entwickeln.

    natürlich hat auch java seine daseinsberechtigung, aber die frage war ob es
    sinnvoll ist C++ zu lernen. das ist es definitiv.



  • damit etwas ersetzt werden kann muss erst einmal etwas besseres vorhanden sein.


Anmelden zum Antworten