welche vorteile bietet c++ gegenüber c



  • Hm.. also bei uns gab es eigentlich nie eine offizielle Erlaubnis Taschenrechner benutzen zu dürfen..

    Und zum anderen ist Deine Argumentation auf dieses Muster zurückgeführt worden

    Muss ich momentan leider zugeben.
    Aber die Aussage bezog sich auch eher auf Grundschüler. Ich denke, wir sind uns einig dass man erst das "Rechnen"-Konzept verstehen sollte bevor man einen Taschenrechner nutzt. Und wenn man sich beim rechnen schon so langweilt dass man sich einfach selbst einen Taschenrechner besorgt, wurde das aber auch höchste Zeit.
    Ich möchte hier ja nicht die offensichtlichen Vorteile von C++ kleinreden. Aber dennoch halte ich es für sinnvoller elementare Datentypen, Arrays, Funktionen etc. bekannt zu machen bevor man mit std::string und std::vector anfängt. Und hier eignet sich der "C-Kontext" einfach besser, da dieser nunmal auf dem oben genannten basiert. Ich würde sogar behaupten dass das eher eine zusätzliche Schranke zwischen dem C-Stil und dem C++-Stil zieht.

    @krümel
    Auf Seite 3 sehe ich den Beitrag von C++ antworter. Auf Seite 4 dann die Erwiderung von Nexus und gleich darauf meinen ersten Beitrag hier. Ist immer noch die selbe Diskussion, ja, aber durchgekaut wurde das noch nicht 😃



  • Auf Seite 3 (und jetzt auch auf dieser) ist ein Link zu
    http://www.research.att.com/~bs/new_learning.pdf
    Da kann man dann draufklicken, um den Text zu lesen, der Deine Frage nach dem Sinn beantwortet.



  • cooky451 schrieb:

    Ich denke, wir sind uns einig dass man erst das "Rechnen"-Konzept verstehen sollte bevor man einen Taschenrechner nutzt.

    Nein. Und Du bist Wiederholungstäter. Mit diesem genialen Rechenkästchen kann man selber die Mathematik erforschen. Habs selber schon gesehen, wie Kinder damit die Division entdecken.



  • krümelkacker schrieb:

    Auf Seite 3 (und jetzt auch auf dieser) ist ein Link zu
    http://www.research.att.com/~bs/new_learning.pdf
    Da kann man dann draufklicken, um den Text zu lesen, der Deine Frage nach dem Sinn beantwortet.

    Gerade dieses Beispiel finde ich eigentlich sehr schön. Man lernt dass Speicherplatz nicht vom Himmel fällt und auch noch gleich etwas über Sicherheit beim Programmieren.

    #include<stdio.h> // get standard I/O facilities
    int main()
    {
      const int max = 20;
      char name[max];
      printf("Please enter your first name :\n");
      scanf("%19s",name); // read at most 19 characters into name
      printf("Hello %s\n",name);
      return 0;
    }
    

    Seite 3 etc. beschäftigen sich wohl eher mit der Geschwindigkeit C vs C++ usw. kennt man ja 😃

    Bei 4. (s.9) wird geschrieben "proceeds from the concrete to the abstract". Da bin ich ja grundsätzlich einer Meinung, nur sollte man doch auch nah am Beispiel das Abstrakte erklären und nicht erst 10 Beispiele später. Und char arrays sind wohl schneller erklärt als std::string.



  • Dagegen printf ist einfach eine Funktion und was Funktionen sind lernt man sehr schnell ganz am Anfang.

    Ach, und Anfänger wissen direkt wie printf funktioniert? Dass da ein String geparst werden muss, dass da eine variable Argumentenliste im Spiel ist?

    Der kann dann irgendwie etwas mit cout ausgeben und weiß auch dass vector wohl irgendwie sowas wie ein dynamisches array ist aber viel gewonnen hat man damit nicht.

    Wieso nicht? Damit hat er die ersten Werkzeuge bekommen um tatsächlich mit der Sprache arbeiten zu können.

    Man lernt dass Speicherplatz nicht vom Himmel fällt und auch noch gleich etwas über Sicherheit beim Programmieren.

    Das braucht einen Anfänger noch nicht zu interessieren. Wenn sich ein Anfänger, neben der Syntax, der Logik, den Algorithmen, etc. auch noch mit Speicherplatz und Sicherheit auseinandersetzen muss, hat er doch mehr Probleme, als wenn er sich für's erste auf die Sicherheit der fertigen Klassen verlassen kann.

    Ich habe so ein bisschen das Gefühl, dass du noch nie in ein richtiges gutes C++ Buch geschaut hättest. Der C++ Primer ist mMn didaktisch ziemlich gut aufgebaut. Natürlich werden auch Char-Arrays behandelt, aber erst nachdem man std::string kennen gelernt hat.
    Mein erstes C++ Buch war "Einstieg in C++" von Arnold Willemer. Ich hatte bis dato noch überhaupt keine Programmiererfahrung und ehrlich gesagt hat mir dieses Buch auch nicht sonderlich weitergeholfen, denn danach hatte ich tatsächlich dieses erdrückende Gefühl, dass ich zwar ein paar Dinge kennengelernt hatte, aber die Sprache an sich nicht verstanden hatte.
    Dann habe ich mir den C++ Primer gekauft und es löste sich in Wohlgefallen auf.

    Und char arrays sind wohl schneller erklärt als std::string.

    Was ist denn an std::string so schwer zu erklären? Du hast einer ganz eindeutingen Syntax ( std::string str = "ABC" ) ein Objekt, dass du problemlos herumreichen kannst und viel einfacher zu verwenden ist als ein Char-Array.



  • volkard schrieb:

    cooky451 schrieb:

    Ich denke, wir sind uns einig dass man erst das "Rechnen"-Konzept verstehen sollte bevor man einen Taschenrechner nutzt.

    Nein. Und Du bist Wiederholungstäter. Mit diesem genialen Rechenkästchen kann man selber die Mathematik erforschen. Habs selber schon gesehen, wie Kinder damit die Division entdecken.

    Das passiert, wenn man Äpfel mit Birnen vergleicht, gleicht kommt ein Schlaumeier und meint alle Strings haben Taschen.



  • volkard schrieb:

    cooky451 schrieb:

    Man drückt Schülern doch auch keinen Taschenrechner in die Hand bevor sie rechnen können.

    Nein, den drücken die besseren Schüler sich selber in die Hand. Alle, von denen ich weiß, daß sie vorzeitig Taschenrechner benutzt haben, sind nicht besonders schlecht in Mathe (mich eingeschlossen). Alle, von denen ich weiß, daß sie bis zur offiziellen Erlaubnis gewartet haben, sind schlecht in Mathe.
    Damit wäre zum einen gezeigt, daß die Lehrer nicht wissen, wie Kinder funktionieren, sondern in einer ganz seltsamen IchBinSchauUndKindIstDumm-Manier fehlbestimmen, wie Kinder lernen sollen.

    Du verwechselst Ursache und Wirkung und ziehst zusammenhangslose Schlüsse.



  • ZumHundertstenMal schrieb:

    Das braucht einen Anfänger noch nicht zu interessieren. Wenn sich ein Anfänger, neben der Syntax, der Logik, den Algorithmen, etc. auch noch mit Speicherplatz und Sicherheit auseinandersetzen muss, hat er doch mehr Probleme, als wenn er sich für's erste auf die Sicherheit der fertigen Klassen verlassen kann.

    Die schreckliche Wahrheit ist, daß diese Thesen nur für anscheinend die meisten Lerner gelten, es aber auch reichlich Lerner gibt, die blockieren, falsche Schlüsse ziehen, sich ihren Stil versauen und so, wenn man ihnen nicht zuerst vom Speicherplatz erzählt.
    Ja, es gibt auch Leute (falls nur C und C++ zur Wahl stünden), die sollten mit C anfangen (Dankert), während andere Leute mit C++ anfangen sollten.



  • Da gehen - wie so oft hier - einige Dinge kräftig durcheinander. Es gibt aufgabenspezifische Dinge beispielsweise aus der Mathematik, deren Umsetzung sind Algorithmen. Für die Umsetzung der Algorithmen in Programme hat man Compiler, Bibliotheken und was auch immer, also Programmierwerkzeuge unterschiedlicher Art. Diese Programmierwerkzeuge sind kein Selbstzweck, sondern geeignete Hilfsmittel zur Erstellung eines stabil lauffähigen Programmes. Ein Anwender bewertet nicht die ihm verborgen bleibende 'Schönheit', sondern andere Dinge. Man kann auch mit den besten verfügbaren Programmierwerkzeugen schlechte Programme erstellen! 😞 Ein Gesichtspunkt bleibt hier oft auf der Strecke: "Wie und womit erstelle ich mit dem geringstmöglichen Aufwand ein stabiles Programm, das jederzeit für den Ersteller wie auch für andere Personen leicht wartbar bleibt?" daddeldu! 😃



  • berniebutt schrieb:

    Da gehen - wie so oft hier - einige Dinge kräftig durcheinander.

    Wie so oft fällt es mir bei deinen Beiträgen schwer einen Bezug zum aktuellen Thema herzustellen...

    volkard schrieb:

    Die schreckliche Wahrheit ist, daß diese Thesen nur für anscheinend die meisten Lerner gelten, es aber auch reichlich Lerner gibt, die blockieren, falsche Schlüsse ziehen, sich ihren Stil versauen und so, wenn man ihnen nicht zuerst vom Speicherplatz erzählt.

    Ja, okay, das mag sein. Was die Lehre angeht habe ich bisher keine Erfahrung gemacht (außer als Opfer des C++ Programmierkurses an der Uni -.- ).

    Es ist halt grundsätzlich die Frage, ob man eher etwas* abstrakter anfängt (C++) oder ganz unten (C).

    etwas abstrakter, weil man ja einem Anfänger auch nicht direkt TMP um die Ohren haut, sondern eher std::string und std::vector.



  • @cooky451:
    Deinen Argumenten zufolge wären ja die Programmieranfänger, die zuerst z.B. mit Python anfangen, ganz arm dran. Dort gibt es gar keine char-Arrays, mit denen man den Stringtyp erklären könnte. Wie sollen die das nur jemals verstehen?



  • ZumHundertstenMal schrieb:

    ..., weil man ja einem Anfänger auch nicht direkt TMP um die Ohren haut

    Die haut man auch anderen nicht um die Ohren http://de.academic.ru/dic.nsf/dewiki/1332856



  • ipsec schrieb:

    @cooky451:
    Deinen Argumenten zufolge wären ja die Programmieranfänger, die zuerst z.B. mit Python anfangen, ganz arm dran. Dort gibt es gar keine char-Arrays, mit denen man den Stringtyp erklären könnte. Wie sollen die das nur jemals verstehen?

    Genau. Mit Python anfangen ist für mich der größte Unfug den man überhaupt machen kann. Python mag seine stärken haben, erfahrende Programmierer können hier ohne viel Aufwand sehr schnell sichere Programme schreiben. Als Lernsprache ist das Ganze doch aber wirklich völlig ungeeignet. Man bekommt halt in keiner Weise mit was da überhaupt vor sich geht. Bei mir im Unterricht kann niemand den Unterschied zwischen der Zahl 5 und '5' erklären. Wie auch?
    num = 5
    char = "5"
    print(num, " | ", char)
    Funktioniert ja problemlos. Python zaubert alles irgendwie richtig, nur sieht man davon nichts. (Genau so sieht das auch mit Zeilenvorschüben (\n) aus.) Das ist natürlich nicht als Schwäche der Sprache Python anzusehen, nur als Lernsprache finde ich das doch wirklich absolut ungeeignet.
    Meiner Meinung nach sollte man ruhig auch mal Dinge wie atoi, itoa etc. nachschreiben lassen. Gerade solche Aufgaben schärfen doch das Verständnis für die Vorgänge im Computer. Auch gegen ein bisschen Assembler hätte ich nichts einzuwenden.

    Natürlich, wer Python kann dem wird es nachher nicht unmöglich sein auch noch C zu lernen. Aber ich wage zu behaupten dass jemand der schon Erfahrungen mit C hat wesentlich schneller Python lernen kann.

    Man muss natürlich auch überlegen wo die Prioritäten liegen. Will man dass Schüler möglichst schnell ein buntes Fenster mit "Hallo, Welt" basteln können (ohne zu wissen was überhaupt ein message-loop ist), ist Python bestimmt eine gute Wahl. Das wäre aber niemals mein Ziel wenn ich versuchen würde jemandem Programmieren nahezubringen.



  • Man muss natürlich auch überlegen wo die Prioritäten liegen. Will man dass Schüler möglichst schnell ein buntes Fenster mit "Hallo, Welt" basteln können (ohne zu wissen was überhaupt ein message-loop ist), ist Python bestimmt eine gute Wahl. Das wäre aber niemals mein Ziel wenn ich versuchen würde jemandem Programmieren nahezubringen.

    Idealerweise geht es beim Informatikunterricht nicht um das Programmieren an sich, sondern um Algorithmen. Man soll lernen, wie man ein Problem mit Hilfe des Computers löst. Und dafür ist eine Sprache, die mir beim Problemlösen hilft und mir nicht noch das Leben mit manueller Speicherverwaltung schwer macht, gut geeignet.

    Vor allem in der Schule ist "Programieren lernen" meiner Meinung nach ziemlich sinnlos, da sich diejenigen, die sich sowieso dafür interessieren, sich früher oder später eh mit dem Thema auseinandersetzen werden. Der Rest wird C, Python, oder welche Sprache auch immer gelehrt wird, nach kürzester Zeit wieder vergessen haben.
    Deswegen ist das einzig sinnvolle, was man beim Informatikunterricht lehren kann, die Entwicklung von Algorithmen und die allgemeine Herangehensweise für das Lösen von Problemen, weil diese Fähigkeiten auch später noch sinnvoll verwendet werden können.

    Bei mir im Unterricht kann niemand den Unterschied zwischen der Zahl 5 und '5' erklären. Wie auch?

    Ist die Frage dein ernst? Mit einem guten Lehrer natürlich!
    Dass der Lehrer schlecht ist, kann ja sein, aber bei einem schlechten Lehrer würde auch C nicht helfen.

    Python zaubert alles irgendwie richtig, nur sieht man davon nichts.

    Wie gesagt: Und printf() zaubert nicht? Meinst du es würde deinen Mitschülern leichter fallen die Funktionsweise von printf() zu erklären?



  • ZumHundertstenMal schrieb:

    Man muss natürlich auch überlegen wo die Prioritäten liegen. Will man dass Schüler möglichst schnell ein buntes Fenster mit "Hallo, Welt" basteln können (ohne zu wissen was überhaupt ein message-loop ist), ist Python bestimmt eine gute Wahl. Das wäre aber niemals mein Ziel wenn ich versuchen würde jemandem Programmieren nahezubringen.

    Idealerweise geht es beim Informatikunterricht nicht um das Programmieren an sich, sondern um Algorithmen. Man soll lernen, wie man ein Problem mit Hilfe des Computers löst. Und dafür ist eine Sprache, die mir beim Problemlösen hilft und mir nicht noch das Leben mit manueller Speicherverwaltung schwer macht, gut geeignet.

    Vor allem in der Schule ist "Programieren lernen" meiner Meinung nach ziemlich sinnlos, da sich diejenigen, die sich sowieso dafür interessieren, sich früher oder später eh mit dem Thema auseinandersetzen werden. Der Rest wird C, Python, oder welche Sprache auch immer gelehrt wird, nach kürzester Zeit wieder vergessen haben.
    Deswegen ist das einzig sinnvolle, was man beim Informatikunterricht lehren kann, die Entwicklung von Algorithmen und die allgemeine Herangehensweise für das Lösen von Problemen, weil diese Fähigkeiten auch später noch sinnvoll verwendet werden können.

    Algorithmen kann man auch auf dem Papier aufstellen/lösen/whatever, dafür brauche ich erstmal keine Programmiersprache. Wenn es aber darum geht Probleme möglichst effizient mit einem Computer zu lösen, was ja auch zumindest einen Teilbereich der Informatik ausmacht, gehört Speicherverwaltung nunmal dazu.

    ZumHundertstenMal schrieb:

    Bei mir im Unterricht kann niemand den Unterschied zwischen der Zahl 5 und '5' erklären. Wie auch?

    Ist die Frage dein ernst? Mit einem guten Lehrer natürlich!
    Dass der Lehrer schlecht ist, kann ja sein, aber bei einem schlechten Lehrer würde auch C nicht helfen.

    Siehe unten 😉

    ZumHundertstenMal schrieb:

    Python zaubert alles irgendwie richtig, nur sieht man davon nichts.

    Wie gesagt: Und printf() zaubert nicht? Meinst du es würde deinen Mitschülern leichter fallen die Funktionsweise von printf() zu erklären?

    Gut, bevor man itoa etc. nicht mal selbst geschrieben hat, zaubert printf. Dennoch sieht man in etwa was da vor sich geht.
    printf("%i", num) ist doch gleich etwas total anderes. Das läd zum ausprobieren ein: Was passiert bei printf("%c", num) oder bei printf("%i", c) etc.
    Einem wird zumindest immer bewusst gemacht, dass 5 != '5'.
    Und ja, wir haben über die Jahre im Unterricht bestimmt drei mal ASCII besprochen. Eigentlich müsste doch also jedem in etwa klar sein wie Buchstaben im Computer repräsentiert werden. Dem ist aber einfach nicht so. Mit C wäre das nicht so einfach in Vergessenheit geraten.



  • Algorithmen kann man auch auf dem Papier aufstellen/lösen/whatever, dafür brauche ich erstmal keine Programmiersprache.

    Stimmt genau. Es kann trotzdem mal ganz interessant sein, sie auch mal zu implementieren.

    Wenn es aber darum geht Probleme möglichst effizient mit einem Computer zu lösen, was ja auch zumindest einen Teilbereich der Informatik ausmacht, gehört Speicherverwaltung nunmal dazu.

    Und für einen Programmieranfänger ist das wichtig? Reicht da nicht die Python-Perfomance?

    Und ja, wir haben über die Jahre im Unterricht bestimmt drei mal ASCII besprochen. Eigentlich müsste doch also jedem in etwa klar sein wie Buchstaben im Computer repräsentiert werden. Dem ist aber einfach nicht so.

    Wie gesagt: Dann ist euer Lehrer schlecht...



  • Alle guten haben damals mit Basic auf C64 oder ähnlichem angefangen. Diskussion beendet.



  • warum wird Programmierung an allgemeinbildenden Schulen eigentlich nicht mit Single-Paradigma-Sprachen gelernt?

    "Single-paradigma" heißt "leicht erfaßbar" + "keine ablenkung vom eigentlichen Programmier-Paradigma". Dann kämen jährlich hunderttausende Schüler mit LISP-, Logo-, Smalltalk-, Scratch- oder sogar APL- oder Forth-Kenntnissen von der Schule und bräuchten nicht jede kaputte Hype-Sprache toll zu finden.



  • Oder man nimmt gleich Java zum lernen, so wie an der Uni. Damit hat man gleich die Sprache mit der weitesten Verbreitung in der Tasche. Die Wenigsten brauchen heute noch C oder C++ in ihrem Beruf als Programmierer.



  • ZumHundertstenMal schrieb:

    Und für einen Programmieranfänger ist das wichtig? Reicht da nicht die Python-Perfomance?

    Es ist für jeden interessant der Algorithmen jenseits von Bubblesort implementieren möchte.

    Oder man nimmt gleich Java zum lernen, so wie an der Uni. Damit hat man gleich die Sprache mit der weitesten Verbreitung in der Tasche. Die Wenigsten brauchen heute noch C oder C++ in ihrem Beruf als Programmierer.

    Oh Gott..


Anmelden zum Antworten