C++ lernen anhand von C?



  • Mitleid schrieb:

    C zu können ist selbstverständlich kein Nachteil, wenn du c++ lernen willst. Alle hier geäußerten Bedenken halte ich für Märchen. Es wird dir nicht schaden mit verschiedenen Paradigmen in Berührung zu kommen.

    Es ist kein Märchen, wobei dies von Fall zu Fall unterschiedlich sein kann. Wahr ist jedenfalls, das ich in der freien Wildbahn häufig auf "C++"-Entwickler gestoßen bin die zu stark auf C fixiert waren (Die berühmten C-mit-Klassen Programmierer, die gerne mit solchen Antipattern wie "Gottklassen" usw. arbeiten...).

    Nichts gegen C-Kenntnisse, aber es bleibt einfach die Gefahr dort stehen zu bleiben (Und C programmiert man nunmal anders als C++). Eine andere Erkenntnis war die, das wenn man prozedurale Programmierung gewöhnt ist, der Umstieg auf die OO-Programmierung teilweise sehr schwierig ist (Selbst erlebt, an anderen festgestellt, und zudem Neulinge gesehen die gleich mit OO angefangen haben und damit kein Problem hatten).

    Und die Generische Programmierung ist dann noch ein weiterer Punkt...

    Mitleid schrieb:

    Ein guter objektorientierter Entwurf ist übrigens unabhängig von der jeweiligen Programmiersprache...

    Das sehe ich nicht so. Du kannst zwar gewisse Konzepte der OO auch in nicht-OO Sprachen umsetzen, die Sprachunterstützung erleichtert dies aber ungemein.

    Mitleid schrieb:

    D.h. es könnte dir passieren, dass du auf c verzichtest aber trotzdem grausame objektorientierte Konzepte entwirfst.

    Das gilt aber für jedes Konzept. man kann auch genauso leicht grottenschlechte prozedurale Programme schreiben.



  • Mitleid schrieb:

    Ein guter objektorientierter Entwurf ist übrigens unabhängig von der jeweiligen Programmiersprache...

    Da stimme ich dir voll und ganz zu. Es gibt da nur ein Problem (was vermutlich das ist worauf asc und volkard hinaus wollten): Der beste objektorientierte Entwurf ist und bleibt genau das: Ein Entwurf, d.h. ein theoretisches Modell. Da es nicht "Die Perfekte Objektorientierte Programmiersprache" gibt, wird die Umsetzung von der Sprache abhängig sein und vom Entwurf abweichen. Dabei gibts zwei Arten von Abweichungen: zum Einen die erzwungenen Abweichungen, wo der Sprache die Mittel fehlen, um Teile des objektorientierten Entwurfs umzusetzen. Zum anderen die optionalen Abweichungen, wo die Sprache Mittel aus anderen Berechnungsmodellen (d.h. Programmierparadigmen) hat, so dass Teile des objektorientierten Entwurfs durch besser geeignete deklarative, funktionale, generische oder sonstwie geartete Entwurfsmuster ersetzt werden können.



  • Mein Hauptbedenken ist eigentlich, mit C schon die dritte Programmiersprache anzufangen, aber noch keine bis zum "Ende" durchgearbeitet zu haben... aber ich schau' mal, vielleicht fang' ich ja auch noch C an :p



  • Barcelona schrieb:

    Mein Hauptbedenken ist eigentlich, mit C schon die dritte Programmiersprache anzufangen, aber noch keine bis zum "Ende" durchgearbeitet zu haben... aber ich schau' mal, vielleicht fang' ich ja auch noch C an :p

    es gibt kein "ende". bleibe einfach offen, und nimm mit, was dich interessiert.



  • asc schrieb:

    Mitleid schrieb:

    C zu können ist selbstverständlich kein Nachteil, wenn du c++ lernen willst. Alle hier geäußerten Bedenken halte ich für Märchen. Es wird dir nicht schaden mit verschiedenen Paradigmen in Berührung zu kommen.

    Es ist kein Märchen, wobei dies von Fall zu Fall unterschiedlich sein kann. Wahr ist jedenfalls, das ich in der freien Wildbahn häufig auf "C++"-Entwickler gestoßen bin die zu stark auf C fixiert waren (Die berühmten C-mit-Klassen Programmierer, die gerne mit solchen Antipattern wie "Gottklassen" usw. arbeiten...).

    Kannst du belegen, dass die Leute ohne C-Kenntnisse besseres C++ gemacht hätten? Ja, eine rhetorische Frage.



  • Tim schrieb:

    asc schrieb:

    Es ist kein Märchen, wobei dies von Fall zu Fall unterschiedlich sein kann. Wahr ist jedenfalls, das ich in der freien Wildbahn häufig auf "C++"-Entwickler gestoßen bin die zu stark auf C fixiert waren (Die berühmten C-mit-Klassen Programmierer, die gerne mit solchen Antipattern wie "Gottklassen" usw. arbeiten...).

    Kannst du belegen, dass die Leute ohne C-Kenntnisse besseres C++ gemacht hätten? Ja, eine rhetorische Frage.

    Ich kann nicht belegen das diese Leute ohne C-Kenntnisse bessere C++ Entwickler wären. Aber die Codequalität derer, die C++ ohne C-Kenntnisse gelernt hatten (und sich wenn erst nachträglich gewisse C-Kenntnisse angeeignet haben) empfand ich in der Regel als durchweg besser.

    Wobei dazu auch zu sagen ist, das die Projekte an denen ich gearbeitet habe allesamt mittlere bis größere Projekte in der Anwendungsentwicklung waren (Alles Szenarien in denen ich C für eher ungeeignet halte, und tendenziell eher zu Hochsprachen greifen würde).

    cu André



  • Mitleid schrieb:

    C zu können ist selbstverständlich kein Nachteil, wenn du c++ lernen willst.

    SelbstverständlichTM ist es einer. Die malloc -, new char[]- , strcpy - und memcpy -Helden hier im Forum sind größtenteils deswegen miese C++-Programmierer oder auf dem Weg dazu, weil sie sich an Altlasten aus C klammern, die in C++ leider immer noch vorhanden sind. Da hört C++ im wesentlichen bei C89 plus 3 neue Keywords plus neue Scope-Regeln auf.

    Ich habe im Job viele Leute erlebt, die sich mit voller Überzeugung als C++-Experten bezeichneten, aber tatsächlich astreines C mit class und massenhaft new/delete programmiert und noch nie was von string , vector oder map gehört haben. Die konnten halt C und haben nie mehr den Sprung zu C++ geschafft. Das muss nicht bei jedem so sein, die Gefahr ist aber groß.

    Wenn man C++ lernen will, dann sollte man auch C++ lernen. Mit C anzufangen ist ein Umweg, der oft mehr Schaden anrichtet als er Vorteile bringt.



  • Registrierter Troll schrieb:

    Falls du beide Sprachen können willst, machs lieber anders rum: lern erst ordentliches C++ und dann C.

    Es gibt keinen Grund C zu lernen wenn man schon C++ kann.



  • C++Fan 2009 schrieb:

    Registrierter Troll schrieb:

    Falls du beide Sprachen können willst, machs lieber anders rum: lern erst ordentliches C++ und dann C.

    Es gibt keinen Grund C zu lernen wenn man schon C++ kann.

    Sagen wir: du kannst dir keinen Grund vorstellen. Es mag durchaus Gründe geben.



  • C++Fan 2009 schrieb:

    Registrierter Troll schrieb:

    Falls du beide Sprachen können willst, machs lieber anders rum: lern erst ordentliches C++ und dann C.

    Es gibt keinen Grund C zu lernen wenn man schon C++ kann.

    Sicher gibt es den. Z.B. einfach, weil man in ein Projekt kommt, in dem man C verwenden muss. Hängt alles immer vom Anwendungsgebiet ab...



  • C++Fan 2009 schrieb:

    Es gibt keinen Grund C zu lernen wenn man schon C++ kann.

    Quatsch. Die Welt besteht nicht nur aus Hobby-Programmierern, die sich ihre Projekte, Sprachen und Tools je nach persönlichem Geschmack selbst aussuchen können.



  • Registrierter Troll schrieb:

    C++Fan 2009 schrieb:

    Es gibt keinen Grund C zu lernen wenn man schon C++ kann.

    Quatsch. Die Welt besteht nicht nur aus Hobby-Programmierern, die sich ihre Projekte, Sprachen und Tools je nach persönlichem Geschmack selbst aussuchen können.

    Aber ein Profi kann eine Sprache auch on-demand lernen! :p



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

    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.

    Deshalb ist es für mich kein Argument zu sagen man sollte besser kein C lernen, nur weil auf dem Anfängerforum hier Leute noch char-Arrays statt std::string verwenden und weil jeder irgendwelche Leute kennt, die nicht bereit waren die nötige Arbeit zu leisten um sich zu entwickeln. Denen standen mit Sicherheit nicht ihre C-Kenntnisse im Weg.

    pumuckl schrieb:

    Der beste objektorientierte Entwurf ist und bleibt genau das: Ein Entwurf, d.h. ein theoretisches Modell.

    Der Weg von einem guten Entwurf in einer Modellierungssprache zu lauffähigem Code ist manchmal nur ein Mausklick. Das wird sich in Zukunft mit Sicherheit noch verstärken. Unsere indischen Freunde kosten halt auch viel Geld. 😉

    asc schrieb:

    Das sehe ich nicht so. Du kannst zwar gewisse Konzepte der OO auch in nicht-OO Sprachen umsetzen, die Sprachunterstützung erleichtert dies aber ungemein.

    So habe ich es nicht gemeint. Ich hätte vielleicht "unabhängig von der jeweiligen objektorientierten Sprache" schreiben sollen. Was ich meinte ist, selbst wenn man std::string statt char-Arrays verwendet, kann einem ein Entwurf trotzdem um die Ohren fliegen, weil einfach mehr dazugehört als konsequent Objekte zu verwenden. Und die Techniken, die man erlernen muss um da etwas vernünftiges hinzubekommen sind nicht abhängig von einer bestimmten Programmiersprache.

    Registrierter Troll schrieb:

    Wenn man C++ lernen will, dann sollte man auch C++ lernen. Mit C anzufangen ist ein Umweg, der oft mehr Schaden anrichtet als er Vorteile bringt.

    Was zu beweisen wäre. Ich kann mir nicht vorstellen, dass das stimmt. Argumente siehe oben in diesem Post.



  • Du solltest aber einen Punkt nicht unterschätzen: Wenn man von C kommt, hat man für viele Anwendungsbereiche bereits Sprachmittel und spezifische Vorgehensweisen (eben diese Dinge wie char* , malloc() , memcpy() ). Wenn man in C++ ein Problem lösen will, kann man das auch mit C-Mitteln tun. Die Verlockung ist oft gross, bereits bekannte Ansätze zu verwenden. Beginnt man hingegen mit C++, stellt sich einem diese Frage gar nicht. Wenn man keine C++-Lösungsmöglichkeit für ein Problem kennt, kennt man gar keine. Dadurch ist man gezwungen, sich direkt über C++ zu informieren.

    Klar sollte man auch C++-Bücher lesen, wenn man umsteigt. Aber es gibt dennoch C++-Mechanismen, die einem tendenziell länger unbekannt bleiben, weil man sie aufgrund der vorhandenen C-Alternativen nie benötigt.

    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.



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

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

    Deshalb ist es für mich kein Argument zu sagen man sollte besser kein C lernen

    Das hat auch niemand gesagt.

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



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


Anmelden zum Antworten