KIF465:Programmierpraxis im Studium
Anwesend: - HS Emden-Leer - TH Nürnberg - Uni Heidelberg - HS Karlsruhe - KIT - TU Dresden - Uni Bonn - Uni Tübingen - Uni Augsburg - Uni Goettingen - Uni Würzburg - Uni Bamberg - JGU Mainz - Uni Erlangen (später)
Welche Sprachen/Praxismodule?[Bearbeiten]
Emden[Bearbeiten]
- Java als Einstig im ersten Semester
- C und Java im zweiten
- Assembler und C im dritten
- C und Java im vierten
- Ab da Wahl und hauptsächlich C.
- Jedes Semester Programmierfächer, keine Ballung der Programmieraufgaben
- Alles in allem sehr Praktisch bezogen ### KIT
- Java zum Einstieg
- C, Assembler in 2 Vorlesungen nebenbei (verpflichtend 3. Semester)
- SQL Datenbanksysteme (3. Semester)
- C++ Einstieg in Computergraphik (muss nicht belegt werden)
- Prolog, Haskell verpflichtend (5. Semester)
- Praxis der Softwareentwicklung Sprache abhängig vom Projekt
Bonn[Bearbeiten]
- C, Java manchmal je nach Laune des Profs ein Bisschen python
- mehr C, Assembler und Rust/Go im Wahlpflicht
HS Karlsruhe[Bearbeiten]
- Java 1,2 (erste beiden Semester)
- JavaScript, HTML, CSS3 im 2. Semester (VL Verteilte Systeme)
- C/C++ im 2. Semester
- bisschen Assembler und VHDL innerhalb der VL Technische Informatik 2
- SQL im 2. Semester (im Zusammenhang mit der Vorlesung Datenbanken 1)
- Go (5. Semester)
- Fachschaft veranstaltet einen 4 tägigen Programmiervorkus mit Java vor jedem Semester für neue Erstis -> Crash-Kurs über die Inhalte des ersten Semesters, damit die Leute das Zeug schonmal gesehen haben (der Anspruch bei uns ist nicht, dass die Leute am Ende alles komplett verstanden haben/Programmieren können)
- Master:
- Haskell in der Vertiefungsrichtung Software Engineering
- Python in der Vertiefungsrichtung Maschinelles Lernen
- Modulhandbuch Informatik Bachelor
Uni Heidelberg[Bearbeiten]
- C++ in 2 Veranstaltungen im ersten Semester
- Java später in Software Engeneering
- Freiwilliger Python-Blockkurs
Uni Goettingen[Bearbeiten]
- Pflicht: Java, C, Assembler (MIPS), Haskell
- je nach Interessen: Python, C++, Prolog
- Softwareprojekt im 2. Semester (Umfang 5CP,Modulbeschreibung)
- Spielprogrammierung in 4er Gruppen
- Vorlesungen zur objektorientierten Programmierung im Semester
- im letzten Monat Umsetzungen der Spezifikationen (GUI, Netzwerk, Spiellogik) auf Basis von Uni gegebenem Code
- Modulpruefung: muendliche Pruefung
TU KL[Bearbeiten]
- Grundlagen der Programmierung: Java, C, F# oder Haskel (Prof abhängig)
- Verteilt auf andere Vorlesungen:
- SQL
- Python
- Prozessorsprachen (z.B. MIPS)
- Projektmanagemet
- Nebenläufigkeit
- Software-Architektur (minimal)
- Software-Entwicklungs-Projekt (Java, Git, Wasserfall)
- Ziel: Spiel programmieren (z.B. Hanabi, Risiko)
- Fokus auf Sicherheit oder Erweiterbarkeit
- Netzwerkfähigkeit
- Übungsleiter zu Gruppenverhältnis: ca 1 zu 3
- Möglichkeit von vorgegebenem Framework abzuweichen
- Scrum statt Wasserfall
- Socket statt RMI
- $framework statt JFX
TU Dresden[Bearbeiten]
- C, Python, Java, Haskell im 1. Semester
- C++, Java im 2. Semester
- Softwaretechnologie - allein, Programmieraufgaben in Java, Bonuspunkte für die Prüfung
- Einführung in die Medieninformatik - 3 bis 5 Personen, Entwicklung einer Android-App
- Softwaretechnologiepraktikum - 4 bis 6 Personen, Wasserfall Entwicklung für fiktiven und echten Auftrag, Versionsmanagement, Meetings, meist Webshop o.Ä. als Aufgabe
- RoboLab - 4 bis 5 Personen, Lego Mindstorms, Labyrinth in den Semesterferien
- Strategiespielpraktikum - allein, Strategiespiel automatisiert spielen, Wettbewerb gegeneinander am Ende
- Studentisch organisierte Programmierkurse (meist C, Java und Python)
- git Einführung kurz nach der O-Phase (ESE)
Uni Augsburg[Bearbeiten]
- Grundlagen(Semester 1-3): C, Java, SQL, Assembly
- Softwareprojekt (Kooperation mit Firma; Unterteilung in Teams 4-6Leute; Code vom besten Team geht an die Firma; meistens Java-Projekt), Git; Ingenieurinformatik(C–> Robotik)
- Informatik und Multimedia -> zusätzlich Multimediaprojekt
- Wirtschaftsinformatik -> zusätzlich Projektstudium auch in Kooperation mit externen Stellen (Web/App)
- Vertiefungsmodule Python; AI
- Programmierkurs (C ^ Java)
TH Nürnberg[Bearbeiten]
- C# im Grundstudium
- Java
- Javascript
- PHP
- (optional C++, Haskell)
Uni Würzburg[Bearbeiten]
- Programmiervorkurs (Java)
- Grundlagen der Programmierung (Java + C)
- Programmierpraktikum (Java)
- Softwarepraktikum (in 3er Teams) (diverse, meist Java)
- Im Rahmen anderer VL: VHDL, Prolog, Scala, Python
Uni Bamberg[Bearbeiten]
- Einführung in Algorithmen, Programmierung und Software (C – vorher Java)
- Java Programmierung (Java)
- Software Engineering Lab (Java)
- Programmierung komplexer interagierender Systeme (Java)
- Foundations of Software Engineering (Java)
- Introduction to Functional Programming (Haskell)
- sonst: je nach Vorlieben der Lehrstühle (neben Java oft auch Python, dann nur selten C/C++ oder Prolog)
- keine selbstorganisierten Programmierkurse (evtl. irgendwann mal Python durch Fachschaft)
Programmiervorkurse[Bearbeiten]
- Blockveranstaltung wie Mathe-Vorkurs
- wird teilw. dringend empfohlen
- -> weniger Einstiegsprobleme
- manche Vorlesungen versuchen Grundlagen zu wiederholen, fangen aber nicht bei Null an
- Kritik aus Plenum: Warum wird das so stark vorausgesetzt? Sind die Vorlesungen dann nicht “falsch” ausgelegt?
- manchmal Vorkurse durch FS organisiert
- Fragen ans Plenum:
- Umfang von einzelnen Aufgaben in Programmierkurs (LOC)
- 500-700
- 200-300 (bei vielen Aufgaben, ca. jede Woche)
- Gruppengröße
- max. 2
- Wie sind die Aufgaben aufgebaut (Einzelaufgaben, aufeinander aufbauend, ein großes Projekt)?
- Problem bei aufbauenden: Fehlzeiten
- Hybrid: Jede Woche kleinere Aufgaben, ein großes Projekt, dass über das ganze Semester läuft
- Online-Abgabe: Wird Bewertung automatisch durchgeführt oder manuell bewertet?
- Praktomat
- kombiniert: Praktomat + manuelles Screening
- Motivation für autom. Bewertung: Wenig Code-Audits, damit HiWis nicht schreiend weglaufen
- Code-Style-Vorgabenblatt (Praktomat überprüft Code-Style)
- Problem autom. Korrektur: Ersties lernen funktionierenden Code, aber nicht guten/schönen Code zu schreiben
- Kommentar: Davon verabschieden, Programmieren an der Uni zu lernen, sondern Konzepte.
- Gegenargument: So erhält man Leute, die nur Spaghetti-Code produzieren
- Programmieren lernt man hauptsächlich, in dem man es tut
- Dadurch wird z.B. nicht gelehrt, wie Mensch richtig kommentiert
Funktionale Sprachen als Einstieg?[Bearbeiten]
- Erfahrung mit Standard ML
- viele finden es ziemlich cool (kommen auf funktionale Programmierung zurück, wenn sie freie Wahl haben – z.B. im Gegensatz zu Java)
- -> Fazit: “kommt gut an”
- andere Erfahrung: Einsteiger mit Java vs Einsteiger mit Haskell -> Haskell-Einsteiger haben es oft leichter
- Zwischenfrage: Haben enorme Unterschiede bei Vorkenntnissen (Zustimmung im Plenum) einen Einfluss darauf?
Does and don’ts für Programmierkurse[Bearbeiten]
Don’ts[Bearbeiten]
- Man sollte nicht durch Peer Review des Codes, allein, das Praktikum bestehen können.
- Einteilung von Gruppen basierend auf Noten (Schlechte vs gute Gruppen)
- Problem: T.E.A.M.: Toll, Ein Anderer Macht’s ### Does
- Eingereichten Code durch andere Teilnehmer kontrollieren/bewerten lassen.
Wahl der Projekt Themen[Bearbeiten]
Varianten: - Liste mit Beispielprojekten und sonst sind beliebige Projekte möglich - Hier muss sich unter Umständen noch ein Betreuer gesucht werden - Ein Thema wird vorgegeben und dieses wird dann von allen bearbeitet - Es gibt ein Lastenbuch für ein Projekt (ausgedacht, oder aus Wirtschaft) und muss bestimmte Stati erreichen, Lastenbuch wird auch immer mal wieder geändert (alltagsnah) - n Projekte werden ausgedacht, dann wird ein Thema zugelost (auch Gruppen so gelost)
Praxis an der Uni:[Bearbeiten]
— Uni Bonn: Reakkreditierung, Prof überlegt sich ein Projekt, C und Java, Programmieren vorkurs C, C für Anfänger, Java für Anfänger — Hochschule Emden: Praxis jedes Semester, Java, C/C++, SQL — HS Karlsruhe: Viel Programmierpraxis -> zu fast jeder Vorlesung ein Labor/eine Übung -> Anwendung des VL-Stoffes im Team, größeres Modul im dritten Semester, Java, C/C++, SQL, Haskell (Wahlfach im höheren Semester), ein Semester Projektarbeit im 5. Semester (alleine oder im Team -> meist “agile Vorgehensweise”, je nach Projekt auch in Zusammenarbeit mit einer Firma) — TU Dresden: Viele Veranstaltung mit Programmierung: C im ersten, Java im zweiten, Lego Mindstorms mit Python, Einführung in die Computergrafik — Uni Augsburg: C im ersten, Java im zweiten, SQL Assembler im dritten, Java Projekt, — TU Kaiserslautern: Java, F# und C, SQL, unterschiedlichste Programmiersprachen, — KIT: Einführung in Programmieren (Java + Objektorientierung)(1. Semester), Java - Softwaretechnik 2. Semester, C / Assembler in Betriebssysteme, Technischer Informatik (3. Semster), Haskell / Prolog Programmierparadigmen (5. Semester), Praxis der Softwareentwicklung (abgewandeltes Wasserfallmodell) Sprache abhängig vom Projekt (Objektorrientiert), weitere Sprache in unterschiedlichen Vorlesung (C++ in Computergrafik) (muss nur verwendet werden) — Uni Mainz: Python erstes Semester, altertümliches C++, Programmiersprachen(war mal funktionale Sprachen, jetzt eher Konzeptvorlesung), Software engeneering (Java), Computergrafik (C/C++) — Uni Göttingen: Einstieg Java, C, Haskell und Assembler, allgemeines Programmierpraktikum, Projekt(meist Spiel komplett erstellen) — HU Berlin: Grundlagenvorlesung Java, kleineres Projekt in Selbststudium C, in der Logik-Vorlesung Prolog — Uni Tübingen: Python — Uni Heidelberg: C++ zwei Veranstaltungen, Python wissen in AlgoDat, Java in Softwareengeneering, 2-3 freie (Team-)Projekte, SQL — TH Nürnberg: Programmierenpraktikum Sem 1+2 C#, Webprogrammierung PHP, JavaScript — Uni Karlsruhe: Java 1+2, C und Assembler in Betriebsysteme, Haskell, Prolog, Projekte, SQL — Uni Konstanz: Java, Haskell, C, C++, [no]SQL — Uni Saarland: Funktionales Programmieren, Assembler, C, Java, Softwarepraktikum in Java, C++ später wählbar — Uni Würzburg: Programmieren Vorkurs Java, Java und C einführungsveranstaltung, Java Blockpraktikum, Softwarepraktikum Teams Sprache frei wählbar, Prolog, JavaScript, Python, C/C++ verbannt — Uni Passau: Einführung in Haskell und Java, Java Vertiefung, Softwareengeneering ein größeres Projekt — Uni Bamberg: C, Java-Programmierung, Haskell, Python, Prolog