TU Wien:Programmkonstruktion VU (Puntigam)

Aus VoWi
Wechseln zu: Navigation, Suche

Diese LVA entstand durch die Verschmelzung der LVAs Grundlagen der Programmkonstruktion und Programmierpraxis. Sie ist seit Wintersemester 2015 Teil der StEOP und ersetzt die Vorgänger-Veranstaltungen.

Diese LVA wurde durch die LVAs Einführung in die Programmierung 1 und Einführung in die Programmierung 2 ab dem WS17 ersetzt!


Daten[Bearbeiten]

Inhalt[Bearbeiten]

Diese LVA verschafft einen groben Überblick über Java und ist insbesondere auf Zuhörer abgestimmt die noch nie programmiert haben. Daher beschäftigt sich die Vorlesung auch sehr viel mit grundlegenden, sprachunabhängigen Konzepten. Der Fokus liegt trotzdem auf Java.

Ablauf[Bearbeiten]

noch offen

Benötigte/Empfehlenswerte Vorkenntnisse[Bearbeiten]

Benötigt werden keine, aber Programmiererfahrung hilft schon deutlich weiter, insbesondere weil Prof. Puntigam grundlegende Prinzipien möglicherweise nicht gut erklärt. Es empfiehlt sich besonders für Anfänger (und besonders bei dieser LVA), alternative Erklärungen im Internet zu suchen falls man den Vortrag nicht versteht.

Wer schon Programmierkentnisse besitzt, sollte jedoch den Aufwand nicht unterschätzen, obwohl er am Anfang lächerlich gering wirken mag. Spätestens wenn die Fortgeschrittenen-Gruppen anfangen zieht der Aufwand bei den Übungen ziemlich an. Der Fokus liegt auch nicht nur auf Java selbst, in den Übungen und Tests kommen immer wieder Logikpuzzles, wo man (rekursiven!) Code verstehen muss ohne ihn auszuführen. Sowas ist man als Hobbyprogrammierer nicht unbedingt gewohnt.

Vortrag[Bearbeiten]

WS 2015/16

Wöchentlich 2 Einheiten, ein Teil Theorie (Franz Puntigam) und ein Teil Praxis (Viktor Pavlu).

WS 16
Wöchentlich 2 Einheiten zu je zwei Stunden. Beide Stunden werden von Franz Puntigam abgehalten, wobei er versucht, Theorie mit Praxis zu verbinden.

Übungen[Bearbeiten]

WS 2015

Insgesamt gab es 8 Aufgabenblätter, auf welche die Übungen aufbauen. Es gibt normale und fortgeschrittene Gruppen, welche durch den Einstiegstest (Test0) eingeteilt wurden.

Die Übungen finden wöchentlich statt, sie dauern ca. 90 minuten wobei 45min für ein AdHoc-Beispiel eingeplant sind und 45min für die Überprüfung des Aufgabenblattes. Es werden 3-5 Leute aufgerufen, die dann ihren Code erklären dürfen. Die Benotung fließt in die Gesamtnote ein, es muss nicht jeder einmal dran gekommen sein.

SS 2016

Der Übungsmodus wurde geändert, im Gegensatz zu dem Semester davor gibt es keine Bewertung der Übungsbeispiele, d.h. diese sind freiwillig. Die Benotung der Übung basiert rein auf den Ad-Hoc Aufgaben und diese müssen zu mindestens 50% gelöst werden.

WS 2016

Die Übungsbeispiele wurden in diesem Semester mit dem gleichen Gewicht wie die Ad-Hoc-Aufgaben in die Note miteinbezogen. Gemeinsam fließen diese zu 25% in die Gesamtnote mit ein.

Tests[Bearbeiten]

WS 2015/16[Bearbeiten]

Test1 bzw Test0 waren reine Multiple-Choice Fragen. Test0 war am Anfang der Vorlesung zur Einteilung in normale Gruppen/ fortgeschrittene Gruppen (normale Gruppen 8 Übungsblätter - fortgeschrittene Gruppen - 5). Hat man über 70 % erreicht wurde man in eine fortgeschritten Gruppe eingeteilt. Test0 musste aber nicht abgelegt werden, man konnte auch einige Wochen später Test1 abschließen, bzw sich die Note aus Test0 verbessern. Außerdem kann man den Test0 anrechnen lassen für Test1. Dies ist natürlich nur sinnvoll wenn man mehr als 50% erreicht hat.

Test2 war in einen Theorie- und einen Praxis-Teil aufgeteilt. Die Theorie wurde mittels Multiple-Choice oder Option abgefragt. Nachdem man den Theorie-Teil beendet hat, kann man nicht mehr zu diesem zurück und nur noch den Praxis-Teil machen. Der Test dauert insgesamt ca. 90 Minuten, für den Theorie-Teil gabe es keine Zeitvorgabe, allerdings hatte man bei längerem verweilen weniger Zeit für die Praxis-Aufgaben. Der Praxisteil lief in der Entwicklungsumgebung IntelliJ ab, die allerdings in keiner Hinsicht eingeschränkt war. Der Test2 war von der Schwierigkeit her doch für manche eine Überraschung. Laut dem Vortragenden wurden einige leichte Beispiel aus dem Test gestrichen. Übrig blieben beispielsweise Rekursionsbeispiele, auf die man sich nicht gut durch die Adhoc Beispiele (aus den Übungen) vorbereitet fühlte. Allerdings wurde dieser Test meiner Meinung nach recht großzügig benotet. (In meinem Fall warfen alle Rekursionen Exceptions und trotzdem bekam ich die volle Punkteanzahl, da das Grundschema stimmte)

Im Praxisteil des WS16 lagen der Angabe auch entsprechende Unittests bei. Der "Workflow" war daher dem der Übungsaufgaben sehr ähnlich.

Test3 lief im gleichen Modus wie der 2. Test ab. Der Test3 war im Vergleich zu Test 2 doch erheblich leichter.

SS 2016[Bearbeiten]

Test 1 bzw. Test 0 haben sich im Vergleich zu WS 2015 kaum geändert. Ein reiner "Kreuzerltest"-Test mit MC/SC-Fragen, wobei beim Multiple Choice-Teil auch Teilpunkte vergeben wurden. Test 0 kann man sich für Test 1 anrechnen lassen, wobei man ab 70% bei Test 0 in fortgeschrittene Gruppen kommt.

Test 2 wie letztes Semester 30% Theorie (wie bei Test 1) und 70% Praxis. Der Praxis-Teil war dieses mal vom Stoff her weniger, Themen waren nur Rekursion + Arrays. Anders als bei WS 2015 wurden die Themenbereiche nicht mehr gemischt, sprich es gab Beispiele zu Arrays und Beispiele zu Rekursionen, somit war Test 2 auch deutlich einfacher als im letzten Semester. Es gab ein "All or nothing"-Prinzip bei der Bewertung, sprich, die Beispiele mussten im Gegensatz zum vorherigen Semester vollständig gelöst werden, es hat nicht mehr gereicht irgendeinen Code hinzuschreiben. Allerdings wurden Teilpunkte für mögliche Härtefälle vergeben, wenn das Programm beispielsweise für einen Sonderfall nicht funktioniert hat. Die Korrektur von Test 2 hat 1 Monat gedauert, da zum ersten Mal automatisiert korrigiert wurde beim praktischen Teil, und da offenbar eine Menge nicht funktioniert hat.

Test 3 hatte diesmal eine 50-50 Verteilung für Theorie und Praxis, wobei die Theoriefragen ein Detailwissen vorausgesetzt haben und sich alle Fragen um Codestücke gedreht haben, die man wirklich verstehen musste. Tatsächlich war der Theorieteil bei Test 3 meiner Meinung nach schwieriger als der praktische Teil, da er voll mit relativ kniffligen Single Choice-Fragen war, für die es natürlich auch keine Teilpunkte gab. Der Praxis-Teil hingegen war sehr einfach.

WS 2016[Bearbeiten]

Test 1 und Test0 verliefen wie im SS16.

Test 2 waren in 40% Theorie (welche wie Test0/1 ablief) und 60% Praxis unterteilt. Das PK-Team stellte erneut Tests zur Verfügung, durch welche der eigene Programmcode kontrolliert werden konnte. Des Weiteren wurden auch Teilpunkte vergeben. Das Ergebnis stand 1 Monat nach dem Test zur Verfügung. Test 2 war laut laut vielen Studierenden der schwerste. (Nicht unterkriegen lassen, wenn er negativ war - die nächsten Tests werden einfacher)

Test 3 sowie Test 4 (Nachtragstest) hatten wie Test 2 eine 40-60 Aufteilung. War laut einigen Studierenden allerdings um einiges einfacher als Test 2. Das Stoffgebiet war bei beiden Tests sehr ähnlich. Test 4 beinhaltete allerdings auch wieder Rekursions-Beispiele beim Theorie-Teil.

Abschlussaufgabe[Bearbeiten]

WS 2015/16[Bearbeiten]

Das Abschlussbeispiel wird in Teams zu 2 Personen gemacht. Im WS 2015/16 musste Risiko mit grafischer Ausgabe programmiert werden.

Falls der Partner im Team nicht reagiert, kann durch ein Mail an seinen Tutor (von der Übungsgruppe) ein neuer Partner gesucht werden, sofern das früh genug bekannt gegeben wird.

SS 2016[Bearbeiten]

Es gab keine Abschlussaufgabe mehr.

WS 2016[Bearbeiten]

Genau wie im SS16

Prüfung, Benotung[Bearbeiten]

noch offen

Dauer der Zeugnisausstellung[Bearbeiten]

  • WS16: Letzte Leistungsfeststellung (Test 4 - Nachtragstest): 15.02.2017, Zeugnis erhalten am: 24.02.2017 (2 Wochen)

Zeitaufwand[Bearbeiten]

Vorbereitung auf die Wöchentlichen Übungsblätter (8 für die normalen Gruppen - 5 für die Forgeschrittenen), je nach Vorkenntnis kann diese schon mehrere Stunden ausfallen. 2 Stunden wöchentlich zum Besuch der Übungen (Anwesenheitspflicht) und 2 mal 2 Stunden Vorlesung in der Woche (je eine Stunde Theorie und eine Stunde Praxis).

Testvorbereitung etwa 10 Stunden pro Test.

SS 2016

Meiner Meinung nach ist der Zeitaufwand im Vergleich zu WS 2015 deutlich gesunken. So gibt es keine Abschlussaufgabe mehr, und die Hausübungen werden nicht mehr bewertet. Die Adhoc-Beispiele waren allesamt relativ einfach zu lösen, Test 2 ist im Vergleich zu WS 2015 auch deutlich leichter ausgefallen. Nichtsdestotrotz sollte man PK nicht unterschätzen, am besten alle Vorlesungen besuchen oder die Aufzeichnungen anschauen, die Hausübungen - auch wenn freiwillig - alle vollständig lösen, und alle Übungseinheiten besuchen. Für die Tests habe ich dann kaum mehr gelernt, für Test 1 gar nicht, Test 2 vielleicht 1-2 Stunden und für Test 3 3-4 Stunden. Wichtig ist das kontinuierliche Mitlernen und das Verstehen von Details. Wird mal ein Kapitel nicht vollständig verstanden (oft scheitert es an Bäumen bzw. Listen), wird man es sehr schwer haben beim Test.

WS 2016

Gerade in der Anfagangszeit war das Tempo von PK sehr hoch, für Leute die noch nicht programmieren können ist dies wohl sehr zeitaufwendig. Ab der Hälfte hat die LVA meiner Meinung nach deutlich langsamer neuen Stoff gemacht. Auch die Tests wurden eher leichter. Nur weil man Test0 und 1 nicht geschafft hat, sollte man die LVA noch nicht aufgeben Test3 war dieses Semester mit Abstand der leichteste. Für Programmiererfahrene war meiner Meinung nach Test0 bzw. 1 der schwierigste, da er sehr auf Detailwissen von Java ausgelegt war. Gerade für Programmieranfänger*innen wird dieses Fach sehr zeitaufwendig sein v.a. da versucht wird die grundsätzlichen Programmierkenntnisse in sehr kurzer Zeit zu vermitteln.

Unterlagen[Bearbeiten]

Tipps[Bearbeiten]

  • Neueinsteiger und Könner von Java sollten das Fach auf keinen Fall unterschätzen
  • das 488-seitige Skriptum zur Vorlesung ist durchaus hilfreich, vor allem bei den Theorie-Fragen der Tests, das erste Kapitel kann man allerdings überspringen
  • Zusätzlich zum Skriptum kann auch dieses Buch (eventuell in neuerer Auflage) http://wiki.hsr.ch/Prog1Java/files/Java_als_erste_Programmiersprache,_5._Auflage.pdf angeschafft und gelesen werden. Der komplette Stoff der VO wird damit abgedeckt.
  • Das Skriptum ist meiner Meinung nach völlig unbrauchbar, da die Inhalte nicht in der Reihenfolge durchgenommen werden wie in den VOs, noch dazu ist das Skriptum zu umfangreich, während manche Details wiederum in den VOs genauer besprochen werden. Die wohl beste Vorbereitung für die Tests sind die VOs und die Übungen (HÜs + AdHoc). Das Skriptum ist lediglich als Vorbereitung für die LVA nützlich, um sich ein wenig einzulesen.

Lob / Verbesserungsvorschläge / Kritik[Bearbeiten]

SS 2015

  • Testzeit war im Gegensatz zu WS 2014/15 mit 90 min statt 2*45 min wesentlich besser.

WS 2015/16

  • Sehr langsame Bewertung der (maschinell durchgeführten!) Multiple-Choice Tests. Tests selbst sind inhaltlich okay.
  • Vieles was Prof. Puntigam sagt ist sehr absolutistisch formuliert ("Rekursion ist super! Immer Break in Switch-Case verwenden! Niemals break in Schleifen verwenden!"). Die Absicht ist wohl, dass blutige Anfänger nicht irregeführt werden, aber ich bin mir nicht sicher ob solche Aussagen tatsächlich irgendeinen anderen Nutzen haben als Fortgeschrittene zu provozieren.
  • Testcases bei Aufgabenblättern sind fürchterlich geschrieben, eher schwer verständlich für Anfänger und daher keine große Hilfe. Coverage auch nicht besonders gut.
  • Musterlösung für jedes Aufgabenblatt wär schön. (Es gab zwar für die Aufgabe "Vier Gewinnt", die sich durchs ganze Semester gezogen hat Musterlösungen, aber für andere Aufgaben die man eventuell anders/suboptimal gelöst hat, wären Musterlösungen, auch als Testvorbereitung, sehr hilfreich.)