Erst C lernen oder weiter mit C++ machen?
-
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.
-
__-- schrieb:
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.
Man kann auch mit C++ die Grundlagen auf binärebene usw. lernen, nur muss man dazu deshalb dennoch weder den C-Stil, noch die C-Bibliotheken lernen. Ich wiederspreche auch nicht, wenn man sagt, das gewisses Lowlevel-Wissen sinnvoll ist, aber wie gesagt muss man dazu dennoch kein C lernen.
-
man lernt sowas aber nicht freiwillig (wer baut in c++ oop nach? den deppen zeigst mir mal!). dazu lernt man, dass funktionen rückgabe werte haben und vertraut nicht gleich darauf, mit einem try/catch die ganzen fehler abzufangen. dazu dann noch die stdlib funktionen die sich in vielen anderen programmiersprachen wiederfinden (c++ stdlib funktionen hab ich noch nie in anderen sprachen gefunden).
-
Lass am besten C++ ganz sein. Die Sprache war und ist noch immer der größte Krampf in der IT-Geschichte.
-
__-- schrieb:
(c++ stdlib funktionen hab ich noch nie in anderen sprachen gefunden).
erzähle nicht so einen Grind. In PHP beispielsweise wird mit SPL sowas in der Richtung gemacht.
-
haben wir uns nicht schon öfter daruf geeinigt, dass php nicht der große wurf war