Erst C oder gleich C++ ???



  • Ich würd lieber C lernen, ist viel mächtiger. Mit C++ bist du im Prinzip auf sehr high level Anwendungen beschränkt. Mit C kannst du die richtig wichtigen Dinge machen, die es überhaupt erst möglich machen, daß C++ Anwendungsentwickler ihre bunten Fenster- und Useranwendungen zusammenprogrammieren können.



  • branleb schrieb:

    Da C sich in einigen bereichen anderst verhält bzw. manche Dinge in C anderst angegangen werden müssen.
    Simpelstes Beispiel sind casts ( *_cast<type>() vs. (type) ) oder Generische Programmierung ( template vs. void* )

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    kernal atatürk schrieb:

    Ich würd lieber C lernen, ist viel mächtiger. Mit C++ bist du im Prinzip auf sehr high level Anwendungen beschränkt.

    Diesen Schwachsinn will ich nur mit einem "Schwachsinn" kommentieren: Schwachsinn.



  • Tim schrieb:

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    Es hindert den Fortschritt da du C konstrukte ja auch in C++ verwenden kannst und wozu solltest du dann die C++ konstrukte lernen? Und das fuehrt zu einem C mit Klassen. Weil eben die wenigsten genug disziplin haben c und c++ zu trennen...



  • @Tim:
    Das Thema wurde doch im Forum nun oft genug durchgekaut,
    das Fazit hat Shade of Mine gut auf den Punkt gebracht, finde ich.

    mfg branleb



  • Shade Of Mine schrieb:

    Tim schrieb:

    Diese Dinge muss man halt lernen, egal ob man C kann oder nicht. Inwiefern _hindert_ es den C-Programmierer C++ zu lernen?

    Es hindert den Fortschritt da du C konstrukte ja auch in C++ verwenden kannst und wozu solltest du dann die C++ konstrukte lernen? Und das fuehrt zu einem C mit Klassen. Weil eben die wenigsten genug disziplin haben c und c++ zu trennen...

    Mit der Argumentation dürfte man nach C (oder sonstwas) gar keine andere Sprache mehr lernen (können).
    Dass man mit C schon einen sehr großen Teil von C++ kennt wird hier schön verschwiegen.

    @branleb: Und deshalb muss ich mich der allgemeinen Meinung anschliessen?



  • c und c++ sind syntaktisch zu dicht beieinander. das ist das problem. man kommt von seinen jugendsünden in c nicht los, wenn man auf c++ umsteigt.
    es ist kein problem. c -> java -> c++ zu gehen. ich befürworte basic -> c++.
    nur c -> c++ ist tödlich. da braucht man ungefähr die gleiche zeitspanne, die man zur erlernung von c gebraucht hat, um sich die unsitten von c innerhalb von c++ abzugewöhnen. bei basic -> c++ ist ein harter syntaktischer bruch dazwischen. das erlaubt es einem, die gehversuche in basic mit abstand zu betrachten und in c++ dann erst recht nicht so verworren zu programmieren. viele andere gute kombinationen sind möglich.
    ich denke, allen guten langzeitplänen gemein ist, daß c nach c++ kommt und daß eine lispoide sprache darin vorkommt.

    edit: nein, das ist gar nicht das ganze problem. das ganze problem ist, daß in der c-gemeinde viele konzepte gepflegt werden, die (in jeder sprache) seit 25 jahren überholt sind, daß ungern neue c-tutorials geschrieben werden, und daß man sich alten mist angewöhnt, wenn man zur problemlösung willkurlich googelt. aber man kann ja noch nicht anders, woher sollte man wissen, was wie toll ist? hauptsache, es geht erstmal. mist. mit c -> c++ schubst man diesen mumpitz dann in eine der sprachen, wo die wahrscheinlichkeit nicht ganz gering ist, bei ihr dann langfristig zu landen. das wäre suboptimal.



  • Pascal



  • Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.
    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    mfg Branleb



  • Ganz davon abgesehen, das in C Dinge funktionieren, die in C++ nicht funktionieren (bin kein C-User, hoffe das ist korrekt):

    int i = 10;
    // ...
    int m; // error in C++, in C kein Problem
    

    Warum sollte das ein C++-Einsteiger unbedingt lernen? Er weiß es dann vielleicht, kann damit aber in C++ nichts anfangen. Er sollte lieber lernen, einen [i]std::vector* zu benutzen - halt C++! Und das ist nur ein Beispiel von vielen, was C und C++ unterscheidet.



  • Hey, warum werden meine eckigen Klammern weg gefiltert? Stimmt mein Text oben nicht mehr...



  • NichtVersteher schrieb:

    Hey, warum werden meine eckigen Klammern weg gefiltert? Stimmt mein Text oben nicht mehr...

    Ha Ha :p



  • So, nochmal:

    int n = 10;
    // ...
    int m[n]; // error in C++, in C kein Problem
    

    man darf wohl in den cpp-Codetags keine []-Operatoren mit nem i drin verwenden...

    Egal... jedenfalls ist das jetzt korrekt.





  • branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Leider haben die C-Fans noch nicht mitbekommen, das es kein C/C++ mehr gibt. Sie halten C++ für die Sprache, die angeblich ohne C nicht auskommt. Deshalb ist es anscheinend Verrat am König, wenn jemand der C++ lernen will, kein C mehr empfohlen bekommt.

    Natürlich sieht die Realität heute anders aus: es gibt heute C und C++. Und schon lange kein C/C++ mehr.

    Bjarne Stroustrup, http://www.research.att.com/~bs/bs_faq.html#C-slash schrieb:

    There is no language called „C/C++“. The phrase is usually used by people who don't have a clue about programming (e.g. HR personnel and poor managers). Alternatively, it's used by people who simple do not know C++ (and often not C either).



  • branleb schrieb:

    Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Was das mit dem Thema zu tun haben soll weisst nur du.

    branleb schrieb:

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Du besschreibst hier Eigenschaften von C++, aber nicht inwiefern das einen C-Programmierer hindern soll diese Dinge zu erlernen.

    branleb schrieb:

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    hier ebenso...

    branleb schrieb:

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Jo, ich bin mir 100%ig sicher, dass dieser Mann hier die Objektivität in Händen hält...

    branleb schrieb:

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.

    C war nie eine sauberer Untermenge von C++ (zumindest nicht seit den standardisierten "Versionen").

    branleb schrieb:

    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Das hat hier sicher niemand bezweifelt.

    branleb schrieb:

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Niemand hat gesagt, dass der OP zuerst C lernen sollte. Du solltest den Thread vielleicht nochmal lesen.

    branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Oh, angegriffen habe ich dich erst mit diesem Post. Und jetzt darfst du offiziell heulen gehen und dir eine Scheibe von volkards Argumentation abschneiden. Diese ist, auch wenn ich ihr nicht unbedingt zustimme, schlüssig und stützt sich nicht auf Lächerlichkeiten wie "das richtige main()"...



  • Tim schrieb:

    branleb schrieb:

    Der Unterschied ist ja gerade das oben gennannte C Mit Klasse:
    Es wird in C Stil gecodet
    prominentes beipsiel:

    main()
    {
      /* code */
    }
    

    muss aber in C++ so geschrieben werden

    int main()
    {
      /* code */
    }
    

    => mit Typ, und zwar mit int, und nicht void.

    Was das mit dem Thema zu tun haben soll weisst nur du.

    branleb schrieb:

    Anderes Beispiel sind die Casts.
    Code, der die C++ Casts verwendet,
    sagt genauer, was für ein Cast vorliegt,
    und sieht dazu imo noch passender/schöner aus,
    als (typ).

    Du besschreibst hier Eigenschaften von C++, aber nicht inwiefern das einen C-Programmierer hindern soll diese Dinge zu erlernen.

    branleb schrieb:

    Dann kommt noch so etwas wie Makros.
    Sind Typenunsicher und verschlechtern imo die Lesbarkeit von Code.
    Und genauso wie Makros durch ihre Typenunsicherheit imo für generische Programmierung ungeeignet sind, ist imo der void* es ebenfalls.
    Templates bieten Typsicherheit und (das mag an der Gewöhnung liegen) sehen
    im Code besser aus.

    hier ebenso...

    branleb schrieb:

    Es gibt noch weitere Unterschiede bzw. Gründe.
    Hier z.B. die Meinung des C++ Erfinders dazu.

    Jo, ich bin mir 100%ig sicher, dass dieser Mann hier die Objektivität in Händen hält...

    branleb schrieb:

    Auch wenn C++ aus C entwickelt wurde, und C90 eine Untermenge davon ist, C99 z.B. ist es afaik schon nicht mehr zu 100%.

    C war nie eine sauberer Untermenge von C++ (zumindest nicht seit den standardisierten "Versionen").

    branleb schrieb:

    Es sind also, auch wenn sehr ähnlich, zwei unterschiedliche Sprachen (siehe auch Headerfiles) die man auch trennen sollte.

    Das hat hier sicher niemand bezweifelt.

    branleb schrieb:

    Und da es dem Threadersteller, so wie ich ihn verstanden habe, darum geht, C++ zu lernen, war die Antwort, das ich (und viele weitere C++ Programmierer, z.B. s. Bjarne Stroustrup, Link oben) zuerst C zu lernen, für keine Gute Idee halten, aus meiner Sicht korrekt.

    Niemand hat gesagt, dass der OP zuerst C lernen sollte. Du solltest den Thread vielleicht nochmal lesen.

    bis hier muss ich wohl eine daumenhoch geben. 👍

    Tim schrieb:

    branleb schrieb:

    Und wenn man hier jemand anderem, der eine ähnliche Position zu vertreten scheint, nicht mehr zustimmen kann, ohne dafür angegriffen zu werden, wo sind wir dann ?

    Oh, angegriffen habe ich dich erst mit diesem Post. Und jetzt darfst du offiziell heulen gehen und dir eine Scheibe von volkards Argumentation abschneiden. Diese ist, auch wenn ich ihr nicht unbedingt zustimme, schlüssig und stützt sich nicht auf Lächerlichkeiten wie "das richtige main()"...

    hier habe ich doch ein leichtes >>auch wenn ich ihr nicht unbedingt zustimme<< gehört. ja, da gibt es eine lücke. und zwar die:
    angenommen, man ist voll empfänglich für programmier-begriffe. also so ein totaler schnellbegreifer. dann ist es in der tat effektiver, man lernt c VOR c++. ist total überbewertet, da die meisten im NACHHINEIN schauen, was sie in welcher reihenfolge gelernt haben sollten. Prof Dankert preferiert c vor c++, und der hat ahnung. ich unterstelle ihm aber, daß er da von sich auf andere schließt, insofern es eine empfehlung am die allgemeinheit ist. sicherlich war oder wäre es gewesen effektiver für ihn selber c -> c++ zu nehmen.



  • Sind Die Eigenschaften von C++, v.a. die, die sich von C unterscheiden nicht genau der Punkt, die eine Vermischung der beiden Sprachen erst richtig "gefährlich" machen bzw. eben genau zu dem Effekt führen, das man seine "Jugensünden" wie es volkard nennt?

    mfg branleb



  • Mal ehrlich,

    ich finde, dass C eine schlanke, hadrwarenahe Sprache ist, die zugleich einen erheblichen Verbreitungsgrad aufweist. Man kann natürlich ne menge scheisse darin bauen (zeiger & blubb), aber das kann man in C++ auch. Für hardwarenahe programmierung reicht C imho völlig aus.

    C++ ist irgendwie nicht Fisch nicht Fleisch.
    Wenn "man" eine höhere Abstraktionseben als C benötigt, dann sollte man lieber auf eine höhere Sprache zugreifen wie java/python/ruby/etc. Darin lassen sich viele Dinge schneller implementieren (insbesondere in python/ruby).

    Die STL ist zwar nett gemeint, aber kann weniger als das, was die höheren Sprachen von Haus aus können. Ausserdem ist es Fehleranfälliger (das berühmte "Bein wegschiesen") als bei den höheren Sprachen. Manchmal erscheint die STL für mich wie ein vergeblicher Versuch von C++ an die Dynamik von highlevel sprachen zu kommen. Dann kommt noch das leidige Thema von Speicherleaks und segfaults und und und.
    Über die Bemühungen für die Zukunft kann ich auch nur Schmunzeln. wow, asio.... eine netzwerk-lib wird in den standard aufgenommen. Davon fällt auch kein Sack Reis in China um. Viele Highlevelsprachen bieten das (und bei weitem) viel mehr.

    Und was Klassen & OOP angeht: Naja, ich finde die Implementierung von OOP in C++ subjektiv weniger schön als in höheren Sprachen (da vor allem aufgrund der Dynamik der letzteren einem neue Lösungswege und Möglichkeiten erschließen).

    Und falls ich doch etwas hardwarenahes programmieren will/muss (zB Treiber), dann greif ich doch lieber auf C zu. C ist nunmal schlank, schnell, hardwarenah. Und C enthält keine Schnörkel. Auf die STL und exceptions (welche in C++ auch net so toll sind) kann ich bei der Treiberprogrammierung getrost verzichten.

    Für alles andere würd ich python/Java/ruby nehmen. Der GC ist schon was tolles. (kommt mir jetzt bitte nicht mir dem GC für C++, den man auch nutzen könnte).

    Da finde ich es angenehmer OOP zu programmieren und die Sprachfeatures sind unglaublich toll. Die Entwicklungszeit verringert sich, da man weniger lästigen Initialisierungscode, Sicherheitsrelevanten tests und weniger debugging hat.

    Außerdem ist alles und vieles mehr direkt als Sprachfeature implementiert was die STL bietet. Die Umfangreichen std-libs von den höheren sprachen erleichtern einem auch das leben. Zudem gibt es recht viele bindings dieser höheren Sprachen an C bzw C++ libs.

    Zusammengefasst: Für die meisten Anwendungen reicht eine highlevelsprache aus wie python/java/ruby. Falls man etwas cpu-lastiges schreiben muss, dann kann man es in C implementieren und einfach ein entsprechendes binding an (beispielsweise) python erstellen. Das erleichtert einem enorm das Leben und verkürzt die Entwicklugnszeit.

    Wenn jetzt wieder einer kommt mit "das sind doch Kinder-sprachen", dann werde ich wieder schmunzeln. 🙂

    So, und nun lyncht mich. 😃

    ~Ich glaube kaum, dass es hier viele gibt, die meine Meinung teilen~



  • branleb schrieb:

    Sind Die Eigenschaften von C++, v.a. die, die sich von C unterscheiden nicht genau der Punkt, die eine Vermischung der beiden Sprachen erst richtig "gefährlich" machen bzw. eben genau zu dem Effekt führen, das man seine "Jugensünden" wie es volkard nennt?

    mfg branleb

    die jugendsünden sind eher der total dahingefummelte code, den man bereits nicht mehr lesen kann, wenn man aus dem urlaub zurückkommt und wegschmeißen muß. deswegen habe ich basic gerne am anfang. muß ja nicht viel länger als ein jahr sein. damit man nach dem sprachenbruch mal stilistisch ganz neu anfangen kann. zu den juegndsünden in c gehören natürlich die totale ignoranz gegenüber fileOpenErrors wegen nur einem returnwert/returnpfad, das herumhampeln mit viel zu vielen zeigern und sowas. jugendsünden von c++ sind die totale zeigerphobie (zum beispiel void readConfig(string const& fileName)//neulich hier gelesen!) und das übertriebene tempale-meta-gehampele. es ist einfach nicht zu verhindern, daß man als n00b blödsinn baut. es soll auch nicht verhindert werden, jeder unfug braucht unbedingte unterstützung, unfug muß ausgetobt werden. nur die eigene erfahrung, daß dieses oder jenes, wenn an die grenze getrieben, einfach nur unfug ist, zusammen mit der erfahrung, daß weit weg von der grenze dieses oder jenes auch unfug ist, kann die unzähligen dogmen brechen, die im it-geschäft herumgeistern. ups, bin ein wenig abgescheift.



  • C++ net arg Möger schrieb:

    Für hardwarenahe programmierung reicht C imho völlig aus.

    aber wenns null zusatzkosten verursacht, warum nicht c++? (c++ bringt null laufzeitoverhead gegenüber c)

    wenns gegen c++ keinen zusatzvorteil bringt, warum so langsam wie java?
    (java kann null mehr als c++)

    klar, perl und python sind stärker als c++ und da muß man abwägen, was man nimmt.

    aber darum gehts nicht.

    mal angenommen, ruby sei die beste sprache auf der welt.

    mit welcher sprache soll man anfangen? und genau dann, wenn ruby die beste wäre, würde ich davon abraten, in ruby anzufangen.


Anmelden zum Antworten