Möchte C++ / programmieren lernen



  • Ich habe nachgeguckt, es handelte sich nicht um den C-Präprozessor, zumindest finde ich auf die Schnelle kein Zitat dazu. Ich habe in Erinnerung, dass er 1978 mit Makros begann, ich habe allerdings jetzt auch keine Lust die ganze Einleitung wieder lesen. Daher folgende Korrektur: Er schrieb vor Cfront einen eigenen Präprozessor.

    "Im Oktober 1979 hatte ich einen lauffähigen Präprozessor mit dem Namen 'Cpre' geschrieben, der C um Simula-ähnliche Klassen erweitert. Bis März 1980 so weit verbessert, dass er für ein Projekt und mehrere Experimente eingesetzt werden konnte. [...] Der Grundstock einer ersten Bibliothek für C++. [...] Die durch den Präprozessor festgelegte Sprache nannten wir 'C mit Klassen'." (Entwicklung von C und C++, Bjarne Stroustrup, Seite 33f)

    "Cfront wurde von mir zwischen Frühling 1982 und Sommer 1983 entworfen." (Seite 83).

    'Cpre' habe ich wie es aussieht mit 'C-Preprocessor' verwechselt. Mea maximal culpa: es ändert allerdings nichts daran, dass er nach C übersetzte. C++-Codes wurden über den C-Compiler kompiliert und es begann mit einem Präprozessor.
    Da er lediglich Cpre statt cpp benutzte, ändert ansonsten aber nichts.



  • Na und? Eifel übersetzt auch erst nach C oder C++. Was hat aber Eifel jetzt mit C oder C++ zu tun? Nichts! Was hat eine zwischenstufige Übersetzung mit dem erlernen einer Sprache zu tun? Nichts! Wenn ich Java lerne, dann lerne ich auch nicht vorher den Bytecode der JVM kennen. Weil völlig sinnlos und irrelevant.

    Und ich frage dich nochmal: Warum hat er die ganzen Tools, wie CFront entwickelt? Weil er mit seinen bisherigen Tools voll zufrieden war??? Nein, sicherlich nicht. Ich entwickle/erfinde etwas, wenn mir das aktuell vorhandene nicht genügt. So einfach ist das.
    Den Zwischencode hat er nur benutzt, damit er sich die Programmierung eines C++-Compilers erspart. Reine Kosten- und Zeitfrage gewesen. Nichts anderes machen Sprachen wie Eifel: aus reinen Kostengründen erspart man sich den Bau eines echten Eifel-Compilers. Ich bezweifel mal, das aber Eifel irgendwas mit C am Hut... genau das gleiche bei C++: der CFront von damals ist heute sowas von piep egal, das ist Geschichte und das sollte es auch bleiben.



  • Hey!

    Die Sprache ist schon nicht ganz leicht, am besten ist sie zu verstehen wenn man schon eine Sprache kann, z.B. Java. Aber ich habe festgestellt, dass es sich aus Büchern ganz schwer lernen lässt, hilfreich sind sie zwar, aber manchmal ein wenig zu schnell erklärt. Eine Möglichkeit ist, wenn du bei Google mal nach Vorlesungsscripte von Unis oder Hochschulen suchst, die sind meistens selbsterklärend, außerdem gibt es Unmengen von Tuts im Internet die alles wichtige Schritt für Schritt erklären und jedes Kapitel mit einer Beispieldatei abschließen.

    Viel Glück ...



  • Artchi schrieb:

    Na und? Eifel übersetzt auch erst nach C oder C++. Was hat aber Eifel jetzt mit C oder C++ zu tun? Nichts! Was hat eine zwischenstufige Übersetzung mit dem erlernen einer Sprache zu tun? Nichts!

    Eiffel ist weder Ober- oder Untermenge von C oder C++ und hatte niemals die Intention dazu.
    Zwischen C und C++ erkennst Du aber doch eine Verwandtschaft, oder? Das hat etwas mit dem Erlernen einer Sprache zu tun.

    Ansonsten wird Eiffel mit zwei 'f' geschrieben, aufgrund von Gustave EifFel, dem Erbauer des EifFelturms, auch wenn Gustaves Name ursprünglich auf die Eifel (ein F) bezogen war, so schreibt er sich dennoch mit zwei 'F'.

    Artchi schrieb:

    Und ich frage dich nochmal: Warum hat er die ganzen Tools, wie CFront entwickelt? Weil er mit seinen bisherigen Tools voll zufrieden war??? Nein, sicherlich nicht. Ich entwickle/erfinde etwas, wenn mir das aktuell vorhandene nicht genügt. So einfach ist das.

    Wenn Stroustrup keine Vorteile in C gesehen hätte, wäre C heute keine Teilmenge von C++. Auf haarspalterische Diskussionen, dass der aktuelle Standard ein paar Datentypen mitbringt, die der C++-Standard noch nicht hat, brauchen wir uns doch jetzt einzulassen, oder?

    Wenn keiner hier Vorteile sieht, die ersten Gehversuche in einem übersichtlichen Laufstall zu machen, dann ist den Schülern auch nicht mehr zu helfen - eine nicht geringe Menge wird sich verlaufen.
    Im Tutorium hatte ich sie ja da und durfte sie wieder einfangen. Die meiste Arbeit im Tutorium war es, die Vorstellungen zu begreifen und auszutreiben, die sich die Studenten mit ihrem Halbwissen angegeignet haben, weil sie beim Erlernen der vielen Möglichkeiten vollkommen die Übersicht verloren haben.
    Dann fängt man wirklich noch mal bei Null an und geht Schritt für Schritt Grundlagen durch und später kommt man dann auch wieder bei OOP an.
    Die zwei Semester zuvor waren diesbezüglich vorrangig Zeitverschwendung, sie behinderten das Lernen sogar massiv, die Studenten kamen teils mit absolut wirren Vorstellungen ins Tutorium, die man erstmal selbst nachvollziehen muss, um zu erklären, warum die Vorstellung nicht zutrifft. Das ist, als bekommt man die Rotation der Planeten hochgradig kompliziert erklärt und wundert sich, was die sich da ausgedacht haben, bis die Rotation der Sonne um die Erde erklärt bekommt und verstanden hat, was man in der Vorstellung korrigieren muss.
    Wissen, das Dir und mir selbstverständlich erscheint, weil es eben Grundlagen sind - Grundlagen, die diese Leute eben nicht haben. Ich hätte mal Buch führen sollen über die Ideen auf die die Leute teils kamen.
    Schüler ohne OOP-Vorwissen lernten deutlich schneller und können mit OOP anschließend besser umgehen, weil sie wissen, warum sie OOP verwenden. Sie lernen die Funktionsweise der Sprache und entwickeln keine mystischen Vorstellungen, in der Regel entstehen nur kleine Missverständnisse, die mit ein, zwei Sätzen erklärt sind binnen weniger Minuten erklärt sind.

    Artchi schrieb:

    Der CFront von damals ist heute sowas von piep egal, das ist Geschichte und das sollte es auch bleiben.

    Nanana, Cfront ist der Übergang von C auf C++, mehr habe ich hier nicht geschrieben. Solltest Du hier andeuten, dass Cfront nun als Lernstoff für Anfänger nach C gelten soll, dann lies, was ich schreibe. Niemand will Cfront in die Gegenwart holen.

    Nichtsdestotrotz ist der Prozess des Begreifens von Konzepten über die Sprachgenerationen ablesbar. Den Weg wird jeder von uns beschreiten müssen. Sie wurden aufeinander aufbauend entwickelt, weil sich das Verständnis weiterentwickelte.
    Wer am Ziel anfängt, dem fehlen die Grundlagen.
    Das bedeutet nicht, dass man Assembler perfekt können muss, um C zu lernen. Es schadet aber nicht, sich mit dem Prozessor auseinander zu setzen. Und genauo hilft es, sich mit C auseinander zu setzen, um C++ zu lernen.

    Wenn ihr der Überzeugung seid, dass es sinnvoll ist, die Grundlagen später mal zu verstehen, habe ich da eigentlich wenig Probleme mit, solange ihr nicht mit mir an einem Projekt arbeitet und ich laufend den Erklärbär auspacken muss.



  • Xin schrieb:

    Schüler ohne OOP-Vorwissen lernten deutlich schneller und können mit OOP anschließend besser umgehen, weil sie wissen, warum sie OOP verwenden. Sie lernen die Funktionsweise der Sprache und entwickeln keine mystischen Vorstellungen, in der Regel entstehen nur kleine Missverständnisse, die mit ein, zwei Sätzen erklärt sind binnen weniger Minuten erklärt sind.

    Das wiederspricht meiner Erfahrung, liegt aber vielleicht auch immer daran WIE etwas erklärt wird und nicht daran WAS erklärt wird. Ich hatte mal ein paarmal eine größere Gruppe von Auszubildenden zu betreuen. Als ich reinkam war die Situation die, das von 25 Leuten nur 3 weitermachen wollten weil die anderen an C++ scheiterten. Und nach dem ich ein paarmal da war (und ja, ich habe mit Grundsätzen der Objektorientierung nicht der Sprache angefangen) sah das Verhältnis genau andersrum aus, und mir wurde mitgeteilt das dies zum großen Teil meinen Erklärungen zuzuschreiben war.

    Aber nochmal einen Schritt zurück: Es ist für das Verständnis wenn man eine Sprache xyz lernen will nicht hilfreich wenn man im ersten Moment weiß das der Compiler daraus erst etwas in der Sprache yz macht. Um genau zu sein: Was interessiert es im ersten Moment einen Anfänger. Die Details kann man später noch lernen wenn man die Grundsätze der Sprache versteht.

    Wenn man Objektorientierung richtig erklärt entspricht sie der menschlichen Denkweise weit mehr als die prozedurale Denkweise. Wir Menschen vereinfachen Sachbestände auch in dem wir sie auf ein wesentliches runterreduzieren und Klassifizieren. Wenn jemand von einen Haus spricht muss er nicht groß erwähnen was er meint, wir haben alle eine Vorstellung davon (selbst wenn es unterschiedliche Häuserformen gibt, geht es erstmal darum jemanden das wesentliche rüberzubringen).

    Davon abgesehen, mag alles mit C mit Klassen begonnen haben, wir sind aber nicht mehr in den Stand als dieses frühe C++ existiert hat.

    Soll ich die Geschichte weiter aufrollen?

    Ende der 80er Jahre wurde zunächst ein "C mit Klassen" entwickelt, später wurde der Name C++ übernommen um darzustellen das es eine weiterentwicklung der Sprache C war. Die Objektorientierung als Solche steckte in der damaligen Zeit noch in den Kinderschuhen und demzufolge war die Umsetzung der Objektorientierung noch recht dürftig und in der Entwicklung. Mit dem Fortschritt der Entwicklung des Objektorientierten Begriffes als solches wurde auch C++ weiterentwickelt. Im wesentlichen sind hier die Versionen 1.0,1.1,2.0,2.1 und 3.0 des AT&T Standards zu nennen (die aktuelle Standardimplementierung wurde cfront genannt).

    1.0: C++ bekommt die Sprachmerkmale die zum Kapseln von Daten und der Funktionsüberladung nötig waren (Datenkapselung und Überladung gehört zu OOP), zu der Zeit diente die Vererbung noch dem Ansammeln von Daten und Funktionalität.

    2.0: virtual hielt einzug in die Sprache (Polymorphie gehört zu OOP)

    3.0: rein virtuelle Funktionen wurden möglich und ermöglichten Klassen als reine Schnittstellen zu entwickeln.

    Die Versionen die danach kamen dienten kaum mehr dazu etwas vom OO-Paradigma zu erweitern, sondern gingen in Richtung anderer Sprachparadigmen (z.B. Templates).

    Du hast in einen Punkt recht als ich sagte das virtuell nur ein kleiner Teil von OOP, habe ich das etwas überspitzt. Ja die Polymorphie ist ein wichtiger Teil, aber ebenso sind auch Dinge wie Datenkapselung, Überladung... wichtig, die zusammen die Objektorentierten Grundzüge bilden. Und ist ja schön das du 2 Bücher aufführst, aber les dir bitte auch OO Bücher durch. Dort ist ebenso zu übernehmen das Polymorphie eben NICHT alles ist. Und ja mir ist klar das der Compiler intern anders arbeitet als nach außen hin, aber man entwickelt nicht gegen den Compiler (die Implementierung) sondern gegen die Schnittstelle (hier die Sprache).

    cu André



  • Boa Ihr müssts ja foll die provies sein so wie ihr alles wisstz was man lernen muss.



  • Hallo

    Xin schrieb:

    chrische5 schrieb:

    Wenn ich ein Haus bauen müsste würde mich der Prozess wie die Ziegel nun hergestellt werden auch nicht im ersten Moment interessieren...

    Nicht alles, was hinkt ist ein Vergleich. Ein A380-Pilot muss das Flugzeug auch nicht herstellen, aber trotzdem kleinere Flugzeuge fliegen können.
    Als Häusle-Bauer wirst Du erst kleine Häuser bauen, bevor Du die Petronas-Towers nachbaust.

    Mach Dir nichts draus, ein Versuch war's wert. ;-D

    Zitate zuordnen und dabei schlampen, geht ja nun gar nicht. Ich lege dir auch nicht einfach irgendwelche Dinge in den MUnd. Da sollte man schon aufpassen.

    chrische



  • Xin schrieb:

    Wenn Stroustrup keine Vorteile in C gesehen hätte, wäre C heute keine Teilmenge von C++.

    Hab ich schon gesagt: nur damit die C-Projekte nach C++ einfacher migriert werden können. Einen anderen Grund kann es für C nicht gegeben haben, wie der Erfinder der Sprache selbst in seinem Buch schreibt:

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.4> schrieb:

    C++ wurde hauptsächlich entworfen, damit meine Freunde und ich nicht in Assembler, C oder verschiedenen anderen modernen High-Level-Sprachen programmieren mußten. Das Hauptziel war, das Schreiben guter Programme für einzelnen Programmierer leichter und weitaus angenehmer zu gestalten.

    Also ich interpretiere nicht gerade daraus, das C es einem einfacher oder verständlicher macht. Ganz im Gegenteil: er wollte kein C mehr.

    Und das §1.6 zeigt nochmal deutlich, das C-Kompatibilität ein notwendiges Übel war und nicht weil er so geil auf C ist.

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.6> schrieb:

    Als C++ sich immer weiter verbreitete ... tauchte immer wieder die Frage auf, ob die Kompatibilität zu C beibehalten werden soll. Einige Probleme hätten ganz klar vermieden werden können, wenn einiges aus dem C-Erbe nicht übernommen worden wäre.

    Danach führt er auf, warum C weiter ein Teil von C++ bleiben muß. Mio. Zeilen C-Code existiert, der von C++ profitieren kann. Und das Mio. C-Bibliotheksfunktionen existieren und diese von C++ aus genutzt werden können. Halt die Migration von C nach C++ leichter fällt. Und man bei C++-Projekten nicht bei null anfangen mußte, weil man schon viel Geld in C-Projekte investiert hat. Aber was hat ein Programmiereinsteiger mit bestehenden C-Projekten am Hut? Nichts! Er hat keine Zeit und Geld in C-Projekte investiert.

    Und jetzt kommt das wichtigste für diesen Thread:

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.6> schrieb:

    C-Kenntnisse sind keine Voraussetzung, um C++ zu lernen. Das Programmieren in C erfordert viele Techniken und Tricks, die sich durch C++-Sprachmittel als unnötig erweisen.

    So, wer immer noch der Meinung ist, das man für C++ C-Kenntnisse benötigt, sollte an Bjarne Stroustrup eine Mail schreiben und ihn auf seinen Fehler in seinem millionenfach verkauften Buch hinweisen und ihn belehren.

    Am Ende glaube ich eher einem Bjarne Stroustrup als einem Xin. :p



  • Hallo

    Selbst jetzt wird es immer noch Leute geben, die denken, sie wüssten es besser. Letzendlich halt eine subjektive Geschichte.

    chrische



  • asc schrieb:

    Wenn man Objektorientierung richtig erklärt entspricht sie der menschlichen Denkweise weit mehr als die prozedurale Denkweise. Wir Menschen vereinfachen Sachbestände auch in dem wir sie auf ein wesentliches runterreduzieren und Klassifizieren. Wenn jemand von einen Haus spricht muss er nicht groß erwähnen was er meint, wir haben alle eine Vorstellung davon (selbst wenn es unterschiedliche Häuserformen gibt, geht es erstmal darum jemanden das wesentliche rüberzubringen).

    Stimmt, da man Algorithmen in den Klassen weiterhin wie in C programmiert ist C nicht schädlich. Hier überwiegt in meinen Augen der Vorteil, erst in einem übersichtlichen Bereich, die ersten Schritte in C zu machen.

    chrische5 schrieb:

    Zitate zuordnen und dabei schlampen, geht ja nun gar nicht. Ich lege dir auch nicht einfach irgendwelche Dinge in den MUnd. Da sollte man schon aufpassen.

    Sollte man, tut mir leid.
    Ich soll hier auch jedem Rede und Antwort stehen und wenn ich nicht für jeden einen eigenes Posting geben soll, dann kann ich hoffentlich auf Verständnis hoffen.

    Artchi schrieb:

    Xin schrieb:

    Wenn Stroustrup keine Vorteile in C gesehen hätte, wäre C heute keine Teilmenge von C++.

    Hab ich schon gesagt: nur damit die C-Projekte nach C++ einfacher migriert werden können. Einen anderen Grund kann es für C nicht gegeben haben, wie der Erfinder der Sprache selbst in seinem Buch schreibt:

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.4> schrieb:

    C++ wurde hauptsächlich entworfen, damit meine Freunde und ich nicht in Assembler, C oder verschiedenen anderen modernen High-Level-Sprachen programmieren mußten. Das Hauptziel war, das Schreiben guter Programme für einzelnen Programmierer leichter und weitaus angenehmer zu gestalten.

    Also ich interpretiere nicht gerade daraus, das C es einem einfacher oder verständlicher macht. Ganz im Gegenteil: er wollte kein C mehr.

    Stimmt, er wollte Klassen und die hatte C nicht. Die sind in C nicht einfach umzusetzen. Ich will auch kein C mehr, seitdem ich C++ kann, halte es jedoch für wichtig, erst C zu verstehen.
    Ich habe vor C Assembler programmiert, freiwillig mache ich das heute auch nicht mehr, aber wenn irgendwas mir programmieren beigebracht hat, dann war es die Zeit, in der ich Assembler programmierte. In der Zeit habe ich mehr über die Möglichkeiten von Computern gelernt, als im später folgenden Informatik-Studium.

    Artchi schrieb:

    Also ich interpretiere nicht gerade daraus, das C es einem einfacher oder verständlicher macht. Ganz im Gegenteil: er wollte kein C mehr.

    Und das §1.6 zeigt nochmal deutlich, das C-Kompatibilität ein notwendiges Übel war und nicht weil er so geil auf C ist.

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.6> schrieb:

    Als C++ sich immer weiter verbreitete ... tauchte immer wieder die Frage auf, ob die Kompatibilität zu C beibehalten werden soll. Einige Probleme hätten ganz klar vermieden werden können, wenn einiges aus dem C-Erbe nicht übernommen worden wäre.

    Vollkommen richtig. Und hat er die Probleme gelöst oder die Kompatiblität beibehalten?
    Leider (und das meine ich so) erweist es sich für einen C++ Programmierer immernoch als Vorteil, die Probleme von C zu kennen. Anders ausgedrückt bedeutet das, dass man C lernen muss.
    Unabhängig davon, ob man das nun für sich macht oder als Teil von C++ bezeichnet.

    Argumentierst Du hier eigentlich für oder gegen mich?

    Artchi schrieb:

    Und jetzt kommt das wichtigste für diesen Thread:

    Bjarne Stroustrup in <Die C++ Programmiersprache, §1.6> schrieb:

    C-Kenntnisse sind keine Voraussetzung, um C++ zu lernen. Das Programmieren in C erfordert viele Techniken und Tricks, die sich durch C++-Sprachmittel als unnötig erweisen.

    So, wer immer noch der Meinung ist, das man für C++ C-Kenntnisse benötigt, sollte an Bjarne Stroustrup eine Mail schreiben und ihn auf seinen Fehler in seinem millionenfach verkauften Buch hinweisen und ihn belehren.

    Am Ende glaube ich eher einem Bjarne Stroustrup als einem Xin. :p

    Jow, an Deiner Stelle würde ich ebenfalls Stroustrup mehr Glauben schenken als mir.
    Aber wenn Du schon Stroustrup quotest, interpretiere es nicht so dass es zu Deinem Standpunkt passt, sondern lies, was da steht.

    Ich halte die Kenntnis vieler Techniken und Tricks für sinnvoll und erstrebenswert. Stroustrup schreibt nicht, dass er das Wissen um Techniken verdammt, sondern nur, dass er einige Techniken unnötig macht, weil sie durch C++ Sprachmittel ersetzt wurden.
    Zum Beispiel OOP oder Vererbung sind durch C++ Sprachmitteln ersetzt und in C++ nun angenehmer zu nutzen als mit C.
    Von mir wurde Gegenteiliges nie behauptet.

    Ich habe auch nicht behauptet, dass jemand solange bei C bleiben muss, bis er OOP in C programmiert. Sollte ich es noch nicht behauptet haben, so behaupte ich hier, dass es von großem Vorteil sein kann, zu verstehen, wie OOP in C funktioniert. So funktioniert es in C++ nämlich auch, nur muss ich es nicht mehr von Hand kodieren.
    Ich weiß aber, was ich da tue und welche Konsequenzen das für meine Programme hat, wenn ich meine Klassen mit OOP oder ohne OOP ausstatte.
    Die Konsequenz daraus ist, dass ich OOP möglichst vermeide und nur da nutze, wo es entsprechende Vorteile bringt.
    Der vorhergehende Satz ist verständlich und dass ich eine saubere Programmierweise habe, ergibt sich aus den vorherigen Statements. Wer also jetzt auf "OOP möglichst vermeide" in Richtung "der hat keine Ahnung" anspringt, der sollte sich bewußt sein, dass er sich selbst eine Grube gräbt, wenn er darauf einen Comment setzt, der mit "Aber" beginnt...

    Man braucht keine C Kenntnisse, um C++ zu lernen, da hat Stroustrup so schon recht.
    Computerkenntnisse sind auch keine Voraussetzung, um Programmieren zu lernen. Man kann alles lernen, während man C++ lernt.
    Vorkenntnisse helfen aber ungemein.

    Wer zuerst C++ lernen möchte, darf das natürlich tun, sollte sich durch die hier angeführten Quotes von Stroustrup jedoch nicht bestätigt fühlen. Das letzte Quote ist mit "Es ist nicht auszuschließen, dass jemand ohne C Vorkenntnisse erfolgreich C++ lernt." gleichwertig, als C++-Erfinder würde ich das auch hübscher formulieren.
    Wer anschließend einen C++-Flaschenhals nicht durch in C++ gültigen C-Techniken (z.B. C-Strings, Rückbau von OOP) verbreitern kann sondern ein Programm mit Unkenntnis ausbremst, der kann in meinen Augen C++, aber nicht eben nicht erfolgreich.
    Die nächste CPU-Generation kommt bestimmt und Cluster sind heutzutage billiger als fähige Programmierer, richtig?

    Ich sehe für den Schüler keinen Nutzen darin, die Evolutionsstufe C zu überspringen. In C-Techniken sehe ich nicht nicht den Teufel im Sourcecode, sondern Möglichkeiten. Alles, was ich bisher von Stroustrup las (das ist mehr als Deine drei Quotes), widerspricht dem nicht.
    Stroustrup selbst wirkt in seinen Texten übrigens gar nicht so C++-Fanatisch, wie viele C++-Programmierer. Er beschreibt C++ eher als ein Werkzeug neben vielen weiteren.

    chrische5 schrieb:

    Selbst jetzt wird es immer noch Leute geben, die denken, sie wüssten es besser. Letzendlich halt eine subjektive Geschichte.

    Ja, leider. Wirkt wie ein zwei Fronten-Krieg, als wie die Suche nach einer halbwegs objektiven Antwort.
    Ich habe nichts gehört, was mir irgendwie neu wäre, was ich bedaure, weil es sich für mich persönlich so als Zeitverschwendung ergibt.
    Ich habe auch nicht das Gefühl, dass von den aktiven Schreibern, sich jemand auf meine Argumentation eingelassen hat - vielleicht konnte ich denen auch nichts neues präsentieren, dann bleibt es eine subjektive Geschichte.

    Hoffen wir, dass der Fragende oder ein anderer Leser wenigstens in irgendeiner Form profitieren konnte.

    Frohes Programmieren noch.



  • Xin schrieb:

    .
    Ich weiß aber, was ich da tue und welche Konsequenzen das für meine Programme hat, wenn ich meine Klassen mit OOP oder ohne OOP ausstatte.
    Die Konsequenz daraus ist, dass ich OOP möglichst vermeide und nur da nutze, wo
    es entsprechende Vorteile bringt.
    ....
    Wer anschließend einen C++-Flaschenhals nicht durch in C++ gültigen C-Techniken (z.B. C-Strings, Rückbau von OOP) verbreitern kann sondern ein Programm mit Unkenntnis ausbremst, der kann in meinen Augen C++, aber nicht eben nicht erfolgreich.

    👍 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.



  • Wer anschließend einen C++-Flaschenhals nicht durch in C++ gültigen C-Techniken (z.B. C-Strings, Rückbau von OOP) verbreitern kann sondern ein Programm mit Unkenntnis ausbremst, der kann in meinen Augen C++, aber nicht eben nicht erfolgreich.
    Die nächste CPU-Generation kommt bestimmt und Cluster sind heutzutage billiger als fähige Programmierer, richtig?

    Ich sehe für den Schüler keinen Nutzen darin, die Evolutionsstufe C zu überspringen. In C-Techniken sehe ich nicht nicht den Teufel im Sourcecode, sondern Möglichkeiten. Alles, was ich bisher von Stroustrup las (das ist mehr als Deine drei Quotes), widerspricht dem nicht.

    Hier geht es doch darum, C++ zu lernen, richtig? 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. Und dieser aufwand steht für einen anfänger in keinem verhältnis zum Ergebnis, denn das ergebnis des ganzen ist elendiger code den ein anfänger kaum nachvollziehen kann, zumal die alternative mit std::string meist 3x verständlicher ist.

    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.



  • 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.

    unsinn, in C programmiert man auch modular und schreibt keine monsterfunktionen 😞



  • 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.


Anmelden zum Antworten