Möchte C++ / programmieren lernen
-
Artchi schrieb:
...man damit die C'ler mit ihren Projekten nach C++ locken konnte. Also eine Migration erleichtert hat. Mehr auch nicht. Und sind wir ehrlich, der Trick hat funktioniert.
das glaubst aber nur du

-
Artchi schrieb:
Hätte Stroustrup damals mit C voll und ganz zufrieden sein können für seine Problem, hätte er nicht C++ entwickelt. Er hat einen Bedarf festgestellt, den C nicht abdecken kann.
Ähhh... auch hier muss etwas einspruch erheben.
Er schrieb ein Projekt in Simula, doch das war zu langsam, also wollte er es in C neu schreiben. OOP ist in C aber nicht so schön, also schrieb er Makros. Um das nochmals zu verdeutlichen, er schrieb Makros, nicht "C mit Klassen". Das Projekt nannte sich Cfront und wurde über Jahre gepfegt. Die ersten C++-Programme wurden mit C-Compilern kompiliert. Anders ausgedrückt: C wurde dem Bedarf gerecht.
Nach etwa 5 Jahren Cfront, entstand der erste "C mit Klassen"-Compiler, der zu C++ umbenannt wurde.Artchi schrieb:
Das C zum großen Teil (noch nicht mal 100%!) in C++ steckt, ist ein reiner Marketinggag. Weil man damit die C'ler mit ihren Projekten nach C++ locken konnte. Also eine Migration erleichtert hat. Mehr auch nicht. Und sind wir ehrlich, der Trick hat funktioniert.

Interessante Formulierung.
C ist zum großen Teil in C++, wenn auch nicht zu 100%, ist kein Marketing-Gag, sondern eine Tatsache. Die Begründung ist allerdings korrekt, war allerdings kein als Trick gedacht, sondern als Einladung, so dass man Schritt für Schritt auf C++ wechseln konnte.Artchi schrieb:
Wenn jemand fragt "Wie kann ich C++ lernen?" ist es einfach falsch zu sagen "Lern C!". Das ist NICHT die Antwort die er hören wollte und soll.
Hier drehen wir uns im Kreis. Du gehörst zu den Leuten, die eine Anfänger mit Möglichkeiten erschlagen und ich gebe ihnen einen Laufstall, wo sie laufen lernen. Danach können sie immernoch zu C++ wechseln.
Was sich innerhalb einer Klasse abspielt ist nahezu reines C.Ich denke, meine Methode zu unterrichten war recht erfolgreich und effektiv, das wurde mir von den Studenten auch so bestätigt.
-
Xin schrieb:
Ich denke, meine Methode zu unterrichten war recht erfolgreich und effektiv, das wurde mir von den Studenten auch so bestätigt.
Dann karr' mal einen von denen hier an

Im Ernst, C++ ist grundsätzlich keine Anfängersprache, da gibt's viele sehr viel besser geeignete. Aber wenn man schon C++ lernen will, dann sollte man das imho auch ganz unabhängig von C lernen denn es sind zwei verschiedene Sprachen (die natürlich beide gleich mächtig sind, aber unterschiedliche Ansätze zur Problemlösung erfordern).
Und allgemein würde ich eher die generische Programmierung als Hauptvorteil von C++ gegenüber C herausheben, nicht die Objektorientierung (die zwar vergleichsweise marginal aber dennoch ausreichend vorhanden ist). Mit Templates zu programmieren ist vergleichsweise schwer, aber an praktisch keiner Stelle benötigt man dazu C.Xin schrieb:
Er schrieb ein Projekt in Simula, doch das war zu langsam, also wollte er es in C neu schreiben. OOP ist in C aber nicht so schön, also schrieb er Makros. Um das nochmals zu verdeutlichen, er schrieb Makros, nicht "C mit Klassen". Das Projekt nannte sich Cfront und wurde über Jahre gepfegt. Die ersten C++-Programme wurden mit C-Compilern kompiliert. Anders ausgedrückt: C wurde dem Bedarf gerecht.
Nach etwa 5 Jahren Cfront, entstand der erste "C mit Klassen"-Compiler, der zu C++ umbenannt wurde.Woah?! Das sieht die Wikipedia etwas anders. Und bevor du mir jetzt mit deiner "ich mach das schon ewig"-These kommst, weist du mir erstmal mit geeigneten Zitaten nach, dass das so nicht stimmt (zB das Cfront einen eigenen Parser hatte, was so ganz und gar nicht mit deiner Makrobehauptung zusammenpasst). Desweiteren wird auch C in Assembler übersetzt, also wäre das genauso ausreichend. Wird es deshalb dem Bedarf gerecht? (Und um direkt die Plattformabhängigkeit zurückzuweisen, es spricht nichts dagegen, eine C-ähnlich plattformunabhängige Assemblersprache zu entwickeln.)
Xin schrieb:
Artchi schrieb:
Wenn jemand fragt "Wie kann ich C++ lernen?" ist es einfach falsch zu sagen "Lern C!". Das ist NICHT die Antwort die er hören wollte und soll.
Hier drehen wir uns im Kreis. Du gehörst zu den Leuten, die eine Anfänger mit Möglichkeiten erschlagen und ich gebe ihnen einen Laufstall, wo sie laufen lernen. Danach können sie immernoch zu C++ wechseln.
Was sich innerhalb einer Klasse abspielt ist nahezu reines C.Toll. Und was bringt das? Du kannst so viele Ebenen runter gehen wie du willst (auch wenn es nach C zugegebenermaßen nicht mehr viele gibt). Es ist gut für einen Programmierer, wenn er weiß was abläuft. Deine Methode wäre konsequent, wenn du zu erst Maschinensprache, dann Assembler und danach C beibringen würdest. Ich für meinen Teil halte die andere Richtung für sinnvoller, die sich quasi automatisch aus dem jedem Programmierer zugehörigen Optimierungsdrang entwickelt.
-
*Wäre schon wenn ein Mod dazu in der Lage wäre den Thread zu splitten und in RUDP verschieben könnte*
-
.filmor schrieb:
Xin schrieb:
Er schrieb ein Projekt in Simula, doch das war zu langsam, also wollte er es in C neu schreiben. OOP ist in C aber nicht so schön, also schrieb er Makros. Um das nochmals zu verdeutlichen, er schrieb Makros, nicht "C mit Klassen". Das Projekt nannte sich Cfront und wurde über Jahre gepfegt. Die ersten C++-Programme wurden mit C-Compilern kompiliert. Anders ausgedrückt: C wurde dem Bedarf gerecht.
Nach etwa 5 Jahren Cfront, entstand der erste "C mit Klassen"-Compiler, der zu C++ umbenannt wurde.Woah?! Das sieht die Wikipedia etwas anders. Und bevor du mir jetzt mit deiner "ich mach das schon ewig"-These kommst, weist du mir erstmal mit geeigneten Zitaten nach, dass das so nicht stimmt (zB das Cfront einen eigenen Parser hatte, was so ganz und gar nicht mit deiner Makrobehauptung zusammenpasst).
Dafür muss ich nichts 'ewig' machen. Wenn Stroustrup schreibt, dass er Cfront mit dem C-Präprozessor realisiert hat, dann ist mir die Sichtweise der Wikipedia eigentlich ziemlich egal: Das Buch heißt "Design und Entwicklung von C++", dort gibt es ein ausführliches Kapitel über Cfront.
Solltest Du mir nicht glauben, empfielt sich ein Besuch in Deiner Bibliothek.
Dass es später effizientere Cfront-Parser und Compiler, die dann "C mit Klassen"- oder "C++"-Compiler getauft wurden, ist bekannt und ändert nicht daran, dass die erste Version von C++ in C entstanden ist.Zu allem anderen gibt es bereits Statements in diesem Thread von mir.
-
"Ein neuer 3D-Motor wurde eigens für dieses Spiel entwickelt. Er benutzt DirectX8 und ist geeignet, grossräumige Landschaften darzustellen. Folgende Technologien wurden implementiert:"
http://colobot.com/colobot/technic-d.php
L O L
-
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.