Wie lernt man gutes C++ zu schreiben?



  • GoodCpp schrieb:

    Ja und womit fängt man an?

    Du kannst dir ein C++ Buch kaufen, mit dem du dann lernst. 🙄
    Hier im Forum werden mehrere gute für den Anfang empfohlen.

    lg



    1. Buch lesen

    2. Praxis praxis praxis. Als ich angefangen habe hatte ich noch jede Menge Ideen und Motivation. Programmieren lernen ohne was programmieren zu wollen funktioniert nicht
      Außerdem sollte man sich dabei realistisch Verhalten (kein Anfänger schreibt gleich am Anfang eine Grafikengine oder sowas).

    3. Sicher kein Troll?



  • Danke erst einmal. Ich habe schon einiges über C++ gelesen. Auch darüber dass man es sehr sauber und "gut" programmieren kann, aber auch dass man da totalen Mist verzapfen kann. Wenn ich nach einem Buch wie "Eine Tour durch C++" vorgehe, ist also die Chance "gutes" C++ zu lernen hoch? Klar lern man im Edeffekt durch machen, machen, machen, aber woher weiß ich dass das was ich mache "gutes" C++ ist?



  • GoodCpp schrieb:

    Danke erst einmal. Ich habe schon einiges über C++ gelesen. Auch darüber dass man es sehr sauber und "gut" programmieren kann, aber auch dass man da totalen Mist verzapfen kann.

    Und viele programmieren sehr sauber aber noch mehr verzapfen totalen Mist. Die vielen, die unsauber rumstümpern, die haben mit einem Kackbuch angefangen und kein gutes je gesehen.

    GoodCpp schrieb:

    Wenn ich nach einem Buch wie "Eine Tour durch C++" vorgehe, ist also die Chance "gutes" C++ zu lernen hoch?

    Sie ist gleich Null.
    Wirst ja auch nicht durch einem geführten Spaziergang durch den Wald zu einem Förster.
    Das Buch schützt dich nicht davor, Username von string erben lassen zu wollen

    GoodCpp schrieb:

    Klar lern man im Edeffekt durch machen, machen, machen, aber woher weiß ich dass das was ich mache "gutes" C++ ist?

    Das steht in guten C++-Büchern natürlich.

    Zu dem Buch: Struppi hat einen sehr guten Ruf (aber als gnadenloser C++-Auskenner und Stratege, nicht als Didakt). Der Hanser-Verlag hat keinen schlechten Ruf (aber dann bleib doch doch bei Hanser und nimm den Breymann). Wobei, wenn ich mir 3446420215 ansehe, dann weiß ich wieder, weshalb Hanser keinen guten Ruf hat.

    https://www.c-plusplus.net/forum/251551-full



  • Danke für deine ausführliche Antwort. Eins ist mir dabei aber nicht klar. Ich kann also durch das Buch "Eine Tour durch C++" nicht gutes C++ lernen. Du empfiehlst aber ein Buch von Stuppi zum Lernen von gutem C++. Das Buch "Eine Tour durch C++" ist aber auch von Struppi und stellt einen erweiterten Auszug aus seinem Standardwerk dar. Mit dem einem Buch von Stuppi lerne ich also gut und mit dem anderen weniger gut??? Könntest du bitte meinen Knoten im Kopf in dem Bezug lösen?



  • Gutes C++ lernst du, in dem du regelmäßig in Foren liest, was schlechtes C++ ist. :schland:



  • GoodCpp schrieb:

    Danke für deine ausführliche Antwort. Eins ist mir dabei aber nicht klar. Ich kann also durch das Buch "Eine Tour durch C++" nicht gutes C++ lernen. Du empfiehlst aber ein Buch von Stuppi zum Lernen von gutem C++. Das Buch "Eine Tour durch C++" ist aber auch von Struppi und stellt einen erweiterten Auszug aus seinem Standardwerk dar. Mit dem einem Buch von Stuppi lerne ich also gut und mit dem anderen weniger gut??? Könntest du bitte meinen Knoten im Kopf in dem Bezug lösen?

    Gutes Deutsch lernst Du nicht aus einem Wörterbuch. Da kannste nur die Wörter lernen. Aber hast dann doch noch keine Ahnung, wie Du Sätze baust und gar keine Ahnung, wie Du Bedeutung in die Sätze legst. Und bist extrem weit weg davon, einen Schimmer einer Ahnung davon zu haben, was gutes Deutsch ist.



  • Ok, das wäre noch eine Quelle des guten Lernens. ABER, es wurde auch gesagt das einige C++ gut können und viele eben nicht. Nun wird sich dieses Verhältnis auch sicherlich auf die Forenmitglieder übertragen lassen. Woran erkenne ich nun wer hier Ahnung hat und wer nicht?

    Gibt es nicht irgendeinen roten Faden der mich zu gutem C++ führt? Wenn es den nicht gibt, wie soll dann der Nachwuchs gutes C++ lernen?



  • Gutes Deutsch kann man schon aus einem Buch lernen, denke ich. Es gibt ja nicht nur Wörterbücher, genau wie es bei C++ sicherlich nicht nur Referenzen der Sprache gibt. Es muss doch auch irgendwo niedergeschrieben sein, was ich mit den Möglichkeiten von C++ anfangen kann und wie ich es so nutze das es "guter" C++-Code wird.



  • GoodCpp schrieb:

    Du empfiehlst aber ein Buch von Stuppi zum Lernen von gutem C++.

    Welches Buch von Struppi empfehle ich zum Lernen von gutem C++?



  • GoodCpp schrieb:

    Nun wird sich dieses Verhältnis auch sicherlich auf die Forenmitglieder übertragen lassen. Woran erkenne ich nun wer hier Ahnung hat und wer nicht?

    Wie in der Politik. Machs wie alle und höre auf den, der am lautesten schreit, oder begutachte die öfters mitangegebenen Begründungen und stufe die Aktöre mit der Zeit ein.

    GoodCpp schrieb:

    Gibt es nicht irgendeinen roten Faden der mich zu gutem C++ führt? Wenn es den nicht gibt, wie soll dann der Nachwuchs gutes C++ lernen?

    Nee, einen Königsweg gibt es nur für die Geometrie.



  • Ich sagte "Gutes Deutsch lernt man nicht aus einem Wörterbuch" und Du widersprichst mit "Gutes Deutsch kann man schon aus einem Buch lernen".
    Da stimmt doch was nicht.

    "Eine Tour durch C++" ist dabei das Wörterbuch. Es ist kein Lehrbuch.



  • GoodCpp schrieb:

    Es muss doch auch irgendwo niedergeschrieben sein, was ich mit den Möglichkeiten von C++ anfangen kann und wie ich es so nutze das es "guter" C++-Code wird.

    Dazu schickte ich Dir den Link https://www.c-plusplus.net/forum/251551-full
    Bitte verfolge meine Links, dazu gebe ich sie an.



  • Ok danke, ich werde mir die Bücher besorgen.



  • Noch eine Frage an diejenigen die schon eine Weile auf dieser Reise sind. Wie lange braucht es im Durchschnitt um gutes C++ zu lernen?



  • GoodCpp schrieb:

    Noch eine Frage an diejenigen die schon eine Weile auf dieser Reise sind. Wie lange braucht es im Durchschnitt um gutes C++ zu lernen?

    Ein Leben lang.

    Nach ein paar Jahren bist du vielleicht kein Grünschnabel mehr ...



  • Ist das wirklich so heftig? Wenn dem so wäre, dürften nur extrem wenige gutes C++ beherrschen und das wäre ein Desaster für so ziemlich jedes C++-Projekt da draußen. Also jetzt mal im ernst. Wenn jemand schon programmieren gelernt hat, welche Zeit sollte er mindestens einplanen um guten C++ zu beherrschen?



  • GoodCpp schrieb:

    Ist das wirklich so heftig? Wenn dem so wäre, dürften nur extrem wenige gutes C++ beherrschen und das wäre ein Desaster für so ziemlich jedes C++-Projekt da draußen. Also jetzt mal im ernst. Wenn jemand schon programmieren gelernt hat, welche Zeit sollte er mindestens einplanen um guten C++ zu beherrschen?

    Mal meine Geschichte:

    Ich habe C gelernt. Heftig C gelernt. Die letzten 8 Jahre. C ist weniger komplex als C++, aber ein paar Sachen hast du in beiden Sprachen halt so drin.

    Ich finde noch heute Sachen in meinen Codes von vor 9 Monaten, wo ich mich frage, was zum Teufel ich mir dabei gedacht habe. Vielleicht bin ich in der Hinsicht aber auch nur Nazi.

    void foo()
    {
        if(bla)
        {
            /*Code*/
            /*Mehr Code*/
            /*Ganz viel Code*/
            /*Coooooooooode*/
        }
        else
        {
            return;
        }
    }
    

    Würde ich so einen Code bei einem Audit sehen, würde ich fragen, welcher Suffkopp das so geschrieben hat.

    void foo(void)
    {
        if(!bla)
            goto END;
    
        /*Code*/
        /*Mehr Code*/
        /*Ganz viel Code*/
        /*Coooooooooode*/
    
    END:
        return;
    }
    

    Warum das Label und das goto ? Weil die Erfahrung zeigt, dass man den Code irgendwann noch mal anfasst und dann Ressourcen reserviert. Aber aufgerufene Funktionen können fehlschlagen. Dann muss man die Ressourcen wieder freigeben. Im jeden Fehlercheck-Block wieder Code zu haben, der sich um das Freigeben von Ressourcen zu exakt diesem Punkt in der Ausführung kümmert, kann leicht 300 Zeilen ausmachen. Gute Programmierer schreiben den Code so hin, dass der kritische Pfad beieinander liegt, und dass es keine Redundanzen gibt. Oh, nicht im Kompiliat, sondern auf Quellcode-Ebene.

    Sie sagen dir, goto ist böse. Und das stimmt auch für einfache Schleifenkonstrukte. Aber lokal auf Funktionen begrenzt, um tatsächlich Code einzusparen, sind sie das nützlichste, was mir bisher unter die Finger gekommen ist. Jetzt kommt es aber: viele Programmierer denken darüber nicht nach. Ja klar, wenn man dir das einmal im Forum neutral erklärt, dann ergibt das natürlich Sinn, so viele Pfade wie möglich zusammenzufassen. Aber erklär das mal einem Programmierer, der neben dir sitzt, für LOCs bezahlt wird und für Bugs abgestraft. Den interessiert nur, ob der Code fehlerfrei ist. Ob er lesbar ist? Nö, dafür wird der Typ von extern geholt, der darf sich dann durch tausende LOCs wühlen.

    Wenn du ein lustiges Wochenende verbringen willst, schau dir einfach mal die Quellcodes von ein paar OSS C/C++-Projekten an. Muss nix großes wie PCSX2 sein (über die kann ich nur stänkern, bis die Schwarte kracht). Wie das überhaupt eingecheckt werden konnte, frage ich mich bis heute ... ach nee, tue ich nicht, ich weiß es ja. Stichwort Heartbleed. Da hat jemand, der keine Ahnung von Protokolldesign hatte, für seine Forschungsarbeit an einem Protokoll gearbeitet. Weiter ins Detail möchte ich nicht gehen, aber das eine: das hat er dann OpenSSL angeboten. Eine Stunde nach Mitternacht. Am Neujahrstag. Die Leute schauen sie das nicht wirklich an, das wird nur schnell-schnell eingepflegt.

    Fazit: wenn du wirklich gut in einer Sprache werden willst, rechne ungefähr so viel Zeit ein, wie du zum ordentlichen Lernen einer menschlichen Sprache verbringen würdest - auch wenn diese aufgrund der Ausspracheregeln, die dir beim Programmieren fehlen, einfacher ist.

    Und das sage ich dir, der C macht statt C++. C++ ist noch mal eine Ecke komplexer.



  • Au Backe, das klingt nach USA. Jeder kann eine scharfe Waffe(C++) tragen und wenn jeder sich an Regeln hält "kann" das auch gut gehen.

    Wie kann man es hinkriegen dass jeder in ein paar Monaten C++ so gut beherrscht, dass er keinen Bockmist baut? Kann nicht der Compiler einfach bestimmte Sachen nicht erlauben, die extrem gefährlich sind? Oder kann man nicht wie wohl bei Rust bestimmte Teile als unsafe bestimmen, damit man sich im Zweifelsfall nur durch diese Bereiche hangeln muss?

    Die neuen C++ Standards sollen ja viele Verbesserungen erfahren haben. Ich selbst kann das alles nicht beurteilen, sondern ich versuche nur meine Weg zu gutem C++ mit Hilfe des Forums hier abzustecken. Das scheint gar nicht so einfach zu sein. Klar könnte ich einfach einen andere Programmiersprache wählen, aber ich bin halt sehr an der Königsklasse interessiert. Die Sprache soll mich unterstützen und mich nicht aufhalten. Da C++ aber sooo viele Möglichkeiten bietet empfinde ich es als sehr schwer die für mich wirklich notwendigen Sachen raus zu filtern.



  • @dachschaden

    sorry aber das ist totaler Quark den du hier schreibst - deine "goto END" hilft dir nur dein nicht sauber in Funktionen zerlegten Code wartbar/überschaubar zu halten - und wenn viele andere in vielen Funktionen deinem Beispiel folgen ist das definitiv eine Wartungshölle - und das ist alles andere als OK

    und C++ ist nicht wirklich komplexer als C - ausser RAII (was hier den goto voellig unnlötig macht) muss man ja nicht komplett alles was eine Sprache bietet auch (aus)nutzen


Anmelden zum Antworten