C++ oder Java?
-
Java ist scheiße.
-
Wdh. schrieb:
Java ist scheiße.
Du bist mein Held. Wiedermal ein total sinnloses und unpassendes Kommentar. Kann mir zumindest ein Troll mal erklären, was daran soviel Spaß macht?
-
Java _ist_ scheiße.
-
Helium schrieb:
Ich sehe leider keinerlei Zusammenhang mit dem Thema. OOP soll sowieso irgendwann gelernt werden. Deswegen ist es total egal, ob OOP einfacher oder schwerer als irgend ein anderes Paradigma ist.
Zeiger sollen auch irgendwann gelernt werden. Deswegen ist es total egal, ob Zeiger einfacher oder schwerer als irgendein anderes Sprachkonstrukt sind.
Den Anfang wirst du in C und in C++ rein prozedural machen. OOP ist also hier absolut nicht von belang.
Bei dir vielleicht. Aber dann sag das auch dazu. Ich kann dir versichern, dass das nicht selbstverständlich ist.
Wenn man bei deinem C++ Beispiel "nicht wissen muss", was Klassen sind, warum muss man dann bei dem ohnehin gekünstelten C-Beispiel plötzlich Zeigerarithmetik beherrschen?
Wenn du dich nur an strcpy und strcat störst - nicht dass man für sie Zeigerarithmetik betreiben müsste -, hindert dich keiner daran, diese Funktionen auch wegzulassen:char foo[] = "Hallo"; char bar[] = ", Welt!"; char zusammen[20]; sprintf(zusammen,"%s%s", foo, bar); printf ("Zusammen ergibt das: %s\n", zusammen);
Wenn printf kein Problem darstellt, sollte sprintf ebenfalls keins sein, nicht wahr? Und dass "zusammen" genug Platz braucht, damit man foo und bar hineinstecken kann, leuchtet auch jedem Anfänger ein.
Aber wie gesagt ist dein Beispiel eh gekünstelt. Den Anfängerkurs möchte ich sehen, der sofort beginnt Strings zusammenzuschachteln und nicht einfach erstprintf ("Zusammen ergibt das: %s%s\n", foo, bar)
schreibt. Denn genau das macht ein Anfänger und ein Anfängerkurs am Anfang.
OOP ist irrelevant. Erklär mit in genau drei Sätzen Zeiger, so dass ich sie als Anfänger verstehe (inklusive Zeigerarythmetik, versteht sich).
Ich kenne keine Zeigerarythmetik.
1. Satz: Ein Computer hat einen Speicher, der durchnummeriert ist, damit die Kiste sich auch zurechtfindet und weiß, wo was steht.
2. Satz: Diese Nummern nennt man Adressen und eine Variable, die keinen "normalen" Wert sondern so eine Adresse als Wert speichert, nennt man Zeiger.
3. Satz: Mit dieser Adresse im Zeiger kann der Computer jetzt direkt Stellen im Speicher finden, ohne "den Namen" der Speicherstelle wissen zu müssen.Was genau ist da jetzt das unglaublich fiese und unverständliche Problem an Zeigern?
-
Hallo,
Was genau ist da jetzt das unglaublich fiese und unverständliche Problem an Zeigern?
die Anwendung ist imho ein großes Problem.
Aber zum Thema: Ich persönlich war recht angepisst, als ich mir als damaliger Java-only Programmierer C angeschaut hab. Das ist echt nicht lustig. Das hat mich auch schnell abgeschreckt und zu C++ getrieben, was sich inzwischen als Vorteil rausgestellt hat, da ich mir so wenigstens nie das reine C-Programmieren angewöhnt habe.
OOP mag schwerer sein als prozedurale Programmierung, aber nur die Programmierung bzw. Modellierung. Das Anwenden wird erleichtert (oder warum treiben wir das denn überhaupt?).Mfg
GPC
-
sarfuan schrieb:
1. Satz: Ein Computer hat einen Speicher, der durchnummeriert ist, damit die Kiste sich auch zurechtfindet und weiß, wo was steht.
2. Satz: Diese Nummern nennt man Adressen und eine Variable, die keinen "normalen" Wert sondern so eine Adresse als Wert speichert, nennt man Zeiger.
3. Satz: Mit dieser Adresse im Zeiger kann der Computer jetzt direkt Stellen im Speicher finden, ohne "den Namen" der Speicherstelle wissen zu müssen.Was genau ist da jetzt das unglaublich fiese und unverständliche Problem an Zeigern?
Diese drei Sätze bringen dir nur was, wenn du eh schon längst weißt was Zeiger sind. Ein Anfänger kann damit nichts anfangen.
-
GPC schrieb:
die Anwendung ist imho ein großes Problem.
Kann ich durchaus nachvollziehen. Allerdings bestimmt man die Größe dieses Problems noch immer selber. Das, was man wissen *muss*, ist nicht mehr als die drei Sätze von vorher.
Aber zum Thema: Ich persönlich war recht angepisst, als ich mir als damaliger Java-only Programmierer C angeschaut hab. Das ist echt nicht lustig.
Genau darum geht es mir, denn das ist das Problem. Deswegen halte ich die Richtung C -> C++ ebenfalls für besser. Dass der C++-Stil dann angeblich versaut sein soll, gründet doch nur darauf, dass die Leute OOP nie gelernt haben. Das liegt aber nicht an C, sondern an "ich hab mir jetz paar tutz zu c++ angeschaut" ...
Wer erfolgreich mit C angefangen hat, bringt schon ein viel grundlegenderes und imho auch besseres Verständnis mit. Darauf aufbauend kann man wunderbar andere Sprachen und Paradigmen lernen. Das und dass C auch einfacher (!= bequemer) ist, sind die Gründe, weswegen ich einen Anfang mit C keinesfalls verteufeln würde.interpreter schrieb:
Diese drei Sätze bringen dir nur was, wenn du eh schon längst weißt was Zeiger sind. Ein Anfänger kann damit nichts anfangen.
Die Sätze sind alles, was man braucht, um Zeiger zu verstehen. Dass man sich das auch erst mal durchdenken muss, nun, dagegen kann ich nichts tun. Denken muss man noch immer selber.
-
sarfuan schrieb:
Helium schrieb:
Ich sehe leider keinerlei Zusammenhang mit dem Thema. OOP soll sowieso irgendwann gelernt werden. Deswegen ist es total egal, ob OOP einfacher oder schwerer als irgend ein anderes Paradigma ist.
Zeiger sollen auch irgendwann gelernt werden. Deswegen ist es total egal, ob Zeiger einfacher oder schwerer als irgendein anderes Sprachkonstrukt sind.
Nein, denn Zeiger sind in der C-Progammierung von Anfang an essenziell. Du kannst nichtmal scanf verwenden ohne Adressen.
sarfuan schrieb:
Den Anfang wirst du in C und in C++ rein prozedural machen. OOP ist also hier absolut nicht von belang.
Bei dir vielleicht. Aber dann sag das auch dazu. Ich kann dir versichern, dass das nicht selbstverständlich ist.
Wer bitte erklärt erstmal, wie man tolle OO-Modelle aufbaut, bevor er beigebracht hat, wie man ein "Hallo Welt" programmiert?
sarfuan schrieb:
Wenn man bei deinem C++ Beispiel "nicht wissen muss", was Klassen sind, warum muss man dann bei dem ohnehin gekünstelten C-Beispiel plötzlich Zeigerarithmetik beherrschen?
Muss man nicht.
sarfuan schrieb:
Wenn du dich nur an strcpy und strcat störst - nicht dass man für sie Zeigerarithmetik betreiben müsste -, hindert dich keiner daran, diese Funktionen auch wegzulassen:
char foo[] = "Hallo"; char bar[] = ", Welt!"; char zusammen[20]; sprintf(zusammen,"%s%s", foo, bar); printf ("Zusammen ergibt das: %s\n", zusammen);
Wenn printf kein Problem darstellt, sollte sprintf ebenfalls keins sein, nicht wahr? Und dass "zusammen" genug Platz braucht, damit man foo und bar hineinstecken kann, leuchtet auch jedem Anfänger ein.
Das ausreichen Speicher dasein muss ja, aber ist das nicht in jeder Situation so einfach sicherzustellen, wie hier.
Es ist einfach Erfahrung, dass Anfänger den Umgang mit std::string als deutlich einfacher empfinden, als den mit char *. Und um mit Strings vernümftig arbeiten zu können braucht man Zeigerarithmetik.sarfuan schrieb:
Aber wie gesagt ist dein Beispiel eh gekünstelt. Den Anfängerkurs möchte ich sehen, der sofort beginnt Strings zusammenzuschachteln und nicht einfach erst
printf ("Zusammen ergibt das: %s%s\n", foo, bar)
schreibt. Denn genau das macht ein Anfänger und ein Anfängerkurs am Anfang.
Warum macht der Anfänger das? Weil der Aufwand zum Aneinanderhängen in C viel zu groß ist. Was, wenn ein aneinandergehängter Text weiterverarbeitet werden muss?
sarfuan schrieb:
OOP ist irrelevant. Erklär mit in genau drei Sätzen Zeiger, so dass ich sie als Anfänger verstehe (inklusive Zeigerarythmetik, versteht sich).
Ich kenne keine Zeigerarythmetik.
1. Satz: Ein Computer hat einen Speicher, der durchnummeriert ist, damit die Kiste sich auch zurechtfindet und weiß, wo was steht.
2. Satz: Diese Nummern nennt man Adressen und eine Variable, die keinen "normalen" Wert sondern so eine Adresse als Wert speichert, nennt man Zeiger.
3. Satz: Mit dieser Adresse im Zeiger kann der Computer jetzt direkt Stellen im Speicher finden, ohne "den Namen" der Speicherstelle wissen zu müssen.Was genau ist da jetzt das unglaublich fiese und unverständliche Problem an Zeigern?
[/quote]
Das ist das Prinzip, das hinter Zeigern steht. Nach den Sätzen kann ich Zeiger nichtmal annähernd praktisch einsetzen.
Was ist mit Null-Zeigern? Was ist mit Arithmetik.Das sind jetzt aber auch alles nur irgendwelche einzelfall-Beispiele.
Wenn du die ersten Schritte in C als einfacher empfindest, als die in C++, dann ist das dein Ding. Ich empfinde es anders und meine Erfahrung mit Anfängern bestätigt mich.
-
Wieso macht ihr immer wieder bei diesen flamewars mit?
-
sarfuan schrieb:
interpreter schrieb:
Diese drei Sätze bringen dir nur was, wenn du eh schon längst weißt was Zeiger sind. Ein Anfänger kann damit nichts anfangen.
Die Sätze sind alles, was man braucht, um Zeiger zu verstehen. Dass man sich das auch erst mal durchdenken muss, nun, dagegen kann ich nichts tun. Denken muss man noch immer selber.
Imho völlig weltfremd. Um die ganze Zeigerarithmetik oder Funktionszeiger zu verstehen bedarf es schon ein bißchen mehr.
-
interpreter schrieb:
Imho völlig weltfremd. Um die ganze Zeigerarithmetik oder Funktionszeiger zu verstehen bedarf es schon ein bißchen mehr.
Natürlich bedarf es dafür (etwas, aber nicht viel) mehr. Hab ich irgendwo etwas anderes behauptet?
Helium schrieb:
(...) Zeiger sind in der C-Progammierung von Anfang an essenziell. du kannst nichtmal scanf verwenden ohne Adressen.
Richtig. Und um scanf oder gets verwenden zu können, bedarf es Arrays - die bringst du deinem C++ Anfänger auch bei - und eben die drei Sätze zu Zeigern. Keine Zeigerarithmetik, keine Funktionszeiger.
-
sarfuan schrieb:
interpreter schrieb:
Imho völlig weltfremd. Um die ganze Zeigerarithmetik oder Funktionszeiger zu verstehen bedarf es schon ein bißchen mehr.
Natürlich bedarf es dafür (etwas, aber nicht viel) mehr. Hab ich irgendwo etwas anderes behauptet?
Helium schrieb:
(...) Zeiger sind in der C-Progammierung von Anfang an essenziell. du kannst nichtmal scanf verwenden ohne Adressen.
Richtig. Und um scanf oder gets verwenden zu können, bedarf es Arrays - die bringst du deinem C++ Anfänger auch bei - und eben die drei Sätze zu Zeigern. Keine Zeigerarithmetik, keine Funktionszeiger.
Du willst ihnen Arrays beibringen ohne Zeigerarithmetik. Soso