Programmieren lernen - besser kein OOP.
-
2am schrieb:
...All den Dingen, die du nennst, liegen doch Algorithmen zugrunde. ...
Was Du zu widerlegen versuchst, habe ich auch nie behauptet.
Gruß,
Simon2.
-
Helium schrieb:
muemmel schrieb:
Zum Beispiel sind ALLE Programe aus dem Ritchie auch C++-Programme.
int min(a, b) int a, b; { return( a < b ? a : b ); }Habe keinen C++-Compiler gefunden, der dass frisst.
diese uralt-syntax mögen viele aktuelle C compiler auch nicht mehr.
aber selbst bei ganz einfachen codes, wie z.b.: *char p = malloc(123); will das kein C++ compiler schlucken, von dingen wie sizeof('x') mal ganz abgesehen, die in C und C++ unterschiedliche ergebnisse liefern.

-
Hi,
das beruhigt mich ungemein.
Aber ich habe früher lange genug als Lehrfacharbeiter mit Lehrlingen zusammen gearbeitet (noch nicht am Computer sondern im Maschinenbau) daß ich begriffen habe, daß es bei Anfängern keine Wunder gibt, und daß man, wenn man Ergebnisse sehen will keine Wunder erwarten darf und dei Stufen klein halten muß.
Aber eines habe ich damals begriffen, daß nichts darüber geht, erst mal das grundlegende Handwerk perfekt zu beherrschen.
Da ich eigentlich die ganze Zeit nur als Einzelkämpfer meine Arbeit mache, bin ich sicher nicht der Top-Programmierer. Man schmort zu viel im eigenen Saft und entnimmt anregungen nur aus NGs, Zeitschrifte, Fachbüchern... Aber andererseits muß ich mich auch nach den Regeln richten, und das sind nun mal nicht nur die der Porogrammiersprache.
Wenn ich irgend eine Sache realisieren soll, und der Chef kommt nach ca 2 Stunden und fragt, was es denn schon zu sehen gibt, dann ist es schön und gut, das das unwissenschaftlich ist und nichts mit sauberer Programmierung zu tun hat, aber dann muß eben zumindest der Entwurf eines Formulars bis dahin fertig sein. Ob das zielführend ist, ist egal, wer den Lohnschein unterschreibt hat recht. Das ich am Ende doch eine funktionierende und vor allem stabil laufende Lösung anbieten muß, ist die andere Sache. Aber sowohl bei meinem jetzigen Chef, als auch bei meiner alten Stelle war immer das primäre geforderte, erst mal was zum angucken zu machen. Und bisher ist von mir noch nichts nach Linux rübergewandert. Wenn ich da immer erst mal auf einem ordentlichen Konzept bestanden hätte, hätte ich weder den einen noch den anderen Job gehabt. Sicher geht es mir da nicht alleine so. Wenn der Chef keine Ahnung von Programmierung hat, muß erst mal was fürs Auge gebaut werden, damit er was hat was er sehen kann. Und dann wird auch schnell mal aus einem kleien Miniteil ein großes durch Rucksäcke dranhängen, weil man ja keine Zeit für einen Neuanfang hat. Auch wenn der vielleicht viel billiger wäre. Aber er würde (am Beispiel meiner alten Tätigkeit) die Reihe daß man jedes viertel oder halbe Jahr bei den zuständigen Stellen im Ministerium was neues ZEIGEN kann um das nächste Projekt bewilligt zu bekommen unterbrechen.
Ich weiß nicht, wie Du das siehst, aber ich behalte meien Job lieber, auch wenn er mit sich bringt, daß er nicht optimal ist.Gruß Mümmel
-
Hi,
zum einen gibt es zwischen den einzelnen Auflagen von die C Programmiersprache doch Unterschiede und Weiterenticklungen. Soweit ich mich erinnere basierte die letzte doch auf ANSI-C und nicht mehr auf K&R-C.
Außerdem glaube ich mich zu erinnern sowohl im Vorwort als auch noch woanders gelesen zu haben daß ALLE diese Quellen auch mit Stroustups C++-Compiler getetet wurden. Sicher ist da nun auch schon wieder ein Weilchen her, und in der Zwischenzeit hat sich auch C++ weiterentwickelt. Sicher würden die Autoren Kernighan und Ritchie das in einer neuen Auflage auch wieder berücksichtigen.Gruß Mümmel
-
Gerade moderne Tools bieten aber wunderschön die Möglichkeit Eye Candy zu bieten ohne groß Code zu haben... Man klickt mal eben ein Interface zusammen und hat schon ne Menge zum herzeigen.
Naja, hat aber alles seine Vorteile: dein Ansatz ist sicher der pragmatische der doch immer irgendwie funktioniert und mir aktuell das Brot auf den Tisch bringt. Denn ich darf aktuell solche chaotische Software portieren. Wäre es gut designt hätte ich den Job nicht - also ich kann nicht sagen dass der Ansatz schlecht wäre.
-
muemmel schrieb:
Hi,
zum einen gibt es zwischen den einzelnen Auflagen von die C Programmiersprache doch Unterschiede und Weiterenticklungen. Soweit ich mich erinnere basierte die letzte doch auf ANSI-C und nicht mehr auf K&R-C.
Außerdem glaube ich mich zu erinnern sowohl im Vorwort als auch noch woanders gelesen zu haben daß ALLE diese Quellen auch mit Stroustups C++-Compiler getetet wurden. Sicher ist da nun auch schon wieder ein Weilchen her, und in der Zwischenzeit hat sich auch C++ weiterentwickelt. Sicher würden die Autoren Kernighan und Ritchie das in einer neuen Auflage auch wieder berücksichtigen.Gruß Mümmel
Klassische und weit verbreitete Miß-Interpretation. Nur weil sich Code durch den C++ Compiler compilieren läßt, ist es nicht zwingend auch C++ Code. es kann nach wie vor _reiner_ C-Code sein. C gilt auch als UNtermenge von C++, es bleibt aber C. Die meisten mir bekannten Compiler können eben beides, C und C++.
-
Hi,
sicher bieten moderne Werkzeuge wie Delphi und C++Builder Werkzeuge um schnell mal ne Maske zu bauen. Wenn dann aber der Chef da auch gleich noch ein bißchen rumklicken will und man die zu verwendende Dateistruktur aus Excel exportiert fertig einzubauen rübergereicht bekommt sind eigentlich die Messen für sauberes Arbeiten schon gesungen. Und wenn dann noch die zu lösende Aufgabe in eigentlich nicht getrennt gehörende Programmteile zerrissen wird, bloß weils dem Chef so logischer erscheint, dann ist es eben so zu tun. Vor allem wenn man den eigentlichen Umfang der Aufgabe nur in kleinen Häppchen gesagt bekommt, um den Programmierer nicht zu "erschrecken". Das hat sich ja schließlich auch schon bei der dBase-Vorversion bei einem anderen Programmierer bewährt.
Gut wenn man Informatiker als Chef hat, die wissen dann was man braucht und wie es abzuarbeiten ist. aber wenn man Wissenschaftler als Chef hat, für die das nur Mittel zum Ergebnis ist, dann muß man damit Leben, auch damit, daß nichts und keine Entscheidung endgültig ist.
Bei solchen Programmen lohnt aber auch kein Portieren mehr. Da kann man dann nur unter Ausnutzung der mit dem Programm großenteils beim damit arbeiten empierisch ermittelten und im laufe der Zeit x mal geänderten Berechnungswege irgendwann mal ein neues schreiben.Gruß Mümmel
-
Hi loks,
kann man so direkt nicht sagen. Nach der Sprachdefinition ist ein Zeiger auf einen Zeiger auf ein Feld von Zeigern auf char-Felder immer noch syntaktisch gültiger C++Code. Blos daß das (im allgemeinen) kein C++-Programmierer so schreiben würde.
Der C-Code ist in fast allen Fällen auch C++Code, blos die Lösung ist keine C++Lösung.
Das ist ja das gute an C++, daß man was nachnutzen kann, was andere für einen schon vorentwickelt haben (z.B. stl).
Aber wenn man noch in den ersten quellzeilen des Programmiererlebens steckt, um auf die eigentliche Frage des Freds zurückzukommen, dann fängt man kaum gleich mit Containern an.
Die eigentliche Frage, unter der die Disskusion läuft ist nämlich nicht die, wie man Programmieren sollte, (das ist mittlerweile ausreichend geklährt nach derzeitigem Erkenntnisstand) sondern wie man den Weg zu einer Programmiersprache hin findet. Ich glaube, daß haben hier einige aus den Augen verloren. Wenn man darin zuhause ist, dann erscheint einem vieles logisch. Aber für einen für den bisher Word und Excel das Maß der Computer waren ist es das eben nicht. Da geht nicht alles auf einmal. und die Kernfrage dieser Disskusion war die, ob man nicht erst mal das eigentliche Handwerk des "Codierens" ohne oop lernen sollte. Der umgekehrte Weg, erst mal oop ohne Programmiersprache zu lernen geht leider nicht, irgendwie muß man ja dem Rechner sagen was man will.
Wenn man aber am ende bei C++ rauskommen will, dann könnt Ihr mir noch soviel erzählen, dann macht es keinen Sinn, sich alle für C++ sinnlosen C-Herangehensweisen perfekt zu eigen zu machen. Man kann aber auch nicht gleich ab dem ersten Programm den objektorientierten Weg perfekt beherrschen, sondern muß erst mal mit der reinen procedurelan Programmierung anfangen. Und dazu, als Zwischenschritt zu richtigem C++ muß es kein Standardkonformes ANSI-C sein sondern einfach der Bereich Untermenge von C++ der sich in dem Stadium überblicken läßt. Auch wenn das dann weder richtiges C noch richtiges C++ ist.Gruß Mümmel
-
Hallo
Man sollte hier differenzieren:
Um objektorientiertes *Denken* zu trainieren, ist C++ vermutlich nicht die Sprache der Wahl. Das kann man besser mit prinzipienreinen Objekt-Sprachen wie Smalltalk oder Self, bei denen das Programmieren tatsächlich eine Manipulation einer in sich geschlossenen Objektwelt darstellt. Auch UML wäre hier zu nennen.
Um objektorientiertes *Codieren* zu trainieren, ist C++ angesichts seiner Praxisrelevanz hingegen gut geeignet, da man dabei die seit Jahrzehnten dominierende C-Syntax benutzt, an die ja auch fast alle anderen modernen Sprachen (Perl, Python, Ruby, C#, ... ) angelehnt sind.
Gruß
-
Bemerkung schrieb:
Hallo
Man sollte hier differenzieren:
Um objektorientiertes *Denken* zu trainieren, ist C++ vermutlich nicht die Sprache der Wahl. Das kann man besser mit prinzipienreinen Objekt-Sprachen wie Smalltalk oder Self, bei denen das Programmieren tatsächlich eine Manipulation einer in sich geschlossenen Objektwelt darstellt. Auch UML wäre hier zu nennen.
UML ist keine Programmiersprache, zum Lernen des Programmierens ist sie also mit nichten zu gebrauchen.
Um objektorientiertes *Codieren* zu trainieren, ist C++ angesichts seiner Praxisrelevanz hingegen gut geeignet, da man dabei die seit Jahrzehnten dominierende C-Syntax benutzt, an die ja auch fast alle anderen modernen Sprachen (Perl, Python, Ruby, C#, ... ) angelehnt sind.
Die Syntax von C# und Java ist sicherlich an C angelehnt (leider). Für die
anderen genannten Sprachen trifft das ganz und gar nicht zu.
-
Hi Bemerkung,
Du siehst die Sache ganz richtig. Nur kenne ich Smalltalk, UML... nicht um mir da ein Urteil erlauben zu können. Keine Ahnung wie Anfängergeeignet die sind, ob da ein totaler Anfänger ne Chance hat mit klarzukommen. Prolog wurde auch unter dem Gesichtspunkt geschrieben das Programmieren einfacher zu machen, ich bezweifle aber, daß es einem Anfänger ohne Hilfe möglich ist in Prolog einzusteigen. (der Vergleich hinkt sicher).
Abgesehen davon muß man aber auch davon ausgehen, daß Anfänger sowas auch unter dem Gesichtspunkt der Nützlichkeit angehen. Das heist eine sich selbst viel gestellte Frage ist dabei wie verbreitet ist die Sprache und kann ich damit später mein Geld verdienen und meine Familie ernähren.
Daher landen eben viele bei C++ oder Delphi oder wenn sie aus der Admin-Ecke kommen bei sprachen wie Pearl, PHP, Python...
Die wenigsten werden vermutlich eine Sprache erlernen nur um ihr objektorientiertes Denken zu schulen, bei den meisten wird da doch schon der Gedanke im Hinterkopf sitzen, daß ich es ja schon auch so schaffen werde und in der Zeit die der Umweg kostet (koster er wirklich?) ja schon was konkretes machen und ein paar Flöhe damit verdienen kann.
Dein Ansatz ist sicher der, den man an Unis und anderen Lehreinrichtungen wo man die Abfolge vorgeben kann überdenken sollte.Gruß Mümmel
-
muemmel schrieb:
Warum nicht schon in der ersten Lernphase strings, referenzparameter und Streamausgaben nützen.
Das ist doch unsinnig. Wenn man mit C anfängt geht es doch gerade um die Grundlagen. Was haben da C++-Strings zu suchen? Die mögen vielleicht bequemer in der Handhabung sein, sind aber ganz sicher keine konzeptuelle Vereinfachung. Und ein grundsätzliches Verständnis bekommt man damit schon gleich gar nicht. Wenn schon C, dann wirklich C. Alles andere ist Unsinn. Und mal ehrlich, wer es nicht auf die Reihe bekommt, dass ein String eine Aneinanderreihung von Zeichen (also ein Array von char) ist, der hat ganz andere geistige Probleme als von der Programmierung überfordert zu sein. Ähnliches gilt für printf. Genau wie man bei ASCIIZ-Strings nicht mit Zeigerarithmetik anfangen muss, gibt es keinen Grund sich bei printf in Formatierungsorgien zu verlieren. Es geht um das Lernen von allgemeinen Grundlagen. Das hat man bei printf, aber nicht bei C++-Streams. Vereinfachungen für Anfänger sind gut und notwendig - aber deswegen muss man sie auch nicht gleich für BWLer halten.
-
Wer zwingt den jemand das Schlüssewort class zu benutzen. Dachte C++ sei eine Multiparadigma-Sprache

-
Hi,
es geht nicht darum, daß man dem Anfänger das umgehen mit char-Arrays abnehmen will, sondern daß er sich gar nicht erst angewöhnen soll alles im C-Stil zu machen, wenn er in Richtung C++ will. Sicher muß er das auch beherrschen, und wenn er das nicht frißt ist er bei C++ sowieso auf der falschen Schiene.
Um es noch mal auf den Punkt zu bringen: Ich bin der Meinung, daß ein C++-Programmierer-Anfänger vorher KEIN lupenreiner C-Programmierer werden muß. Denn SEIN Ziel ist nicht C-Programmierung, sondern C++-Programmierung. Aber er sollte auch nicht gleich mit der gesamten Komplexität der Sprache erschlagen werden.
Und er sollte sich KEINE C-Gewohnheiten zu eigen machen die in C++ deplaziert sind.Ziel kann es aus MEINER Sicht nicht sein, ihn erst zu einem C-Programmiere zu machen und ihn dann zu einem C++-Programmierer UMZUERZIEHEN, sondern ihn Schritt für Schritt stufenweise vom leichten zum schweren gleich C++ lernen zu lassen. Und aus meiner Sicht ist nun mal das Verstehen wie Rechner überhaupt ticken, also Anweisungen, Kontrollstrukturen, Funktionen ... die Basis die erst mal sitzen muß.
Gruß Mümmel
-
Hi Aprollo,
das wird in dieser NG anscheinend anders gesehen.
Gruß Mümmel
-
Aprollo schrieb:
Wer zwingt den jemand das Schlüssewort class zu benutzen.
Ich. Weil: struct sieht so altmodisch aus.
-
muemmel schrieb:
es geht nicht darum, daß man dem Anfänger das umgehen mit char-Arrays abnehmen will, sondern daß er sich gar nicht erst angewöhnen soll alles im C-Stil zu machen, wenn er in Richtung C++ will. Sicher muß er das auch beherrschen, und wenn er das nicht frißt ist er bei C++ sowieso auf der falschen Schiene.
Um es noch mal auf den Punkt zu bringen: Ich bin der Meinung, daß ein C++-Programmierer-Anfänger vorher KEIN lupenreiner C-Programmierer werden muß. Denn SEIN Ziel ist nicht C-Programmierung, sondern C++-Programmierung. Aber er sollte auch nicht gleich mit der gesamten Komplexität der Sprache erschlagen werden.
Und er sollte sich KEINE C-Gewohnheiten zu eigen machen die in C++ deplaziert sind.Ziel kann es aus MEINER Sicht nicht sein, ihn erst zu einem C-Programmiere zu machen und ihn dann zu einem C++-Programmierer UMZUERZIEHEN, sondern ihn Schritt für Schritt stufenweise vom leichten zum schweren gleich C++ lernen zu lassen. Und aus meiner Sicht ist nun mal das Verstehen wie Rechner überhaupt ticken, also Anweisungen, Kontrollstrukturen, Funktionen ... die Basis die erst mal sitzen muß.
Ich weiß ja nicht, was man mit einem anfangen kann, der nur C++ Programmierer werden will. Es geht darum Programmieren zu lernen und da sollte man am Anfang die Grundlagen lernen ohne Libraries die einem alles abnehmen und ganz ohne "verstümmelte" OOP.
-
555-CARSERVICE schrieb:
Ich weiß ja nicht, was man mit einem anfangen kann, der nur C++ Programmierer werden will. Es geht darum Programmieren zu lernen und da sollte man am Anfang die Grundlagen lernen ohne Libraries die einem alles abnehmen und ganz ohne "verstümmelte" OOP.
Die Bibliothek möchte ich mal sehen, die einem alles abnimmt. Es kann sinnvoll sein wenn man sich auch mal die "Basics" der Sprache anschaut und das ein oder andere mal selbst schreibt, nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen), dabei ist es aber vollkommen egal ob du nun mit der prozeduralen oder objektorientierten Lehre beginnst.
Und warum bitte schön "verstümmelte" OOP?
Man kann OOP Konzepte schon von Beginn an sauber lernen, ebenso wie prozedurale Programmierung. Einen der ernsthaft C++ lernen will, würde ich z.B. eher auf OOP beginnen lassen, die wesentlichen Grundlagen von den anderen unter C++ bestehenden Sprachparadigmen kann man noch nebenher erklären wenn Zeit ist.Zum Glück kann trotz der Diskussion hier jeder noch für sich selbst entscheiden, was für einem das beste ist. Ich persönlich habe zwar mit prozeduraler Programmierung begonnen, hatte aber dafür eine Umgewöhnungsphase die ich mir hätte sparen können wenn OOP damals schon verbreiteter gewesen wäre. Jemanden anderen habe ich Programmierung auf OOP-Basis erklärt und der kam damit sehr gut klar (zumal er noch kein anderes Sprachparadigma kannte). Ich persönlich finde OOP leichter zu erklären wenn man es anhand von der realen Welt erklärt.
cu André
-
asc schrieb:
...nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen)...
videomemory[x+y*LINELENGTH] = '*';
-
asc schrieb:
Die Bibliothek möchte ich mal sehen, die einem alles abnimmt. Es kann sinnvoll sein wenn man sich auch mal die "Basics" der Sprache anschaut und das ein oder andere mal selbst schreibt, nicht desto trotz braucht man Bibliotheken schon recht früh (oder wie willst du z.B. unter C++ eine Bildschirmausgabe machen), dabei ist es aber vollkommen egal ob du nun mit der prozeduralen oder objektorientierten Lehre beginnst.
Du musst die Spuerbibliothek nehmen
Man kann auch alles falsch verstehen wollen.Und warum bitte schön "verstümmelte" OOP?
Man kann OOP Konzepte schon von Beginn an sauber lernen, ebenso wie prozedurale Programmierung. Einen der ernsthaft C++ lernen will, würde ich z.B. eher auf OOP beginnen lassen, die wesentlichen Grundlagen von den anderen unter C++ bestehenden Sprachparadigmen kann man noch nebenher erklären wenn Zeit ist.Zum Glück kann trotz der Diskussion hier jeder noch für sich selbst entscheiden, was für einem das beste ist. Ich persönlich habe zwar mit prozeduraler Programmierung begonnen, hatte aber dafür eine Umgewöhnungsphase die ich mir hätte sparen können wenn OOP damals schon verbreiteter gewesen wäre. Jemanden anderen habe ich Programmierung auf OOP-Basis erklärt und der kam damit sehr gut klar (zumal er noch kein anderes Sprachparadigma kannte). Ich persönlich finde OOP leichter zu erklären wenn man es anhand von der realen Welt erklärt.
Na wenn du meinst, dass man einem der noch nicht mal weiß was ne Variable oder n Array ist, gleich noch zusätzlich Klassen und so Zeug wie public, private usw. erklären muss, dann mach es halt so.