Programmieren lernen - besser kein OOP.
-
Ich möchte nicht Programmieren lernen, ich kanns schon. Aber wenn ich mir manche Threads hier anschau, dann mein ich, dass es besser wäre, wenn man als Anfänger erst mal ohne OOP und entsprechende Libraries anfängt. Vielen fehlt doch schon Grundlegendes Verständnis über Variablen, Arrays, Strukturen usw. von Pointern ganz zu schweigen. Wäre es nicht besser, wenn man erst mal mit C anfängt und das solange macht, bis man die Grundlagen wirklich versteht, anstatt irgendwelche std::string, vector usw. zu verwenden?
-
Wäre es nicht besser das man erstmal lernt wie man einen Automotor zusammen baut, bevor man lernt wie er funktioniert und den Führschein macht ?

-
Ich habe Computer <-> Auto Vergleiche schon immer für schlecht gehalten und das war wieder so einer.
-
Programmieranfänger gleich mit C zu konfrontieren halte ich für eine ausgesprochen schlechte Idee.
-
555-CARSERVICE schrieb:
...Vielen fehlt doch schon Grundlegendes Verständnis über Variablen, Arrays, Strukturen usw. von Pointern ganz zu schweigen....

Ich verstehe nicht, was das mit OOP oder einer Ablehnung von std::vector zu tun haben soll....
- "Variablen" sind alle Objekte (seien sie nun "int" oder "String" oder "MyClass")
- "Arrays" sind ein Spezialfall von Containern. std::vector eine gute Umsetzung davon. (vector IST ein Array)
- "Strukturen", struct, class, .... wo soll man das denn nicht mit OOP lernen ?
- "Pointer" (ich denke mal, Du redest von Pointerarithmetik auf einem Container) SIND Iteratoren. Was ich mit dem Iterator lerne, kann ich auch mit dem Pointer.Ich wüsste nicht, auf welcher Basis überhaupt Deine Grundannahme stehen soll, weswegen die Frage unsinnig und nicht zu beantworten ist.
Gruß,
Simon2.
-
hmm.. ich wurde damals gleich ins kalte wasser geworfen!
Chef sagt progammier das in C ... und dann sitzt man da...

Programmieren lernt man vom Programmieren... gleich irgendwelche Klassen hierachien mit polymorphie zu modelieren ohne dasman weis was ein zeiger ist halte ich für bullshit..
d.h. man sollte schon bischen grund/basiswissen haben.. bevor man so richtig einsteigt...
-
@555-CARSERVICE na dann erklär mir mal, warum man sich bspw erst in die untiefen der stringverarbeitung in c begeben sollte? ich sehe keinen vorteil darin, dass man erst lernt, wie (X)printf oder str(X) funktionieren. das bringt niemanden außer deinem wasser- und abwasserversorger etwas...
-
ghorst schrieb:
@555-CARSERVICE na dann erklär mir mal, warum man sich bspw erst in die untiefen der stringverarbeitung in c begeben sollte? ich sehe keinen vorteil darin, dass man erst lernt, wie (X)printf oder str(X) funktionieren. das bringt niemanden außer deinem wasser- und abwasserversorger etwas...

-
die tiefsten tiefen des kaninchenbaus anfangs zu wissen ist natürlich nicht nötig..
aber zu wiesen was ein char oder char* ist , wenn man mit nem string arbeite ist sicher von vorteil:)
-
@BorisDieKlinge ich bestreite nicht, dass man die grundlagen wissen sollte. was der unterschied zwischen char und char* ist oder was string in c eigentlich ist, sollte auch wissen, wer c++ programmiert. nur wie du selber wissen solltest, wenn du c häufiger programmierst, man kommt da schon bei den grundlagen mit teilen in berührungen, die außerhalb von c schlicht nutzlos sind und dazu noch in teilweise völlig abstrusen gebilden erscheinen.
-
Hi,
warum soll an nicht mit C anfangen? C ist eine kleine übersichtliche Sprache, die recht schnell zu begreifen ist. Da konzentriert man sich schon am Anfang auf das wie und nicht auf endlose Auswendiglernerei. Und C hat einen großen Vorteil: 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. Es hat auf Neulinge also einen gewissen erzieherischen Wert. Allerdings muß man nicht alles bis zur Vertiefung lernen und alles was ein bischen nach C++ riecht weglassen.
Auch heute ist es nicht ganz verkehrt, die grundlegenden C-Stringfunktionen zu kennen. Printf muß man sich ja als Anfänger nicht mehr bis zum Umfallen reinziehen. da kann man ja auch im C-Programm lieber die Streamfunktionen von C++ nehmen.
Aus meiner Sicht sollte jeder C und C++-Programmierer den Ritchie wenigstens mal gelesen haben. Aber dann nicht sklavisch C lernen, um danach zu C++ umzulernen, sondern mit C anfangen und in dem Maße wie es sich anbietet Stück für Stück C++ mit lernen. Wenn man erst ein reinrassiger C-Programmierer ist, ist das Umlernen dagegen viel schwerer.
-
Man sollte den Weg eher andersrum gehen. Niemand bringen Fummeleien mit Pointern und Byte-Arrays etwas, wenn er nicht weiß wozu er so etwas macht.
Aber das gleiche gilt auch wiederum für OOP. Mit den leider üblich kurzen Buch- oder Tutorial-Beispielen lässt sich OOP vermutlich auch nicht sehr gut vermitteln.
-
@muemmel meine erfahrung sagt: c wirkt in keiner form erzieherisch. es ist sogar eher so, dass die leute anfangen einfach nur hässlichen und unsicheren code schreiben, damit der compiler glücklich ist und es dann vllt mal läuft.
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.
-
Hi,
mit häßlichen Code für Herrn Compiler fangen viele (die meisten?) an. War bei mir damals in Fortran IV nicht anders. Aber irgendwann landet man in der Sackgasse und begreift das es so nicht weitergeht.
Bei Basic kann man sich immer noch irgendwie durchwursteln. In C schießt man sich irgendwann sein Programm ab oder versteht nicht mehr was man gemacht hat.
Wenn man C mit einem C++-Compiler macht, wird man schon zu einem bißchen Sauberkeit erzogen. Und wenn man sich von vornherein daruaf einstellt, daß es in C keine Warnungen und Hinweise gibt und daß jeder Hinweis und jede Warnung in Wahrheit ein Fehler ist und versucht, seine Programme so zu gestalten, daß sie ohne eine Bemerkung des Compilers durchgehen, dann ist schon erst mal einiges gewonnen.
Ein wenig zu viel reservierter Speicher oder nicht wieder freigegebener Speicher ist in den meisten Sprachen heute kein wirkliches Problem mehr, das ist zum Beispiel in Pascal nicht anders. Und in Sprachen mit Garbage Collection lernt man überhaupt nicht auf sowas zu achten.
Aber wärend C aus einem Gemisch von Worten und Zeichen besteht, ist das bei Pascal anders. Begin und End heben sich bei weitem optisch nicht so gut raus wie geschweifte Klammern und die Struktur ist bei weitem nicht so deutlich zu erkennen. Auch ist Pascal (Delphi) auch wenn es eigentlich eine Lehrsprache ist viel unsauberer. Ob etwas eine Funktion ohne Argumente oder eine Variable ist, sehe ich nur, wenn ich mir die Definition ansehe. Bei C hat ALLES was ein Funktionsaufruf ist Klammern wie sich das gehört. Auch ist bei Pascal (Delphi) die Verschleifung zwischen Objekten und Zeigern nicht gerade günstig. In C wird alles was ein Zeiger ist auch als solcher definiert und genutzt.Gruß Mümmel das Mümmel
-
pascal und c... pascal bietet aus meiner sicht für anfänger eine wesentlich bessere grundlage, da der compiler tatsächlich über vieles meckert oder es schlicht nicht zulässig ist, was in c einfach durchgewunken wird. meistens ist es in c auch nicht sauber, aber es stört keinen. das wird schon passend hingebogen.
c ist auf der anderen seite wesentlich konsequenter, was die funktionsaufruf-sematik angeht. keine frage. aber völlig inkonsequent, was die verwendung von prozeduren angeht. "void" als rückgabewert ist einfach nur lustig. hier merkt man, wieviel näher c an der eigentlichen rechnerarchitektur ist als pascal. void ist eine absolut sinnvoll definition, wenn man darauf hinweisen will, was (im falle des pc) im eax register steht, nämlich nichts. nur ist es für den menschen, der die sprach nutzt, von keinerlei interesse.wenn mich gerade nicht alles täuscht, werden in objekt-pascal ähnlich wie java oder ruby alle objekte per call-by-reference übergeben. ob das ein nachteil ist, weiß ich nicht. es erspart auf jeden fall viele probleme, die in c++ auftreten.

-
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 ?
Und diese Programme laufen (leider) oft genug noch (eine zeitlang unter bestimmten Rahmenbedingungen), ohne dass Fehler auffallen.Also das Argument verstehe ich auch nicht.
ghorst schrieb:
... pascal bietet aus meiner sicht für anfänger eine wesentlich bessere grundlage, da der compiler tatsächlich über vieles meckert oder es schlicht nicht zulässig ist, was in c einfach durchgewunken wird. meistens ist es in c auch nicht sauber, aber es stört keinen. das wird schon passend hingebogen....

Gruß,
Simon2.
-
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.