Möchte C++ / programmieren lernen



  • Xin schrieb:

    Alles, was ich bisher von Stroustrup las (das ist mehr als Deine drei Quotes), widerspricht dem nicht.

    Doch, und zwar fundamental. Stroustrup geht nämlich genau aus der anderen Richtung heran. Du beschreibst es, als seien die C-Features von C++ (vereinfacht gesehen) der "basic stuff" in C++ und der Rest draufgesetzt. Bei Stroustrup sind hingegen die C++-Features der "basic stuff" und der Rest ist druntergeschoben.

    Ihr beide stimmt darin überein, dass ein guter C++-Programmierer beides können muss. Aber beim Lernen (und nur hierum geht es im aktuellen Thread), kommt ihr aus entgegengesetzten Richtungen.

    Stroustrup selbst wirkt in seinen Texten übrigens gar nicht so C++-Fanatisch, wie viele C++-Programmierer.

    Doch. In Texten, in denen es ums C++-*Lernen* geht ist er *extrem* fanatisch kontra-C und pro-C++ eignestellt. Und er begründet das sehr gut.



  • pale dog schrieb:

    👍 gut auf den punkt gebracht!
    Xin, bis dahin hielt ich dich für ziemlich durchgeknallt, auch wegen dieses phantastischen compilers, den du entwickelst, aber jetzt bin ich davon überzeugt, das du weisst, wovon du redest. ... und das ist jetzt nicht ironisch gemeint.

    Das wäre zu schön, um wahr zu sein.
    Ich ging eigentlich nicht mehr davon aus, dass sich einer die Mühe macht, das von mir Geschriebene mal wirken zu lassen.
    Danke für Dein Reply (und vor allem für den Hinweis, dass es nicht ironisch gemeint ist... ^^)

    otze schrieb:

    Hier geht es doch darum, C++ zu lernen, richtig?

    Das klingt mal nach jemanden, der vor dem Schreiben, die richtige Frage stellt. ^^

    otze schrieb:

    Und für jemanden der C++ lernt ist es erstmal absolut uninteressant, dass manche sachen nicht immer ideal sind. Schon allein deshalb weil es viel erfahrung und noch mehr wissen braucht, um diese Stellen überhaupt zu erkennen. Bis man das kann, ist das wissen, wie man cstrings nutzt absolut tot, weil der std::string in 99% der Fälle absolut ausreichend ist. Zumal man sofort sehr viel lernen muss, sobald man die C techniken erfolgreich nutzen will. dann schlägt man sich automatisch mit sachen wie speicherallokierung, speicherbereinigung, overflows usw herum.

    Den Nutzen, den ein Anfänger aus std::string ziehen kann, ist dass man sie zusammenfügen und ausgeben kann. Anschließend wird der Anfänger vermutlich lernen, was Speicheralloziierung, Speicherbereinigung und Overflows ist.

    Korrigiere mich, wenn ich da was missverstanden habe, aber ist ein MyHelloString += " World" wirklich so toll, dass ich dafür erstmal erklären muss, was Namespaces sind und den Schüler bitten muss zu akzeptieren, dass die Strings irgendwie funktionieren und sie das dann irgendwann auch mal lernen?
    Die sind doch extra gekommen, um etwas zu lernen und dann darf ich denen nichtmals erklären, wie ein paar Buchstaben im Speicher liegen?
    Was Namespaces sind versteht zu dem Zeitpunkt eh keiner, wie std::strings funktionieren auch nicht, dafür können sie "Hallo Welt" in C++ ausgeben und haben gelernt, dass sie bis jetzt nix kapiert haben.
    Hey, mich würde das echt voll motivieren... 😉

    Ich weiß es nicht, Du hast die richtige Frage gestellt. Doch entsprechend Deiner Antwort wurde an meiner Hochschule ja auch unterrichtet. Das wurde von Professionellen... naja, sagen wir Professoren, so entschieden, die müssten es ja wissen.
    Aber die Antwort funktioniert in der FH nicht. Ich argumentiere ja hier nicht gegen die Massen Andersdenkender, weil ich mich gerne zum Forumsdeppen erklären lasse, sondern weil es nicht funktioniert.
    In der FH wurde schließlich genau so verfahren und ich durfte nach einem Jahr sehen, wie ich das wieder grade biege. Und es lag nicht an einem einzelnen Professor: es gab drei Profs, die jeweils ein Semester durchs Grundstudium zogen.
    Ich habe drei Semester lang das Tutorium gegeben. Vorher habe ich Freunden und Bekannten privat weitergeholfen.
    Der Wechsel der Profs machte sich durchaus bemerkbar, das Verständnis war aber trotzdem nicht da. Eine Gruppe ging am Ende des Semesters geschlossen zum Dekan und forderte die Fortsetzung meines Tutoriums im 4. Semester.
    Die Methode hat funktioniert und wurde von den Studenten auch angenommen.
    Für mich ist das ein gutes Argument so vorzugehen, wie ich es getan habe und nicht wie die Mehrzahl der Leute glaubt, dass es gehen könnte.

    Mir hat das Tutorium Spaß gemacht, ich hatte immer Spaß am unterrichten und bekam Geld dafür. Aber für die Studenten war es Zeitverschwendung, hätte man sie zuvor aufgebaut, statt erschlagen.

    otze schrieb:

    Ein weiterer nachteil beim lernen von C vor C++ ist aber auch, dass der stil komplett anders ist. in C++ nutzt man dank Klassen, namespaces usw sehr viele kleine funktionen, anstatt 1 riesige mit 500 zeilen. Und sowas wieder umzulernen ist sehr mühsam.

    Ich weiß ja nicht, bei wem Du C gelernt hast, aber bei mir war's nicht. Meine Anfänger schreiben keine Programme von 500 Zeilen. Die Remote-Shell, die dort programmiert wurde, hatte am Schluss inkl. aller Funktionen vielleicht 500 Zeilen.

    Doch um pale dogs "Durchgeknallt"-Image allerdings nicht ganz zu ruinieren, gebe ich Dir in soweit recht, dass ich als langjähriger Programmierer (nicht als Anfänger) in C eine 135kB große Funktion schrieb, die problemlos zu warten war. Und tatsächlich ist die größte Funktion in C++ lediglich 81 kB.
    Das ist entweder die Übertragung von schlechten Stil auf C++ oder es hat tatsächlich einen Sinn.
    Im Falle der 81kB C++ Funktion ist es die lexikalische Analyse meines Compilers - wer weiß, was das ist, kann sich anhand der Zahlen ausmalen, dass die bei mir recht flott geht und trotzdem problemlos zu warten ist.



  • Konrad Rudolph schrieb:

    Xin schrieb:

    Stroustrup selbst wirkt in seinen Texten übrigens gar nicht so C++-Fanatisch, wie viele C++-Programmierer.

    Doch. In Texten, in denen es ums C++-*Lernen* geht ist er *extrem* fanatisch kontra-C und pro-C++ eignestellt. Und er begründet das sehr gut.

    Nicht "kontra-C", sondern contra veralteter C-Programmierung, die in C vor langer, langer Zeit üblich war, als man es noch nicht besser wußte.
    Man kann die Texte wörtlich lesen, aber um sie zu verstehen sollte man den Inhalt lesen.
    Es geht nicht um die Sprache, sondern um den Programmierstil.

    Man programmiert C heute auch nicht mehr wie vor 20 Jahren, das Denken von C-Programmieren stoppte nicht, als '85 der erste C++-Compiler auf den Markt kam.

    gtk+ 2.x ist in den Augen der meisten C++-Programmierer nicht möglich, weil OOP kam ja erst in C++.
    gtk+ 2.x ist aber in C programmiert und ein Musterbeispiel von OOP.

    Wer heute C programmieren lernt, lernt heute C, nicht vor 20 Jahren.
    Und auch in C++ kann man Klassen schreiben, die genauso unstrukturiert sind, wie C-Programmierung vor 20 Jahren.

    Der Programmierstil hat sich in allen Sprachen weiterentwickelt, vor 20 Jahren hatten meine Programme noch Zeilennummern, Gotos und Gosubs und das war üblich. Das war Stand der Dinge. Viele Programmierer kamen von solchen Sprachen zu C und übertrugen diesen Programmierstil in ihre C-Programme. Viele C-Programme waren zu der Zeit schlecht und Fachbücher wurden genauso von Experten geschrieben, die mit goto groß geworden sind.
    Zu dieser Zeit schrieb Stroustrup "Die C++-Programmiersprache".
    Keine aktuelle Programmiersprache nutzt heute mehr Zeilennummern, Gosubs oder wird durch gotos strukturiert und kein C-Buch weist diese Art der Programmierung mehr als mustergültig aus.
    De Facto sind C und C++ Programmierung sehr ähnlich. Darum war C++ vor 20 Jahren eine andere Programmiersprache und unbestritten revolutionär und innovativ. Doch heute, wo C die Wandlung mitgemacht, die durch C++ eingeleitet wurde, jetzt, da sich die Programmierung so angeglichen hat, ist C++ die logische Fortsetzung von guter C-Programmierung. Darum hat es in meinen Augen Sinn, Schritt für Schritt programmieren zu lernen: über C zu C++.



  • Xin schrieb:

    Konrad Rudolph schrieb:

    Xin schrieb:

    Stroustrup selbst wirkt in seinen Texten übrigens gar nicht so C++-Fanatisch, wie viele C++-Programmierer.

    Doch. In Texten, in denen es ums C++-*Lernen* geht ist er *extrem* fanatisch kontra-C und pro-C++ eignestellt. Und er begründet das sehr gut.

    Nicht "kontra-C", sondern contra veralteter C-Programmierung

    Doch, Contra-C. Wirklich. Ich beziehe mich auch nicht auf TC++PL (obwohl auch dieses Buch modern, da ständig erneuert, ist) sondern hauptsächlich auf folgende FAQ:

    <a href= schrieb:

    Stroustrup">Q: Knowing C is a prerequisite for learning C++, right?
    A: Wrong. The common subset of C and C++ is easier to learn than C. There will be less type errors to catch manually (the C++ type system is stricter and more expressive), fewer tricks to learn (C++ allows you to express more things without circumlocution), and better libraries available. The best initial subset of C++ to learn is not "all of C".

    (Hervorhebung von mir.)

    und auf folgendes (verlinktes) Paper: http://www.research.att.com/~bs/new_learning.pdf.



  • Die Basistechniken von C++ entsprechen im wesendlichen der C-Untermenge von
    C++, inklusive der Möglichkeit in C++ traditionell zu programmieren.
    Bitte nachlesen: B. Stroustrup 'Die C++ Programmiersprache' Teil I Basistechniken
    🕶



  • Konrad Rudolph schrieb:

    <a href= schrieb:

    Stroustrup">Q: Knowing C is a prerequisite for learning C++, right?
    A: Wrong. The common subset of C and C++ is easier to learn than C. There will be less type errors to catch manually (the C++ type system is stricter and more expressive), fewer tricks to learn (C++ allows you to express more things without circumlocution), and better libraries available. The best initial subset of C++ to learn is not "all of C".

    (Hervorhebung von mir.)

    Ich weiß ja, nicht wie ihr Stroustrup lest, aber ich fühlte mich der Gedankenwelt von Stroustrup sehr nah, als ich seine Bücher las. Und das ändert sich auch in diesem Quote nicht, denn da lese ich, was ich hier die ganze Zeit predige.

    Die Hervorhebung sagt nicht wie Du "Doch, Contra-C. Wirklich.", sonst stünde da "If you want to learn C++ do not even think of learning C."

    Da steht aber "not all of C". Auf deutsch: "C, aber nicht alles davon."
    Komplett: "Das beste Start-Subset um C++ zu lernen ist C, aber nicht alles davon."
    Das klingt für mich nicht nach "Contra C".
    Lernt C, aber nicht alles davon, wenn ihr C++ lernen wollt.

    Ich würde sagen, dass er sich auf die verkorksten Funktionen der C-Lib bezieht.
    Dass man da die Finger von lässt, steht in jedem halbwegs aktuellen C-Buch auch drin.

    Gibt's noch mehr Stroustrup-Zitate? ;->
    SCNR



  • Xin schrieb:

    Die Hervorhebung sagt nicht wie Du "Doch, Contra-C. Wirklich.", sonst stünde da "If you want to learn C++ do not even think of learning C."

    Da steht aber "not all of C". Auf deutsch: "C, aber nicht alles davon."

    Herrje, Du *bist* aber auch stur! Lies das ganze doch mal im Kontext des Papers, was ich ebenfalls verlinkt habe. Dort sagt Stroustrup ganz deutlich, dass es Quatsch ist, mit C-Konzepten anzufangen oder am Anfang auf C++-spezifische Features zu verzichten. Im Gegenteil, Stroustrup weist explizit darauf hin, dass z.B. die Klasse "string" perfekt für den Anfang geeignet ist, *viel besser*, als C-Strings.



  • Naja, Xin schreibt hier die längsten Begründungen. Wir liefern immer wieder Zitate, die es auf den Punkt bringen. Das sagt schon sehr viel aus. Ich weiß nicht, ob jetzt dieser Thread wegen EINEM Poster 30 Seiten lang werden muß? Wer C++ lernen will, diesen Thread verfolgt, kann entweder Xin glauben oder Bjarn Stroupstrup und die Meinung der anderen C++ler...



  • Konrad Rudolph schrieb:

    Xin schrieb:

    Die Hervorhebung sagt nicht wie Du "Doch, Contra-C. Wirklich.", sonst stünde da "If you want to learn C++ do not even think of learning C."

    Da steht aber "not all of C". Auf deutsch: "C, aber nicht alles davon."

    Herrje, Du *bist* aber auch stur!

    Es gibt viele Menschen, die mich nicht gut kennen und das behaupten. Früher hat mich das mal verunsichert. Ich fragte einen sehr guten und langjährigen Freund und er meinte zu mir, dass ich nunmal in der Regel Recht habe und wenn nicht, würde ich es auch einsehen. Seitdem verunsichert mich der Vorwurf nicht mehr.
    Ich bin nicht stur, ich bin überzeugt von dem, was ich hier schreibe. Ich habe bisher noch kein neues Argument gehört, aufgrund dessen ich meine Meinung überdenken müsste und mindestens genauso wichtig: Mein Ansatz den Leuten Programmieren beizubringen funktioniert. Ich sehe keinen Grund, an ihn zu zweifeln, da ich erfolgreich damit bin.

    Konrad Rudolph schrieb:

    Lies das ganze doch mal im Kontext des Papers, was ich ebenfalls verlinkt habe. Dort sagt Stroustrup ganz deutlich, dass es Quatsch ist, mit C-Konzepten anzufangen oder am Anfang auf C++-spezifische Features zu verzichten. Im Gegenteil, Stroustrup weist explizit darauf hin, dass z.B. die Klasse "string" perfekt für den Anfang geeignet ist, *viel besser*, als C-Strings.

    Ich habe mir das Paper grade durchgelesen. Wohlwissend, dass Folgendes nicht als Argument, sondern als Ketzerei, gewertet wird, sage ich es dennoch: Stroustrup begeht in seiner Argumentation in dem Paper einen Patzer.
    Ich weiß, wenn der kleine Xin sagt, dass der große Stroustrup einen Fehler begeht, dann kann das nur Quatsch sein - oder Sturheit - oder auch die Stufe nach Sturheit: Arroganz.

    Der Patzer ist folgender: Er bringt den Leuten C++ bei und vergleicht das mit C.
    Ich bringe den Leuten C bei und wechsle zeitig auf C++. Da ist ein Unterschied.

    Das Beispiel, dass er sich ausgesucht hat, würde ich niemals benutzen, um jemanden C beizubringen. Eingaben über die Tastatur sind *DAS* große Manko in C, darum bringe ich den Leuten nicht bei, verkorkste Funktionen unter C zu benutzen, sondern hole die Eingaben kontrolliert über Parameter oder Dateien. Der Patzer ist hier, dass er keinen sauberen Vergleich im Erlernen einer Sprache durchführt, wenn er das Beispiel so wählt, dass man in der einen Sprache voll gegen die Wand fährt.
    Das ist nicht der Beweis, dass C schwerer wäre, dass ist lediglich der Beweis, dass C schwerer ist, wenn man es so macht, wie Stroustrup es in seinem Beispiel macht.
    Und das widerum beantwortet nicht die Frage, die er damit zu beantworten versucht.

    Kein (sinnvolles) Programm benutzt unter Realbedingungen scanf oder cin, um Tastatur-Eingaben reinzuholen.
    Es besteht also auch überhaupt keine Notwendigkeit, einen Schüler mit irgendeinem scanf-Programm gegen die Wand fahren zu lassen.

    Bisher hatte ich meine Schüler schnell genug so fähig, dass sie Tastatureingaben über sinnvolle UserInterfaces holten, z.B. gtk oder Intuition. Das entspricht wesentlich eher der Realität.

    Das Programm, dass Stroustrup hier als Beispiel wählte, ist nicht erforderlich, um gute C-Programmierung zu lernen - genauer, es ist sogar ein Widerspruch zu guter C-Programmierung.
    Es muss also nicht gewählt worden sein, um die Frage "Was ist leichter zu lernen" zu beantworten, sondern um *DAS* Manko der C-Lib besonders hervorzuheben.

    Was allerdings korrekt ist, ist dass C hier alles andere als einen guten Eindruck hinterlässt. Als Lehrer oder Autor weiß ich derartiges allerdings zu umschiffen - und zwar absolut problemlos - und damit der Vergleich sauber abläuft, sollte Stroustrup das auch tun. Ich muss sagen, ich bin auch enttäuscht, der Text liegt m.E. unter seinem sonst üblichen Niveau. Ich kann mir nicht vorstellen, dass ihm das entgangen ist.

    [Ich habe noch ein weiteres Argument bezogen auf die lange C-Fassung, das zeigt, wie unpassend das Beispiel von Stroustrup gewählt wurde, kürze es Artchi zuliebe aber raus. Auf Anfrage liefere ich nach.]

    Schlussendlich, ging es Dir darum, mit dem Paper zu belegen, dass Stroustrup meine Methode ablehnt, doch selbst, wenn man das Paper als die reine, einzige Wahrheit sehen möchte, so zeigt auch Stroustrup auch in dem Paper klar die Offenheit zu anderen Herangehensweisen, die nicht der Beschriebenen entsprechen:

    Stroustrup schrieb:

    Finally, please remember there is no one right way to learn and teach C++ and its associated design and programming techniques. The aim and background of students differ and so does the backgrounds and experience of their teachers and textbook writers.

    Mir scheint es recht offensichtlich, dass ich mit einem anderen Background meinen Unterricht fahre, als die Mehrzahl in diesem Forum, die zwar eine klare Meinung hat, aber dafür keine Erfahrung im Unterrichten.

    Artchi schrieb:

    Naja, Xin schreibt hier die längsten Begründungen. Wir liefern immer wieder Zitate, die es auf den Punkt bringen. Das sagt schon sehr viel aus.

    Artchi, was ich echt gut finden würde wäre, wenn Du statt hohler Phrasen mal was konkreter werden würdest. Was Du bisher auf den Punkt gebracht hast, war teilweise so daneben gegriffen, dass ich zeitweise wirklich unsicher war, ob Du Dich hast überzeugen lassen und inzwischen für mich argumentierst.

    Zum zweiten Mal deutest Du an, dass irgendwas viel über mich aussagt... hast Du keine konkretere Argumentation, dass Du auf derartige Pseudoargumentation ausweichen musst?

    Im Thread 'Programmiersprache der Zukunft' hast Du gleichartiges in den Raum gestellt:

    Xin schrieb:

    Artchi schrieb:

    @Xin! Erst mit deinem letzten Post habe ich gerafft, das du an einer Sprache + Compiler arbeitest. Das sagt schon alles über dein Verhalten aus.

    Ich frage mich zurzeit, was es genau über mein Verhalten aussagt? Ich wäre interessiert, das zu erfahren.
    Früher habe mal einen Vokabeltrainer geschrieben, ist das in meinem Verhalten jetzt eine Weiterentwicklung?

    Darauf bist Du nicht mehr eingegangen. Wenn Du mich nur in ein schlechtes Licht rücken möchtest, dann darfst Du mich gerne als arroganten Analcharakter titulieren und wenn Du dazu eine handfeste Begründung mitliefern kannst, akzeptiere ich Deine Meinung auch. Wenn Du aber nicht mehr Niveau in Deine Behauptungen bringen kannst, als unbegründet ein zweifelhaftes Verhalten in den Raum zu stellen, dann kannst Du derartige Sprüche besser für Dich behalten.



  • Kein (sinnvolles) Programm benutzt unter Realbedingungen scanf oder cin, um Tastatur-Eingaben reinzuholen.
    Es besteht also auch überhaupt keine Notwendigkeit, einen Schüler mit irgendeinem scanf-Programm gegen die Wand fahren zu lassen.

    du meinst, keine programme ausser all diejenigen die input über stdin erwarten? also zb alle programme die sich in der linuxconsole die ergebnisse zupipen?



  • otze schrieb:

    Kein (sinnvolles) Programm benutzt unter Realbedingungen scanf oder cin, um Tastatur-Eingaben reinzuholen.
    Es besteht also auch überhaupt keine Notwendigkeit, einen Schüler mit irgendeinem scanf-Programm gegen die Wand fahren zu lassen.

    du meinst, keine programme ausser all diejenigen die input über stdin erwarten? also zb alle programme die sich in der linuxconsole die ergebnisse zupipen?

    Ich habe kein Problem beim "Pipen" stdin mit Hilfe von fread sicher vollkommen sicher auszulesen. Und ich schrieb ja im Posting zuvor schon, dass ich Eingaben sicher über Dateien reinhole und das beinhaltet auch Daten, die über die Pipe kommen.
    Das Manko der C-Lib ist die Eingabe via Tastatur.
    Es gibt nunmal wirklich keinen Grund einen Anfänger mit verkorksten Funktionen der C-Lib gegen die Wand fahren zu lassen.
    Die Tastatur-Eingabe via cin ist übrigens ebenfalls unbrachbar, da man genauso den Bildschirm verschandeln kann. Der Benutzer ist nicht kontrollierbar. Bei Stroustrups langer C-Version ließe sich da was machen. Noch ein Punkt, wo die Vergleichbarkeit nicht gegeben ist.
    Ansonsten würde ich Tastatureingaben in beiden Sprachen z.B. über ncurses ziehen. Oder eben direkt per GUI.
    Bisher hat noch kein Anfänger gemotzt, nur weil er seine Eingabe vor dem Programmstart festlegen musste. Kein Programm war so groß, dass man später noch zusätzliche Eingaben benötigte. Selbst das Programm, dass Stroustrup hier vorschlägt, ist in GTK überschaubar.

    Wenn Stroustrup auf der einen Seite sagt, dass man in C++ so nicht programmiert, dann kann er auf der anderen Seite nicht ignorieren, dass man dort ebenfalls nicht so programmiert.
    Die C-Lib wird aus Gründen der Kompatiblität nicht verändert, nicht weil alle C-Programmierer so von ihr überzeugt wären.



  • [unsinn]



  • Dachte da wollte einer Programmieren lernen und nicht Geschichte 😕 😃 😃


Anmelden zum Antworten