Vernünftiges C++ lernen



  • Du musst C++ anwenden. Ganz einfach 😉

    Mir selbst geht es häufig so, dass ich etwas interessantes über C++ lese, und dann versuche, es anzuwenden. Anfangs übertreibe ich es häufig ein wenig und setze das neue Feature viel zu viel ein, aber mit der Zeit merke ich, wann das Feature wirklich hilfreich ist.



  • daddy_felix hat es auf den Punkt gebracht. Programmieren lernst du nur durch Programmieren. Es gibt da aber auch zwei Arten von Menschen der Theoretiker der dir den Standard runter beten kann, aber so gut wie keine Projekte je abgeschlossenen hat und den Praktiker der einfach macht ohne groß drüber nachzudenken.

    Was willst du? Perfektes C++ lernen, oder möglichst viele Projekte fertig bekommen? Dein Programm ist dann perfekt wenn es das machst was du willst. Wie du es gemacht hast ist total egal. Also ob du C mit C++ mischst, goto verwendest oder sonst was in Foren verschrienes machst. Solange dein Programm so funktioniert wie du es dir erhoffst hast, hast du zu 100% alles richtig gemacht.

    Und merke dir, die besten Programmierer hängen nicht den ganzen Tag in Foren um, sondern programmieren.



  • du stichst in ein wespennest.
    c++ gehört zu den sprachen, in denen man objektorientiert programmieren vermag.
    zum design objektorientierter programme gibt es so viel zu sagen... du könntest geschichtlich rangehen, von smalltalk angefangen..., und dir dann den sinn erschließen und eine idee entwickeln, wie "gutes design" aussehen könnte, du könntest dann die probleme existierender projekte anschauen, und daraufhin ein wenig über entwurfsmuster und frameworks lesen, und natürlich ansätze erforschen, die versuchen, garnicht erst in schlecht wartbaren code abzurutschen, ... und so vieles mehr, und dann kommen noch die anderen paradigmen dazu, die mit einfließen, um die schwerfälligkeit der objektorientierung abzufedern.

    nur eine miniauswahl an möglichkeiten.

    und hier auch nur eine miniauswahl an vielleicht interessanten leuten dazu:

    Robert C. Martin: Clean Code. Refactoring, Patterns, Testen und Techniken für sauberen Code
    Kent Beck: Extreme Programming
    Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts : Refactoring: Improving the Design of Existing Code
    Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns

    fang an.



  • Schwergewicht schrieb:

    Es gibt da aber auch zwei Arten von Menschen der Theoretiker der dir den Standard runter beten kann, aber so gut wie keine Projekte je abgeschlossenen hat und den Praktiker der einfach macht ohne groß drüber nachzudenken.

    Es gibt nicht nur zwei Arten, im Idealfall liegt es irgendwo zwischen den Extremen. Code der gelinde gesagt nur "runtergerotzt" wird, habe ich auch in einigen Projekten erlebt. Die Fehlerquote lag aber in diesen Projekten zumeist wesentlich höher, als in Projekten die sich zumindest im Vorfeld grob Gedanken gemacht haben, und die das Rad nicht zweimal erfinden.

    Man sollte sich schon mit seinen Werkzeugen auskennen, das heißt auch den Standard im groben kennen. Das heißt nicht das man die Regeln alle im Detail lernen müsste, wohl aber doch wissen was z.B. die Standardbibliothek im großen und ganzen bereitstellt.

    Schwergewicht schrieb:

    Was willst du? Perfektes C++ lernen, oder möglichst viele Projekte fertig bekommen?

    Nach meiner Berufserfahrung wird man nur mit einem Mittelweg auf die Dauer zufrieden werden. Ich weiß nicht wie es anderen geht, aber in meiner letzten Firma lastete einerseits großer Druck auf einen, zum anderen waren die Kunden schlicht und ergreifend massiv unzufrieden. Das wird sich sicherlich nicht in den 5 Jahren, die ich inzwischen nicht mehr dort bin geändert haben.

    Der Programmierchef dort war einer der letzten Sorte; er mag eine Anforderung die ich in zwei Wochen umgesetzt habe in 2-3 Tagen fertig gehabt haben, wenn dann aber noch die Rücklaufquote dazu kam, waren es bei mir etwa 2-3 bei ihm 5-6 Wochen Entwicklungszeit. Und ich kann dir eines versichern, mal einen Fehler zu finden mag Kunden nicht verärgern, aber ewig zu warten bis ein Programm wirklich rund läuft ist der Anfang vom Ende.

    Schwergewicht schrieb:

    Dein Programm ist dann perfekt wenn es das machst was du willst. Wie du es gemacht hast ist total egal. Also ob du C mit C++ mischst, goto verwendest oder sonst was in Foren verschrienes machst.

    Ich hoffe das du nur kurzlebige Projekte umsetzt, in der "Produktentwicklung" würde ich jemanden der so arbeitet vor die Tür setzen. Ein Programm das langlebig entwickelt wird, muss auch lange gewartet werden. Niemand verlangt eine absolute Perfektion, der von dir beschriebene Weg ist aber mindestens genauso schlecht.

    Schwergewicht schrieb:

    Und merke dir, die besten Programmierer hängen nicht den ganzen Tag in Foren um, sondern programmieren.

    Auch die besten Programmierer brauchen eine kurze Auszeit.



  • asc schrieb:

    ...
    Auch die besten Programmierer brauchen eine kurze Auszeit.

    +1 👍



  • @asc: Alles soweit richtig, aber wenn ich danach gehandelt hätte, dann hätte ich nie meine ersten Projekte fertig bekommen und eine Menge dabei gelernt. Mein erstes kommerzielles Produkt wurde für mehrer tausend Eur verkauf und es war der schrecklichste prozeduralen Code, den ich heute je gesehen habe. Er läuft übrigens nach 12 Jahren heute immer noch.

    Es gibt keinen Shortcut mit dem du gut durchdachten C++-Code für deine ersten Projekte entwickelst. Du musst die ersten Jahren "schlechten" Code schreiben, dass kann man nicht abkürzen. Das ist der Prozess des Lernens und lernen tut man nur durch Fehler machen.

    Zumal nicht jedes Projekt ist ein Teamprojekt, was über Jahre von mehreren Personen gewartet werden muss. Und wenn es ein Teamprojekt ist, dann geben die meisten Chefs gar nicht die Zeit, um da ein schönes OOP-Design, eine tolle Doku, oder einen schönen Code zu produzieren, weil sie ganz einfach nicht das Geld dafür haben oder es nicht ausgeben wollen.

    "Praxis ohne Theorie leistet immer noch mehr als Theorie ohne Praxis."



  • Nova900 schrieb:

    Daher suche ich jetzt nach Möglichkeiten, mir diese Erweiterungen beizubringen. Bisher habe ich mir C++ selber mit irgendwelchen Tutorien beigebracht. Diese sind zum Verständnis der Grundlagen vielleicht geeignet, aber nicht für das "große Ganze". Gibt es Empfehlungen, wie man eben diese Probleme lösen kann?
    Gruß, Nova900

    In der Regel sind die wirklichen guten Programmierer die, die sagen wir mal, 20 Jahre Berufserfahrung haben.

    Daß Du auf dem Weg dahin viel programmieren mußt, ist ja schon gesagt worden.
    Das ganze nützt Dir aber nichts, wenn Du nicht weißt, was Du falsch machst.
    Such Dir einen Experten, der von Zeit zu Zeit einen Blick auf Deine Programme wirft, und Dir Tips für Verbesserungen geben kann. Hier im Forum z.B. sind einige wirklich sehr gute Programmierer.
    Ein weitere Möglichkeit wäre, irgendwann selber c++ zu lehren, dadurch muß man sich automatisch sehr intensiv mit der Materie auseinandersetzen, so daß man selber auch noch besser wird.



  • Die meisten haben es ja schon alles gesagt.

    Im Grunde hilft nur programmieren, lesen und Fragen an andere Programmierer stellen.

    Ich lese viel von Scott Meyers gerade ueber STL und Effective C++ und es sind wirklich viele sehr nette Sachen dabei die das Wissen noch vertiefen.

    Ich kann dir raten fang erstmal klein an und deine Projekte sollten auch erstmal klein sein, damit du sie auch wirklich fertig machst.

    Zu erst schreibe ein paar Konsolenanwendungen, danach schreibst du ein richtiges "modernes" Programm mit Fenster.

    Allein der Uebergang von Konsolenprogrammen auf "Fenster" basierten Programmen war und ist fuer mich noch eine enorme Herausforderung.

    Ich persoenlich beschaeftige mich momentan viel mit Nativer WIN32-API.

    Im Grunde gibt es drei wichtige Dinge
    - Am Anfang erstmal kleine Programme um sie zu Ende zu machen
    - Sprung von Konsole auf -> Fenster Programme "ueberstehen"
    - viel Lesen
    - viel Fragen
    - und nie Glauben du weisst jetzt alles



  • Programmieren lernst du nur durch Programmieren.

    So absolut gesehen muss ich diese Aussage mittlerweile einfach als falsch klassifizieren.

    Demnach wäre Bücherlesen ja ein Fehler. Wie von asc beschrieben ist der Mittelweg korrekt.

    Es gibt viele Wege seinen Stil zu verbessern, ohne sofort zu programmieren:
    - Fremde Projekte anschauen und verstehen
    - Bücher lesen
    - Blogs von guten Programmierern lesen
    - Beiträge in Foren lesen, mitdiskutieren

    Natürlich muss man das theoretisch Gelernte dann auch wieder in der Praxis anwenden. Man braucht aber im Endeffekt beides, die Mischung macht's.



  • Das sind alles schon mal interessante Meinungen. Vielen Dank für die ganzen Antworten. Falls ihr noch etwas sagen möchtet, könnt ihr das gerne machen, ich werde mir alles genau durchlesen. 🙂



  • Man könnte Learn from the Best praktizieren, also bei besseren Programmieren (in deinem Genre) abgucken. Von vielen hervorragenden Programmieren gibt es Programme mit Sourcecodes im Netz. Mehr Praxis hilft auf jeden Fall, d.h. z.B. ein Praktikum bei einem Unternehmen, oder mitmachen, bei Online-Projekten mit C++, da gibt es viele Sachen und du kannst mit anderen über deinen Code diskutieren, oder direkt von erfahreneren Programmieren im Team lernen, schon allein die notwendigen Standardisierungen dürfen ein wenig professionellen Schliff vermitteln. Außerdem findest du vielleicht ein gutes Vorbild. Was würde dich interessieren? Siehst du eine gute (realistische) Herausforderung?

    Ziemlich viele gute (theoretische) Hinweise gibt bei http://www.joelonsoftware.com/ wie http://www.joelonsoftware.com/articles/fog0000000023.html

    Bei deinen Programmen selbst kannst du versuchen, mehrere Versionen zu erstellen, schnell erstellt, extrem selbsterklärend oder extrem schnell performend usw. und außerdem ein paar Langzeitprojekte warmhalten, an denen du immer mal ein wenig herumfeilen oder verschlimmbessern kannst, welche dir letzlich auch zu Überprüfung deiner Weiterentwicklung dienen.

    Oder versuche ein paar deiner Programme in andere Programmiersprachen zu übesetzen (Z.B. Java oder Lisp) oder/und an ortsnahe Unternehmen zu verkaufen.



  • Eisflamme schrieb:

    Programmieren lernst du nur durch Programmieren.

    So absolut gesehen muss ich diese Aussage mittlerweile einfach als falsch klassifizieren.

    Demnach wäre Bücherlesen ja ein Fehler. Wie von asc beschrieben ist der Mittelweg korrekt.

    Es gibt viele Wege seinen Stil zu verbessern, ohne sofort zu programmieren:
    - Fremde Projekte anschauen und verstehen
    - Bücher lesen
    - Blogs von guten Programmierern lesen
    - Beiträge in Foren lesen, mitdiskutieren

    Natürlich muss man das theoretisch Gelernte dann auch wieder in der Praxis anwenden. Man braucht aber im Endeffekt beides, die Mischung macht's.

    Klar sollte man mit dem Lesen entsprechender qualifizierte Texte anfangen, aber dann auch ganz schnell mit den eigenen Sachen beginnen. Nur durch das Lesen deiner genannten Quellen, lernst du so gut wie gar nix. Das Wissen muss gefestigt werden und zwar durch selber machen. Ich habe damals vier Video2Brain gehabt und alle Beispiele schön mitgemacht, ein paar Monate später sollte ich in der einen Richtung was machen und musste fast bei Null anfangen. Das wäre mir nicht passiert, wenn ich gleich eigene Projekte gemacht hätte.

    Ich korrigiere aber meinen Satz gerne: Programmieren lernt man erst richtig wenn man was wirklich selbst programmiert.

    1. Text lesen
    2. Was selbst machen
    3. Bei Fehler wieder lesen und dann zu 2
    4. läuft alles dann zu 1

    Das Problem bei zu viel Theorie ist, dass du denkst es verstanden zu haben. Es sich dann aber in der Praxis das Gegenteil zeigt und du viel Zeit verlierst weil du nicht schon früher mit der Praxis angefangen hast.

    Das sollte schon alles Hand in Hand gehen, für mich sollte aber 80% Praxis und 20% Theorie sein. Es gibt nix besseres bei Programmieren als machen...machen...machen

    Die Frage ist nicht ob du Fehler in deinem Code hast, sondern wie viele Fehler es sind. Hier gibt es keinen Einzigen der fehlerfreien C++-Code schreiben könnte.



  • Schwergewicht schrieb:

    ... Dein Programm ist dann perfekt wenn es das machst was du willst. Wie du es gemacht hast ist total egal. Also ob du C mit C++ mischst, goto verwendest oder sonst was in Foren verschrienes machst. Solange dein Programm so funktioniert wie du es dir erhoffst hast, hast du zu 100% alles richtig gemacht....

    Also, ich finde diese sensationelle Aussage hat eine Würdigung verdient. Dafür sollten wir zusammenlegen und eine Medaille organisieren.

    Schwergewicht schrieb:

    ... Ich habe damals vier Video2Brain gehabt und alle Beispiele schön mitgemacht, ein paar Monate später sollte ich in der einen Richtung was machen und musste fast bei Null anfangen....

    Das überrascht mich jetzt aber, denn schließlich hattest Du dir ja fast eine Woche Videomaterial angesehen. Das hätte Dich doch auf alles vorbereiten müssen.



  • Mitleid schrieb:

    Schwergewicht schrieb:

    ... Dein Programm ist dann perfekt wenn es das machst was du willst. Wie du es gemacht hast ist total egal. Also ob du C mit C++ mischst, goto verwendest oder sonst was in Foren verschrienes machst. Solange dein Programm so funktioniert wie du es dir erhoffst hast, hast du zu 100% alles richtig gemacht....

    Also, ich finde diese sensationelle Aussage hat eine Würdigung verdient. Dafür sollten wir zusammenlegen und eine Medaille organisieren.

    Tja, hört sich nicht so an, als ob er das beruflich machen würde. Er hat wohl noch nie was ändern oder erweitern müssen und hat noch nie in einem Team mit 50 anderen Entwicklern gearbeitet.


Anmelden zum Antworten