Warum ist C++ so schwer zu lernen?
-
Warum ist C++ so schwer zu lernen? Die Zeit, die ich bei anderen Sprachen zum Lernen der kompletten Sprache gebraucht habe, reicht bei mir nicht mal um die C++-Grundlagen zu lernen. Immer wieder mache ich üble Fehler, das ist ziemlich frustrierend. Wenn ich mal Code in einem Forum poste, wird der von den C++-Profis auseinandergenommen und es wird gezeigt was alles total falsch ist. Das ist ja gut für das Lernen, aber bringt mich irgendwie immer wieder "Zurück zum Start". Ich will aber diesmals nicht wieder aufgeben, seit 2006 versuche ich immer mal wieder mir C++ anzueigenen und habe dann nach mehreren Wochen aufgegeben, aber diesmal will ich es wirklich durchziehen. Die Motivation das durch zu halten geht aber immer mal wieder auf Null zurück, dann mache ich ein paar Tage Pause und fangen wieder, vom Ehrgeiz gepackt, an weiter zu machen.
Geht das nur mir so, mit dem Lernen von C++?
-
Warum willst Du C++ lernen?
-
Warum ist C++ so schwer zu lernen?
Schlechte Bücher auf dem Markt.
-
Helmut.Jakoby schrieb:
Warum willst Du C++ lernen?
gute Frage!
.. und die Antwort darauf, die sich CppLerner selber geben muss, entscheidet darüber wie erfolgreich Du dabei bist.
Hallo CppLerner,
Ja - C++ ist schwer zu lernen. Ich versuche das schon wesentlich länger als Du, meine es inzwischen leidlich zu können, und jetzt beginne ich mich intensiver mit C++11 zu beschäftigen - und habe noch viel zu lernen.
Ich meine, es ist deshalb so schwer, weil es so viel bietet. Ein und das selbe Programm kann mit C++ in verschiedenster Weise implementiert werden. Das ist gleichzeitig einer der großen Vor- und Nachteile von C++. .. halt eine 'Multi-Paradigmen-Sprache'Gruß
Werner
-
@Helmut.Jakoby:
Weil ich sehr an Multimediaprogrammierung(Grafik, Video und Softsynths etc.) interessiert bin und ich denke, C++ ist da schon die erste Wahl.@volkard:
Warum schreibt denn keiner gute Bücher oder Tuts? Können die meisten nicht schreiben, oder können die meisten kein C++?
-
CppLerner schrieb:
@volkard:
Warum schreibt denn keiner gute Bücher oder Tuts? Können die meisten nicht schreiben, oder können die meisten kein C++?Es gibt gute Bücher.
-
CppLerner schrieb:
@Helmut.Jakoby:
Weil ich sehr an Multimediaprogrammierung(Grafik, Video und Softsynths etc.) interessiert bin und ich denke, C++ ist da schon die erste Wahl.Mag sein, dass C++ für Deine Anwendung eine gute Wahl ist, aber IMHO reicht das nicht. Du solltest (auch) an C++ interessiert sein - aus welchen Gründen auch immer.
-
Ich würde mich zuerst mit den Grundlagen der objektorientierten Softwareentwicklung vertraut machen. Was sind Klassen, Methoden, Attribute, Vererbung und andere Objektbeziehungen etc. in Bezug zu einer objektorientierten Analyse aber ohne Bezug zu einer bestimmten Programmiersprache. Das finde ich im Nachhinein Notwendig, um das objektorientierte Paradigma zu verstehen.
Ich empfehle C++ zu lernen, ohne erst mit C anzufangen. Ich habe mit "Die C++ Programmiersprache" von Bjarne Stroustrup ein gutes Buch für den Anfang gefunden. Ein Buch über Design Patterns und die Beschäftigung mit der STL ist auch ganz nützlich.
Du könntest Dich zuerst zur Übung mit kleinen Helferklassen beschäftigt, welche Dir den Programmieralltag versüßen.
Erst dann würde ich ein Projekt mit GUI angehen. Für mich (subjektiv) hat sich die Nutzung von QT als sehr leichgängig angefühlt. Dafür braucht man nicht mal ein Buch, da die Online-Doku voll ausreicht.
-
Es gibt da ein Missverständnis was C++ als Sprache angeht.
Nehmen wir mal als Konkurrenten Java. Ich kenne beide Sprachen aus der täglichen Praxis seit mind. 15 Jahren. Kann also gut vergleichen, was die Lernkurve angeht.
Wenn ich Java nehme, und nur den Sprachkern betrachte, ist dieser viel weniger Umfangreich. Man hat tatsächlich ggü. dem C++-Sprachkern viel weniger zu lernen.
Jetzt kommt aber Haken von Java und anderen einfacheren Sprachen: für größere Projekte kommt man mit dem Sprachkern nicht aus. Um ein größeres Projekt zu stemmen und wartbar zu halten, muss ich das, was mir C++ im Sprachumfang anbietet, in Java & Co. durch zusätzliche Frameworks, Tools und sogar VM-Erweiterungen kompensieren.
Ein sehr gutes Beispiel ist OSGi. Wir benutzen OSGi und die Eclipse RCP (nicht die IDE) um das nachzuholen, was ich mit C++ und den Betriebssystem-Funktionen (z.B. COM und ActiveX) direkt im Zugriff habe. Dabei macht OSGi genau das was COM/ActiveX macht, in dem es die JavaVM im Kern verändert! Weil wir mit der Standard-JVM einfach nicht die Möglichkeiten haben, die uns C++ mit seiner Möglichkeit der nativen OS-Features ermöglicht.
Und jeder der bei uns im Projekt mitarbeitet, darf erstmal sich in OSGi und Eclipse RCP einarbeiten.
Dann gibt es so nette Sachen wie Annotationen in Java. Das haben wir doch auch in C+++ mit Metaprogrammierung und Makros?
In OSGi die Package-Exports in den Bundels? Da haben wir in C++ die Header-Dateien.
In OSGi die Friend-Bundles? Da haben wir in C++ das friend-Schlüsselwort.
Das Problem bei C++ ist, das irgendwie alles als Grundlage gilt, was in anderen Sprachen erst mit Projektanforderung zu erlernen ist. In Java-Einsteigerbüchern gibt es kein Springframework, kein OSGi usw. Aber jeder der als Java-Entwickler in die Unternehmens-Projekte einsteigt, wird sich die Java EE Edition antun müssen. Und dann wird er merken, das da echt ein Brocken auf einen zu kommt.
OK, es gibt auch in C++ echt noch so Legacy-"Features" auf die man heute echt verzichten könnte. Z.B. wird heute immer noch in den Büchern mit Pointern und new[] delete[] um sich geworfen, obwohl man erstmal mit std::vector anfangen könnte. Kein C++-Einsteiger muss wissen, wie man einen eigenen Container programmiert! Das Erfolgsgefühl wird dadurch unnötig hinaus gezögert. Und das ohne Grund!
Das Argument, man muss ja wissen, wie etwas funktioniert, ist für einen Anfänger einer OOP-Sprache völlig irrelevant! Gerade bei OOP zählt: wenn ich nicht weiß wie dahinter genau etwas funktioniert, dann ist es OO sprich Kapselung.
Und kein Anfänger hat am Anfang die Sorge, ob sein Programm skaliert oder eine Millisekunde schneller läuft, als Variante 2.
Aber das ist den C++ Büchern und Ideologen geschuldet, die sich nicht in einen Einsteiger einfühlen können.
@CppLerner! Wenn du etwas in C++ nicht verstehst, vor allem die Lowlevel-Sachen, dann mach in deine Buch weiter. meistens kommt der Aha-Effekt später! Und kaufe dir das Buch "Effektiv C++ Programmieren" und danach "Der pragmatische Programmierer".
„Die C++ Programmiersprache“ von Bjarne ist NICHT zu empfehlen. Es ist genau das was es nicht soll: den Einsteiger mit Low-Level verwirren! Das sagt Bjarne selbst, deshalb hat Bjarne ein anderes neues Buch geschrieben.Es gibt keinen Grund nicht effektiv und nicht pragmatisch zu handeln. Nur so kommt man weiter. Ein paar C++ler in diesem Forum sind Ideologen, und das ist unprofessionell. Die sind nicht besser wie die schlechten C++-Buchautoren.
-
Meine Buchempfehlungen:
Einsteiger (nur eines davon):
- Der C++-Programmierer: C++ lernen - professionell anwenden - Lösungen nutzen von Ulrich Breymann
- C++ Primer - Schneller und effizienter Programmieren lernen von Stanley B. Lippman und Josée Lajoie
Das sind die zwei einzigen deutschen Bücher die ich empfehlen kann, da sie beim Einstieg nicht zu sehr mit Low-Level nerven.
Weiterführend in der Reihenfolge:
- Effektiv C++ Programmieren von Scott Meyers
- Der Pragmatische Programmierer von David Thomas und Andrew Hunt
Letzteres Buch ist nicht speziell für C++, aber für jeden Programierer gedacht. Da werden einem mal die Augen geöffnet, wie man wirklich mit Projekte weiter kommen kann.
-
Programmieren ist eben schwer und als Folge davon ist Programmieren lernen halt auch schwer...
-
Artchi schrieb:
Es gibt da ein Missverständnis was C++ als Sprache angeht...
Sehr gut
-
@Artchi:
Danke für die sehr ausfürhliche Darstellung von C++ und wie man C++ NICHT lehren sollte. Genau mit dieser didaktische Grundregel, vom Einfachen zum Komplizierten, würde das C++ Lernen viel besser klappen. Wenn ich hier Lösungvorschläge von Profis, für ganz einfach Probleme, sehe, dann fällt mir die Kinnlade runter. Da werden Streams umgeschrieben und mit Templates um sich geworfen und alles auf Execption- und Threadsicherheit hin optimiert und geprüft. Dabei hätte eine Lösung, die etws langsamer und länger wäre, dem Fragesteller mit Sicherheit tausendmal mehr gebracht. Da kommt es einem so vor, als müssten die Lösungsgeber sich selbst mir ihrem Wissen künstlich aufplustern, indem sie jeden Kniff, den sie kennen, in die Antwort mit rein pressen, damit man nicht mehr gegen Mekka betetet, sondern in seine Richtung.@dot:
Das Programmieren an sich habe ich durch zehn Jahre Berufserfahrung eigentlich soweit im Griff. Ich bin dann aber ausgestiegen, denn ich wollte nicht immer an dem Misserfolg von Deadlines schuld sein. Ich konnte bis zum Schluss den Aufwand eines Projektes nicht wirklich abschätzen, da oft immer was Neues dabei war, was ich erst lernen musste. Der Dumme war letztendlich immer ich, dabei habe ich mir den Arsch aufgerissen. In meinen jetzigen Job wird mein Wissen geschätzt und keiner sagt mir dass dieses Problem doch schnell mal runterprogrammiert sein müsste.
-
Artchi schießt da ein wenig übers Ziel hinaus. Türlich kann man in einem Einsteigerbuch Container implementieren (vollkommen ohne Konflikt mit CppLerners "Vom Einfachen zum Schwierigen"). Und es gibt schätzungsweise zwei- bis dreimal so viele gute Einsteigerbücher, wie er meint.
-
Ich weiß nicht wie es dem TE geht, aber wenn es noch bessere Bücher gibt würde es mich auch recht interessieren, welche das denn wären, damit ich auch die richtige Wahl treffen kann.
-
CppLerner schrieb:
Da kommt es einem so vor, als müssten die Lösungsgeber sich selbst mir ihrem Wissen künstlich aufplustern, indem sie jeden Kniff, den sie kennen, in die Antwort mit rein pressen
Ja, manche machen einen auf dicke Hose. Von wegen "Kuck mal, was ich alles draufhab".
Gewöhnt man sich dran und denkt sich nur noch "Ach du wieder mit deiner Profilneurose".
Manchmal lenken die einen von einer einfachen, vernünftigen Lösung nur ab.
Das ist sicher manchmal ein Problem.EDIT:
Ich muß zugeben, daß ich auch manchmal thread-hijacking betreibe, aber immer nur wenn ich den Eindruck habe, "alles ist schon gesagt" oder "dem ist sowieso nicht zu helfen".
-
Dann gibt es also unter den Programmierern auch die BWM- und Mercedesfahrer, wie in jeder anderen Branche auch, nur dass hier das Wissen die Schwanzverlängerung ist. Ich dachte immer, bei halbwegs intelligenten Menschen ist das nicht so stark ausgeprägt, sie sind aber auch nicht anders als der Rest, was ja auch logisch ist.
-
CppLerner schrieb:
Dann gibt es also unter den Programmierern auch die BWM- und Mercedesfahrer, wie in jeder anderen Branche auch, nur dass hier das Wissen die Schwanzverlängerung ist. Ich dachte immer, bei halbwegs intelligenten Menschen ist das nicht so stark ausgeprägt, sie sind aber auch nicht anders als der Rest, was ja auch logisch ist.
LOL. Ja, die Porschefahrer mit viel PS und wenig ... findest du auch hier. Wie überall in der Welt.
EDIT:
Ich hab auch schon mehrfach einen auf den Deckel gekriegt, weil ich wüst C und C++ mische (Sakrileg!).Damit kann ich leben.
Schön ist es aber nicht (das Mischen :p)
-
EOP schrieb:
Ja, manche machen einen auf dicke Hose. Von wegen "Kuck mal, was ich alles draufhab".
Gewöhnt man sich dran und denkt sich nur noch "Ach du wieder mit deiner Profilneurose".
Manchmal lenken die einen von einer einfachen, vernünftigen Lösung nur ab.
Das ist sicher manchmal ein Problem.Das passiert, wie ich finde und ind en Fällend ann auch unterstütze, meistens, wenn ein unwilliger Anfänger ankommt mit "Ich muss hier mehrere Zahlen einlesen und die Summe berechnen. Bin Anfänger also macht mal!".
Und dann kommen immer wieder coole und interessante Lösungen, die zwar dem OP absolut nicht helfen (und auch nicht helfen sollen), aber immer wieder Lernstoff bieten. Z.B. Template Meta Magie.In threads wo der OP jedoch was Eigeninitiative zeigt kommt das eig nur extremst selten vor.
-
Skym0sh0 schrieb:
Das passiert, wie ich finde und ind en Fällend ann auch unterstütze, meistens, wenn ein unwilliger Anfänger ankommt mit "Ich muss hier mehrere Zahlen einlesen und die Summe berechnen. Bin Anfänger also macht mal!".
Und dann kommen immer wieder coole und interessante Lösungen, die zwar dem OP absolut nicht helfen (und auch nicht helfen sollen), aber immer wieder Lernstoff bieten. Z.B. Template Meta Magie.In threads wo der OP jedoch was Eigeninitiative zeigt kommt das eig nur extremst selten vor.
Ja, auf threads wie "HILFE!!! Muß bis übermorgen dringend meine Semesterarbeit fertig kriegen"
main() { }
"hab ich schon", antworte ich entweder gar nicht oder es gibt nen fiesen Kommentar.