TU Wien:Funktionale Programmierung VU (Knoop)

Aus VoWi
Wechseln zu: Navigation, Suche

Daten[Bearbeiten]

Inhalt[Bearbeiten]

Die Lehrveranstaltung dreht sich um die Konzepte funktionaler Programmierung. Als Sprache wird Haskell verwendet.

Benötigte Vorkenntnisse[Bearbeiten]

Grundzüge des Arbeitens unter *NIX (ls, mkdir, scp ... ) und rudimentäre Programmiererfahrung.

Weiterfuehrende LVAs[Bearbeiten]

Zumindest Fortgeschrittene funktionale Programmierung.

Ich kann empfehlen Typsysteme von Franz Puntigam parallel dazu zu besuchen, wenn grundsätzlich Interesse an diesem Thema besteht, da einige Aspekte von Typsystemen eng mit funktionalen Programmiersprachen verbunden sind und auch immer wieder auf Haskell eingegangen wird.

Haskell-Praxis: Programmieren mit der Funktionalen Programmiersprache Haskell geht verstärkt auf Haskell, GHC sowie cabal und viele nützliche Libraries ein.

Ablauf[Bearbeiten]

Die Vorlesung findet zumeist wöchentlich statt (an zwei möglichen Terminen, Homepage der Lehrveranstaltung beachten!), es besteht keine Anwesenheitspflicht. Der Vortrag ist meist recht langsam und kann leicht einschläfernd sein, er behandelt aber immer die Themenbereiche, die dann bei den nächsten Übungsblättern relevant sind.

Übungen[Bearbeiten]

Es sind 9 Übungsblätter in Einzelarbeit zu lösen, für jedes Übungsblatt gibt es einen Haupt- (1 Woche nach Ausgabe) und einen Nachabgabetermin (2 Wochen nach Ausgabe). Die Gesamtbeurteilung für ein Übungsblatt setzt sich zur Hälfte aus der Haupt- und der Nachabgabe zusammen, d.h. man kann sich auch verschlechtern! Die Aufgaben umfassen jeweils die Implementierung von ein paar Funktionen, die dann automatisch vom gemeinsamen Gruppenverzeichnis abgesammelt und ebenfalls automatisch bewertet werden.

Leider funktioniert die Kommunikation mit der Übungsleitung über das TISS-Forum kaum, Unklarheiten in den Angaben oder beim Bewertungssystem werden fast nie kommentiert. Immerhin bringt das Forum aber eine sinnvolle Diskussion mit den anderen ÜbungsteilnehmerInnen, sodass oft Testfälle oder ähnliches ausgetauscht werden können.

Das automatische Bewertungssystem gibt ein Zeitfenster von 5 Sekunden vor, in der ein Ergebnis der getesteten Funktion vorliegen muss, du solltest also den Performance-Aspekt deiner Abgabe zumindest nicht ganz außer Acht lassen, auch wenn es in der Angabe nicht explizit erwähnt wird. Beispiele zum Thema sortieren sollten sich daher eine Laufzeitkomplexität von O(n \log n) aufweisen, sonst gibt es höchst wahrscheinlich Timeouts.

Kommentare aus vergangenen Semestern[Bearbeiten]

  • WS2007/08: Es gab im WS2007/08 Noten auf die Übung, die genaue Punktezahl auf die Übung war egal und es zählte für die Gesamtbeurteilung nur die Note des Übungsteils (die Gesamtnote bestand aus dem abgerundeten Mittel der Noten auf Vorlesungsprüfung und Übungsteil, z.B. UE 1 + VO 4 = Insgesamt 2). Natürlich musste man trotzdem auf den Übungsteil positiv sein.
  • WS2009/10: Im WS2009/10 besserte sich die Kommunikation mit der Gruppenleitung nicht. Angaben waren unverständlich (weil leicht veränderte, aber nicht durchdachte Angaben aus dem vorigen Semester benutzt wurden). Bei jeder Abgabe gab es falsche Testfälle. D.h. aufpassen wie etwas formuliert ist und der Angabe und den Testfällen nicht zu viel Vertrauen schenken.
  • WS2010/11: Gleiches im WS2010/11. Hier wurden zusätzlich die Angaben ein paar Stunden vor der Abgabe geändert und falsche Testfälle herangezogen. Bei der Korrektur der Bewertung wurde dann die vorletzte Angabe verwendet was nur eine kleine Besserung brachte. Alles in allem einfach irgendwas Programmieren und am Abgabetag Zeit nehmen und nochmal die neue Angabe auf das schon programmierte hinbiegen.
    • Anmerkung: Imho ist die Information im Informatik-Forum gut. Es gibt zwar Unklarheiten, die können dort aber oftmals gut behoben werden. Einzig und allein die Bewertung von Übungsblatt 4 war schlichtweg fies. Aber im Allgemeinen schon ok.
  • WS2015/16: Die Kommunikation ist leider immer noch unter jeder Kritik. Das TISS-Forum wird schlichtweg ignoriert! Vortragstermine werden ohne weitere Benachrichtigung auf der VU-Website geändert und beim nächsten Vortragstermin erwähnt ("Übrigens, morgen findet auch Vorlesungs statt. Ich hoffe, Sie haben Zeit.") Als sei das nicht genug, findet man ständig Angabefehler die dann 1 Tag vor dem Abgabetermin ausgebessert werden. Die Benotung erfolgt 1 Tag vor der 2. Abgabe, was ein effektives Verbessern unmöglich macht.
  • WS2016/17: Zumindest Knoop gab sich gegen Ende hin auch die Mühe ein bisschen im Forum präsent zu sein. Aufgabenblätter waren meines Erachtens meistens eindeutig formuliert (auch wenn das einige nicht so gesehen haben).
    • 2. Meinung: Aufgabenblätter waren meist(!) eindeutig formuliert, enthielten aber immer wieder Fehler die dann erst im Laufe der Abgabewoche korrigiert wurden. Außerdem sind Teile (vor allem bei den letzten) Aufgaben fast schon künstlich kompliziert geschrieben. Bei den ersten Blättern gab es Testfälle dazu, diese wurden bei den letzten ebenfalls komplett weggelassen.
  • WS2017/18: Knoop war bei neuen Angaben eigentlich immer recht aktiv um Sachen klarzustellen und hat Sachen oft rasch ausgebessert. Im Laufe der Woche gab's dann nur noch sporadisch Antworten - die waren aber auch selten kritisch für die Aufgabe. Mühsam war das System mit Erst- und Zweitabgaben, da ist man schon bei der Aufgabe 1 in Verzug gekommen und hat es bis zum Ende nicht geschafft das rascher hinzubekommen. Das ist insofern bitter, weil einige Aufgaben auch aufeinander aufbauen.

Prüfung, Benotung[Bearbeiten]

Die Prüfung findet schriftlich am Ende des Semesters statt, 90 Minuten Zeit, keine Unterlagen erlaubt. Die Gesamtnote ergibt sich je zur Hälfte aus den Punkten aus der Übung und aus den Punkten aus dem Test.

Die Prüfungen sind relativ vorhersehbar (siehe Materialien) werden allerdings auch streng benotet, Punkte gibt es nur für richtige Dinge, nicht für Folgefehler, etc. Beim zweiten Abschnitt des Tests muss Haskell-Code selbst geschrieben werden. Auch hier bekommt man nur Punkte, wenn die Funktion wirklich das tut, was sie soll und keine Fehler enthält. Hier sollte man auf jeden Fall immer an die Spezialfälle denken, aber auch die einfachen Fälle nicht vergessen. Grundsätzlich besteht genug Zeit, den Code auch mehrmals durchzugehen.

WS15: Hat Ass. Neumerkel die Aufsicht, werden Fragen mit einer nutzlosen Antwort oder Augenverdrehen beantwortet. Ein Tutor wurde während der Prüfung nach Hause geschickt, weil er auf die Frage eines Studenten mit einer passenden Antwort reagiert hat.

Gegenargument: Beim 2. Termin (WS15) waren die anwesenden Prof. + Tutoren bemüht. Die Benotung dürfte sehr gelinde erfolgt sein.

Anekdote aus dem WS14 zu Prof. Neumerkel: Schriftliche Prüfung; ein Kollege ist mit der Ausarbeitung fertig und möchte sicherstellen, dass die fehlende Studienkennzahl kein Problem darstellt (tut sie übrigens quasi nie). Besagter Kollege geht nach vorne und stellt Prof. Neurmerkel die Frage. Dieser entgegnet damit, dass es eine komplette Unart sei während eines Tests herumzugehen oder laut Fragen zu stellen und nimmt ihm den Test sofort ab. Auf meine Frage (explizit "was ist die Summe der leeren Menge") bekam ich nur das typische "ist doch eh klar". Die Benotung an sich war dafür sehr milde, und der Test nicht so schwer wie man vermuten mag. Wer es aber vermeiden kann in FP mit Prof. Neumerkel in Kontakt zu kommen, sollte dies nach Möglichkeit auch tun. Scheinbar hat er es sich zum persönlichen Anliegen gemacht ein möglichst großer Ungustl zu sein.

Dauer der Zeugnisausstellung[Bearbeiten]

  • WS07: Prüfung am 24.01.2008, Zeugnis erhalten am 19.02.2008 (ca. 3-4 Wochen)
  • WS08: 7 Tage nach Pruefung (Haupttermin)
  • WS09: 2 Tage nach der Prüfung kam die Zeugnisbenachrichtigung per TUWIS (Haupttermin)
  • WS10: 4 Wochen nach der Prüfung wurden die Noten bekanntgegeben und das Zeugnis gleich ausgestellt (Haupttermin)
  • WS11: Prüfung am 29.04.2012, Zeugnis kam am 12. Juni.
  • WS12: Prüfung am 17.01.2013, Zeugnis kam am 23.02.2013 (6 Tage vor der nächsten Prüfung)
  • WS13: Prüfung am 16.01.2014, Ergebnis kam am 17.02.2014 (ca. 1 Monat), Zeugnis am 05.03.2014
  • WS15: Prüfung am 14.01.2016, Zeugnis am 12.02.2016 in der Früh, Ergebnisse Nachmittags auf den Server (g0) gespielt
  • WS15: Prüfung am 04.03.2016, Zeugnis am 01.04.2016 (4 Wochen), Ergebnisse liegen am Server (g0)
  • WS16: Prüfung am 19.01.2017, Zeugnis am 16.02.2017 (4 Wochen), Ergebnisse liegen am Server (g0)
  • WS17: Prüfung am 18.01.2018, Zeugnis am 16.02.2018 (4 Wochen), Ergebnisse liegen am Server (g0) (ein paar Stunden später)
  • WS17: Prüfung am 02.03.2018, Zeugnis am 30.03.2018 (4 Wochen), Punkte auf g0. Eintragungsmail um 23:39 (21 Minuten vor Ablauf der Frist)
  • WS17: Prüfung am 27.04.2018, Zeugnis am 27.05.2018 (4 Wochen)

Tipps[Bearbeiten]

  • Newsgroup und info-forum lesen und die LVA-HP regelmäßig besuchen! Manchmal gibt es nachträgliche Änderungen in der Angabe, die bei (Nicht-)Berücksichtigung zu Punkteabzügen führen. Im Forum werden häufig zusätzliche Testfälle und Interpretation der Angaben von Mitstreitern gepostet.
  • Für neue Konzepte offen sein.
  • Funktionale Programmierung unterscheidet sich von imperativer Programmierung (C, Java,...), Lösungsansätze á la "Wie wuerde ich dieses Problem in Java lösen?" führen also nicht unbedingt zum Erfolg, sondern eher zu schlechten und umständlichen Lösungen. Besser funktioniert ein mathematisch-deklarativer Ansatz ("Wie würde ich das als mathematische Funktion anschreiben?"). Funktionale Programmierung ist allerdings 'näher' an der imperativen Programmierung als logikorientierte Sprachen wie PROLOG.
  • Das WAS? ist oft wichtiger als das WIE?
  • Emacs mit Haskellmode und integriertem Hugs beschleunigt das arbeiten sehr; noch besser funktioniert es mit einem zusätzlichen ghci-Fenster, nachdem die Hugs-Fehlermeldungen oft unbrauchbar sind.
  • die Beispiele am Anfang unbedingt machen, denn es wird immer schwieriger -- das war in den letzten 3 Wintersemestern allerdings ganz unterschiedlich
    • vor allem auch deswegen weil die Testfälle späterer Beispiele immer "fehlerhafter" werden
    • Erfahrung WS17: stimme hier voll zu, die Aufgaben werden meiner Meinung nach immer schwieriger und umfangreicher. Hatte zum Glück am Ende genügend Punkte, um die letzte Aufgabe auszulassen, denn diese wirkte besonders schwierig, auch im Forum wurde bezüglich der letzten Aufgabe besonders viel diskutiert.
  • die Angaben von Knoop enthalten oft Fehler -> darum wenn was fertig ist unbedingt kontrollieren ob die Angabe noch so stimmt.
  • Fristgerechts Abgeben zahlt sich aus.
  • Funktionsheader, Beispiele und Testfälle aus der Angabe rauskopieren! Die Schriftart ist etwas unglücklich gewählt: beim Abschreiben macht man leicht Fehler; Int != Integer,... ;)

Zeitaufwand[Bearbeiten]

Der Aufwand sollte sich auf 5-10 Stunden zu Beginn (Einlernen in Haskell) und 1-2 Stunden pro Übungsblatt (zumindest für die ersten acht Übungsblätter) beschränken. Das letzte Übungsblatt ist wegen der Beispiele zu Monaden etwas aufwendiger; hat man jedoch schon genug Punkte auf die anderen acht, kann man das Blatt auch auslassen und hat schon ein "Sehr gut" auf die Übung. --mdk 20:42, 20. Okt. 2007 (CEST)

Bei mir und meinem Kollegen dauert es schon immer etwas länger, da meist mindestens ein verzwicktes Beispiel dabei ist. Wir brauchen pro Übungsblatt ca. fünf Stunden, wenn dann noch Testfälle erdacht werden müssen oder die aus der Newsgroup bzw. Forum ausprobiert werden müssen, dann werden leicht sieben Stunden daraus. --klausi 12:11, 9. Nov. 2007 (CET)

Dem moecht ich mich ca. anschliessen, ich wuerde tendenziell aber "nur 3-5 Stunden" sagen. -- Mati 13:09, 17. Feb. 2008 (CET)
Sehe das auch so: Aufwand aber sehr unterschiedlich, von 2-3 bis 7-10 h war da alles dabei. Sehr ärgerlich waren auch die vielen Fehler in der Angabe und den Testfällen. --For3st 18:14, 21. Jan. 2010 (CET)

Aufwand dürfte steigen, auch bei uns sind ~5 Stunden Normalfall.

Durchschnittlich 4 Stunden pro Blatt. Da die Angaben oft unklar oder widersprüchlich formuliert sind, mussten wir die Lösungen manchmal noch im Nachhinein modifizieren. --Allmylittlewords 22:24, 25. Okt. 2011 (CEST)

Eher unterschiedlich, zwischen ca. drei bis vier Stunden und einigem mehr war alles dabei. --WolfB 17:01, 16. Jan. 2012 (CET)

Verbesserungsvorschläge / Kritik[Bearbeiten]

  • Generell gehört das Abgabesystem der Übungen überarbeitet. Studenten bekommen 0 Feedback zu ihren Übungen und es gibt nur einen Versuch beim Test. Die Lehrveranstaltung ist meiner Meinung nach nicht gut und gehört überarbeitet, vielleicht gehört ein neuer Veranstalter her.
  • Die Vorlesung scheint auf absolute Programmieranfänger ausgerichtet zu sein. Alleine zur Klammerung in Haskell wurde eine ganze Vorlesung gehalten. Leider bleibt dabei keine Zeit für interessante oder auch fordernde Themen. (Anmerkung: Klammerung ist bei Haskell schon etwas wichtiger als bei anderen Sprachen denke ich - das mit der Links/Rechts Assoziativität etc. sollte man schon verstehen auf lange Sicht - im Zweifel einfach Klammern ohne Ende einfügen geht zwar auch - ist aber nicht unbedingt schön).
  • Falls während der Prüfung nur Ass. Neumerkel anwesend ist, ist mit keinen Erklärungen zu Angaben zu rechnen. Habe bei der Prüfung am 14.04.2011 nach etwas gefragt da ich die Formulierung nicht klar fand worauf mir der Prof. nur den Rücken zudrehte und meinte, dass sei doch sowieso eindeutig anstatt mir zu antworten.
  • Kann ich bestätigen. Mir ging es bei der Prüfung am 17.1.2013 gleich. Es wurde mir auch kein Zusatzblatt gegeben... mit dem vorgegebenen Platz muss man auskommen.
  • Bis zum Haupttermin WS2011 hat es gereicht sich die Prüfungen aus den Vorjahren anzusehen und man konnte damit rechnen, dass wieder so etwas kommt. Jedoch steigt im SS2012 der Schwierigkeitsgrad der Prüfungen immens - sie sind zwar noch immer so aufgebaut wie in den Vorjahren (Ausdrücke auswerten, danach Bäume und Funktionen darauf), jedoch um einiges schwieriger und teilweise komplett neu (Bsp.: Elementbäume ?????, am 22.6.2012 kam eine Funktion die so zu sagen IRGENDWAS machen sollte, was keinen wirklichen Sinn ergab und nur schwer sein sollte)
  • Schreckliche Übungsaufgaben (zwar simpel umzusetzen wenn die Angabe mal klar formuliert wäre - das ist aber nicht immer gegeben) und absolut letztklassige Betreuung. Die mit großem Abstand schlechteste Lehrveranstaltung der ersten 3 Semester.
  • Wirklich schlechte Betreuung. Übungsbeispiele werden oft noch kurzfristig vor der Abgabe geändert bzw. lassen sich die PDFs oft gar nicht mehr öffnen. Derzeit steht z.B. seit Monaten ein beschädigtes Vorlesungsskriptum online (Stand 28.2.2014).
  • Definitiv die schlimmste LVA des Semesters. Letztklassige Betreuung (Zynische Antworten der Tutoren, dass alles "klar" ist, was dann vom Professor nur Stunden vor der Abgabe anders "klar gestellt" wird) Die Übungsaufgaben sind oft aufgrund von Angabenfehlern nicht lösbar. Deadlines werden nach dem Ablauf um Wochen nach hinten verschoben, obwohl die Korrekturen automatisiert statt finden. Zynische Antworten des Professors im Forum ([1], [2]). Mehrfach werden LVAs abgesagt oder verschoben, ohne die Studierenden darüber zu informieren, was dazu führt, dass eine Meute von Studenten früh Morgens umsonst im Lehrsaal sitzt. (persönliches Fazit WS14/15)
  • Die LVA-Leitung hat sich die Kritik etwas zu Herzen genommen. Unfreundlichkeiten sind dieses Semester nicht vorgekommen. Leider bleibt das Problem mit den unklaren Formulierungen/fehlerhaften Angaben bestehen. Von 7 Übungsblätter mussten bei 4 die Abgabetermine verschoben werden (fehlerhafte, unklare Angaben) und bei einem kam man nicht ohne zusätzliche Information aus. Also nur 2 von 7 Angaben waren ohne weitere Information zu lösen. Das Informatik-Forum ist immer noch die größte Hilfe und kann ich für diese LVA nur empfehlen. Einige Studenten stellen schon nach wenigen Stunden nach dem neuen Aufgabenblatt Testfälle online und helfen bei allen Fragen. (persönliches Fazit WS15/16)

Weblinks, Materialien[Bearbeiten]

Wikipedia-Links[Bearbeiten]