Mittwoch, 25. April 2018

Update Programmierpraktikum

Am 9.4.18 wurde die Aufgabe für das Programmierpraktikum freigeschalten. Wie im Ausblick schon vermutet, handelt es sich um ein Problem der algorithmischen Geometrie. Im Konkreten muss ein Algorithmus implementiert werden, der aus einer beliebigen Punktmenge das Konturpolygon und daraus dann die konvexe Hülle berechnet. Das Ganze muss auch visualisiert werden, wobei Berechnung und Visualisierung der konvexen Hülle on-the-fly passieren müssen, also auch während ein Punkt mit der Maus verschoben wird.

Nach dem Studieren der Aufgabe stand ich also erstmal vor der Frage: Wie beginne ich? Eigentlich eine einfache Frage, die aber umso komplexer wird, je mehr man in die Materie eintaucht und je weniger echte Programmiererfahrung man hat. Welche Klassen brauche ich? Welche Methoden? Wie baue ich das auf? Wie werden Threads programmiertechnisch implementiert? Welches Entwurfsmuster verwende ich? Das alles war bisher immer nur graueste Theorie - von den paar Snippets im OOP-Modul mal abgesehen. Jetzt ist die praktische Umsetzung gefragt. Klar, irgendwo habe ich mal marginal was vom Model-View-Controller (MCV) gelesen, aber wie funktioniert das "in echt"? Das hat mir ziemlich brutal vor Augen geführt, dass Theorie und Praxis zwei gänzlich verschiedene Paar Schuhe sind.

Nachdem ich ein paar Tage über den obigen Fragen gebrütet habe, aber nicht wirklich zu einem überzeugenden Ergebnis gekommen bin, habe ich beschlossen, dass ich ein Projekt dieser Größenordnung mit meinem aktuellen Erfahrungsschatz im Programmieren nicht effizient planen/konstruieren kann. Deswegen habe ich einfach mal begonnen, den Algorithmus zu coden und darauf zu hoffen, dass die Strukturen sich aus den aufkommenden Erfordernissen ergeben. Learning by doing also! Der Algorithmus ist hier insofern ein dankbarer Beginn, weil das zu implementierende Interface zumindest einige Methoden vorgibt. Anlehnen werde ich die Struktur jedenfalls an MCV, was auch immer das am Ende bedeuten wird.

Stand jetzt habe ich den Algorithmus fertig programmiert, alle Tests aus dem Test-Interface werden in der Konsole bestanden. Das ist ja schon mal was, oder? Als Nebentask gibt es übrigens noch einen kleinen Wettbewerb, wer den effizientesten (schnellsten) Algorithmus abliefert. Mit hauptberuflichen Entwicklern kann ich mich realistischerweise aber nicht wirklich messen, also wird das für mich keine hohe Priorität haben. Ich bin in erster Linie froh, wenn ich das alles ordnungsgemäß zum Laufen bekomme. Sollte dann noch Zeit bleiben, werde ich die Optimierung angehen.

Wie die Aufgabe selbst, ist auch der Zeitplan nicht ganz ohne. Die Abgabe des ersten (oben geschilderten) Teils muss bis zum 17. Juni erfolgen. Der zweite (noch nicht näher spezifizierte) Teil bis zum 26.August. So, wie es bis jetzt verläuft, werde ich bis zur Abgabe der einzelnen Teile keine Zeit haben, nebenher noch ein anderes Modul zu bearbeiten. Das hätte ich eigentlich anders geplant, aber es ist eben so.

Die Herausforderung ist für mich jedenfalls groß, aber auch extrem spannend. Ich bin dadurch gezwungen, wirklich tief in die Materie einzusteigen und Programmierelemente zu verwenden, die ich bisher nur vom Hörensagen kannte. Insofern finde ich die Aufgabenstellung selbst auch ganz gut gewählt. Sie ist, wenn ich mir die Tasks anderer Lehrstühle aus den vergangenen Jahren so ansehe, sicher eine der fordenderen - aber wenn ich zum Kindergeburtstag will, muss ich nicht extra nach Hagen fahren, nicht wahr?

Keine Kommentare:

Kommentar veröffentlichen