Programmierung Schwierigkeiten



  • Hi!

    Ich würde gerne wissen, wie lange die meisten hier so gebraucht haben, bis sie anständig programmieren konnten.

    Ich bin zurzeit ziemlich frustriert. Wir machen C++ an der Uni (bin Elektrotechniker) und komme mir dabei meist wie ein Ochs vorm Berg vor.

    Gerade Programmierung mit Klassen fällt mir noch sehr schwer. 😞
    Ist das einfach Übungssache oder größtenteils Begabung?
    Viele meiner Kommilitonen gehen total ab. Einige hatten das zwar in der Schule, aber in der Regel ist sowas ja schnell aufzuholen.

    Ist das normal, oder sollte man einfach in eine andere Richtung gehen?

    Grüße,
    Krachi



  • Krachi schrieb:

    Gerade Programmierung mit Klassen fällt mir noch sehr schwer. 😞
    Ist das einfach Übungssache oder größtenteils Begabung?

    Man kann aus den paar Zeilen, die Du da geschrieben hast, natuerlich nicht direkt ablesen, was das konkrete Problem ist. Was ich mir aber vorstellen kann ist, dass es eine Frage des Blickwinkels auf die Problemstellungen ist. Wenn Du das Konzept der objektorientierten Programmierung verstanden hast, dann werden Klassen kein grosses Problem mehr fuer Dich sein.

    Als OOP bei uns damals das Thema einer Vorlesung war, haben wir nicht direkt mit Programmierung angefangen. Stattdessen haben als Uebungsaufgaben bestimmte Sachverhalte mit Stift auf Papier modelliert. Damals mit UML, allerdings glaube ich, dass die meisten hier keine Fans von UML sind. Fuer mich war das damals aber eine sehr gute Heranfuehrung an die objektorientierte Programmierung. Uns wurde der richtige Blickwinkel beigebracht, bevor auch nur eine Zeile Code geschrieben wurde.



  • Krachi schrieb:

    Gerade Programmierung mit Klassen fällt mir noch sehr schwer. 😞
    Ist das einfach Übungssache oder größtenteils Begabung?

    Es kommt wohl drauf an, wie man lernt. Ich habe Klassen jahrelang ignoriert (habe am Anfang in Delphi programmiert). Ich habe paar Bücher gelesen, wo hauptsächlich die Sprachsyntax und die VCL erklärt wurde (typische schlechte Delphibücher, ich vermute, es gab nicht mal gute) und überhaupt nichts über Softwaredesign oder -architektur. Da wurden zwar auch die Klassen erklärt und beschrieben, aber ich hab den Sinn dahinter überhaupt nicht verstanden. Dann habe ich sofort mit großen privaten Projekten angefangen, die ich komplett prozedural gemacht habe (außer dem VCL Teil) und hatte wenig Input von außen.
    Hat sich dann erst Jahre später geändert, als ich dann als Schüler in einer Firma als Praktikant angefangen habe. Hab dann ein Buch über Design Pattern gelesen, das war für mich komplett neu. Hab das aber sofort verstanden und fands auch cool, wie schön man mit Klassen abstrahieren kann. Ich hatte an der Stelle aber auch schon an Erfahrung, weil meine privaten Projekte waren auch mehrere zehntausend Zeilen groß und mir waren die ganzen Probleme mit dem schlecht abstrahierten Spaghetticode schon durchaus bewußt und ich hatte dann auch gleich eine Vorstellung, wie ich die objektorientiert aufbauen könnte. Natürlich dauert es dann immer noch ziemlich lange (bei den meisten wahrscheinlich wieder Jahre), bis man erfahren genug ist, sinnvoll objektorientiert zu programmieren. Und ganz einfach wird es nie sein. Das ist ja eine der größten Herausforderungen bei der Softwareentwicklung.



  • Hallo Krachi,

    Krachi schrieb:

    Ich würde gerne wissen, wie lange die meisten hier so gebraucht haben, bis sie anständig programmieren konnten.

    lies dies: http://userpage.fu-berlin.de/~ram/pub/html_jf47ht81Ht/21-tage

    Krachi schrieb:

    Ich bin zurzeit ziemlich frustriert. Wir machen C++ an der Uni (bin Elektrotechniker) und komme mir dabei meist wie ein Ochs vorm Berg vor.

    Gerade Programmierung mit Klassen fällt mir noch sehr schwer. 😞
    Ist das einfach Übungssache oder größtenteils Begabung?

    Das ist nicht ungewöhnlich. Ja - es ist Übungssache (s.o.) und ja - Begabung hilft wesentlich. Das wichtigste ist Leidenschaft! Mir persönlich hat dieses Buch sehr geholfen
    Objektorientierte Analyse und Design | ISBN: 9783893196739
    - obwohl ich beim ersten Lesen nicht wirklich was verstanden habe.

    schaue Dir mal den Code in diesen Threads an http://www.c-plusplus.net/forum/322028-full und http://www.c-plusplus.net/forum/321983. Jedes Code-Schnipsel löst das selbe Problem. Ich möchte von Dir keine Wertung, aber versuche mal nach zu vollziehen, welcher Code eher das Problem wieder spiegelt.

    Dieser Thread http://www.c-plusplus.net/forum/207632-full und seine Links schildern auch ein wenig von den Schwierigkeiten mit OOP an einem - wie ich meine - sehr einfachen Beispiel.

    Gruß
    Werner



  • Vor OOA/OOD warne ich.



  • volkard schrieb:

    Vor OOA/OOD warne ich.

    .. was berechtigt ist! 😉
    OOP ist kein goldener Hammer und löst nicht alle Probleme, aber ist ein mächtiges Werkzeug mit dem man viel erreichen und daher naturgemäß auch viel kaputt bzw. falsch machen kann.

    @volkard: kannst Du Deine Aussage für Krachi bitte noch begründen.



  • Werner Salomon schrieb:

    @volkard: kannst Du Deine Aussage für Krachi bitte noch begründen.

    Nur ewige Erfahrung, daß OOA-Schüler sehr oft dadurch auffallen, daß sie stinkenden Code bauen. Viele können gar nicht programmieren und werden es auch nie lernen und fliehen zu abstrakten Entwurfsmethoden, und denken, dadurch Probleme lösen zu können, was meistens nicht klappt. Oder sie kriegen doch Programme hin, aber die sind nicht passend zur Maschine und verwendeten Sprache: Man kann Vererbung nicht gut in relationale Datenbanken stopfen und m:n-Beziehungen nicht gut in C++/Java-Objekten darstellen.



  • Ich habe früher mit Basic angefangen. Damals war das so üblich. Dann strukturiertest Basic mit Schleifen und Prozeduren. Das war einleuchtend. Der Umstieg auf Pascal war einfach. Mit C hatte ich dann mehr Freiheiten aber im Prizip war es das gleiche in grün (bzw. mit vielen Sonderzeichen). Von C sollte der Schritt nach C++ ja nicht so groß sein. Und das war weit gefehlt. Ausgerechnet dieser Umstieg war der schwierigste. Die objektorientierte Denkweise kam erst so nach und nach. Und da rede ich nicht von Monaten sondern eher von Jahren. Aber wenn man sich die Zeit lässt, dann sitzt das auch. Ich kann mir heute nicht mehr vorstellen, rein prozedural zu programmieren.

    Die Erfahrungen können heute anders aussehen, wenn man direkt mit einer OO-Sprache anfängt. Wobei ich auch selbst in Java manchmal eher prozeduralen Code sehe. Da werden Klassen einfach als Sammlung von Funktionen begriffen. Daher glaube ich, dass das begreifen der objektorientierte Denkweise auch heute noch eine gewisse Zeit in anspruch nimmt. Und die lernt man auch nicht durch büffeln sondern durch machen. Die Übung macht hier den Meister.



  • Die einzige "Begabung", die beim Programmieren hilft, ist Abstraktionsvermögen. Deshalb sind die meisten guten Programmierer auch gut in Mathe oder anderen Logikfächern.



  • Man wird dann OOP verstehen, wenn man das gleiche Problem vorher ohne OOP lösen musste. 😃

    Ich hatte Jahre vorher als Hobby in Basic und Assembler programmiert (das war noch zu 8- und 16-Bit-Zeiten).
    Als ich ein C++ Buch kaufte, und der Autor irgendwas von Schweinen, und Kartoffeln schrieb (von wegen, OOP bildet die Realität ab), habe ich nichts gerafft und OO für Blödsinn abgeschrieben. Also wieder zurück zum Basic und Assembler.

    Irgendwann musste ich beruflich mein erstes Projekt in C++ machen. Wohlgemerkt war es ein fertiges Produkt, das aber massiv umgeändert werden sollte. Rückblickend war das Produkt (ein bekanntes PC-Spiel) wirklich ein Vorbild in Sachen OO und C++. 👍

    OK, ich hatte keinen Plan von OO, aber ich konnte Programmieren und anscheinend schon abstrakt denken! Also war es einfach für mich den C++-Code umzubauen, so wie die Anforderung war. Der Witz: ich habe durch rumprobieren (Codeänderung) gesehen, wie sich das Verhalten ändert... und zwar so, wie es OOP ermöglicht! Also Polymorphie, Abstrakte Klassen bzw. Schnittstellen, Kapselung usw. Mein Projektleiter war mit jeder Woche zufrieden, was ich umsetzte. Aber ich wusste eigentlich nicht, warum es funktionierte.

    Doch an einem Tag, als ich ein sehr spezielles Problem lösen musste, ist mir ein Licht aufgegangen! 💡 😮 Halleluja!!! Ich bin fast vom Bürostuhl gefallen. Ich war erstaunt, wie genial der OO-Gedanke war. Und anscheinend habe ich es die ganze Zeit durch Code-Analyse und Code-Änderung verstanden. Aber der Aha-Effekte fehlte.

    Gebt den Anfängern ein OO-Projekt, wo sie das Problem direkt lösen sollen. Am besten ein GUI-Projekt. Da sieht man wie sich die Widgets usw. direkt auf dem Bildschirm anders verhalten.

    Das Schwein und Kartoffeln auf dem Feld war der blödeste OO-Einstieg!



  • Artchi schrieb:

    Gebt den Anfängern ein OO-Projekt, wo sie das Problem direkt lösen sollen. Am besten ein GUI-Projekt. Da sieht man wie sich die Widgets usw. direkt auf dem Bildschirm anders verhalten.

    Nö, die gewöhnen sich dabei sone Kacke an, die werden sie in 10 Jahren nicht mehr los. Es wird ja stets die erstbeste Lösung genommen statt der angemessenen. Und aufbauend auf schiefen Lösungen entwickelt sich der Stil ins Grausame.

    Artchi schrieb:

    Das Schwein und Kartoffeln auf dem Feld war der blödeste OO-Einstieg!

    Jo, mein erstes C++-Buch brachte mich auch kein Stück der OOP näher. Meyers half mir dann. Gibt ja auch noch andere gute Autoren, die nicht von Schweinen und Kartoffeln faseln oder Würstbroten, die von Supermärkten erben.


Anmelden zum Antworten