KIF385:Wie lernt man das Programmieren im Informatikerstudium: Unterschied zwischen den Versionen

Aus KIF
Zeile 23: Zeile 23:
=Wie kann man Programmieren ''lehren''?=
=Wie kann man Programmieren ''lehren''?=
*Paradigmen und Konzepte wichtiger als konkrete Sprachen
*Paradigmen und Konzepte wichtiger als konkrete Sprachen
*Lehre wird aber über konkrete Programmiersprache macht
*Lehre wird aber über konkrete Programmiersprache gemacht
*Zu wenig und zu seltene Beschäftigung mit Programmieren (nur eine Übung die Woche)
*Zu wenig und zu seltene Beschäftigung mit Programmieren (nur eine Übung die Woche)
**Zu kleine Stückelung
**Zu kleine Stückelung
**Zu wenig als "Handwerkszeug" wahrgenommen, das man allgemein und häufiger mal verwenden kann
**Zu wenig als "Handwerkszeug" wahrgenommen, das man allgemein und häufiger mal verwenden kann
*Praktika können helfen, Programmieren zu vertiefen
*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 homogene von Unerfahrenen nicht durchkommen können
*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!
*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
*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
**man kann sich Sachen abgucken, man kann das Programm nachvollziehen und lernt das automatisch


==Gruppenarbeit bei der Abgabe von Übungen?==
==Gruppenarbeit bei der Abgabe von Übungen?==
*muss teilweise, weil sonst zu viel Arbeit für nur eine Person
*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 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?
*zu viel Glückssache, gerade im ersten Semester: wer arbeitet mit wem zusammen, wenn sich keiner kennt?

Version vom 13. November 2010, 22:33 Uhr

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

Hilfestellungen

  • 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 genug zu tun
  • nicht dieselben Kurse 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