Donnerstag, 30. Oktober 2014

Erfahrungsbericht zum Modul "Einführung in die objektorientierte Programmierung" an der Fernuniversität Hagen

Mit diesem Modul verlasse ich nun erstmals den Pfad des wirtschaftswissenschaftlichen Massenstudiums und beschreite den verträumten Waldweg der informatischen Nischenmodule. Dementsprechend gibt es auch nur relativ wenig brauchbare Informationen in den Foren zur objektorientieren Programmierung. Es  müssen zwar auch die "reinen" Informatiker ein gleichlautendes Modul absolvieren, dieses unterscheidet sich aber in einigen wesentlichen Punkten von der wirtschaftsinformatischen OOP und ist somit nicht vergleichbar. Umso mehr dürfte mein Erfahrungsbericht allen Kommilitonen helfen, welche die objektorientierte Programmierung auf ihrer ToDo-Liste stehen haben.

Ich vermute mal, dass jeder Student der Wirtschaftsinformatik ein gewisses informatisches Interesse mitbringt. Viele haben "schon mal was programmiert" und freuen sich wahrscheinlich, endlich mal abseits der einführenden Wirtschaftsfächer ein rein informatisches Fach lernen zu dürfen. Zumindest mir ging es so. Bei aller Vorfreude gilt es aber retrospektiv einiges zu beachten: 1.) "Schon mal was programmiert zu haben" bedeutet nicht, auch wirklich programmieren zu können. 2.) OOP und prozedurale Programmiersprachen sind zwei paar Schuhe und nur eingeschränkt miteinander vergleichbar.

Nichtdestotrotz sind vorhandene Programmierkenntnisse dennoch eine gute Basis, um die ersten drei der insgesamt sieben Skripten relativ rasch durcharbeiten zu können. Es geht darin um grundlegende, nicht OOP-spezifische Prinzipien von Programmiersprachen. Ab dem vierten Skript gehts dann aber richtig ins Detail. Mir fallen dazu die einführenden Worte eines Professors in einer der unzähligen Online-Vorlesungen ein (die ich übrigens hier zusammengefasst habe), wo er sinngemäß folgendes behauptet:
Viele von Ihnen werden sich in den ersten Vorlesungen langweilen. Aber täuschen sie sich nicht, dieses Fach ist kein Selbstläufer. Spätestens in ein paar Wochen werden Sie keine Parallelität mehr zu Ihren vorhandenen Programmierkenntnissen vorfinden.
Das fasst es eigentlich sehr gut zusammen.

Bevor ich etwas tiefer in die Materie einsteige, noch kurz ein paar Worte zu den Kursmodalitäten: Für das Modul "Einführung in die objektorientierte Programmierung" werden prinzipiell keine Einsendeaufgaben benötigt. Dennoch werden vom Lehrstuhl Übungsaufgaben zur Verfügung gestellt, die man online bearbeiten und fristgerecht einreichen muss/soll. Die Bearbeitung dieser Aufgaben kann ich nur dringend empfehlen, wobei die Einhaltung der Fristen nicht unbedingt so wichtig ist, immerhin gibt es eine Musterlösung, an der man sich orientieren kann.

Die Skripten werden leider nur häppchenweise verschickt, was mir persönlich nicht so wirklich gefallen hat, weil ich auf diese Weise wieder in ein starres Lernschema gepresst werde, das ich schlichtweg nicht für notwendig erachte. Alternativ kann man die Skripten auch runterladen, aber Papier und pdf sind eben doch zwei unterschiedliche Welten. Empfehlen möchte ich Euch auch die Newsgroup mit mentorieller Betreuung! Die Mentorin ist hilfsbereit, kompetent und antwortet auch immer sehr zeitnahe. Die Newsgroup würde ich mir allerdings nicht über das Webinterface der Uni antun, sondern über einen Newsreader. Ich habe z.B. Thunderbird (Freeware) benutzt. Für die notwendige Konfiguration gibt es ein Tutorial auf der Institutsseite. Hier ein Zitat der OOP-Mentorin Helga Huppertz zu diesem Thema:
Für eine produktive und nervenschonende Nutzung der Newsgroup empfehle ich euch die Verwendung eines Newsreaders oder eines Mailprogramms mit News-Funktion (wie z.B. Mozilla Thunderbird). Die (einmalige) Einrichtung ist schnell erledigt. Im Gegensatz zum News-Portal habt ihr mit einem solchen Programm die Möglichkeit, neue Beiträge sofort zu erkennen, Beiträge nach eigenen Kriterien zu sortieren, zu markieren und zu durchsuchen. Hilfe zur Einrichtung eines Newsreaders bietet das ZMI.

Lernquellen

Wie bereits oben geschrieben gibt es eine Unmenge an Java-Lernquellen im Internet, u.a. auch von vielen Universitäten. In meiner Übersicht über sinnvolle Java-Lernquellen werdet Ihr diesbezüglich sicherlich fündig. Ich selbst habe im Wesentlichen den (kostenpflichtigen) Kurs von Video2Brain und die Vorlesung der TU Clausthal bearbeitet. Für Detailfragen musste dann - neben der Newsgroup - vor allem das Onlinebuch "Java ist auch eine Insel herhalten". Aber egal ob Video oder Buch, zum dezidierten Lernen des OOP-Stoffes würde ich auf alle Fälle die offiziellen Uniskripten verwenden, denn diese sind wirklich gut geschrieben. Aber Achtung: Jeder einzelne Satz ist wichtig, es gibt so gut wie keinen unnützen Ballast in den Skripten!

Oftmals wird in diesem Zusammenhang übrigens auch das Buch "Java von Kopf bis Fuß" empfohlen, deshalb habe ich da mal reingeschmökert, kam aber mit dem Comic-Lustig-Hahaha-Stil irgendwie nicht zurecht. Außerdem behandelt die aktuellste deutsche Version des Buches nur Java 5, während Java 7 bereits vor einiger Zeit released wurde (Anm.: Zum Lernen der Basics reicht natürlich auch Java5, daran wirds also letztlich nicht scheitern).

Die Skripten

Wie bereits erwähnt sind die Skripten äußerst brauchbar. Sie sind zwar - typisch informatisch - etwas trocken geschrieben, beinhalten aber alles, was man für ein erfolgreiches Absolvieren des Moduls braucht. Skript 1&2 widmen sich der UML und anderen, sehr grundlegenden Themen des Programmierens, Skript 3 steigt dann erstmals - allerdings noch sehr sanft - in die Welt der OOP ein. Wer in der Einführung Wirtschaftsinformatik aufgepasst hat, wird auch hier noch keine großen Schwierigkeiten haben.

Kurseinheit 4 ist meines Erachtens das Schlüsselskript in diesem Fach. Hier geht es um Vererbung, Polymorphie, statisches und dynamisches Binden, Zugriffskontrolle, Abstracts,  Interfaces und so weiter. Beim lockeren, vielleicht noch nicht ganz so intensiven Lesen erscheint das alles auch gar nicht mal so schwer, aber der Teufel liegt im Detail, denn spätestens beim Bearbeiten der Einsendeaufgaben werdet ihr merken, wie sehr da in die Tiefe gegangen wird. In dieser geforderten Detailgenauigkeit habe ich jedenfalls in keiner anderen Quelle auch nur ansatzweise eine ausreichende Erklärung gefunden (und wenn, dann am ehesten in der Java-Insel; s.o.). In der Newsgroup gibt es zu KE4 mit Abstand die meisten Fragen, insbesondere zum statischen und dynamischen Binden. Kurzum: Skript 4 ist vom ersten bis zum letzten Wort zu lernen und zu verstehen.

Im Skript 5, oder besser gesagt in der Broschüre 5, geht es dann um Ausnahmen und Testverfahren. Das ist weder sonderlich schwer noch umfangreich, wird aber in der Klausur regelmäßig abgefragt. Guter Punktebringer.

In Kurseinheit 6 geht's dann um Suchalgorithmen, Rekursion, Listen, Graphen und Bäume. Hier gilt vor allem eins: Zwischen lesendem Verstehen und aktivem Reproduzieren und vor allem Anwenden liegen Universen (wie auch in KE 4)! Vor allem die Rekursion ist auf den ersten Blick absoluter Brainfuck, auf den zweiten und dritten Blick leider auch. Damit muss man sich einfach eine ganze Weile beschäftigen (üben, üben, üben!), aber wenn man es mal gecheckt hat, ist es eine sehr elegante Programmiermethode.

Kurseinheit 7 dreht sich dann um generische Typen. Das entsprechende Skript fand ich etwas verwirrend bzw. unübersichtlich. Hier lohnt es sich also, sich selbst einen kurzen Überblick über die Klassen und implementierten Interfaces zusammenzustellen. Ich habe dafür einfach die relevanten Stellen aus der API ausgedruckt und alles für mich relevante markiert. Das abschließende Anwendungsbeispiel in Skript 7 habe ich nur noch überflogen.


Das Minimalprogramm

Wer sein Glück probieren möchte oder einfach nur keine Zeit mehr hat, sollte als Minimum die Kurseinheiten 1-4 gelesen und verstanden haben. Mit weniger wirds nicht funktionieren. ABER: KE 1&2 fängt ohnehin der Spicker ab (s.u.), Skript 3 ist nicht schwer, bleibt als einzige echte Lernaufgabe im Minimalmodus eigentlich nur Skript 4. Wer das dünne Skript 5 noch dazunimmt, erhöht seine Chancen zusätzlich. KE 6 und 7 würde ich bei gegebenem Zeitmangel links liegen lassen, denn mit schnellem Drüberlesen kommt man hier sowieso nicht weit.

IDE

Als IDE habe ich NetBeans verwendet, weil diese Entwicklungsumgebung auch im Tutorial von Video2Brain verwendet wird. Viele nutzen wohl auch Eclipse, aber im Endeffekt ist das vollkommen  egal. Übrigens: Wer NetBeans auf einem Windows XP Rechner installieren möchte, wird voraussichtlich auf Schwierigkeiten stossen. Wenn dies der Fall ist, findet ihr hier ein Tutorial. Wie das Testen unter NetBeans funktioniert, findet ihr dann hier.

Klausur

Das Wichtigste zuerst: Ihr dürft einen Spicker bei der Klausur verwenden (A4, doppelseitig, maschinengeschrieben)! Das eröffnet natürlich ganz neue Möglichkeit, denn man muss sich nicht alles auswendig merken. Trotzdem: Verstanden sollte man alles haben, während der Klausur hat man einfach keine Zeit zum sinnerfassenden Spickerlernen. Im Netz kursieren natürlich eine Reihe von Spickervarianten, die alle mehr oder weniger brauchbar sind. Ich habe die vielversprechendste Version hergenommen und nach meinen Ansprüchen adaptiert. Bei der Klausur konnte ich diesen Spicker problemlos verwenden, wobei er allerdings gar nicht kontrolliert wurde. Nachdem ich aber auch viele Kommilitonen mit der Ausgangsversion meines Spickers gesichtet habe, hätten ggf. 3/4 der Prüflinge den Saal verlassen müssen.

SPICKERDOWNLOAD
(Seite 1 inhaltlich und strukturell modifiziert, Seite 2 völlig neu)

Die Klausur empfand ich als zeitlich sehr knapp bemessen, lange nachdenken darf man jedenfalls nicht. Der erste Fragenblock dreht sich meist um Begrifflichkeiten aus den ersten beiden Skripten. Diese Fragen kann mit dem Spicker fast komplett beantworten. Dann gibt es häufig einen Themenblock zum stat./dyn.Binden oder zur Vererbung, ein UML-Beispiel (Assoziationen!) inkl. Testen, eine Rekursion und/oder ein rekursives/iteratives Listen/Suchbeispiel.

Vor allem bei den Programmierbeispielen kann man ganz schnell ganz viel Zeit vertrödeln, nämlich insbesondere dann, wenn man einfach nicht auf den richtigen Dampfer kommt. Kreativität  - und so interpretiere ich Programmieren - unter Zeitdruck ist immer so eine Sache: Entweder sie funktioniert auf Anhieb...oder eben nicht. In meiner Klausur gab es beispielsweise eine Programmieraufgabe mit mehreren Unteraufgaben zu Listen, eine rekursiv, zwei iterativ. Die rekursive Methode hatte ich gleich, aber bei den iterativen Methoden saß mir schon die Zeit dermaßen im Nacken, dass ich keinen klaren Gedanken mehr fassen konnte. Ich bin deshalb dazu übergegangen, erst mein prinzipielles Vorgehen in Worten zu beschreiben, ohne das eigentliche Programm ganz zu Ende zu bringen. Es scheiterte einfach an der Zeit. Worauf ich dabei hinaus will: Es ist ungemein wichtig, viel zu kommentieren. Nehmt euch das bei der Klausur auf jeden Fall zu Herzen. Ich habe mir zudem eine virtuelle Checkliste zurechtgelegt, die ich bei den Programmieraufgaben standardisiert durchgegangen bin, beispielsweise: Benötige ich eine Fehlerabfrage? Gibt es eventuell eine Division durch Null? Gibt es andere Ausnahmen? Usw. Oft übersieht man im Eifer des Gefechts nämlich das Naheliegende.

Zeitlicher Aufwand

In diesem Semester hatte ich wieder den Timtracker im Einsatz. Es gestaltet sich allerdings manchmal etwas diffizil abzugrenzen, was jetzt wirlkich unter "Lernen" fällt und was nur Rumspielerei ist mit einem Auge im Internet und dem anderen Auge am Fernseher. Ich habe mich letztlich darauf geeinigt, dass der Timetracker nur mitläuft, wenn ich aktiv vor den Skripten sitze und lerne (und nicht, wenn ich etwa Lernvideos anschaue oder Programmierbeispiele löse). Unter dieser Voraussetzung kann ich 91 Stunden und 31 Minuten Lernzeit für dieses Modul als Aufwand verbuchen.

Kommentare:

  1. Danke, wie immer ein sehr nützlicher Artikel. Was würde ich nur ohne diesen Blog machen!?

    Ralf

    AntwortenLöschen
  2. Könntest du mir sagen welche Punkte auf deiner virtuellen Checkliste standen, die du bei den Programmieraufgaben standardisiert durch gegangen bist?
    Ich hab zurzeit totale Probleme mit den Programmieraufgaben. Ohne in der Lösung zu spicken komme ich nicht auf den richtigen Weg. Hast du hier vllt. auch ein Tipp wie ich das richtig angehe?

    AntwortenLöschen
    Antworten
    1. Hi,

      so genau habe ich das nicht mehr im Kopf, aber die allerwichtigsten Beispiele stehen Bericht oben (Fehlerabfrage, Div/0,..).

      Zu den Programmieraufgaben: Das Semester ist ja noch jung. Erstmal sollte man die Theorie verstanden haben, dann erst gehts ans effektive Programmieren. Die Theorie versteht man nicht mit ein wenig Duchblättern der Skripten, denn da ist wirklich jedes einzelne Wort von Bedeutung. Beim Programmieren selbst ist das immer so eine Sache...entweder man kommt gleich auf den richtigen Nenner, dann wird es zum Selbsläufer, oder eben nicht. Tritt letzteres ein, habe ich mich einer anderen Aufgabe zugewandt und bin dann wieder von neuem an die Aufgabe. Lege dir ein Schema zurecht, wie du iterative und rekursive Aufgaben prinzipiell löst. Oft helfen auch Codesnippets zu den wichtigsten Varianten. Die helfen dir immer wieder mal auf die Sprünge (und du kannst sie auch bei der Klausur benutzen!). Ansonsten gilt leider immer wieder die abgedroschene Phrase: Üben, üben, üben.

      MfG,
      Markus

      Löschen
  3. Hi,

    ich habe eine Frage, werden bei diesem Modul Vorkentnisse vorrausgesetzt?
    Oder geht es bei Null los?






    AntwortenLöschen
    Antworten
    1. Hi,

      prinzipiell nein. Wenn du bereits Ahnung von Programmierung hast, tust du dir natürlich leichter, aber das ist in jedem anderen Modul genauso.

      MfG
      Markus

      Löschen
  4. Ich tue mich mit den Programmieraufgaben der Einsendeaufgaben noch sehr schwer. Als Anfänger versteh ich oft nur BHF. Hast du einen Tipp wie ich diese Aufgaben am besten angehe? Wie ist deine Erfahrung? Gab es noch irgendwelche Übungsklausuren zur Vorbereitung auf die Klausur?
    Mach mir das ziemliche Sorgen, weil das Thema für mich komplett Neuland ist und deswegen noch sehr schwer.

    Grüße

    AntwortenLöschen
  5. Muss ich bei der Klausur selber handschriftlich große Programme schreiben wie in den EA'S? Oder sind es mehr vorgegebene Aufgaben und man beantwortet Fragen dazu?

    AntwortenLöschen
  6. Hi, woher wußtest Du denn, welche Themen bei Klausuren gerne gestellt werden (Stichwort KE5)? Gibt es irgendwo Klausurtipps oder vielleicht sogar doch die alten Klausuren zum Download? :-)

    lG, Martin

    AntwortenLöschen
    Antworten
    1. Die einzigen Klausuren die ich gefunden habe gibts hier: https://vu.fernuni-hagen.de/lvuweb/lvu/file/FeU/EITech/2015SS/20022/oeffentlich/31221_hinweise.html

      Zum Punkt: "Alte Klausuren" scollen.

      Löschen
  7. Hallo Markus,

    auch von mir ein ganz großes Lob für dein Blog! Lese deine Einträge immer sehr gerne und mehrmals, da Sie einfach gut geschrieben sind. :-)

    Gruß Tobias

    AntwortenLöschen
  8. Als eifriger Leser und Nutznießer deines Blogs (Danke Danke Danke Danke) habe ich mal eine Frage: Mit welchem Programm hast du die zweite Seite deines OOP-Spickers erstellt? Ich arbeite gerade an meinem, bekomme die Formatierung des Codes aber nicht so schön hin wie du.... :)
    Liebe Grüße,
    Luca

    AntwortenLöschen
    Antworten
    1. Hallo Luca,

      ganz einfach mit OpenOffice Writer.

      Löschen
    2. Aaaah! Office hat mich versaut. Danke!

      Löschen
  9. Hallo Markus

    Für mich hat sich Uni-Skripot 3 und 4 erst erschlossen nachdem ich die Video2Brain Videos durch hatte. Vielen Dank für den Tipp, die Link Sammlungen und den Spicker

    Meine Empfehlung an alle die den Kurs vorsich haben, erst die Videos schauen, dann auf die Skripten stürzen :-)

    Grüße Thomas

    AntwortenLöschen
  10. Das Thema habe ich seit dieser Woche auch in meinem Fernstudium. Ich muss sagen die Unterlagen die ich in Form von Büchern habe sind eher trocken. Da helfen Youtube und solche Seiten und Blogs wie deiner hier schon eher weiter.

    Vielen Dank und beste Grüße

    AntwortenLöschen