C++ lernen anhand von C?



  • Nexus schrieb:

    Was die Anfänger im Forum betrifft - und da gibt es nicht wenige, die ein "C mit Klassen" praktizieren (und dann nicht mal sauberes C): Da glaube ich, spielen auch die massenhaft schlechten C++-Bücher und -Unterrichte bzw. -Vorlesungen eine entscheidende Rolle.

    Die wiederum vermutlich zum Teil so schlecht sind, weil sie von "C mit Klassen"-Programmierern stammen.



  • Mitleid schrieb:

    So Gründe wie "ich habe im Job viele Leute erlebt" oder "in der freien Wildbahn häufig auf ... gestoßen ... die ..." sind doch wenig überzeugend.

    Natürlich, ich schreibe aus meinen Lebenserfahrung und Beobachtungen, Gedankenlesen oder Allwissenheit gehört nicht zu meinen Softskills.

    Wäre es dir lieber wenn ich meine Erfahrungen ohne die Angaben schreibe? So im Sinne: Traue keiner Statistik die du nicht selbst gefälscht hast? Es ist meine Erfahrung aus 10 Jahren Projekterfahrung, Umgang mit Auszubildenden und neu Angestellten, und sogar die Aussagen einer Hand voll C-Entwickler die Schwierigkeiten mit den C++ Konzepten hatten, letztere waren aber wenigstens nicht Lernresistent (Die, die selbst über Schwierigkeiten reden, sind meist auch bereit diese Auszumerzen).

    cu André



  • Mitleid schrieb:

    Ihr müsst euch einfach überlegen, was alles an Literatur und Arbeit dazugehört um c++ einigermaßen zu beherrschen. Wir reden da von tausenden Seiten die durchgeackert werden müssen. Und selbst dann steht man, sobald man einen größeren eigenen Entwurf hinlegen muss, relativ hilflos da. Dann kommen nämlich noch Bücher zu Objektmodellierung, Entwurfsmuster, Software-Technik usw. usw. dazu. Und dann noch die Beschäftigung mit individuellen Geschichten, seien es Frameworks, Themen wie verteilte Anwendungen, Sicherheits-Themen, usw.

    Die Arbeit muss man halt zu leisten bereit sein. Und dann noch die Praxis, die nötig ist, bis man wirklich von sich behaupten kann, man hat den Durchblick und liefert gute Qualität.

    Entschuldigung für meine dumme Frage: aber wenn man vorher C lernt, verkürzt sich die zu leistende Arbeit signifikant? Oder wie darf ich das verstehen?

    Also ich brauche bloss 1 und 1 zusammen zählen, und komme auf 2. Soll heißen, wenn ich (wie laut deiner Aussage) sooo viel für C++ und allgemein Entwicklung lernen muss, dann sollte ich die Zeit doch nicht vorher mit C in die Länge ziehen. Weil C lernen auch Zeit kostet. Wie gesagt: 1+1=2



  • Registrierter Troll schrieb:

    "Ich kann mir nicht vorstellen" ist noch weniger überzeugend.

    Deshalb habe ich im Folgesatz auf meine Argumentation hingewiesen.;)

    Registrierter Troll schrieb:

    Das hat auch niemand gesagt.

    Du selbst behauptest doch sogar man sollte zuerst c++ und dann erst C lernen. Gute Argumente kannst du allerdings nicht liefern.

    Registrierter Troll schrieb:

    Man lernt am besten C++, indem man C++ lernt und nicht eine andere Sprache. Ich halte das eigentlich für eine triviale Aussage.

    Die ist auch trivial, nur, was hat sie mit dem Thema zu tun? Ich will dem Fragesteller nur klarmachen, dass eure Behauptungen über irgendwelche Angewohnheiten, die man als C-Programmierer nur schwer los wird, völlig haltlos sind. Sie gelten für Leute die vielleicht gerade erst mit c++ anfangen haben und solche die ganz darauf verzichten sich gründlich einzuarbeiten. Wer sich intensiv mit c++ beschäftigt hat durch vorher oder parallel erlerntes C keine Nachteile. Warum auch?

    asc schrieb:

    Natürlich, ich schreibe aus meinen Lebenserfahrung und Beobachtungen, Gedankenlesen oder Allwissenheit gehört nicht zu meinen Softskills.

    Klar, nur kannst du aus lernresistenten C-Entwicklern nicht folgern, dass C-Kenntnisse Nachteile für das Erlernen von c++ bedeuten. Ebenso weißt du nicht, ob dieselben Leute ohne ihr C-Kenntnisse leichter an OOP herangeführt werden könnten.

    nexus schrieb:

    Was die Anfänger im Forum betrifft - und da gibt es nicht wenige, die ein "C mit Klassen" praktizieren (und dann nicht mal sauberes C): Da glaube ich, spielen auch die massenhaft schlechten C++-Bücher und -Unterrichte bzw. -Vorlesungen eine entscheidende Rolle. Bei vielen kommt noch Faulheit hinzu.

    Wobei man auch nicht weiß, ob die wirklich c++ im Vordergrund haben oder einfach schnell ihre Hausaufgaben/ Übungsblätter abgeben wollen bzw. ob ihnen etwas an sauberem Code liegt, oder ob einfach schnelle Ergebnisse zählen. Daraus kann man nichts ableiten. Selbst einige der Top-Poster hier sind mit grundlegenden Konzepten noch nicht so recht vertraut. Siehe deine Behauptung zum Platzierungsoperator delete() ein paar Threads tiefer. :p :p 😃 OK, war jetzt etwas böse. 🙂

    @Artchi
    Es geht nicht darum, ob du vorher c lernen SOLLST, sondern darum ob es ein signifikanter Nachteil ist es bereits zu können oder parallel zu lernen wenn man sich mit c++ beschäftigt. Ich meine nein.
    Ganz abgesehen davon, dass man mit C-Kenntnissen ja auch noch was anfangen kann und die Zeit schon deshalb nicht verschwendet ist bzw. dass man bei fremden Code als reiner C++-Akrobat dann dumm aus der Wäsche guckt, wenn man auf malloc() usw. stößt.



  • Mitleid, hast du meine Argumentation nur überlesen oder bewusst ignoriert? :p

    P.S.:

    Mitleid schrieb:

    Selbst einige der Top-Poster hier sind mit grundlegenden Konzepten noch nicht so recht vertraut. Siehe deine Behauptung zum Platzierungsoperator delete() ein paar Threads tiefer. :p :p 😃 OK, war jetzt etwas böse. 🙂

    Ich sehe mich hier nicht als Top-Poster, da gibt es einige, die weitaus mehr Erfahrung besitzen. Mir ist bewusst, dass ich noch viel lernen kann. Jedoch glaube ich, kann ich von mir schon behaupten, dass mir die Grundkonzepte von C++ einigermassen vertraut sind. Aber selbst da kann es ab und zu wieder passieren, dass man mal falsch liegt, sollte eigentlich auch okay sein (zumal mein Fehler nur in der falschen Begrifflichkeit lag).


  • Administrator

    Ich würde hier eigentlich zuerst mal Nexus unterstützen. Man sollte schon sehen, dass man auch C in C++ programmieren kann. Jemand der C lernt und gleichzeitig oder danach C++, fängt somit schnell an die Sprachen zu mischen, wenn er nicht gehörig aufpasst.
    Wer dagegen nur C++ lernt, der macht es in C++, da er nichts anderes kennt. Wenn er danach C lernt, dann kann er in C nicht die C++ Möglichkeiten einsetzen und muss somit C lernen. Die Trennung der Sprachen passiert automatisch.

    @Mitleid,
    Meiner Meinung nach gehst du von einem idealen Menschen aus, was der Fehler in deiner Argumentation ist. Klar, wenn der Programmierer sich wirklich daran hält beim Lernen C und C++ auseinander zu halten, sich nicht immer wieder mal mit C Lösungen in C++ aushilft, diese Sachen ganz klar trennt, nicht faul ist, halt der perfekte Mensch ist, dann schadet es nicht 😉 🤡
    Nur sind die meisten Anfänger halt anders und viele erkennen den Fehler auch gar nicht, den sie dabei machen. Solche Fehler erkennt man erst deutlich später. Eine Programmiersprache erlernt man auch nicht unter Aufsicht, sondern für sich. Also ist auch niemand da, der auf den Fehler hinweisen könnte, welcher meistens äusserst unbewusst passiert.

    Grüssli



  • Nexus schrieb:

    Mitleid, hast du meine Argumentation nur überlesen oder bewusst ignoriert? :p

    Weder, noch. Du bringst nur nichts Neues in die Diskussion ein, sondern nennst nur weitere Möglichkeiten sich nicht mit c++ zu befassen. Es bleibt dabei, wenn man sich weigert sich mit c++ und OOP zu beschäftigen, aus welchen Gründen auch immer, dann kann man es halt nicht. Ob man vorher C gelernt hat oder nicht.

    @Dravere
    Ganz im Gegenteil. Ich dramatisiere nur nicht so wild. Und auf Fehler wird man schon hingewiesen, wenn man sich mit den entsprechenden Themen beschäftigt.

    Nebenbei: Der Fragesteller hat Ruby gelernt. Sollte er sich jetzt wirklich diese reine OOP-Welt durch c++ versauen?! Hoffentlich beeinflusst der c++-Wirrwarr nicht seine Fähigkeiten und sprengt seine Birne. 😮 😃

    Also, Spaß beiseite, ich sage: Bringt den Anfängern mehr Zutrauen entgegen. Das wird schon ... 😉



  • Mitleid schrieb:

    Weder, noch. Du bringst nur nichts Neues in die Diskussion ein, sondern nennst nur weitere Möglichkeiten sich nicht mit c++ zu befassen. Es bleibt dabei, wenn man sich weigert sich mit c++ und OOP zu beschäftigen, aus welchen Gründen auch immer, dann kann man es halt nicht. Ob man vorher C gelernt hat oder nicht.

    Du hast nicht verstanden, was ich sagen wollte. Es ging nicht darum, sich vor C++ zu drücken.

    Dravere hat Recht, du idealisierst zu stark. Kein Programmierer wird sich zuerst über den ganzen Sprachumfang informieren, bevor er etwas implementiert. Wenn er bereits Möglichkeiten kennt, ist die Tendenz noch grösser, das nicht zu tun. Glaubst du das etwa nicht?

    Mitleid schrieb:

    Und auf Fehler wird man schon hingewiesen, wenn man sich mit den entsprechenden Themen beschäftigt.

    Denkst du. Wie sollte man zum Beispiel einfach so merken, dass memcpy() auf Klassen angewandt schief gehen kann? Das erfährt man meistens erst, wenn man nachfragt. Ich würde nicht davon ausgehen, dass in modernen C++-Büchern viele C-Mechanismen erklärt werden, von daher könnte man vergebens auf so einen Hinweis warten. Beginnt man hingegen mit C++, hat man dieses Problem gar nicht erst.

    Mitleid schrieb:

    Nebenbei: Der Fragesteller hat Ruby gelernt. Sollte er sich jetzt wirklich diese reine OOP-Welt durch c++ versauen?!

    Stimmt. Lieber gleich C nehmen. 😃


  • Administrator

    Mitleid schrieb:

    Ganz im Gegenteil. Ich dramatisiere nur nicht so wild. Und auf Fehler wird man schon hingewiesen, wenn man sich mit den entsprechenden Themen beschäftigt.

    Ich dramatisiere nicht. Ich spreche nur aus meiner bisherigen Erfahrung, wie alle anderen hier auch. Du willst einfach diese Erfahrung nicht aktzeptieren und bleibst lieber bei deinen theoretischen Vorstellungen.

    Mitleid schrieb:

    Nebenbei: Der Fragesteller hat Ruby gelernt. Sollte er sich jetzt wirklich diese reine OOP-Welt durch c++ versauen?! Hoffentlich beeinflusst der c++-Wirrwarr nicht seine Fähigkeiten und sprengt seine Birne. 😮 😃

    Du hast anscheinend nicht verstanden, worum es beim "C zu C++ Wechsel" Problem geht.
    Du kannst kein Ruby in C++ programmieren, der Kompiler wird das nie fressen. Ein C Code dagegen ohne Probleme, auch wenn er noch so schlecht ist, noch so undefiniertes Verhalten auslöst usw. usf.

    Grüssli



  • Dravere schrieb:

    Du hast anscheinend nicht verstanden, worum es beim "C zu C++ Wechsel" Problem geht.

    Jetzt mal nicht albern werden.

    Was unerfahrene Programmierer wie du, nexus und einige andere nicht verstehen, ist die Nichtigkeit dieses von euch beschriebenen "Problems".

    Nachdem ich den ersten Kontakt zu c++ mindestens 10 Jahre vor euch hatte und nochmal 10-13 Jahre vorher zu programmieren angefangen habe, d.h. sozusagen die gesamte Entwicklung hin zur Etablierung von OOP live miterlebt habe, kann ich mich über eure Aussagen nur wundern.

    Liegt vielleicht daran, dass ihr mit den ganzen Standards aufgewachsen seid und euch diese Flexibilität, die wir noch an den Tag legen mussten, nicht natürlich erscheint. Wer weiß?

    Jedenfalls entschuldigst du, dass ich eure "Erfahrungen" nicht so recht ernst nehmen kann. Dass es mich sogar amüsiert, wenn ihr Ratschläge über guten Stil, gutes c++ usw. aus Büchern einfach nachplappert, ohne jemals in einer Firma gearbeitet und wirklich Software produziert zu haben.

    Wobei das ja nicht so schlimm ist. Schlimmer sind so Aussagen wie die vom "Regsitrierten Troll" die da behaupten man wird jahrelang von "C mit Klassen"-Müll verfolgt usw. als gäbe es dafür irgendeine Gesetzmäßigkeit.



  • Mitleid schrieb:

    wird jahrelang von "C mit Klassen"-Müll verfolgt usw. als gäbe es dafür irgendeine Gesetzmäßigkeit.

    Das Forum hier als Indiz für die Häufigkeit hierfür reicht dir wohl nich?

    Aber offensichtlich scheinst du Resistent gegen andere Meinungen oder Argumente zu sein...

    bb



  • Mitleid schrieb:

    Was unerfahrene Programmierer wie du, nexus und einige andere nicht verstehen, ist die Nichtigkeit dieses von euch beschriebenen "Problems".

    Wenn du schon damit anfängst, ad hominem zu argumentieren: Das sind verdiente Forenmitglieder, die hier teilweise seit Jahren durch die dickste Newbie-Scheiße waten und trotzdem jedem noch so ignoranten Möchtegern-C++-Programmierer bereitwillig helfen, die immer gleichen idiotischen "Probleme" zu lösen. Während du irgendein Niemand bist, der sich nur groß aufspielt und simpelste Zusammenhänge abstreitet, die sonst jeder sofort erkennt.

    Der OP wird sich wohl selbst ein Bild machen, wessen Aussagen er mehr Glauben schenkt.


  • Administrator

    @Mitleid,
    Oh ja, gib es uns! Ich liebe diese Argumentation:
    "ICH PROGRAMMIERE SEIT 50 JAHREN, DESHALB BIN ICH BESSER ALS IHR!!!"

    Ganz ehrlich, darauf habe ich nur eine Antwort:
    Alteisen sollte man frühzeitig auf den Schrottplatz bringen, bevor es einem komplett wegrostet und man nichts mehr hat.

    🤡

    Grüssli



  • unskilled schrieb:

    Das Forum hier als Indiz für die Häufigkeit hierfür reicht dir wohl nich?

    Häufigkeit von was? printf()-Funktionen in HalloWelt-Applikationen?

    unskilled schrieb:

    Aber offensichtlich scheinst du Resistent gegen andere Meinungen oder Argumente zu sein...

    Nicht wenn sie fundiert sind, was hier nicht der Fall ist.

    Registrierter Troll schrieb:

    Das sind verdiente Forenmitglieder, die hier teilweise seit Jahren durch die dickste Newbie-Scheiße waten und trotzdem jedem noch so ignoranten Möchtegern-C++-Programmierer bereitwillig helfen, die immer gleichen idiotischen "Probleme" zu lösen.

    Ich habe nicht an ihren Verdiensten um dieses Forum gezweifelt. Ich habe lediglich auf den Vorwurf reagiert, ich würde das Problem nich verstehen und ich solle doch ihre "Erfahrung" berücksichtigen. Und diese Erfahrung ist halt recht beschränkt (noch). 😉

    Die Zusammenhänge von denen du sprichst sind schlicht nicht vorhanden. Ich meine, habt ihr euch mal zurückgelehnt und reflektiert ein wenig was ihr hier behauptet?

    C-Vorkenntnisse sollen negativ für das Erlernen von c++ sein und einem sogar jahrelang an vernünftiger c++-Programmierung hindern.

    Aha.

    Mein Meinung dazu ist wohl klar und JA, ich hoffe der Threadstarter kann sich nun ein besseres eigenes Bild machen, was das Thema angeht.

    @Dravere
    Ich sagte doch: Nicht albern werden. 😉

    Aber, es stimmt. Ich habe einen Vorsprung vor dir aus dem einfachen Grund weil ich schon länger dabei bin. Und manchmal hast du dich auch schon artig bedankt als ich dir die eine oder andere Frage (unter einem anderen nickname, bin nämlich hier auch schon eine Weile dabei) beantwortet habe. 😉


  • Administrator

    Mitleid schrieb:

    C-Vorkenntnisse sollen negativ für das Erlernen von c++ sein und einem sogar jahrelang an vernünftiger c++-Programmierung hindern.

    Das ist dramatisiert. 😉
    Ich habe schon Leute gesehen, denen hat das wirklich was geholfen. Bei der Mehrzahl war das allerdings nicht der Fall. Und weil es der Mehrzahl eher geschadet hat, weil sie danach die Sprachen nicht sauber getrennt haben, mache ich meine Empfehlungen so, wie es der Mehrzahl helfen tut.

    Mitleid schrieb:

    Ich sagte doch: Nicht albern werden. 😉

    Dann sage ich nur ebenfalls 😉

    Mitleid schrieb:

    Aber, es stimmt. Ich habe einen Vorsprung vor dir aus dem einfachen Grund weil ich schon länger dabei bin. Und manchmal hast du dich auch schon artig bedankt als ich dir die eine oder andere Frage (unter einem anderen nickname, bin nämlich hier auch schon eine Weile dabei) beantwortet habe. 😉

    1. Weil du schon länger programmierst, hast du in allen Bereich einen Vorsprung? Wo ist da die Logik? Zudem, die Zeit sagt überhaupt nichts über die Erfahrung eines Programmierers aus. Ich habe schon Leute getroffen, die sind so lange am Programmieren und haben weniger Wissen als gewisse Anfänger hier. Und die sind schon lange beruflich am Programmieren.
    Gerade auch zum Teil ältere Leute, welche einfach nicht mehr mitkommen und immer noch an ihren alten Ideen festhängen 😉

    2. Es geht hier nicht mal unbedingt um das Programmieren. Es geht hier um Anfängerhilfe. Ich persönlich schöpfe hier meiner Erfahrungen aus:
    - Meine Anfänge (ich habe mit so einem Mischmasch angefangen), allerdings weil ich kein gutes C++ Buch hatte.
    - Universität und Mitstudenten, die haben zuerst C beigebracht bekommen und später sehr einfaches C++. Grauenhaft was dabei herauskommt.
    - Hilfeforen (Mehrzahl). Hier bekommen die Leute noch kompetente Hilfe, wie zum Beispiel von dir (;)), aber in anderen Foren zum Teil ... ich glaube nicht an Gott, kann aber wirklich nur sagen: Oh mein Gott.
    - Ein, zwei Kollegen, welche auch das Problem "durchlebt" haben.

    3. Man sollte Unregistrierte sperren 🤡 :p
    Oder: ANGSTHASE, ZEIG DICH! 😃

    Grüssli



  • Mitleid schrieb:

    unskilled schrieb:

    Das Forum hier als Indiz für die Häufigkeit hierfür reicht dir wohl nich?

    Häufigkeit von was? printf()-Funktionen in HalloWelt-Applikationen?

    Wie wärs mit:

    • printf + (s)scanf
    • char* gefrickel
    • keine oder sehr eingeschränkte kenntnisse über die std-lib (in C musste man sich das selbst schreiben, also schreibt man es in C++ auch wieder selbst)
    • falsche header(!)
    • 100de von zeilen in einer funktionen
    • malloc, realloc und free - auch gern mal mit new/delete gemischt...
    • den rückgabewert von new auf 0 prüfen
    • makros statt konstanten - ober überhaupt oft makros, wo keine nötig wären...
    • C mit Klassen -> vor allem ist der konstruktor für die meisten ein Fremdwort...
    • templates in *.cpp und *.h trennen
    • idR. sind exceptions ein fremdwort, weil man doch auch alles über rückgabewerte machen kann - das ging auch zuvor immer
    • memcpy, ... auf instanzen von klassen
    • ...

    und dann kommen zusätzlich dazu noch die üblichen Anfänger-Fehler hinzu...

    bb



  • Dravere schrieb:

    3. Man sollte Unregistrierte sperren 🤡 :p

    Dann gibts keine süßen Trolle mehr 😞
    Ich bin eig. auf beiden Seiten.
    C kann als Einsprung für C++ nicht mal sooo Schaden. Man versteht Funktionen, wie man mit ihnen um zu gehen hat, ein wenig was über Strukturen, Pointern, Variablen und ein wenig Programmierverständnis. Dann aber, finde ich, sollte man auf C++ umsteigen. Denn sollte man damit zu lange programmieren und vorallem zu dem Punkt kommen, wofür C bekannt ist, wirds kritisch und man eignet sich diesen Stil an, der für C++ ein Chaos ist und einfach nur schlecht ist.



  • FreakY<3Cpp schrieb:

    C kann als Einsprung für C++ nicht mal sooo Schaden. Man versteht Funktionen, wie man mit ihnen um zu gehen hat, ein wenig was über Strukturen, Pointern, Variablen und ein wenig Programmierverständnis.

    Das kann man auch mit C++ ohne die C-Bibliotheken etc. zu verwenden. Und ich empfinde es auch nicht als Nachteil bereits die string-Klasse anfangs zu verwenden (Ohne darauf einzugehen das es sich um eine Klasse handelt), und dann zu zeigen was hier eigentlich passiert (Sprich: von mir aus auch char*).



  • asc schrieb:

    ...

    Ja na klar, dass ist mir bewusst. Aber ich habe mich jetzt speziell zu dem Threadschreiber geäußert. Er meinte, es gäbe nur Kurse für C. Würde er sie machen und wollte dann C++ machen, wäre es natürlich nicht groß von Nachteil. Natürlich würde es noch sinnvoller sein, wenn er sich gleich ein C++ bestellt. Aber in dem Kurs, wenn der Lehrer nicht ein totaler Trottel ist, kann er vielleicht noch ein wenig Hintergrundwissen bekommen, welches nicht in jedem C++ Buch steht, sofern der Lehrer wie ich grad meinte was drauf hat und schon länger im Geschäft ist.



  • Man kann zunächst C und später C++ lernen ohne beide Sprachen zu vermischen. Die Gefahr zu sehr im C-Stil zu programmieren, wenn man zuerst mit C programmiert hat, ist allerdings groß. C als Teilmenge von C++ gestattet es dem Programmierer im C-Stil zu programmieren ohne das der Compiler sich beschwert. So kann man alte Angewohnheiten nur schwer ablegen.

    Umgekehrt ist das nicht möglich. Wer zuerst C++ gelernt hat und dann seine Kenntnisse in C vertieft muss auf C zurückgreifen, weil ein reiner C-Compiler nunmal keine C++ Syntax anerkennt.

    C++ ist eine sehr komplexe Sprache, C ist eine verhältnismässig einfache Sprache. Die Einfachheit bezieht sich auf die Sprache, nicht auf die Programme die man mit C erstellen kann.

    Ich empfehle ebenfalls sich zunächst mit C++ auseinanderzusetzen. "C++ Lernen und professionell anwenden" eignet sich dafür sehr gut, weil es konsequent in ANSI99 C++ lehrt und mit über 900 Seiten sehr umfassend ist. Eine zusätzliche STL Referenz ist ratsam.

    Anschließend kann man sich ein knappes C-Buch raussuchen, der Umstieg fällt dann nicht allzu schwer.

    Mit C++ ist man ohnehin eine ganze Weile beschäftigt. Und wenn man schließlich glaubt man kann in C++ programmieren, hauen einem Bücher von Scott Meyers oder Sutter nochmal einen Knüppel zwischen die Beine und man kommt sich vor, wie ein blutiger Anfänger. 😃


Anmelden zum Antworten