Programmieren lernen - besser kein OOP.
-
Simon2 schrieb:
muemmel schrieb:
... Bei C muß man wissen was man tut, man kann nicht so wie bei einigen anderen Sprachen rumschweinigeln sonst fällt man auf die Nase...

Ähhh was soll man denn bei anderen Sprachen noch mehr "rumschweinigeln" als bei C mittels ungeprüften casts, Speicherzugriffen, Pointerarithmetik, Fehlercodes, .... kann ?
Gibt es (ausser) ASM überhaupt eine Sprache, die mehr "Schweinereien" erlaubt als C ?...Ich nehme mal an das muemmel gemeint hat das man bei C sauberer als bei anderen Sprachen programmieren muss damit man Fehler umgeht. In so fern ist hier kein Widerspruch.
Nichts desto trotz zurück zum thema: Wer unbedingt erst die Untiefen von C kennen lernen will, warum nicht. Ich würde zwar einen Anfänger gleich eine OO-Sprache geben und ihn nicht doppelt lernen lassen, aber jedem so wie er es will (In dem Punkt finde ich C++ gut da es beides erlaubt und man so auch beides zeigen und mischen kann ohne jetzt in die c-spezifischen Funktionen zu müssen; Sprich man kann das wesentliche von C zeigen ohne das man einen noch die c-spezifischen Funktionen zeigen muss...).
cu André
-
Hi,
sicher kann man, wenn man es denn will, in C rumschweinigeln bis zum Abwinken.
Aber man muß da doch ein wneig unterscheiden zwischen gezielten Schweinigelein eines profis, der weiß was er will und z.B. wildem Goto-Gehopse bei Anfängern in Sprachen wie Basic.
Es ist aus meiner Sicht schon ein Unterschied, obn man sich hoffnungslos verfranzt hat und dann mit x Klimmzügen versucht doch noch den Korken in die Flasche zu bekommen, oder ob ein erfahrener Profi die Möglichkeiten von C zur Effizeinzsteigerung mißbraucht.
Zu wildes Kuddelmuddel landet unter C shr schnell im Rechnernirvana.
außerdem hatte ich von C mit einem C++-Compiler gesprochen. Die prüfen mittlerweile fast ebenso sauber wie Pascal-Compiler. Zumindest wenn man alle Warnungen aktiviert. Und alte C-Casts und Pointer-Zauberei sind wenn man die Trennung zwischen C und C++ nicht zu eng sieht auch nicht mehr in dem Maße nötig. Dafür gibts die neuen C++Casts und Referenzen.
Das ist wie beim Autofahren. Die neuen Sicherheitssysteme helfen zwar, nicht versehentlich vor die Wand zu fahren, sind aber machtlos bei dem der bewust vor die Wand fahren will.
Gruß Mümmel das Mümmel
-
Es geht nicht darum, dass es jetzt C sein muss. Hätte ich mal besser keine Sprache als Beispiel genannt. Es geht auch nicht darum niemals irgendwelche Libraries zu verwenden. Aber ich finde mann sollte erst mal die Grundlagen verstehen, bevor man solche Sachen verwendet. Man sieht hier so oft Programme von Anfängern die irgendwelche Libraries verwenden und dann nicht weiter wissen, weil sie nen falschen Variablentyp übergeben (nicht jede Variable ist ein Objekt, außer bei Javascript und Co). Wenn man mit ner OO Sprache anfängt, dann wird die oft so verstümmelt, dass es irgendwelche hässlichen OO - nicht OO Konstrukte gibt (Java alle Methoden static, üble C/C++ Mischungen, Objekte erzeugen und keine Ahnung was das bedeutet).
Wieso nicht gleich mit einer nicht OO Sprache anfangen und die Grundlagen richtig lernen. Wenn man die richtig kann und z.B. seine eigene LinkedList programmieren kann, dann sollte man sich Libraries anschauen. OOP ist viel zu schwierig für einen Anfänger. Das was ein Anfänger macht ist so weit weg von OOP, dass man es auch gleich am Anfang weg lassen kann.
-
Der Witz ist doch gerade der, dass man mit C als Einstieg gar nicht C-spezifisches lernt - sondern allgemeine Grundlagen und ein gutes Verständnis für die Kiste vor einem. Eben weil C relativ nah am System ist. Für praktisches und bequemes arbeiten ist die Systemnähe u.U. nachteilig. Aber für das Lernen von Grundlagen ist es sehr gut. Dass man z.B. mit printf etwas C-spezifisches lernen würde ist auch falsch. Davon abgesehen, dass printf in dieser Form keinesfalls nur in C existiert (sondern auch in anderen Sprachen wie z.B. Perl), so ist ein Funktionsaufruf sogar mit "print" als Bezeichnung allgemein die übliche Variante. So kleinliche Kritik an C ist also definitiv nicht gerechtfertigt. Dagegen ist ein Syntax-Konstrukt wie cout << "Hallo" zum Beispiel wirklich für nur eine Programmiersprache spezifisch ...
Das Hauptargument ist aber wirklich, dass OOP ein gedanklicher Overkill ist. Hinter OOP steht ein komplexes Gedankenkonstrukt und eine Ideologie, die es zu verstehen gilt. Man kann zwar gerne mit OOP anfangen - aber nach 5 Minuten kommt dann die Frage warum dieses und jenes so sei. Und dann hat man den Salat. Entweder man erklärt dann das komplexe Konstrukt, das erfahrungsgemäß ohne Programmier-Vorwissen kaum einer versteht, oder man verschiebt es auf später. In letzterem Fall lernt der Anfänger nur auswendig, Code abtippen und nicht selbstständig programmieren. In ersterem aber versteht er nur Bahnhof und fragt sich, warum es denn so kompliziert sein muss.
Ich hab es schon öfters gesagt und sage es noch einmal: in der Universität hier ist die Java-Vorlesung für Programmieranfänger die absolute Horror-Vorlesung. Und das ist noch nicht einmal C++ sondern eben Java - und das auch noch ohne Interfaces und dergleichen. OOP als ideal für Anfänger anzupreisen ist schlicht und ergreifend realitätsfremd.
-
Hi,
Erst eine "normale" Sprache lernen und dann eine objektorientierte ist irgendwie den Kopf verbiegen. Aus meiner Sicht ist es schwieriger, von nicht oop zu oop umzusteigen als gleich richtig lernen. Besser ist ein gemischtes herangehen.
Gerade dafür ist jedoch C bestens geeignet. Man fängt mit C an und nimmt für Sachen wie Strings und Ausgaben die C++-Möglichkeiten. Und dann schleicht man sich ganz langsam in dem Maße wie man es durchblickt an C++ ran.Gruß Mümmel
-
muemmel schrieb:
der weiß was er will und z.B. wildem Goto-Gehopse bei Anfängern in Sprachen wie Basic.
Das Goto-Gehopse ist in C und C++ genauso möglich wie in Basic. Das liegt nicht an der Sprache, sondern wie sie vermittlt wird. Man kann umfangreiche Programme schreiben, ohne ein einziges mal Goto zu verwenden. Das gilt für C und Basic gleichermaßen.
Das hier ist mal wieder die leidige Diskussion, welche Programmsprache die "bessere" ist, und wie immer werden die gleichen Argumente ausgetauscht- mit dem Ergebnis, daß am Ende keiner wirklich von anderen Ansichten überzeugt ist. Das ganze endet eher in Philosophie.
Es kommt einfach drauf an, was man machen will.
OOP ist dann sinnvoll, wenn man große Projekte verwirklicht. Da kann sie viel Schreibarbeit ersparen- vorausgesetzt, man kennt die Bibliotheken und Containerklassen gut. Das ist aber genauso eine Lernerei wie der Umgang mit prozeduralen Sprachen.
Für den Anfänger ist OOP schon deshalb ungünstig, weil er nicht begreift, wozu das gut sein soll. Ein prozeduraler Ablauf ist für Anfänger leichter zu verstehen, zumal er beim Progarmmieren den Ablauf direkt im Codeaufbau verfolgen kann (naja, wenn er sich das Goto erspart). Bei OOP muß er ständig zwischen den Objekten und Elementfunktionen hin- und herscrollen, um den Ablauf des Programms zu kapieren, und fragt sich am Ende, ob es nicht auch einfacher geht.
-
ghorst schrieb:
c verzeiht vieles. das fängt bei solchen sachen wie überläufen in zahltypen an und endet damit, dass man sich nicht so genau darum kümmern muss, wie groß der reservierte speicher tatsächlich war (ein oder zwei daneben, stellt meist kein problem da...) oder ob man den speicher auch wirklich wieder freigeben hat.
deswegen wurden ja auch diese programmiersysteme mit garbage collectoren, netz und doppeltem boden erfunden, C#, D, Java, usw.

-
Hallo
Ich versuche auch mal meinen Senf dazuzugeben. Ich halte es nicht für sinnvoll sich anfangs mit char[] oder char* rumzuplagen. Dann doch lieber mit std::string und co.
chrische
-
muemmel schrieb:
Man fängt mit C an und nimmt für Sachen wie Strings und Ausgaben die C++-Möglichkeiten. Und dann schleicht man sich ganz langsam in dem Maße wie man es durchblickt an C++ ran.
ich finde, C ist nicht so gut für absolute anfänger geeignet (zu kryptisch), eher BASIC oder Pascal.

-
Ich halte es im Grunde für wünschenswert, alle Perspektiven zu kennen. Von Assembler angefangen bis zur vollkommenen Abstraktion. Das Problem ist nicht wirklich, womit man anfängt. Das Problem entsteht erst, wenn man einen Pfad einschlägt und bevor man alles gesehen hat entscheidet, dass man nicht weiterlernen muss. Dann bleibt man auf dem Status eines Lowlevel-Fricklers stehen, oder produziert abstrakten Bloat ohne Sinn und Verstand.
-
Bashar schrieb:
Ich halte es im Grunde für wünschenswert, alle Perspektiven zu kennen. Von Assembler angefangen bis zur vollkommenen Abstraktion.
kommt darauf an, was man mit der programmiererei erreichen will. angenommen einer möchte tolle, dynamische webseiten machen, entscheidet sich z.b. für PHP und ist damit völlig zufrieden. nie im leben wird dafür assembler brauchen und auch nicht auf den gedanken kommen, dass es sowas überhaupt gibt.

-
Bin auch dafür, Anfängern erst prozedurales Programmieren beizubringen und dann erst OOP. Beim Umstieg von C auf C++ kann man den realen und praktischen Nutzen meiner Meinung nach übrigens sehr gut verstehen. Bei komplexeren Projekten wird der C-Programmierer auch seine Daten kapseln und extra Funktionen dafür schreiben (vielleicht muss man ihn auch drauf stoßen, macht ja nix :D)
struct Haus { int hoehe; int breite; }; void Haus_MacheIrgendwas( Haus* h, int bla ) { }Wenn man an dieser Stelle nun Klassen gezeigt bekommt, erkennt man sofort den Nutzen und vor allem den Sinn der OOP.
-
Hi,
das es nötig ist Assembler zu können glaube ich nicht ganz, aber es ist gut, wenn man zumindest grob weiß wie Rechner im innern ticken, dann weiß man, was man vom Rechner erwarten kann.
Das von vielen als kryptisch empfundene an C ist es doch nur für den der von Pascal oder Basic oder... kommt.
Wenn man gleich mit C anfängt, dann geht einem das sicher von Anfang an in Fleisch und Blut über und man vermißt in anderen Sprachen das klare Erscheinungsbild. Das ist ja gerade das schöne an C, daß nicht alles eine Textso0e ist, sondern schön gegliedert mit viel Luft dazwischen.Und welche Sprache ermöglicht (außer vielleicht Pascal/Delphi) noch einen so gleitenden Übergang zwischen nicht oop und oop wie C und C++.
Wobei Delphi ist ja mittlerweile fast Subset-C++ mit Pascal-Notation.Gruß Mümmel
-
Ich brauche ja nur C und Assembler. Ich arbeite direkt mit der Hardware, da brauch ich kein C++, das stört mich nur.
-
Undertaker schrieb:
kommt darauf an, was man mit der programmiererei erreichen will. angenommen einer möchte tolle, dynamische webseiten machen, entscheidet sich z.b. für PHP und ist damit völlig zufrieden.
Dann ist er so ein Spezialist, dass er nicht zum Thema dieses Threads gehört: Jemand der nie was anderes als PHP machen will, sollte natürlich mit PHP anfangen. In 10 Jahren ist er allerdings spätestens Hartz-IV-Empfänger, das muss jeder für sich entscheiden.
Ich dachte wir reden hier über Leute, die -- (Prämisse des Threads) aufgrund der Sprache, mit der sie angefangen haben -- mit unangebrachten geistigen Bildern arbeiten und schlechte Angewohnheiten haben und deshalb schlechte Designs und schlechten Code abliefern.
-
Bashar schrieb:
Undertaker schrieb:
kommt darauf an, was man mit der programmiererei erreichen will. angenommen einer möchte tolle, dynamische webseiten machen, entscheidet sich z.b. für PHP und ist damit völlig zufrieden.
Dann ist er so ein Spezialist, dass er nicht zum Thema dieses Threads gehört: Jemand der nie was anderes als PHP machen will, sollte natürlich mit PHP anfangen. In 10 Jahren ist er allerdings spätestens Hartz-IV-Empfänger, das muss jeder für sich entscheiden.
naja, jeder der programmieren will, hat irgendein ziel vor augen und wird sich dementsprechend eine programmiersprache aussuchen. will jemand z.b. spiele programmieren, dann werden die meisten wohl C++ lernen wollen, weil man irgendwo gehört hat, dass viele spiele in C++ gemacht werden. die wenigsten leute sind aber reinrassige programmiersprachen-freaks und ziehen sich alle möglichen sprachen und konzepte rein. unser rüdiger ist vielleicht so ein fall, aber die sind eher selten.

-
Undertaker schrieb:
naja, jeder der programmieren will, hat irgendein ziel vor augen und wird sich dementsprechend eine programmiersprache aussuchen. will jemand z.b. spiele programmieren, dann werden die meisten wohl C++ lernen wollen, weil man irgendwo gehört hat, dass viele spiele in C++ gemacht werden. die wenigsten leute sind aber reinrassige programmiersprachen-freaks und ziehen sich alle möglichen sprachen und konzepte rein. unser rüdiger ist vielleicht so ein fall, aber die sind eher selten.

Ich bin auch so ein Fall, aber das nur am Rande. Es mag ja sein, dass jeder ein Ziel vor den Augen hat, aber das ist auf lange Sicht meistens irrelevant. Ich hab 1989 angefangen zu programmieren, da gabs noch kein Web, geschweige denn PHP. Heißt das, ich darf nie im Leben was fürs Web machen? Natürlich nicht. Ich bin ja auch nicht Eisverkäufer geworden. Ziele ändern sich im Laufe der Zeit.
-
Hi,
ich hab damals, so gegen 1984 rum oder noch früher ohne jeden Rechner mit Basic angefangen, rein theoretisch. Anschließend hab ich nach einer Schnellbesohlung mit Fortran IV gearbeitet. Nachdem ich es dann endlich geschafft hatte, den absoluten gordischen Knoten zu programmieren, aus dem sich weder ich noch ein anderer noch herr Compiler rausgefunden haben hats bei mir nach dem Lesen kleiner Heftchen der DDR-Informatikreihe über strukturierte Programmierung und die Sprache C klick gemacht. Ab dann war ordentlicheres programmieren angesagt. Erst noch in Fortran. Nach einem kurzen Zwischenversuch mit etwas Asm (brrrr) um Diskettenlaufwerke zurücksetzen zu können und Turbo-Pascal, das mir aber zu kleinlich war (wie können zwie Dinge die das selbe beschreiben, nur unterschiedlich definiert snd nicht compatibel sein?) und ein wenig rumprobieren mit PLM und dBase (an was man so damals rankam) bin ich dann bei C gelandet. Ich muß ehrlich sagen, die Sprache war wie ein Befreiungsschlag für mich. Endlich klar lesbaren schön übersichtlichen strukturierten Quelltext, der genau das macht was ich wollte. Den Goto-Befehl, das eigentliche Grundübel, zumindest in meiner anfänglich ahnungslosen Verwendung habe ich seit dem nicht ein einziges mal wieder verwendet. Von dem bin ich geheilt. Hat mich aber nicht gehindert andere Ferkeleien zu begehen. Beim Versuch, fürs Studium vorhandene Grafik-Beispiele in Fortran umzustricken bin ich an der zu geringen Geschwindigkeit meines Rechners fast verzweifelt. Selbst ein vorzeichenwechsel dauerte ohne Koproz zu lange. Also wurden die Abs und sign-funktionen von Fortran auf Basis von Bitoperationen nachgebildet. Würde mir heute nicht mehr im Traum einfallen und wahrscheinlich würde ich den damaligen quelltext auch gar nicht mehr verstehen. Dann weiter Richtung C++ und über die Meinung eines Bekannten, daß der Umstieg von C nach C++ zwei Jahre dauert ein wenig geschmunzelt. Das bischen Syntaxerweiterung muß doch schnell gelernt sein. Heute
weiß ich, daß er recht hatte. Wenn man von einer normalen Sprache kommt, dauert es wirklich lange, bis man in sich stellenden aufgaben automatisch entsprechende C++-Construkte sieht.
Danach lange Zeit nur Delphi gemacht und diese Sprache, besonders in der ersten Zeit als unübersichtlich und als reinste Zwangsjacke empfunden. Wo war das klare Bild und die elegante Ausdrucksweise von C geblieben. Heute bin ich zum Glück wieder mit beiden Borland-Produkten, Delphi und C++Builder zusammen und muß sagen, daß das eine das andere inspiriert. Nach wie vor sind meine C++-Projekte aber die wesentlich sauberer programmierten. Da weiß ich daß ich das offene Messer in der Hand habe und arbeite sorgfältiger. Beim ach so sicheren Pascal lasse ich mich dagegen schon mal mit aller Wucht in die sichere Hängematte fallen wie das Schwein in die Sch...Gruß Mümmel
-
Bashar schrieb:
Ich hab 1989 angefangen zu programmieren, da gabs noch kein Web, geschweige denn PHP. Heißt das, ich darf nie im Leben was fürs Web machen? Natürlich nicht.
natürlich nicht, aber im normalfall (du bist programmiersprachen-fan, auf dich trifft das jetzt mal nicht zu) würde man erst dann eine neue sprache lernen wollen, wenn man merkt, dass die bisherige lieblingssprache für das neue anwendungsgebiet nicht, oder nur wenig taugt.

-
Hi,
gerade auf die oop trifft das ganz besonders zu, was mir schon mein allererster programmierlehrer damals in tiefsten DDR-zeiten gesagt hat: "Die Kunst besteht im Weglassen".
In einem kleinen Programm das mir nur ein paar Zufallszahlen bereitstellen soll muß ich nicht unbedingt alle Möglichkeiten von Mehrfachvererbung, generischer Programmierung und was weis ich was noch ausprobieren.
Wenn ich immer versuche das Problem mit den einfachsten mir zur Verfügung stehenden Mitteln zu lösen und erst dann zu komplexeren Lösungen greife wenn ich davon signifikante Vorteile habe, ist das sicher kein falscher Zug auf dem Weg zu einem sauberen Programmierstil.Gruß Mümmel