C++ lernen anhand von C?
-
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- undmemcpy-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
classund massenhaftnew/deleteprogrammiert und noch nie was vonstring,vectorodermapgehö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).
-
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