Praktikumsbericht

Mein letzer längerer Rant ist Ewigkeiten her (Es war das Resident Evil 4 Review von Anfang Mai!). Seitdem stand ich in der Uni ziemlich unter Stress. Das Semester hatte anfangs eigentlich versprochen, ziemlich lässig zu werden mit lediglich 3 Vorlesungen: Informationssysteme, Produktionswirtschaft und Theoretische Informatik. Nun ja, das Versprechen wurde nicht ganz eingehalten. Viele meiner Kommilitonen empfanden ganz ähnlich, auch ihre Stundenpläne waren recht locker, trotzdem war jeder am jammern, wie wenig er schaffen würde.

Die Schuld an meinem Dilemma schiebe ich jetzt mal allein dem Software-Praktikum in die Schuhe. Dabei handelt es sich um eine Veranstaltung, die laut DPO für das vierte Semster nicht nur empfohlen, sondern vorher garnicht möglich ist und folgendermaßen abläuft: Zu Semesterbeginn werden Gruppen von 8 Leuten zusammengewürfelt. Diese Gruppen müssen im Semester nach einem festen Zeitplan zwei vorher festgelegte und für alle Gruppen identische Projekte bearbeiten. Wie gesagt, die Veranstaltung ist für das vierte Semester angesetzt, und zwar deshalb weil dabei Dinge angewandt werden sollen, die wir in DAP1 (1. Semester, Java-Programmierung), Betriebssysteme (2./3. Semester, Nebenläufigkeit und Netzwerke) und Softwaretechnik (3. Semester, Software-Konstruktion mit UML). All diese Dinge wurden nicht nur in den Vorlesungen vorgestellt, sondern auch abgeprüft, das entsprechende Wissen also für das Sopra vorausgesetzt. Mein Glück wollte es aber, dass von den 7 (sieben!) anderen Personen in meiner Gruppe niemand

Das schlimmste jedoch waren die folgenden Punkte:

Aber nochmal zu der MVC-Geschichte: Es ging beim ersten Projekt darum eine Umfrage zu modellieren und dann per GUI durchzuführen. Dazu wurde am Anfang ein UML-Modell entwickelt, mit Fragebogen, Frage, Umfrage, Antwort, Benutzer und allem was halt dazugehört. Als das Projekt näher Richtung Implementierung rückte, schlug mein Kollege vor, das Modell doch in MVC umzusetzen. Obwohl MVC zu einem der 3-4 vorgestellten Pattern in der Softwaretechnik-Vorlesung (!) gehörte, konnte mit dem Begriff keiner in der Gruppe etwas anfangen. Seiner Ansicht nach war unser View die GUI, unsere Models waren halt die Models und die Controller, tja, was sind die Controller. Ach ja! Na klar! Controllerklassen. Was macht der Kerl? Rupft sämtliche Methoden aus den Objekten und erzeugt zu jeder Klasse eine entsprechende Controller-Klasse, die wiederum nur Methoden enthielt. Was wir dann hatten war herrlich, wie früher bei Pascal. Records und Procedures. Daten und Programm. Objektorientierung war ohnehin immerschon irgendwie komisch… Um das letzte bißchen Objektorientierung also los zu werden, schlug mein Kollege vor, alle Operationen an einem Objekt nur noch vom jeweiligen Controller vornehmen zu lassen und den anderen Controllern keinen Zugriff mehr zu gewähren. Dazu mussten wir nur die Objektreferenzen durch numerische IDs ersetzen. Fertig! Das Resultat war mitleiderregend. Statt einem objektorientierten Programmes hatten wir jetzt ein klassisches Prozedurales. Statt Zeigern hatten wir Indizes. Hallo Steinzeit.

Mein Kollege verteidigte das ganze immernoch als perfektes MVC, weil ja jetzt Model und Controller entgültig getrennt waren. In mir kamen Bilder von toten siamesischen Zwillingen hoch. Endlich getrennt! Ich hatte zu dem Zeitpunkt schon lange aufgehört zu argumentieren. Das war mir die Sache einfach nicht wert, und funktioniert hat das Programm. Die Leiterin des Sopras war allerdings ebensowenig von dem Vorgehen angetan, im Gegensatz zu mir konnte sie aber einfach entscheiden, dass wir (dann aber blöderweise erst eine Woche vor der Präsentation) das Programm neu zu schreiben hatten). So denn…

Das sieht hier vielleicht harmlos aus, aber wenn ein Methodenrumpf zu 70% aus solchem Müll besteht, der meistens nichtmal wirklich erklärt was der Spaghetticode da gerade tut, kriegt man schnell Kopfschmerzen.

Jedenfalls. Ich hab sie machen lassen und mich weiter um die GUI gekümmert. 2 andere haben an der KI gefeilt. Mein Kollege und der Rest? Haben irgendwie nix mehr gemacht. Der Netzwerkstack mag vielleicht funktioniert haben, leider war keiner imstande, ihn vernünftig in das Programm zu integrieren. Also wurden per Brute Force alle Methoden der Spielengine (die für den Spielablauf übrigens rekursive Threads (!!! bis zu 600 pro Spiel!!!) statt eines Loops verwendet) in entsprechende Methoden für das Netzwerk gewrappt, so dass wir schließlich auf stattliche 43 Methoden kamen. Am Ende hatte aber irgendwie keiner mehr Lust die zu implementieren. Was übrig blieb erinnerte an das Klonlabor aus Alien 4. Natürlich hat mein Kollege keinen Finger mehr krumm gemacht, nur gesagt er hätte keine Lust mehr und würde auch durch das Programm nicht mehr duchblicken. Seinen eigenen Code…

Hätte mir ja alles egal sein können, wenn das Hauptprogramm nicht inwischen voll mit Bugs gewesen wäre, die dank komischer Tricks mit Threads auch die GUI beeinträchtigten. Also habe ich die letzten drei Wochen des Semsters jede Nacht vor dem Debugger verbracht. Schonmal jemand versucht, nebenläufige Programme mit 600 Threads zu debuggen? Es ist theoretisch möglich, aber es ist keine Vergnügen…

3 Kommentare zu 'Praktikumsbericht'

Kuhnen

öhm, nach dem ersten absatz bitte einen more-tag…

Fragdieb

und so vermitteln Uni-Programmierpraktika wieder die allerwichtigste Lektion in Sachen Teamwork: wenn was richtig funktionieren soll, dann mach es 1. selbst und 2. allein!

Ich hab ähnliche Erfahrungen gemacht. Bei mir wars aber nur ein vier Wochen Projekt zu einer Vorlesung, betitelt Software. Ich hatte zwar ziemlich Glück mit meinem fünf-köpfigem Team, habe mich aber doch auch teilweise sehr arg gewundert, was denn da einer im 8. Semester an Programmierkenntnissen hat. Er sollte eigentlich nur nen recht einfachen view schreiben, der eine Tabelle verwendet. Nachdem er uns einen halbfertigen code vorgeworfen hat, der aus zwei for schleifen und n bisschen awt kram bestand hab ich ihn mal auf JTable hingewiesen. Aber sich selber die API-Docs schauen oder so hat er nicht hinbekommen. Wir haben ihn dann an die Hand genommen bzw. ein paar sachen dann selber gemacht.
Ein andere konnte zwar super programmieren, algorithmisch klasse, hätte ich teilweise gar nicht so hinbekommen, aber das war C-style in java. Und um das dann schön zu bekommen habe ich ein paar Tage nur fremden code refaktorisiert.

Aber eigentlich finde ich solche erfahrungen gerade deswegen sinnvoll, weil sie einen an den Rand des nervenzusammenbruchs bringen. Da muss man sich dann auch mal für seine Ideen einsetzen und gucken wie das in der Gruppe klappt und man verschiedene Fähigkeiten und Persönlichkeiten unter einen Hut bringt. Denn man kann nicht immer alles “selbst” und “allein” machen, auch wenn es manchmal einfacher erscheint.
Aber schön ist es vor allem, wenn es vorbei ist ;)