Programmieren lernen - besser kein OOP.



  • 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



  • Undertaker schrieb:

    ....
    naja, jeder der programmieren will, hat irgendein ziel vor augen und wird sich dementsprechend eine programmiersprache aussuchen....

    Undertaker schrieb:

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

    Plädierst Du hier (in einem Thread, der offensichtlich nicht den Status Quo, sondern eine Verbesserung vor Augen hat) wirklich für einen "bewegt sich nur, wenn er unbedingt muss"-Ansatz ?

    Sorry, das kann ich nicht als Ideal erkennen. Meine "programmiertechnischen Vorbilder" kennen allesamt zahllose Programmiersprachen und Plattformen und bilden sich permanent weiter. Von einem "Ich will so bleiben wie ich bin"-Kandidaten habe ich noch keine beeindrucken Lösung gesehen.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Plädierst Du hier (in einem Thread, der offensichtlich nicht den Status Quo, sondern eine Verbesserung vor Augen hat) wirklich für einen "bewegt sich nur, wenn er unbedingt muss"-Ansatz ?

    plädieren? aber nein!
    es gibt viele die genau so handeln. sie wollen erst wissen 'wofür es gut ist', sonst gucken sie sich das gar nicht erst an.
    🙂



  • Hi,

    man muß durchaus nicht jeden Schmarrn mitmachen, aber es ist durchaus legitim, sich alles mal anzugucken, was man daraus für sich entnehmen könnte.
    Mann muß nicht jede neue Programmiersprache lernen, aber bei welchen die neue Gedanken reinbringen sollte man gucken ob einem die dahinter stehende Philosophie nicht was nützen könnte.

    Gruß Mümmel



  • muemmel schrieb:

    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.

    Ein Real Programmer! 👍

    ghorst schrieb:

    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.

    Ohne Zweifel ein Quiche Eater... 👎

    http://www.pbm.com/~lindahl/real.programmers.html



  • Hi,

    gute Programmierer erhält man nicht dadurch, daß man sie in extrem restriktiven Programmierumgebungen an der kurzen Leine hält, sondern in dem man erreicht, daß sie unter maximaler Freiheit aus eigener Erfahrung und Überzeugung freiwillig sauberen Programmierstil praktizieren. Mit Sprachen wie C oder Fortran IV lernt man sowas, mit Pascal lernt man nur dem Compiler gehorchen.
    Kinder werden schließlich auch nicht durch in Watte packen sondern durch ausprobieren und kennelernen der eigenen Grenzen optimal aufs Leben vorbereitet.

    Gruß Mümmel



  • muemmel schrieb:

    gute Programmierer erhält man nicht dadurch, daß man sie in extrem restriktiven Programmierumgebungen an der kurzen Leine hält, sondern in dem man erreicht, daß sie unter maximaler Freiheit aus eigener Erfahrung und Überzeugung freiwillig sauberen Programmierstil praktizieren. Mit Sprachen wie C oder Fortran IV lernt man sowas, mit Pascal lernt man nur dem Compiler gehorchen.
    Kinder werden schließlich auch nicht durch in Watte packen sondern durch ausprobieren und kennelernen der eigenen Grenzen optimal aufs Leben vorbereitet.

    Und darum lernt man Babys das Laufen immer mit Stelzen.



  • muemmel schrieb:

    Hi,

    gute Programmierer erhält man nicht dadurch, daß man sie in extrem restriktiven Programmierumgebungen an der kurzen Leine hält, sondern in dem man erreicht, daß sie unter maximaler Freiheit aus eigener Erfahrung und Überzeugung freiwillig sauberen Programmierstil praktizieren....

    Sorry, aber das halte ich für Quatsch.
    Allein aus dem Grund (und da hinkt nämlich auch der "Kindervergleich"), dass man beim Programmieren relativ wenig "Rückkopplung" hat:

    • Man sieht relativ wenig Fremdcode, mit dem man sich vergleichen könnte (im Gegensatz zu Kindern, die andere Menschen laufen sehen .... und zwar besser als sie)
    • Viele "Programmierschwächen" treten erst in komplexeren Umfeldern/Anforderungen zutage. Bis aber der "Wald&Wiesen-Programmierer" in ein derartiges Umfeld kommt, hat er sich bereits einen "Fuddelstil" angewöhnt, der nur sehr schwer abzulegen ist.

    Mit dem Argument ("maximale Freiheit") sollte man auch C ablehnen und jede Sprache, die einem die Maschinennähe kapselt: Hast Du Dir mal angesehen, wie "in Watte gepackt" man mit einem printf() ist ? Oder mit malloc() ? ...

    Gruß,

    Simon2.



  • Ich bin da immer für funktionale Sprachen.
    Meist ist Java z.B. sehr hinderlich, weil die ganzen Schlüsselwörter wie public, static entweder direkt erklärt oder ignoriert werden müssen.
    Daher bin ich für sehr simple Sprachen, mit denen man schnell Ergebnisse erzielen kann, an kleinen Codebeispielen die Funktionsweise erklärt und dann erst weiter in die Sprache eindringen kann.
    Bei vielen Sprachen existieren schon in Hello World so viele Schlüsselwörter und zu beachtende Faktoren, dass die Arbeit damit vergleichsweise schwieriger wird.

    Interessant ist auch der umgekehrte Weg Mikroprozessorarchitektur. Der Weg über Transistoren, Machinencode, Assembler hin zu höheren Sprachen ist manchmal einer der erfolgreichsten, wenn auch um einiges aufwändiger.
    Ich z.B. habe vor diesem Weg schon programmieren können, aber trotzdem noch so einiges dazu gerlernt (und wieder vergessen :D) und halte den Weg garnicht für so überdimensioniert.
    Man muss ja keine heutigen Rechner durchnehmen, aber ein kurzer Durchschuss durch die Entwicklung eines PCs, auch mal 3 Zeilen Maschinencode, hilft ungemein.
    Aber das sollte dann doch lieber jeder selbst entscheiden. 😉



  • Du findest C noch zu "freundlich" und nicht wirklich maschinennah? Was programmierst du denn den ganzen Tag? Assembler oder gleich das Binary im Hex Editor? 😃



  • Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht und erst in zweiter Linie um die Implementierung mit einer (beliebigen) Sprache.

    Ich kenne keine gute Einsteigersprache (von Pascal hab ich es zwar schon gehört, aber ich kenne Pascal zu wenig um das beurteilen zu können), eine Sprache zum Lernen sollte auf keinen Fall ein komplexes Programmierparadigma haben, da es den Lernprozess kompliziert macht. Der Lernende muss so das Entwerfen von Algorithmen und das Implementieren dieser in einer Programmiersprache lernen. Für den Anfang sollte die Sprache daher sehr einfach gehalten sein.

    C ist vielleicht einfach im Bezug auf das Programmierparadigma und die Menge an Schlüsselwörtern, aber der Code wirkt doch sehr kryptisch, das lenkt den Anfänger zu sehr vom Wesentlichen ab.



  • lolz schrieb:

    Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht und erst in zweiter Linie um die Implementierung mit einer (beliebigen) Sprache.

    Das ist ein Standpunkt von vor mindestens 30 Jahren. Stichwort Softwarekrise. Viele Entwicklungen seit dieser Zeit, strukturierte Programmierung, OOP, OOD usw. haben gerade nicht das Ziel, den Entwurf von Algorithmen zu erleichtern. Die Sprache ist wichtig, und nicht beliebig, denn die Möglichkeiten, die sie bietet, entscheiden darüber, auf welche Art und Weise man sich einem Problem nähert.



  • lolz schrieb:

    Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht ...

    Also DAS würde ich jetzt mal bezweifeln.

    Wenn man schon verallgemeinert, dann vielleicht gerade noch, dass es um "Datenverarbeitung" geht, aber heutzutage hat gaaaanz viel mit Datenhaltung,- transport, -kombination, -strukturierung, -anzeige, .... zu tun und viel weniger damit, einen (mathematischen) Algorithmus auf einen Satz identischer Daten loszulassen.

    wenn Du natürlich JEDE Form von Datenverarbeitung als "Algorithmus" definierst, bleibt Deine Aussage vielleicht korrekt .... aber leider in ihrer Allgemeinheit eher wertlos. 😉

    Gruß,

    Simon2.



  • Hi,

    Kinder lernen Laufen nicht auf stelzen, aber auch nicht mehr in irgendwelchen Laufvorrichtungen oder Laufgittern.

    In C kann ich mich mit printf() und malloc() in Watte packen lassen, könnte aber das was die Funktionen (die nicht Bestandteil der eigentlichen Sprache sind) - wenn ichs denn könnte - auch selber zu Fuß machen.

    Natürlich kann ich mit C extrem kryptisch programmieren. Aber nirgendwo steht, daß ich es auch muß.
    Ein WortfürWort aus Pascal nach C übertragener Quelltext sieht auf den ersten blick vieleicht kryptischer aus, weil man als Pascal-Programmierer die vielen Zeichen nicht gewohnt ist. Aber nach einem kurzen Schütteln ist der klarer als das Original. { } || && fallen dem Auge im gesamten Text sofort viel mehr auf als begin end and or. Man sieht auf den allerersten Blick was Kontrollstrukturen, was Variablen und was Funktionen sind. An einem Delphi-Quelltext (Pascal) sieht man nicht einmal an den von der IDE generierten Definitionen ob man Klassen oder Zeiger oder einfache Typen vor sich hat.
    Wenn man allen Schnickschnack wegläst und dafür ein wenig in die Kiste von C++ greift (zb. Referenzparameter) und dafür auf Zeiger verzichtet und ganz einfach so wie in einer anderen Sprache programmiert, dann kommt superübersichtlicher und kinderleicht zu verstehender Quellcode heraus.
    Dafür ist die eigentliche Sprache mit den ganz wenigen Schlüsselwoten und Regeln sehr schnell zu lernen, und den Rest der Zeit kann man für das wie verwenden.

    Der Ersatz von Schlüsselwörtern durch Zeichensymbole ist für den der von woanders kommt ungewohnt, macht Quelltext aber wesentlich übersichtlicher.

    Viele Abkürzungen in C (++, += ()?:, ... ) sind, wenn man sie einmal begriffen hat wesentlich natürlicher und übersichtlicher.
    In der normalen Sprache sagt mann ja auch nicht mache a zu a plus b sondern sagt erhöhe a um b.

    Es geht (aus meiner Sicht) auch in der Programmierung nicht ohne mal kräftig auf die Schnauze zu fallen, damit man Programmierdisziplin aus eigenem erlebten und gefühltem Bauchempfinden einhält und nicht weils irgendwer verlangt.
    In C hat man die Möglichkeit, dieses AHA-Erlebnis recht früh zu haben, bevor man entgültig mental festgelegt ist.

    Eine Hängematte wird, egal in welchem Zusammenhang im Leben - nun mal nicht als Weg zu einem besseren ICH verstanden und genutzt sondern man läßt sich hineinfallen und genießt die Bequemlichkeit.

    Gruß Mümmel



  • Bashar schrieb:

    lolz schrieb:

    Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht und erst in zweiter Linie um die Implementierung mit einer (beliebigen) Sprache.

    Das ist ein Standpunkt von vor mindestens 30 Jahren. Stichwort Softwarekrise. Viele Entwicklungen seit dieser Zeit, strukturierte Programmierung, OOP, OOD usw. haben gerade nicht das Ziel, den Entwurf von Algorithmen zu erleichtern. Die Sprache ist wichtig, und nicht beliebig, denn die Möglichkeiten, die sie bietet, entscheiden darüber, auf welche Art und Weise man sich einem Problem nähert.

    Simon2 schrieb:

    lolz schrieb:

    Man sollte nicht vergessen, dass es beim Programmieren um das Entwerfen von Algorithmen geht ...

    Also DAS würde ich jetzt mal bezweifeln.

    Wenn man schon verallgemeinert, dann vielleicht gerade noch, dass es um "Datenverarbeitung" geht, aber heutzutage hat gaaaanz viel mit Datenhaltung,- transport, -kombination, -strukturierung, -anzeige, .... zu tun und viel weniger damit, einen (mathematischen) Algorithmus auf einen Satz identischer Daten loszulassen.

    wenn Du natürlich JEDE Form von Datenverarbeitung als "Algorithmus" definierst, bleibt Deine Aussage vielleicht korrekt .... aber leider in ihrer Allgemeinheit eher wertlos. 😉

    Gruß,

    Simon2.

    Ich hab Algorithmus sehr allgemein gefasst, also alles.

    Warum sollte ein Anfänger gleich noch ein Programmierparadigma mitlernen müssen, wenn er dieses noch gar nicht braucht? Ich habe meine Aussage bewusst so allgemein gefasst wie möglich.
    Erst mit zunehmender Komplexität der Algorithmen wird es notwendig beim Entwurf ein oder mehrere (geeignete(s)) Programmierparadigm(a|en) einzusetzen.

    Und dann ist die Implementierung mit einer Sprache noch immer zweitrangig und an erster Stelle steht weiterhin der Entwurf. Das soll nicht heißen, dass der Entwurf ohne Blick auf die Sprache stattfinden muss.

    An OOP sieht man übrigens sehr gut, dass es nicht möglich ist OOD und Programmieren gleichzeitig zu lernen. Alle Anfänge die ich gesehen habe haben eines gemeinsam: es wird nicht objektorientiert programmiert, sondern man packt alles in eine Klasse um die (für einen Anfänger unnötige) Komplexität die durch OOD entsteht zu umgehen.

    Aus diesen Erfahrungen stelle ich daher die (gewagte) Behauptung, dass ein Anfänger es leichter hat wenn er erst einmal den Entwurf von Algorithmen übt und das (direkte) Implementieren ohne Verwendung eines Programmierparadigmas.


Anmelden zum Antworten