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



  • Hallo zusammen und auch einen schönen 4. Advent 🙂

    Ich bin Neuling und bevor ich jetzt das Thema erstellen wollte, habe ich zuerst das Forum nach verwandten Themen durchsucht, ob evtl. schon jemand so eine Frage gestellt hatte. Bestimmt ist irgendwo ein Thread, der in der Masse Verschlungen ist und ich evtl. doch nicht gefunden habe.

    Nun ich möchte C++ lernen und habe auch schon damit angefangen zu lernen.

    Ich möchte mich später auch mit Microcontroller beschäftigen, um kleine Steuerungen zu programmieren. Jedoch möchte ich mich auch mit kleinen Anwendungen beschäftigen bzw. erstellen.

    Ich war bisher immer mit weborientierten Sprachen unterwegs wie PHP, deswegen habe ich C++ erstmal ausgewählt zu lernen und erkenne auch viele Prallelen zu PHP.

    Ich habe das Buch „Einführung in die Programmiersprache mit C++“ von Bjarne Stroustrup und habe komplett am Anfang gestartet und bin jetzt auch bisher auf Seite 109. In dem Buch wird auch mit C++ gestartet und später C behandelt.

    Nun meine Frage ist, ob es sinnvoller ist, zuerst C zu erlernen und dann C++ oder ob ich gleich bei C++ bleiben kann. Man sagt, dass C nicht so viele Ressourcen verwendet, wie C++ und dass C auch ausreichend bzw. besser ist für Microcontroller. In der Richtung habe ich evtl. einen Verständniskonflikt.

    Jedoch, dass ich PHP kann fällt mir auch C++ im Moment auch noch nicht schwer und würde auch gerne dabei bleiben. Habt ihr einen Rat oder Erfahrungen, mit denen ihr mir sagen könnt, dass es völlig ok ist oder ihr meint, dass es absolut unverzichtbar ist zuerst C zu lernen?

    Mir geht’s nur darum, um sicherzustellen, dass ich jetzt am Anfang den richtigen Weg einschlage und wünsche mir ein paar Infos von Experten 🙂

    Ich bedanke mich und wünsche euch noch schöne besinnliche Weihnachtsfeiertage.




  • Mod

    Nein.

    C ist überholt und sollte von niemandem mehr freiwillig gelernt werden.



  • Nathan schrieb:

    Mythos 1: https://isocpp.org/blog/2014/12/myths-1

    Frag Microsoft, was sie von Linux halten. http://xaharts.org/funny/i/Microsoft_Linux_ad.jpg.
    Nur weil das auf isocpp.org steht, heisst das noch lange nicht, dass das glaubwürdig ist.

    Arcoth schrieb:

    C ist überholt und sollte von niemandem mehr freiwillig gelernt werden.

    lol.
    Es gibt durchaus sinnvolle Anwendungen für C.

    Wenn dein Ziel Mikrocontrollerprogrammierung ist, dann fang mit C an. Als Beispiel nehme den Code von isocpp:

    string compose(const string& name, const string& domain)
    {
        return name+'@'+domain;
    }
    const string addr = compose("gre","research.att.com");
    

    Es gibt hier 3! dynamische Speicherallokationen. Es ist für den Anfänger völlig unklar, wo.

    Man vergleiche das mit dem (im Gegensatz zu isocpp nicht absichtlich verhunzten) C-Code:

    int compose(char *dest, size_t n, const char *name, const char *domain)
    {
        return snprintf(dest, n, "%s@%s", name, domain);
    }
    
    char addr[255];
    compose(addr, sizeof addr, "gre", "research.att.com");
    

    Das sind 0 Speicherallokationen!

    Vielleicht ist dieses "subset of C++", von dem isocpp spricht einfacher zu lernen als C. Aber leider für Mikrocontroller völlig ungeeignet. Für Mikrocontroller musst du C sowieso lernen, auch wenn du C++ programmierst. Da du schon ein bisschen programmieren kannst würde ich auch gleich mit C anfangen.



  • Nathan schrieb:

    Mythos 1: https://isocpp.org/blog/2014/12/myths-1

    Danke, ich lese mir die Seite mal durch 🙂
    Zum Beispiel wird in vielen Unis auch mit C angefangen. Warum dann?
    Später lernen sie dann C++.

    Es wird begründet, dass C maschinennäher ist als C++.
    Ist das auch ein Mythos?


  • Mod

    Das sind 0 Speicherallokationen!

    Ja, voll krass! Wenn wir bloß den genau gleichen Code auch in C++ schreiben könnten... 🙄



  • biased schrieb:

    Vielleicht ist dieses "subset of C++", von dem isocpp spricht einfacher zu lernen als C. Aber leider für Mikrocontroller völlig ungeeignet. Für Mikrocontroller musst du C sowieso lernen, auch wenn du C++ programmierst. Da du schon ein bisschen programmieren kannst würde ich auch gleich mit C anfangen.

    Ok, danke für die Empfehlung. Ich werde mich mal nach einem guten Buch umsehen.
    Hier im Forum sind ja auch einige Infos zu Büchern habe ich gesehen.



  • Arcoth schrieb:

    Ja, voll krass! Wenn wir bloß den genau gleichen Code auch in C++ schreiben könnten... 🙄

    Problem ist wohl eher nicht dass man das nicht auch in C++ schreiben könnte sondern dass es für viele MC oft keine (oder nur sehr eingeschränkt funktionierende) C++ Compiler gibt.
    Dann bringt einem das auch nichts wenn es theoretisch auch in C++ geht 😉

    Zumindest muss ich deswegen (leider) auch teilweise C benutzen 👎


  • Mod

    Problem ist wohl eher nicht dass man das nicht auch in C++ schreiben könnte sondern dass es für viele MC oft keine (oder nur sehr eingeschränkt funktionierende) C++ Compiler gibt.

    Das war nicht das Argument das ich zitiert habe. Und es ist nicht überzeugend. Warum sollte man jemandem generell C empfehlen nur weil irgendwelche MCs keine C++ Cross-compiler haben?



  • Arcoth schrieb:

    Das war nicht das Argument das ich zitiert habe. Und es ist nicht überzeugend. Warum sollte man jemandem generell C empfehlen nur weil irgendwelche MCs keine C++ Cross-compiler haben?

    Ganz einfach, weil "C ist überholt" so allgemein mMn nicht stimmt. Der TE hat doch sogar explizit gesagt dass er auch MC programmieren will. Und auf vielen ist C eben noch nicht überholt sondern nach wie vor "state-of-the-art".

    Eine generelle Empfehlung kann man da doch eh nicht geben? 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)...



  • biased schrieb:

    Nathan schrieb:

    Mythos 1: https://isocpp.org/blog/2014/12/myths-1

    Frag Microsoft, was sie von Linux halten. http://xaharts.org/funny/i/Microsoft_Linux_ad.jpg.
    Nur weil das auf isocpp.org steht, heisst das noch lange nicht, dass das glaubwürdig ist.

    Nun, ich denke schon, dass die Meinung von isocpp zum Thema "sollte man C können bevor man C++ lernt?" schon richtig ist. Schließlich designen die die Sprache, wenn die es nicht wissen sollen, wer dann?

    Vielleicht ist dieses "subset of C++", von dem isocpp spricht einfacher zu lernen als C. Aber leider für Mikrocontroller völlig ungeeignet. Für Mikrocontroller musst du C sowieso lernen, auch wenn du C++ programmierst. Da du schon ein bisschen programmieren kannst würde ich auch gleich mit C anfangen.

    Es geht da nicht um C vs C++, sondern um "sollte man C können, bevor man C lernt".
    BTW: yeah, der zweite C vs C++ Flamewar innerhalb weniger Tage!



  • Arcoth schrieb:

    Das sind 0 Speicherallokationen!

    Ja, voll krass! Wenn wir bloß den genau gleichen Code auch in C++ schreiben könnten... 🙄

    Mir ging es nicht darum, dass das in C++ unmöglich ist, sondern um

    C is almost a subset of C++, but it is not the best subset to learn first because C lacks the notational support, the type safety, and the easier-to-use standard library offered by C++ to simplify simple tasks.

    Wenn du sowieso das C subset lernen musst (hier wegen μC), dann kannst du auch gleich damit anfangen, insbesondere wenn du schon Programmiererfahrung hast.



  • [quote="Arcoth"]

    Das war nicht das Argument das ich zitiert habe. Und es ist nicht überzeugend. Warum sollte man jemandem generell C empfehlen nur weil irgendwelche MCs keine C++ Cross-compiler haben?

    Also bis jetzt habe ich wieder was gelernt, dass es auch eher an den MC's liegt wegen den "C++ Cross-compiler". Bis jetzt bin ich unentschlossen.

    Mit welcher Sprache abgesehen von der Art des MC's erreicht man schneller sein Ziel (wenn man mal jetzt so fragen darf), um MC's zu programmieren?

    Ich denke, dass ich auch zuerst hardwarebasierend zum Programmieren mit MC's anfangen möchte.

    Ich habe das MS Visual Studio Express 2013 im Moment, weil auch im Buch damit gearbeitet wird (also mit der 2010ner). Wenn ich doch mit C starten möchte, muss ich mir ein anderen Tool holen, weil "ich glaube", dass die 2013ner Version kein C unterstützt (kann auch total falsch sein 😕 ).



  • Zuerst C und dann C++. Ich bin dann ganz schnell wieder zurück zu C, das ist aber bei jedem anders.



  • Arcoth schrieb:

    Nein.

    C ist überholt und sollte von niemandem mehr freiwillig gelernt werden.

    Ich denke, in einen C# Forum würde man dass gleiche über C++ sagen.



  • Nathan schrieb:

    BTW: yeah, der zweite C vs C++ Flamewar innerhalb weniger Tage!

    Jupp und die Moderation mischt wieder mit. 👎



  • Ja und für Mikrocontroller eh nur C, denn da haben die vielen Unzulänglichkeiten von C++ nichts verloren. In C++ passiert sehr viel hinter den Kulissen, wenn man das nicht alles weiß schreibt man nur Schrott. Nicht umsonst ist eines der grüßten Softwareprojekte weltweit in C geschrieben, nämlich Linux. Also lass dir keinen Bären aufbinden hier, dass C nicht mehr "in" ist oder sich für größere Sachen nicht eignet.



  • Du solltest auf keinen Fall zuerst C und dann C++ lernen, weil es dir dann warscheinlich viel schwerer fallen wird.
    Mir gings auch so, für meine Zwecke reicht C auf jeden Fall aus. Für einfache Anwendungsprogramme kannst du auch C verwenden und wenn du sowieso Mikrocontroller programmieren willst dann ist es sogar am besten.
    C ist maschinennäher als C++ und im Allgemeinen auch leichter zu erlernen.
    Die Aussgage, dass C seit C++ nichts mehr Wert ist, ist um es so auszudrücken "geistige Gülle".
    Es kommt darauf an was einem am besten liegt und objektorientiertes Programmieren ist kein muss.



  • Unreg schrieb:

    Nathan schrieb:

    BTW: yeah, der zweite C vs C++ Flamewar innerhalb weniger Tage!

    Jupp und die Moderation mischt wieder mit. 👎

    Mir geht es nicht darum ein Thema C vs. C++ zu eröffnen, sondern eher darum, mein Ziel mit meinen beschriebenen Kenntnissen zu PHP, den Einstieg zielsicherer und schneller zu gestalten.

    Und da mein Ziel anfangs ist, mit MC's zu arbeiten, nunja, Gründe wurden wegen der Compiler-Geschichte schon genannt. Also nicht falsch verstehen 😉



  • 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).


Anmelden zum Antworten