KIF465:Programmierpraxis im Studium

Aus KIF

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