KIF385:Wie lernt man das Programmieren im Informatikerstudium

=Problematik=
 * Erstis haben verschiedene Vorkenntnisse
 * Auch mitten im Studium können nicht alle mit Computern besonders gut umgehen
 * Teilweise gibt es keine Programmierkurse an der Uni, Programmierkenntnisse werden aber vorausgesetzt

=Lösungsansätze=
 * TU Darmstadt: Kaum jemand hat Vorerfahrungen mit Scheme -> also wird das gemacht, weil alle was lernen
 * Dann Übergang ins Imperative/Objektorientierte und Übersetzung auf andere Bereiche (z.B. VHDL)
 * RWTH Aachen: Java, Haskell, Prolog in einer Vorlesung im ersten Semester -> alle großen Programmierparadigmen
 * Auch Hintergründe erklären, z.B. Hoare-Kalkül
 * Später dann Softwarepraktika, wo teilweise z.B. C++ gebraucht wird -> Fokus mehr auf Softwareentwicklung
 * Uni Erlangen: Java wird in Ansätzen erklärt
 * Danach beibringen, wie man die Java-Dokumentation liest und klare Ansage: beschäftigt euch damit!
 * Berlin (BHT): Semesterprojekt im 2. Semester (nach allgemeiner Vorlesung im 1. Semester), z.B. Musikverwaltung bauen (kein Fokus auf Softwareentwicklung, sondern konkret Programmieren)
 * außerdem kostenlose Nachhilfekurse (L++) wenn man Schwierigkeiten hat

=Voraussetzungen= Kontroverse Ansichten gibt es darüber, ob man Programmieren einfach voraussetzen sollte
 * Nebenbedingungen wie z.B. Bafög sind problematisch, weil sich für Menschen ohne Programmiererfahrung die Studiendauer verlängert -> kein Befög mehr, Studienzeitverlängerung, etc.
 * Auf der anderen Seite sollen die Leute auch im Studium selbstständig arbeiten können (selbstverantwortliches Lernen sollte jedem Studierenden zugetraut werden)
 * Es ist besser, die Konzepte hinter Programmiersprachen zu lernen, allgemein Programmieren zu können - anstatt nur eine Sprache konkret zu erlernen und nicht die Fähigkeit zu besitzen, sich weitere Sprachen gut aneignen zu können

=Wie kann man Programmieren lehren?=
 * Paradigmen und Konzepte wichtiger als konkrete Sprachen
 * Lehre wird aber über konkrete Programmiersprache gemacht
 * Zu wenig und zu seltene Beschäftigung mit Programmieren (nur eine Übung die Woche)
 * Zu kleine Stückelung
 * Zu wenig als "Handwerkszeug" wahrgenommen, das man allgemein und häufiger mal verwenden kann
 * Praktika können helfen, Programmier-Kenntnisse zu vertiefen
 * Problem Gruppenarbeit: es kann von Erfahrenen nicht verlangt werden, dass sie sich um Unerfahrene kümmern. Es kann umgekehrt nicht sein, dass das Niveau so hoch ist, dass die Unerfahrenen nicht durchkommen können
 * Wer den Willen hat Programmieren zu lernen, sollte genügend Hilfestellung von der Uni bekommen - das ist nicht Aufgabe anderer Studis!
 * Möglicherweise gute Idee: Programmieraufgaben, wo man ein kurzes (< 500 Zeilen) Programm bekommt, einen Teil ergänzen muss, dafür anderen Code lesen muss (Code-Review, Dekomposition, etc.)
 * man kann sich Sachen abgucken, man kann das Programm nachvollziehen und lernt das automatisch

Gruppenarbeit bei der Abgabe von Übungen?

 * teilweise muss in Gruppen gearbeitet werden, da die Arbeitsaufträge für nur eine Person zu umfangreich sind
 * zu zweit ist man mehr als nur doppelt so schnell
 * zu viel Glückssache, gerade im ersten Semester: wer arbeitet mit wem zusammen, wenn sich keiner kennt?
 * auch der Tutor in den Übungsgruppen kann scheiße sein -> erheblicher Nachteil, keine echte Möglichkeit das zu ändern
 * wie könnte man das besser machen?
 * vielleicht mit Tutorenschulungen
 * häufiges Konzept: jeder muss mal vorrechnen, dadurch müssen alle in der Gruppe arbeiten
 * nicht immer erfolgreich, wenn dadurch Defizite erst am Ende des Semester klar werden
 * Anwesenheitspflicht
 * kann ziemlich doof sein
 * Gruppenanwesenheitspflicht vielleicht besser: Gruppenmitglieder wollen nicht immer alle da sein, "schwächere" müssen also angeleitet werden, damit sie da sind und sinnvoll zuhören oder vorrechnen können

=Softwareprojekt - gut oder schlecht?=
 * Muss nicht in Gruppenarbeit sein, weil es da Zufall ist, ob es gut funktioniert (je nach Teammitgliedern)
 * Kann sehr demotivierend sein, wenn man erst hinterher lernt, wie es "in echt" laufen sollte
 * Gruppenarbeit muss aber auf jeden Fall im Studium vorkommen und funktionieren - das gehört später zum Programmieren dazu!
 * Trennung zwischen Programmieren und Softwareentwicklung
 * beides gleichzeitig lernen geht nicht
 * sprechen über "was ist guter Code? Wie programmiert man gut?
 * erst Programmieren lernen, dann Gruppenarbeit wo es ne Aufteilung gibt

=Tutoren=
 * wird sehr veschieden gut bezahlt (teilweise nur "Kontaktzeit"=2 Stunden, teilweise alles inklusive=11 Stunden)
 * kann an manchen Unis angerechnet werden (ECTS)
 * keine große Auswahl (es gibt zu wenig Freiwillige für Tutorenstellen)
 * sollten sowohl über Fach- und Veranstaltungs-spezifische, als auch über didaktische als auch über menschliche Fähigkeiten verfügen

=Hilfestellungen=
 * den Studierenden sollte frühzeitg im Studium klargemacht werden, welche später im Studium benötigten/geforderten Fähigkeiten sie sich (selbstständig) erarbeiten sollten (z.B. Ausgabe einer Liste an die Ersties)
 * optionale Kurse in der vorlesungsfreien Zeit für diejenigen, die nicht klar kommen
 * sinnvoller vor Beginn des "Nachholsemesters"
 * optionale Kurse in Vorlesungszeit: wäre direkt aktuell, wenn man merkt, dass man nicht klar kommt
 * aber Problem des Zeitaufwandes; es gibt ja für den Pflichtstudienplan schon genug zu tun
 * nicht dieselben Kurse für Wiederholer wie für Erstis!
 * Problem der Finanzierung
 * evtl. Finanzierung durch die Industrie? Das wird von Vielen sehr skeptisch gesehen
 * Mentoring: konkretes Eingehen auf spezifische Probleme
 * einzelne Hilfestellungen können gegeben werden, z.B. Verweise auf gute Tutorials
 * Mentor kann allerdings nicht persönlich Nachhilfe geben (keine Kapazität)
 * Meta-Workshops/-Seminare: zum Abbau von Prüfungsstress, lernen des Lernens, etc.
 * eher allgemein, wenn man ein Problem anerkennt

=sich ergebene/ noch zu diskutierende Fragestellungen= (*Wink mit dem Leuchtturm* könnten ja mal auf einer zukünftigen KIF in einem AK aufgegriffen werden)
 * Wie kann man das Programmieren motivieren?
 * Wie motiviert man Teamarbeit bei Gruppenprojekten? bzw. Wie kann man dem Problem entgegenwirken, dass bei Gruppenprojekten einige nicht mitarbeiten und die Arbeit an Einzelnen "hängenbleibt"?
 * Gibt es sinnvolle Werkzeuge für den Informationsaustausch bei Gruppenarbeit, wenn die Gruppe gerade nicht an einem Ort versammelt ist?
 * Ist sichergestellt, dass Räume für Gruppenarbeit zur Verfügung stehen? Wie sollten diese Räume gestaltet bzw. ausgestattet sein?
 * Gibt es im Studium weitere Inhalte, für die man mal darüber nachdenken sollte, wie sie gelehrt werden können/sollten? Wie z.B. lehrt man Mathematik im Informatikstudium?