Erst C lernen oder weiter mit C++ machen?
-
Ich arbeite zur Zeit mit dem Buch "C++ von A bis Z", doch habe mir sagen lassen, ich solle zuerst C lernen bevor ich mit C++ anfange. Ich hatte C eine kurze Zeit in der Schule. Wir sind dann ziemlich schnell auf C++ umgestiegen.
Wollte euch nach eurer Meinung fragen, da ich mir jetzt wieder total unsicher bin.
Bei der Wahl der Bücher habe ich auch total den Durchblick verloren. "C++ von A bis Z" deckt anscheinend sehr viele Themen ab, doch habe ich manchmal das Problem, dass ich einige Dinge nicht verstehe, auch wenn ich das Kapitel 5Mal lese. Das liegt daran, dass Dinge erwähnt werden, aber ansonsten nicht weiter drauf eingegangen werden.
Meine Anforderungen an ein Lehrbuch wären folgende:
-Möglichst aktuell
-Möglichst verständlich
-Übungsaufgaben
-Sollte möglichst viele Themen abdeckenIch weiß, dass das ziemlich hohe Anforderungen sind, doch möchte ich möglichst viel über die Sprache (zu welcher ich mich auch immer entscheide) lernen. Ich will keine halben Sachen machen. Wenn ich schon was Anfange, dann will ich es auch richtig zu Ende bringen.
Also wenn ihr mir den Weg weisen mögt, wäre ich sehr dankbar.
MfG
-
RapistseinHobby schrieb:
Ich arbeite zur Zeit mit dem Buch "C++ von A bis Z",
Bitte nicht, schmeiß dieses Buch weg, du wirst du Müll lernen.
RapistseinHobby schrieb:
Ich arbeite zur Zeit mit dem Buch "C++ von A bis Z", doch habe mir sagen lassen, ich solle zuerst C lernen bevor ich mit C++ anfange. Ich hatte C eine kurze Zeit in der Schule. Wir sind dann ziemlich schnell auf C++ umgestiegen.
Vergiss C und mach lieber mit C++ weiter. Obowhl C und C++ syntaktisch gesehen viele Gemeinsamkeiten haben (die meisten C Progammen lassen sich mit einem C++ Compilier übersetzen), sind sie unterschiedliche Sprachen, insbesondere was die Paradigmen (art & weise wie man Probleme löst) sind ganz anders. Wenn du zuerst C lernst, läufst du Gefahr, C in C++ zu schreiben und das ist nicht gut (ich sag dir aus Erfahrung)
-
Wenn dein Ziel C++ ist, und du nur glaubst, dafür C gebrauchen zu können, dann solltest du C sein lassen! Zuerst C zu lernen bringt dir keinen nennenswerten Vorteil, wenn du kein C-Programmierer sein willst. Man braucht für C++ kein bisschen C-Vorwissen, da die Sprachen einfach unterschiedlich sind. Das sieht man schon an einem sehr einfachen Beispiel (Zeichenkette von Konsolen-Eingabe einlesen), wie Unterschiedlich C und C++ sind:
// C char buf[MAX_BUF]; gets(buf);
// C++ string s; cin >> s;
Man sieht hier sehr schön, das wenn man C gelernt hat, man keinen Vorteil mitbringt, wenn man C++ lernt. Man hat eher seine kostbare Zeit mit was anderem verschwendet, anstatt gleich C++ zu lernen.
Natürlich, wer C nutzen muss, kommt nicht darum herum C zu lernen. Aber du willst ja eigentlich C++ nutzen!Jedes vernünftige C++ Einsteigerbuch bringt dir C++ korrekt bei, ohne C-Vorwissen. Welche Bücher sind zu empfehlen?
"C++ Primer" von Lippmann
"Der C++ Programmierer" von Ulrich Breymann
-
Artchi schrieb:
// C char buf[MAX_BUF]; gets(buf);
Bitte fgets nutzen, das kann sonst zu bösen Überraschungen führen :p
Und ohne diese Diskussion hier jetzt noch mal führen zu wollen, mit haben meine C Kenntnisse beim C++ lernen sehr geholfen. Viel mehr möchte ich dazu jetzt nicht sagen, sonst gibts wieder auf die Rübe
Edit:
Na ja, eine Sache noch.
C lernen geht doch wirklich schnell, gerade wenn man schon Vorkenntnisse hat. Also was solls? Arbeite doch einfach mal eine Woche mit C, danach sitzen die Grundlagen doch eh. (Arrays, Pointer, malloc etc.) Schaden wird es nicht.
-
Erst C lernen oder weiter mit C++ machen?
Nein.
-
cooky451 schrieb:
Edit:
Na ja, eine Sache noch.
C lernen geht doch wirklich schnell, gerade wenn man schon Vorkenntnisse hat. Also was solls? Arbeite doch einfach mal eine Woche mit C, danach sitzen die Grundlagen doch eh. (Arrays, Pointer, malloc etc.) Schaden wird es nicht.Es geht um den mangelnden Nutzen. Wieviel haben dir Arrays, Pointer und malloc bei C++ geholfen? Wahrscheinlich doch eher gar nicht, sondern sie haben dich sogar schlimmstenfalls gehindert, falls du nicht von ihnen ablassen konntest*. Geholfen hat dir sicherlich, dass die Syntax die gleiche ist. Aber da ist es doch letztendlich egal, ob man diese direkt bei C++ lernt oder über den Umweg über C.
*: Das ist nicht bloß leeres Gerede, sondern etwas was ich aus eigener Erfahrung weiß, weil ich anfangs C++ dummerweise mit eben so einem C/C++-Buch gelernt habe. Auch so ein Buch, welches mir andere Unerfahrene Programmierer empfohlen hatten. Meine Güte war das eine Zeitverschwendung muss ich im Nachhinein sagen! Als ich schließlich ganz am Ende des Buches den kleinen Anhang über die STL gefunden hatte konnte ich nicht fassen, was mir da vorher auf 2000 Seiten verheimlicht wurde. Ein Glück war das Buch nicht gekauft sondern nur geliehen
.
Und die Fragen im C++-Forum bestätigen Tag für Tag, dass ich damit nicht der einzige bin.
-
cooky451 schrieb:
Also was solls? Arbeite doch einfach mal eine Woche mit C, danach sitzen die Grundlagen doch eh. (Arrays, Pointer, malloc etc.) Schaden wird es nicht.
doch, als langjähriger C-Programmier tue ich mir sehr schwer damit, Sachen in C++ zu schreiben, weil ich in C denke und dadurch oft viele Sachen in C++ nicht verstehe und dann merke ich, dass ich wieder C in C++ geschrieben habe und noch dazu mit einer viel strikteren Typisierung, dass ich mir manchmal die Haare ausreißen würde.
-
cooky451 schrieb:
C lernen geht doch wirklich schnell
Wir scheinen grundverschiedene Ansichten zu haben, was es bedeutet, eine Sprache zu lernen. Meiner Meinung nach lernt man eine Sprache nicht im Vorbeigehen, sondern muss viel Zeit investieren. Denn zu einer Sprache gehört nicht nur die Syntax, sondern z. B. auch Bibliotheken, Patterns, Best Practices etc. Ich programmier jetzt eher weniger als mehr regelmäßig seit einigen Jahren C++, würde aber nicht behaupten C zu können, weil meine C-Programme wahrscheinlich nur ein großer Haufen Buffer-Overflow-Fehler wären.
-
cooky451 schrieb:
mir haben meine C Kenntnisse beim C++ lernen sehr geholfen.
Man kann erwarten, dass das, was man in C lernt und in modernem C++ auch gebraucht wird, in jedem guten C++ Buch drankommt. Von daher sollte Deine Erfahrung hier IMHO nicht als Empfehlung verstanden werden, erst C vor C++ zu lernen.
Ich würde sogar behaupten, C zu können, obwohl ich nur C++ Bücher (inklusive Stroustrup's "D&E") und keine C Bücher gelesen habe. Es gibt schon feine sprachliche Unterschiede (zB bzgl const, inline, struct tags, implizite void* Konvertierungen, etc) wie auch andere Programmier-Muster, die sich aus dem beschränkten Sprachumfang ergeben. Aber ein spezielles C-Buch brauchte ich dafür nicht.
-
cooky451 schrieb:
Bitte fgets nutzen, das kann sonst zu bösen Überraschungen führen :p
Danke das du unsere Empfehlungen bestätigst, kein C vorher zu lernen!
Genau deshalb sollte man C nicht "mal schnell kurz lernen", weil genau so was bei raus kommt! Man hat Zeit für C verschwendet, und kann es dann trotzdem nicht. Weil man sich eigentlich Jahre darauf spezialisieren muss um alle Eigenheiten von C zu kennen. Genau das gleiche gilt natürlich für auch für C++. Was die Empfehlung "vorher C lernen" nicht gerade besser macht.
Man kann jede Programmiersprache ein bisschen lernen, um mal "vorbei geschaut" zu haben. Aber können tut man es dann trotzdem nicht, und helfen tut es einem in einem realen Projekt erst Recht nicht.
Wer als Ziel C++ hat, soll auch mit C++ anfangen. Punkt!
Das Einzige was ich als Alternative empfehlen kann, wenn jemand absolut noch nie programmiert hat, ist so was wie BASIC als Einstieg in die Programmierwelt.
-
Artchi schrieb:
Genau deshalb sollte man C nicht "mal schnell kurz lernen", weil genau so was bei raus kommt!
Na ja gut, es ging ja nicht darum 5 Jahre C zu lernen um dann auf C++ umzusteigen.
Und wer das Pointer Konzept verstanden hat dem sollte doch eigentlich klar sein dass eine Funktion an die man keine Größe übergibt auch nicht auf diese achten kann
-
cooky451 schrieb:
Na ja gut, es ging ja nicht darum 5 Jahre C zu lernen um dann auf C++ umzusteigen.
Und wer das Pointer Konzept verstanden hat dem sollte doch eigentlich klar sein dass eine Funktion an die man keine Größe übergibt auch nicht auf diese achten kannDas hat nichts damit zu tun wie lange man C lernt, und Zeiger werden auch in C++ Büchern behandelt, ohne auf C spezifische Bibliotheken etc. einzugehen.
C hat eine andere Denkweise als C++. Und wir Menschen sind Gewohnheitstiere, zudem sind wir faul. Wenn wir uns in einer Denkschiene befinden, fällt es uns schwer zu wechseln (Möglich ja, aber man verfällt gerne in bereits vertrautes). Genauso werden wir eben nicht unbedingt den C++ Weg nachschlagen, wenn wir wissen wie es in C funktioniert.
Die Folge ist, das wer zuerst C und dann C++ lernt, nicht selten C mit Klassen, aber kein C++ programmiert.
-
@Cooky451
Du scheinst zu glauben man würde beim Lernen von C++ Pointer oder Char-Arrays gar nicht behandeln. Dem ist aber nicht so. C++ ist keine pure High-Level Sprache, bei der man nur noch mit Referenzen (== Pointer mit anderem Namen) arbeitet, sondern sowohl High- als auch Low-Level.
Folglich wird auch jeder gute C++ Programmierer mit Zeigern umgehen können.
-
Wenn du C++ lernen willst, dann solltest du C++ und kein C lernen! C++ und C teilen zwar viel. Aber in C++ programmiert man doch komplett anders als in C. Daher werden C Vorkenntnisse durchaus als schädlich angesehen.
Folgendes Buch soll ziemlich gut sein für den Einstieg in C++ (gibt auch eine Deutsche Übersetzung)
Programming: Principles and Practice Using C++ | ISBN: 9780321543721
-
cooky451 schrieb:
Artchi schrieb:
Genau deshalb sollte man C nicht "mal schnell kurz lernen", weil genau so was bei raus kommt!
Na ja gut, es ging ja nicht darum 5 Jahre C zu lernen um dann auf C++ umzusteigen.
Und wer das Pointer Konzept verstanden hat dem sollte doch eigentlich klar sein dass eine Funktion an die man keine Größe übergibt auch nicht auf diese achten kannWenn man sich mal Gedanken drüber gemacht hat, sollte alles klar sein. Wie gesagt, wenn... Das war ein sehr einfaches Beispiel. Davon gibts in jeder Schwierigkeitsklasse beliebig viele.
-
Artchi schrieb:
Das Einzige was ich als Alternative empfehlen kann, wenn jemand absolut noch nie programmiert hat, ist so was wie BASIC als Einstieg in die Programmierwelt.
Das ist doch nicht dein Ernst Artchi! Spaghetti-Code mit vielen gotos ohne Funktionen, Strukturen und so?
Nein danke!
Dann doch lieber C als Einstieg. Den Umstieg auf C++ macht man schnell und lernt dazu. Mit C-Kenntnissen wird niemand versaut!
-
berniebutt schrieb:
Spaghetti-Code mit vielen gotos ohne Funktionen, Strukturen und so?
Nein danke!
also aus der verpackung kommen die immer sauber... nur bringst die nie wieder so rein
-
berniebutt schrieb:
Mit C-Kenntnissen wird niemand versaut!
Das hat auch niemand behauptet. Aber in C++ programmiert man gänzlich anders als in C. Die Frage "Ich will C++ lernen. Soll ich vorher C lernen?" ist ähnlich wie "Ich will C++ lernen. Soll ich vorher Java lernen?". An Java kann man auch Syntax, Schleifen, Bedingungen usw. erklären. Sogar OOP, das geht mit C nicht. Trotzdem sagt man danach: "So, jetzt vergiss alles wieder, in C++ programmiert man ganz anders".
-
berniebutt schrieb:
Artchi schrieb:
Das Einzige was ich als Alternative empfehlen kann, wenn jemand absolut noch nie programmiert hat, ist so was wie BASIC als Einstieg in die Programmierwelt.
Das ist doch nicht dein Ernst Artchi! Spaghetti-Code mit vielen gotos ohne Funktionen, Strukturen und so?
Mhh, merkwürdig das ich zu meinen GFA-Basic Zeiten niemals goto über den Weg gelaufen bin...
berniebutt schrieb:
Dann doch lieber C als Einstieg. Den Umstieg auf C++ macht man schnell und lernt dazu. Mit C-Kenntnissen wird niemand versaut!
Viele negative Erfahrungen aus der Praxis lehren was anderes. Und das wurde mir sogar von ein paar erfahrenen C-Programmierern, die auf C++ umgestiegen sind, in der Praxis bestätigt (Ungeachtet der negativen Erfahrungen die ich bei einer Ausbildungsbetreuung usw. sammeln konnte).
Und obwohl ich kein C gelernt hatte, sondern nur den Umstieg zwischen unterschiedlichen Programmierparadigmen vollzogen habe: Ich selbst hatte die ersten Jahre Probleme mit C++ (und damit meine ich nicht Syntaktisch, sondern von der Denkweise her).
-
von allen sprachen die ich bisher "gelernt" hab, hat mir c am meisten gebracht! wer dann noch versucht 'highlevel' features in c nachzubauen, wird ein viel tieferes verständniss erlangen und auf dauer viel besseren code erzeugen.