Erst C lernen oder weiter mit C++ machen?
-
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
-
dazu lernt man, dass funktionen rückgabe werte haben und vertraut nicht gleich darauf, mit einem try/catch die ganzen fehler abzufangen.
Immer diese Scheinargumente. Lernt man das in C++ etwa nicht? Wie kommt's, dass ich mit C++ angefangen habe und trotzdem mit solchen Funktionen umgehen kann? Als Beispiel für Funktionen, die über ihren Rückgabewert einen Fehler ausgeben, seien auch die IOStreams Klassen genannt (wobei man hier sogar die Wahl hat), deren Handhabung in jedem besseren C++ erklärt wird.
dazu dann noch die stdlib funktionen die sich in vielen anderen programmiersprachen wiederfinden (c++ stdlib funktionen hab ich noch nie in anderen sprachen gefunden).
Ja, aber wozu? Zu vielen Funktionen gibt es eine C++ Alternative und wenn nicht, schaut man sich halt mal auf www.cplusplus.com die Spezifikation und die Beispiele an und schon hat's sich. Ist ja nicht so als wäre C kompliziert.
-
asc schrieb:
**(2)**Die Folge ist, das wer zuerst C und dann C++ lernt, nicht selten C mit Klassen, aber kein C++ programmiert.
C funktioniert nach dem Prinzip 'Teile und Herrsche' bzw. lässt sich damit
viel einfacher als mit C++ auch große, stabile, zuverlässige und
professionelle Software schreiben.
In C++ gilt ja demgegenüber schon alleine
diese Herangehensweise an größere Projekte (aka. 'Funktionale Dekomposition'),
als schädlich und deshalb wird man mit C++ auch nicht so ohne weiteres
ein größeres Projekt ordentlich analysieren können.
In C++ und OOP arbeitet man ja scheinbar lieber nach dem Prinzip
'Versuch und Irrtum', dort bastelt irgendwelche wildfremden Klassen
und Objekte zu einer (meistens) ziemlich verbuggten Scheinlösung
der Aufgabenstellung zusammen, ohne sich je sonderliche Gedanken über eine
geeignete Modularisierung der Aufgabenstellung (== funktionale Dekomposition ist
ja in C++ ein sog. Design-Anti-Pattern) gemacht zu haben. Man nimmt halt
meistens irgendwelche Klassen her, die man schon hat oder irgendwo im Internet
findet (ohne Gewähr ob sie überhaupt funktionieren oder von wem sie eigentlich
erfunden wurden), und pfercht sie dann unreflektiert zu einem Spaghetti-Code
zusammen. Und das nennt man dann halt lustiger Weise OOP und ist wohl eher
eine Marketing-Schlagwort und hat eigentlich ansonsten keinerlei Vorteile.Naja, also mE ist es vernünftiger, dass man C lernt, weil man sich dann die
schlampige und problemferne (aka 'abstrakte') Arbeitsweise der C++ Programmierer
gar nicht erst angewöhnt. Man möchte ja meistens doch eher etwas Konkretes
programmieren (== C) als irgend einen abstrakten OOP-C++-Käse.Funktionale Dekomposition und damit auch Problemlösungskompetenz lernt man
eigentlich nur, wenn man viel mit C arbeitet.
Mit C++ wird man eher zum Konsumenten und Anwender irgendwelcher
vorgebastelter Klassen und Frameworks 'erzogen', die man selten wirklich versteht oder
lt. C++ Lehrmeinung gar nicht verstehen soll.
Programmieren in C++ ist sehr gut vergleichbar mit einem Koch, der
das Gericht verwürzt, weil er keine Ahnung davon hat, was in seinen
verschiedenen Gewürz-Behältern eigentlich drinnen ist (bzw. weil er sich auch
gar nicht sonderlich dafür interessiert). Also nimmt er halt irgendwelche
Behälter her und kippt auf gut Glück halt auch irgend welche Zufälligen Gewürze
in die Suppe.
Guten Appettit !! In etwa so schmecken nämlich auch die C++ - Erzeugnisse
(verglichen mit C-Software, wo man Software ganz allgemein viel gründlicher
plant und idR auch mehr Kontrolle darüber / Interesse daran hat, welche
Gewürze man dem Konsumenten zumuten möchte und welche nicht !!)
mfg
-
Paradigma1 schrieb:
...
Und schon wieder der selbe unregistrierte C++-Basher.