Wie fange ich am besten an C++ zu lernen?



  • Starglider schrieb:

    Hey super zwei Einsteiger mit Webbackground. Dann viel Spaß bei der wohl anspruchsvollsten Sprache die ich bis jetzt gesehen habe.

    Was holten die Profis hier von dem Buch "Schrödinger lernt C++(jetzt auch mit C++14)" Das wirkt nicht ganz so trocken.

    schau mal in rubrik bücher 😉
    https://www.c-plusplus.net/forum/309734

    deseiteren würde ich dir dieses buch empfehlen:
    "Der C++ Programmierer. C++ lernen - Professionell anwenden" von Ulrich Breymann
    (ist vll nicht "locker" geschrieben dafür fachlich super!)

    dieses buch ist ganz gut für anfänger und später kannst du es als nachschlagewerk verwenden :), mach ich zumindest so :).

    lg



  • Danke für den Buchtipp. "Der C++ Programmierer" scheint dann wohl das beste für mich zu sein. Im Moment schnupper ich ein wenig in Rust rein, aber C++ steht weiterhin auf dem Plan.



  • zufallswert schrieb:

    auch nicht verkehrt wäre, erstmal C zu lernen.

    Das ist eine der schlimmsten Empfehlungen! Ich dachte, deine Spezies wäre ausgestorben. Leider ist es nicht der Fall.

    Die meisten die zuerst C lernen, haben den Umstieg auf C++ noch schwerer, weil sie dann C with Classes programmieren, und das ist nicht C++! C++ braucht eine ganz eigene Denkweise, bei der man am besten C aus seinem Gehirn ausradiert. Das C++ zu C kompatibel ist, war damals (1980er Jahre) nötig um die alten C-Programme leichter in die neu entstandene Sprache C++ zu migrieren. Aber heute ist das für neue Projekte absolut unnötig! Da fängt man gleich mit C++ an.

    Alleine durch die angewendeten C-Kenntnisse hat C++ so einen schlechten Ruf.



  • Und noch besser wäre es, wenn der C++-Standard die alten C-Konstrukte als "deprecated" versehen würde bzw. die Compiler einen "strict C++"-Modus (natürlich als Standard-Option!) anbieten würden, wo so Sachen wie C-Casts, diverse Zeigeroperationen (z.B. auch "array to pointer decay"), Aufrufe von C-Library-Funktionen (wie malloc, free, scanf, printf, ...) nicht erlaubt wären.
    Denn dann könnte man auch Anfänger leichter dazu kriegen, gleich die sinnvollen C++-Konstrukte zu benutzen (und dann würde hoffentlich kein C++-Buchautor mehr auf die Idee kommen mit C-Arrays und Zeigern in den ersten Kapiteln anzufangen).

    PS: @arcoth, @camper: was denken das ISO-Kommitee bzw. die Compiler-Hersteller darüber?



  • @Th69: bin zwar nicht der angesprochene, aber der Weg, der meines Wissens gegangen wird, ist z.B. erst einmal Tools zu entwickeln, die diese Core Guidelines erkennen bzw. umsetzen.

    Und da muss ich schon wieder mal clang-tidy erwähnen.

    Hier jetzt zu deinen angesprochenen Punkten:
    http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-no-malloc.html
    http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-pro-type-cstyle-cast.html
    http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-pro-bounds-array-to-pointer-decay.html



  • Artchi schrieb:

    zufallswert schrieb:

    auch nicht verkehrt wäre, erstmal C zu lernen.

    Die meisten die zuerst C lernen, haben den Umstieg auf C++ noch schwerer, weil sie dann C with Classes programmieren, und das ist nicht C++!

    Deshalb war meine Empfehlung ja, die Grundkonzepte von C und eine reine OOP-Sprache zu lernen. Um C++ wirklich zu verstehen, kommt man sowieso nicht drum herum, die Grundkonzepte von C zu verstehen. Oder möchte man wirklich verstehen, was ein "smart pointer" ist, ohne zu wissen, was ein "pointer" ist?



  • Na, um zu verstehen was ein Pointer ist, muss man dann aber vorher Assembler lernen. Und um Assembler zu verstehen, sollte man vorher Maschinencode lernen. Und dann bitte auch gleich Lochkarten oder gleich eine CPU bitte selber designen, damit man weiß, warum es Pointer und Register gibt. Danke!

    Nein! Man kann mit Smartpointer arbeiten, ohne den Low-Level-Kram vorher zu kennen. Aus dem einfachen Grund, weil man dann nicht verleitet wird, rohe Pointer einzusetzen. Was man nicht kennt, kann man nicht missbräuchlich einsetzen.

    Man sollte lernen, das C++ eine Hochsprache ist, die versucht sehr viel zu abstrahieren und den Programmierer von der Maschine fernzuhalten, wo es möglich ist. Wenn man an ein Limit stößt, kann man sich immer noch mit Low-Level-Kram auseinander setzen. Die meisten Entwickler werden das aber nicht brauchen.

    Ich kenne genug "Spezialisten" die vorgeben C++ zu programmieren, aber dann z.B. Polymorphie vermeiden. Diese Spezies sollte ausgerottet werden oder sie soll sich bitte nicht C++-Spezialisten nennen. Das sind die, die noch in der C-Zeitschleife hängen geblieben sind und sich nicht lösen können.

    C sollte man, wenn dann nach C++-Praxis lernen. Um am eigenen Leib zu erfahren, das C-Wissen absolut nichts in einem C++-Projekt zu suchen hat, weil es aus der IT-Steinzeit kommt und nur schlechtes C++-Design/-Denken fördert.

    Wer C programmieren will, soll das dann bitte mit C machen und nicht C++ infiltrieren und die unschuldigen C++-Anfänger nicht mit falschen Informationen manipulieren.



  • Was @Artchi schreibt, kann ich zustimmen.
    Ich benutze nur zwangsweise C++ (MFC), aber wenn ich ein reines API-Programm schreibe, verwende ich die Extension .c.
    Wenn man gefragt wird, sagt man eigentlich immer, daß man C++-Programme schreibt.
    Wenn man für Windows programmiert, hat man aber auch das Problem, daß das Konzept auf API-Ebene nicht objektorientiert ist, die reine API ist C, auch wenn die neueren APIs einen C++-Ansatz erkennen lassen (deshalb mag ich die auch nicht so sehr) 🙂
    Ich verwende C++ nur als "besseres" C und bin somit ein schlechter C++-Programmierer, das ist mir aber egal, solange die Programme das machen, was sie sollen. 😉



  • Hallo zusammen,

    habt ihr gute Empfehlungen für Online Kurse (so genannte MOOC) in denen der Einstieg und die Grundkentnisse von C++ vermittelt werden? Gerne auch auf Englisch.



  • Alle Grundkonzepte die man braucht werden auch in C++ Büchern beschrieben. Selbst rohe Zeiger werden dort normalerweise berücksichtigt. C++ benutzt zwar Elemente aus C, aber man muss definitiv kein C lernen - ich halte es sogar (wie auch von andern geschrieben) für kontraproduktiv.



  • Max314 schrieb:

    habt ihr gute Empfehlungen für Online Kurse (so genannte MOOC) in denen der Einstieg und die Grundkentnisse von C++ vermittelt werden? Gerne auch auf Englisch.

    Ich habe noch nicht viele kostenlose Onlinekurse gefunden (Egal für welche Sprache), die etwas taugen. Ich kann aber wenig zu C++ sagen, da ich in den letzten Jahren eher nach anderen Bereichen gesucht habe. Wo ich vereinzelt gute Kurse gefunden habe (über die C++ Kurse kann ich nichts sagen) waren u.a. in der Microsoft Virtual Academy (MVA) und Channel 9, hier ein Filter für C++ für Channel 9 und die Sprachen Deutsch/Englisch.

    Bisher die besten Erfahrungen bei Onlinekursen habe ich persönlich mit pluralsight gemacht, das ist aber kostenpflichtig.



  • Artchi schrieb:

    Man sollte lernen, das C++ eine Hochsprache ist, die versucht sehr viel zu abstrahieren und den Programmierer von der Maschine fernzuhalten, wo es möglich ist.

    C++ ist eine Sprache, die genau das nicht macht: Den Programmierer von der Maschine fernzuhalten. C++ ist, wenn man will, zero overhead; keine virtuelle Maschine, keine GC.

    Andererseits erlaubt C++ eine breite Spanne von Abstraktionsniveaus, bis hin zu Template-Meta- und funktionaler Programmierung. Aber nur, wenn man ausdrücklich will; und nur dann muß man dafür mit Performance und Speicher zahlen.



  • Ich habe die App SoloLearn und ein Buch benutzt.


Anmelden zum Antworten