Was zuerst lernen? C++ oder doch zuerst C?



  • Ontopic: Ich habe auch zuerst C gelernt. Es hatte mir nicht geschadet (die Lehrbücher für C++ waren schlimmer), es hatte mir wohl gezeigt wie einfacher triviale Sachen in C++ doch sind (strings die dynamisch wachsen, wie geil ist das denn bitte!).
    Es hat mir allerdings auch nicht viel genützt. Man sagt, dass man mit C ein besseres Verständnis von dem Lowlevelzeugs bekommt. Das mag ja sein, nur in C++ kann man das genauso gut lernen.
    Imo ist es nicht nötig C zu können um C++ zu können, schadet aber auch nicht (sofern man sich dann auf C++ einlässt und nicht immer noch C in C++ programmiert).



  • Lieber ein guter C-Coder werden als ein mittelmäßiger C++-Coder.



  • Nun ich denke, dass ich doch zuerst wegen meiner Zielausrichtung C lernen werde.

    Ich habe mir gerade das Buch gekauft: "Einstieg in C: Für Programmiereinsteiger geeignet" (ISBN: 3836227932) Da in dem Buch auch Raspberry behandelt wird.

    Ich habe mir noch das Buch "C von A bis Z: Das umfassende Handbuch" (ISBN: 3836214113) angesehen, jedoch denke ich, dass ich für den Einstieg mit dem anderen Buch schneller erste Erfolge erzielen werde. Danach kann ich immer noch das Nachschlagewerk kaufen. Für den Anfang bin ich jedoch mit dem anderen Buch gut bedient.

    Ich hoffe, es war eine gute Wahl 😕



  • C von A bis Z hat leider keine so gute Kritik



  • Asyl-Dämon schrieb:

    C von A bis Z hat leider keine so gute Kritik

    Das lese ich jedoch auch bei dem Buch was ich gekauft habe. Irgendwo gibt‘s immer was auszusetzen. 🙂



  • Asyl-Dämon schrieb:

    C von A bis Z hat leider keine so gute Kritik

    Wieso "leider"? Es ist doch gut, wenn die Kritiken der Qualität entsprechen und keinen Schrott in den Himmel loben.



  • @Bashar Das "leider" war auf web-codex Aussage bezogen "Ich hoffe es war eine gute Wahl"


  • Mod

    Der TE hat doch sogar explizit gesagt dass er auch MC programmieren will.

    Huch, total überlesen. Ich dachte das Lernen hätte keinen speziellen Kontext.

    Kommt halt drauf an was man machen will und auf MC kommt man um C eben meistens nicht rum (nicht das ich das gut finden würde)...

    Ich habe einen MC in C++ programmiert, per AVR-GCC. Das lief auch völlig einwandfrei. Die API für die ganzen anderen Teile war aber leider in C.



  • Erst einmal Glückwunsch zu der Wahl der Programmiersprache C. Ich finde die auch um Längen einfacher zu handhaben als C++ und du kannst damit wirklich portable und auch alles programmieren. Vom kleinsten Mikrocontroller bis zum großen Betriebssystem, Compiler, VM oder was auch immer.

    Die Buchwahl ist wohl nicht so toll, aber dass musst du am besten selbst raus finden. Diese Max bei Amazon ist eventuell auch nur so ein armer kranker Geist und er würde auch gut hier in der Forum passen, denn viele Fehler die der ankreidet sind oft nur extreme Spezialfälle. Ein paar üble Fehler hat er aber auch in deinem Buch gefunden. Man macht z.B. kein fclose wenn fopen nicht geklappt hat.

    Ein richtig gutes Buch ist zum Beispiel C Primer Plus. Allerdings ist das in Englisch, denn Deutsche können keine Fachbücher schreiben und haben auch kaum wirklich Ahnung von Materie. Das ist auch ein Grund warum gute deutsche Bücher meist nur Übersetzungen von einem englischen Buch sind.



  • Asyl-Dämon schrieb:

    @Bashar Das "leider" war auf web-codex Aussage bezogen "Ich hoffe es war eine gute Wahl"

    Die Wahl war aber auf das andere Buch gefallen, er hat sich ja den Jürgen Wolf nur angesehen und nicht auch gekauft.



  • Nun, ich war mir nicht ganz sicher, was gut und was schlecht ist an Büchern und kann es auch noch nicht einschätzen. Ich habe aber Kontakt zu jemand und sie hat das Buch auch, dass ich gekauft habe (hatte ich erst danach erfahren).

    Ich denke, ich werde dann schon meine Erfahrungen sammeln. Das Buch "C von A bis Z" habe ich nicht gekauft - noch nicht. Es gibt zwar auch online allmögliche Nachschlagewerke, jedoch ziehe ich es trotzdem in Erwägung mir dieses danach zu zulegen, weil ich zum Lernen auch sehr gern Bücher verwende.

    Ein Buch reicht jedoch vorerst mal. Auch wenn diese Bücher diverse Fehler aufweisen, nun ja: "Perfect is better, but nobody is perfect"

    Mir geht’s erst einmal um die ersten Schritte, um danach, wenn ich das Buch durchstudiert habe, denke ich kann ich mir auch durch Meinungen von euch oder andere mir ein Bild für saubere Codeentwicklung einholen.

    Jedenfalls haben mir eure Impulse sehr geholfen und bedanke mich bei jedem für die Kommentare.

    Bis demnächst und nochmal schöne Weihnachtsfeiertage 🙂



  • @Bashar stimmt, hast recht



  • Bitte bitte auf keinen Fall etwas vom Herrn Wolf holen. Da sind nicht nur ein paar Fehler drin, der hat die gesamte Sprache nicht wirklich verstanden. Ich habe auch mit dem Buch angefangen und es ließt sich wunderbar und jeder der kein C-Profi ist wird dir auch sagen, dass das Buch toll ist. Nur eines lernst du damit nicht, richtiges C zu schreiben, ohne undefiniertes Verhalten und Speicherlecks + SegFaults.

    Das Bild hier beschreibt ganz gut warum das Buch so viele positive Bewertungen hat:
    http://xkcd.com/937/



  • Eventuell ist das hier etwas?: http://c.learncodethehardway.org/book/



  • Hm, ich drucke mir gerade das aus: 😉

    https://de.wikibooks.org/w/index.php?title=C-Programmierung:_Druckversion&printable=yes

    Sind bei mir 261 A4 Seiten 🙂



  • C++ ist die mächtigere Sprache, die einige Programmierprinzipien fördert, die mit C nicht oder nur umständlicher möglich sind oder die man dort eben zu Fuß machen muss.
    - Strengere Typprüfung (gibt mehr Sicherheit)
    - Konstruktoren / Destruktoren ermöglichen automatische Initialisierung von Datenstrukturen, Smart-Pointer (höhere Sicherheit) usw.
    - Templates
    - Referenzen als "sichere Pointer"
    - mächtige Algorithmen und Containerklassen in der STL (nie wieder Arrays... oder zumindest nicht mehr sehr oft)
    - Exceptions ermöglichen es, sehr elegant auf gewisse Fehler einzugehen.
    usw.

    Ich empfand C++ nach C nicht nur als eine andere Sprache, sondern als eine andere Ebene der Programmierung, deren Mächtigkeit aber auch erst nach einer Weile so richtig fühlbar wurde.

    Ich habe einigen "C++"-Code von Programmierern gesehen, die nie wirklich aus der C-Denke herausgekommen sind. Die haben zwar einige Befehle wie string oder so verwendet und haben alles irgendwie in "Klassen" gepackt, aber im Grunde war alles noch C-artig. Dass man jetzt eine Klassen-Methode statt einer Funktion hat, macht noch nichts besser. Die wirklichen Stärken von C++ sind da gar nicht genutzt worden.

    Umgekehrt vermute ich, wer C++ richtig lernt und begreift, wird auch einen anderes C schreiben, wenn er mal wieder zurück "muss". Ggf. fallen ihm dann die Einschränkungen mehr auf und er achtet besonders darauf. Wenn man das mit den Objekten nicht übertreibt (ab und zu sind freie Funktionen die bessere Wahl als das Alles-ist-ein-Objekt-Paradigma), denke ich mal, dass jemand, der gut C++ kann, auch gutes C hinkriegt.

    Du schreibst, Du willst den Raspberry programmieren? Das ist ein ausgewachsenens Linux-System, da empfinde ich C++ als die bequemere und sicherere Lösung. Du wirst Dir um Resourcen wenig Gedanken machen müssen, daher sind die vorgetragenen Argumente bezüglich Speicherallokation nicht so wichtig, wenn man es nicht übertreibt und mal hier und da ein paar strings oder vectoren erzeugt.

    Für die "nackten" Mikrocontroller wie die ATMELS (inkl. Arduino), PICs usw., ist aufgrund der begrenzten Resourcen in der Tat C der bessere Weg. Man hat dort im Allgemeinen auch weniger mit dynamisch generierten Objekten zu tun, die durch die Gegend geschmissen werden. Meist geht es um irgendwelche Sensoren oder Pins, die man einlesen und an anderen Pins wieder ausgeben will. Da reicht C.

    Du wirst eh mit beiden wenig Probleme haben: Wenn Du PHP kannst (benutzt Du dort Klassen und Objekte?), wirst Du zunächst auf die Unterschiede zu PHP schauen; die Grund-Konstrukte (if, while, for) usw. sind ja sowieso ähnlich.



  • Nathan schrieb:

    Wie heißt dieser Effekt, wenn man zu den "primitiveren" Sprachen hinunterblickt und sich denkt "Boah, wie scheiße lowlevel sind die denn? Denen fehlt ja x, y und z. Wie kann man ohne z leben?" und zu den "höheren" aufschaut und denkt "Was haben die denn für überflüssiger Scheiße, bitte? Wer braucht so einen Mist?! Der macht das nur komplex unnötig kompliziert und behindert das Entwicklen. Ich brauch so einen Schwachsinn nicht, funktioniert doch auch so!".
    Diesen Effekt sieht man hier schön. Ich denke wir alle sollten offener sein für beide Seiten, bereit sich auf Neues einzulernen.

    Schön gesagt! Nur ist es oft umgekehrt, dass in den "höheren" Sprachen Dinge nicht möglich sind, die bei den "tieferen" gehen.

    Unterschiedliche Sprachen haben unterschiedliche Abstraktionsniveaus. Wer "modernes" C++ lernt, lernt erst einmal mit Objekten herumzuhantieren ohne sich z.B. über den Speicher Gedanken zu machen. Wer Python lernt, braucht nicht einmal mehr den Unterschied zwischen Wert und Referenz zu kennen. Und wer C lernt, der macht all das mit, umgeht aber einige Probleme der "höheren Gesellschaft". C++ ist hier eine Ausnahme, denn die Abstraktion ist nicht vollkommen, da immer noch C möglich ist. Wer C++ lernt, lernt daher irgendwann auch einmal C, aber erst viel später.

    Leider scheinen das die wenigsten zu begreifen. Aus einem anderen Thread:

    <a href= schrieb:

    https://www.c-plusplus.net/forum/p2434269#2434269">
    Dank dir für den Tipp, aber ich will das Projekt erstmal ohne Vektoren schreiben.

    Wer C++ ohne die Abstraktion von RAII lernt, lernt C und die Komplexität von C++ gemeinsam (Ro3, etc.). Dann lieber gleich nur C.

    Für den Raspberry empfehle ich Python. Der Raspberry ist kein Mikrocontroller. Python ist ein bisschen ähnlich zu PHP und einfach zu debuggen.


  • Mod

    Ich hab hier mal ein bisschen aufgeräumt. Don't feed the troll? Das war ja wohl so etwas von offensichtlich, vom Nutzernamen und vom Inhalt her, und trotzdem springt ihr da drauf an?



  • Hallo allerseits und frohe Weihnachten. 🙂

    Nun, ich konnte anfangs schlecht unterscheiden welche Sprache nun besser ist für mein Ziel, ob C, C++.

    Jedoch habe mich entschlossen zuerst C zu erlernen.
    Ich habe auch schon das Buch erhalten und bereits angefangen.
    Ich denke jede Sprache hat seine Vor- und Nachteile und dass es auch auf den Nutzen ankommt, welche Sprache man wählt.

    Da ich mich beispielsweise mit Raspberry pi beschäftigen möchte, wenn ich soweit bin, dass ich Programme schreiben kann, die Steuerungen ausführen, wie beispielsweise einen Schrittmotor, denke ich, habe ich mit C trotzdem eine grundlegende Sprache gewählt, sodass ich auch andere MC’s programmieren kann.

    Ich habe gelesen dass der Raspberry pi kein MC ist. Ok, wenn das so ist, dann ist mein Verständnis in der Richtung noch ungenügend. Dennoch bin ich erst im Anfangsstadium und muss erst C lernen bevor ich überhaupt etwas mit Hardware anfangen kann. Ich habe aber auch gelesen, dass man den Raspberry pi mit C programmieren kann.

    Mag sein dass Python leichter ist, jedoch denke ich wenn ich C lerne, dass ich dann auch das Zusammenspiel zwischen Code und Hardware besser zu verstehen lerne. Ich bilde mir ein, dass C in der Richtung detaillierter vorgeht, als die anderen Sprachen, auch wenn C komplizierter sein sollte.

    Anfangs war ich der Meinung, dass ich C++ wegen der Syntax lernen soll, weil ich schon PHP kann, da diese Sprache mehr Parallelen besitzt, jedoch denke ich, dass es auch auf das Ziel ankommt.

    Ich hoffe, meine Ausführungen waren soweit richtig 😕 🙂


  • Mod

    Klingt nach einer vernünftig begründeten Wahl. Welches Buch hast du dir geholt? Doch hoffentlich nichts vom Galileoverlag?


Anmelden zum Antworten