Didaktische Ansätze zum Programmierenlernen
In dieser Sitzung beschäftigen Sie sich mit didaktischen Ansätzen zum Programmierenlernen. Sie lernen verschiedene Herangehensweisen kennen — vom Lernen mit Lösungsbeispielen über den Lese-, Experten- und Spiralansatz bis hin zu Live-Coding — und wenden diese in einer konkreten Unterrichtsplanung an.
Arbeiten Sie in Tandems und tragen Sie Ihre Ergebnisse im gemeinsamen Pad ein:
📝 Kollaboratives Arbeitspad (HedgeDoc) — Tragen Sie Ihre Ergebnisse direkt im gemeinsamen Pad ein:
🔗 pad.franke-lab.de/iGui-FpsQ4q6gvww3ugwhw
① Lernen mit Lösungsbeispielen
Beim Lernen mit Lösungsbeispielen erhalten Lernende ausgearbeitete Lösungen zu ausgewählten Aufgaben. Anhand von Erklärungen werden die zugrundeliegenden Konzepte und Prinzipien verdeutlicht. Ziel ist es, dass sich die Lernenden diese Prinzipien bewusst machen, um sie später auf ähnliche Aufgaben übertragen zu können.
Im Bereich der Programmierung stellt das Arbeiten mit Lösungsbeispielen eine wichtige Methode dar, um Lernenden bewährte Lösungsstrategien zu vermitteln. Gemäß dem didaktischen Modell der kognitiven Meisterlehre entspricht dies dem Schritt des Modellierens: der Lehrende führt den Lösungsprozess durch und erklärt die Vorgehensweise. Der Lernende beobachtet und führt anschließend mit Unterstützung eigene Arbeiten aus, wobei die Unterstützung schrittweise reduziert wird.
② Drei Herangehensweisen nach Van Merriënboer
Laut Van Merriënboer lassen sich drei Herangehensweisen zum Programmierenlernen unterscheiden:
- Der Leseansatz: Lernende führen zunächst bestehende Programme aus, lesen den Code, beobachten und debuggen — und führen dann eigene Änderungen und Erweiterungen durch. Eigene Programme werden erst im zweiten Schritt erstellt.
- Der Expertenansatz: Lernende arbeiten direkt an einem relativ komplexen, aber motivierenden Projekt und erarbeiten sich nach und nach das dafür notwendige Wissen.
- Der Spiralansatz: Lernende werden Schritt für Schritt in die syntaktischen und semantischen Elemente einer Programmiersprache herangeführt und schreiben jeweils entsprechende kleine Übungsprogramme.
Eine Umsetzung des Leseansatzes sind sogenannte Vervollständigungsaufgaben: die Lernenden erhalten teilweise ausgearbeitete Lösungsbeispiele, die sie zu vollständigen, korrekt arbeitenden Programmen erweitern müssen. Solche Aufgaben stellen einen vielversprechenden Ansatz zum selbstständigen Programmierenlernen dar.
③ Programmieren als Prozess
Programmieren lernen ist anspruchsvoll. Folgende Kompetenzbereiche müssen abgedeckt werden:
- Ein generelles Verständnis dafür, was Programme sind und was man mit ihnen machen kann
- Eine Vorstellung vom Computer als Maschine, die Programme ausführen kann (notional machine)
- Kenntnisse der Notation einer Programmiersprache: Syntax und Semantik
- Repertoire an grundlegenden Lösungsansätzen (Strukturen, algorithmische Patterns)
- Praktische Fertigkeiten zum Planen, Implementieren, Testen und Debuggen
(Du Boulay, 1989; Robins, Rountree & Rountree, 2003)
Kernaussage: Programmieren ist ein komplexer, explorativer und inkrementeller Prozess. Folgende Modelle müssen verstanden werden (vgl. SwissEduc):
- Die Problemdomäne muss verstanden werden, bevor ein Programm geschrieben werden kann.
- Es braucht ein Verständnis des Computermodells (notional machine), das durch die Programmiersprache impliziert wird.
- Der Zusammenhang zwischen statischer Beschreibung (Quellcode) und dynamischer Ausführung (Laufzeitverhalten) muss verstanden werden.
- Laufzeitverhalten beinhaltet Kontrollfluss, Datenfluss und Datenstrukturen — insbesondere der Datenfluss ist für Anfänger schwierig.
④ Live-Coding als didaktischer Ansatz
Live-Coding ist ein Ansatz, um den Programmierprozess für Lernende sichtbar und erfahrbar zu machen. Der Lehrende entwickelt in der Präsenzsitzung „live“ Code und denkt dabei laut, sodass die Lernenden den Denk- und Arbeitsprozess nachvollziehen können.
Als Variante können die Studierenden während der Session selbst mitcodieren (Participatory Live Coding). In Selbstlernumgebungen werden häufig auch Screen-Recordings eingesetzt.
Vorteile von Live-Coding:
- Der Programmierprozess ist für Anfänger sichtbar und nachvollziehbar
- Debugging wird als Teil des Prozesses verstanden und erlebt
- Gute Programmierpraktiken werden demonstriert
- Inkrementelle Entwicklung wird verdeutlicht: wenige Zeilen schreiben, testen, korrigieren, refaktorieren
Wichtig: Statische, vorgefertigte Programmbeispiele können den Eindruck erwecken, dass zuerst der gesamte Code geschrieben und erst am Ende kompiliert wird. Live-Coding zeigt den realen Prozess: schrittweise Entwicklung mit kontinuierlichem Testen.
⑤ Aufgabe: Entwickeln Sie ein Spiel — didaktisch durchdacht (ca. 60 Min.)
Zielgruppe: Klassenstufe 11 (Gymnasium, Wahlfach Informatik)
Lernumgebung: Computerraum mit Einzelarbeitsplätzen (1 Gerät pro Schüler*in)
Lernvoraussetzungen: Heterogene Gruppe mit unterschiedlicher Programmiererfahrung
Sie haben verschiedene didaktische Ansätze zum Programmierenlernen kennengelernt. Jetzt wenden Sie diese praktisch an: Sie erstellen mit KI-Unterstützung ein konkretes Spiel, das als Grundlage für Ihren Unterrichtsentwurf dient.
Bearbeitungsschritte:
-
Anforderungen definieren (10 Min.):
Versetzen Sie sich in die Rolle der Lehrkraft. Formulieren Sie eine Aufgabenstellung, die Sie Ihren Schülerinnen und Schülern geben würden:
- Spieltitel und Ziel des Spiels (z. B. Labyrinth, Klickspiel, 2D-Reaktionsspiel)
- Welche Spielmechanik oder Steuerung enthalten sein soll
- Welche Programmierelemente die Schüler*innen dabei lernen (z. B. Schleifen, Bedingungen, Events, Kollisionen)
-
Spiel mit KI erstellen (20 Min.):
Installieren Sie pygame und lassen Sie sich von einem KI-System Ihrer Wahl (z. B. ChatGPT, Claude, Copilot) ein funktionierendes Spiel generieren, das Ihren Anforderungen entspricht:
pip install pygame
- Geben Sie der KI Ihre Aufgabenstellung als Prompt
- Testen Sie das generierte Spiel — funktioniert es auf Anhieb?
- Iterieren Sie bei Bedarf: Passen Sie den Prompt an oder lassen Sie Fehler korrigieren
- Speichern Sie den fertigen Code als
.py-Datei
-
Code analysieren (10 Min.):
Lesen Sie den generierten Code durch — auch wenn Sie nicht alles verstehen:
- Welche Programmierkonzepte erkennen Sie (Variablen, Schleifen, Funktionen, Klassen)?
- Ist der Code für Schüler*innen verständlich? Was würde überfordern?
- Wie könnte man den Code vereinfachen oder in Teilschritte zerlegen?
-
Didaktischen Ansatz wählen und begründen (15 Min.):
Entscheiden Sie sich auf Basis Ihres konkreten Spiels für einen oder mehrere der vorgestellten Ansätze:
- Leseansatz
- Expertenansatz
- Spiralansatz
- Lernen mit Lösungsbeispielen
- Live-Coding / Participatory Live Coding
Beantworten Sie anhand Ihres Spiels:
- Warum ist dieser Ansatz für Ihr Spiel und diese Lerngruppe geeignet?
- Wie genau würden Sie vorgehen? (z. B. fertigen Code als Lösungsbeispiel geben, Teile weglassen als Vervollständigungsaufgabe, schrittweise live entwickeln)
- Welche Teile des Codes eignen sich als Einstieg, welche erst später?
-
Reflexion (5 Min.):
- Welche Schwierigkeiten könnten Schüler*innen bei der Umsetzung haben?
- Welche Unterstützungsformate (Kommentierung, Hilfestellungen, Partnerarbeit) sind sinnvoll?
- Wie hat die KI-Unterstützung Ihren eigenen Arbeitsprozess beeinflusst — und was bedeutet das für den Unterricht?
Hinweis: Denken Sie daran, dass in Ihrer Lerngruppe unterschiedliche Vorerfahrungen vorliegen. Gestalten Sie Ihre Planung so, dass sowohl Anfänger*innen als auch Fortgeschrittene sinnvoll arbeiten können.
⑥ Abschlussdiskussion
Diskutieren Sie im Plenum:
- Welchen didaktischen Ansatz haben Sie gewählt — und warum?
- Zeigen Sie Ihr Spiel kurz: Was funktioniert, was würden Sie für den Unterricht anpassen?
- Welche Rolle spielt KI-generierter Code als Ausgangsmaterial für den Unterricht — Chance oder Risiko?
- Wie ließe sich Live-Coding konkret in Ihr Szenario integrieren?
Halten Sie Ihr persönliches Fazit (3–5 Sätze) im Pad fest.
Literatur:
- Du Boulay, B. (1989). Some difficulties of learning to program. In E. Soloway & J.C. Spohrer (Eds.): Studying the Novice Programmer, pp. 283–299. Hillsdale, NJ: Lawrence Erlbaum.
- Robins, A., Rountree, J. & Rountree, N. (2003). Learning and Teaching Programming: A Review and Discussion. Computer Science Education, 13(2), 137–172.
- Raj, A.G.S., Patel, J.M., Halverson, R. & Halverson, E.R. (2018). Role of Live-coding in Learning Introductory Programming. In Proceedings of 18th Koli Calling International Conference on Computing Education Research.
- SwissEduc: Programming — Grundlegende Programmierkonzepte. swisseduc.ch