Die unten aufgelisteten Elemente des Konzepts habe ich selbst zusammengestellt. Sie folgen keinem Lehrbuch oder sonst wie veröffentlichtem Schema. Gerne nehme ich kritisch-konstruktive Rückmeldungen dazu entgegen!
SuS = Schülerinnen und Schüler
Ziele
Die Python-AG soll
- SuS mit den Grundbegriffen der prozeduralen Programmierung vertraut machen.
- die wichtigen Basiskonzepte der Programmiersprache Python vermitteln.
- den Umgang mit den wichtigsten Werkzeugen erläutern und einüben.
- den SuS einen Werkzeugkasten an die Hand geben, den sie zuhause auch für andere Projekte aus Schule und Ausbildung bzw. Studium verwenden können.
- den SuS einen kleinen Einblick davon vermitteln, was es heißt, eine „Software“ zu entwickeln, die vorgegebenen Anforderungen genügt.
Ressourcen
Die kritischen, weil oft knappen Ressourcen der AG sind nach meiner Meinung
- Die Aufmerksamkeit der Schüler. Darum sollte sie auf das Wesentliche gelenkt werden: Die Programmieraufgabe und die Schritte zur Lösung. Man braucht ein problemlos laufendes Computersystem, damit keine unnötigen Komplikationen die SuS ablenken. Alle Werkzeuge (hier: Python und Thonny) sollten möglichst intuitiv bedienbar sein und wenig Lernaufwand erfordern.
- Die Motivation der Schüler. Darum sollten die Projekte ein für die SuS möglichst attraktives Ergebnis zum Ziel haben, das sie zuhause vorzeigen können und woran sie sich gerne erinnern. Weiterhin sollten die SuS im Verlauf der AG-Stunden mindestens alle 5 Minuten ein Erfolgserlebnis haben, wo etwas funktioniert, das sie selbst programmiert haben – auch wenn sie nur den vorgegebenen Programmtext abgeschrieben haben. Auch dabei kann man nämlich viele Fehler machen, die zu unerwartetem Verhalten des Computers führen. Im besten Falle sind sie ein wenig vom Vorbild abgewichen, z.B. indem sie z.B. eine andere Anzahl, Grenze oder Farbe gewählt haben, was ihr sichtbares Ergebnis von den anderen abhebt. Dazu sollte der Lehrer immer wieder ermutigen. Lange Passagen der Erläuterung durch den Lehrer sind auf ein Minimum zu begrenzen und müssen durch eine für die SuS erkennbare Herausforderung gerechtfertigt sein.
Die SuS stimmen mit den Füßen ab. Mangelt es an Motivation, bleiben sie weg und es wird schwierig, danach herauszufinden, was man hätte besser machen sollen. Von daher empfiehlt es sich, die Reaktionen und Mitarbeit der SuS genau zu beobachten und gegebenenfalls das Gespräch zu suchen! - Die verfügbare Zeit. Programmierung, oder besser: Software-Entwicklung ist gemeinhin eine zeitlich aufwändige Angelegenheit. Darum sollten die Projekte bzw. die vom Lehrer vorgeschlagenen Lösungswege möglichst geradlinig und ohne Stolpersteine verlaufen. Fragen nach minimalem Schreibaufwand oder optimaler Laufzeit bzw. reduziertem Speicherverbrauch können meist vernachlässigt werden. Sobald eine solide Kernfunktion erreicht ist, sollte man auf ein neues Projekt wechseln. Erweiterungen und Verschönerungen des Erreichten überlässt man den SuS für ihre Freizeit.
Der Einstieg in das Projekt sollte ohne große Vorrede beginnen.
Einstiegsschwelle
Wichtiges Kennzeichen des Kurses soll die geringe Einstiegshürde sein, um gesteckte Ziele zu erreichen. Soll heißen, es erfordert fast keine Vorarbeit, um erste Ergebnisse zu sehen. So tippen wir ganz zu Beginn auf der Kommandozeile (REPL): „1 + 1“ und drücken die Return-Taste, worauf die „2“ erscheint. Die Programmiersprache Python ist auf einfache Lesbarkeit des Programmcodes hin optimiert: Leichte Aufgaben lassen sich gut lesbar programmieren, auch für den Anfänger. Trotzdem unterstützt Python auch sehr elaborierte Programmkonstrukte, die man erst nach intensiver Auseinandersetzung mit der Sprache verstehen kann.
Live Coding
Wesentliches Merkmal des Unterrichtsverlaufs ist, dass der Lehrer „am Pult“ das Programm Schritt für Schritt eingibt und laufen lässt (live coding). Die SuS sind angehalten, diesen Code exakt gleich oder leicht modifiziert auf ihrem PC einzutippen und auszuführen. Dabei kommt es natürlich immer wieder zu Problemen, derer sich der Lehrer annimmt, um sie zu lösen und ggf. auch vor allen zu thematisieren. Im Verlauf der Stunde soll niemenad abgehängt werden. Optimalerweise helfen sich die SuS auch gegenseitig bei kleineren Schwierigkeiten. Man kann dieses Vorgehen als Verlängerung des klassischen Tafelanschriebs verstehen, den die SuS in ihr Heft übernehmen, außer dass sich dieser nun – für Schüler und Lehrer separat – als „lauffähig“, also problemlos und korrekt ausführbar erweisen muss.
Warum Python und Thonny?
Eine übersichtliche, integrierte Programmierumgebung (IDE) wie Thonny erleichtert den Umgang mit Python enorm. Dieses Zweiergespann (Python + Thonny) stellt für mich das Beste dar, was ich bislang gesehen habe. Dabei sind diese Werkzeuge frei verfügbar, werden gepflegt und laufen auf Windows, Mac OS und Linux. Mein Ziel ist, dass sich die SuS diese beiden auch auf ihrem eigenen / heimischen PC installieren und für ihren weiteren schulischen und beruflichen Alltag nutzen können.
Projektorientierung
Wir arbeiten immer an einem Projekt. Damit ist eine Aufgabe, ein Ziel gesetzt, an dessen Erreichen man sich orientiert und damit motiviert vorangeht. Der Weg zum Ziel kann bislang unbekannte Python Sprach-Elemente oder andere Konzepte erfordern, für deren Erlernen dann ein konkreter Anlass vorliegt. Dies soll die Bereitschaft fördern, sich mit diesen Konzepten auseinander zu setzen.
Natürlich fangen wir mit ganz kleinen, gut überschaubaren Projekten an und steigern uns über den Verlauf des Kurses. So kommt es, dass auch einmal drei Nachmittage für ein Projekt investiert werden müssen.
Ich habe eine Vielzahl von Projekten vorbereitet. Sie sind hier und hier beschrieben.
Wiederholung
Die häufige Wiederholung der Routine-Aufgaben beim Programmieren, z.B. das Editieren des Quellcodes, soll diese soweit einprägen, dass die SuS später eigene Projekte erfolgreich betreiben können, ohne dass sie vom zu lösenden Problem abgelenkt werden.
Zum selbständigen Üben sind eine Fülle mehr oder weniger schwieriger Aufgaben bzw. Projekte hier verzeichnet.
Selbständigkeit
Nach einigen AG-Stunden sollten die SuS über genügend Grundwissen verfügen, dass sie auch Python-Einsteiger-Bücher oder entsprechende Videos (hier verlinkt) eigenständig und mit Gewinn aufnehmen können. So soll ihnen der Weg zum erfolgreichen Verlauf eigener Projekte geebnet werden.
Im weiteren Verlauf, oder wenn die SuS schon einiges an Vorwissen mitbringen, können sie speziell vorbereitete Projekte selbständig bearbeiten. Dazu halte ich auf der Projekt- sowie Übungsseite sogenannte StarterSets bereit. Darin finden sich nützliche Informationen für den Anfang sowie ein lauffähiges Programm, das wichtige Aufrufe in externe Module wie tkinter implementiert, sodass die SuS sich auf die Programmlogik und die äußere Erscheinung konzentrieren können. Man suche also auf den besagten Seiten nach dem Stichwort StarterSet.
Vorgehensmodell
Neben dem Erlernen der Sprache Python soll die AG auch vermitteln, wie man grundsätzlich an ein Programmierproblem herangeht, nämlich Schritt für Schritt: Man versucht zu Beginn, einen wichtigen Aspekt des Problems – vielleicht auch schon das Kernproblem – zu erfassen und zu einer – vielleicht noch unvollständigen – Lösung zu führen. Diese programmiert man dann und testet bzw. modifiziert sie, bis ein befriedigender Zustand erreicht ist: Projekt_1.py wird als Programmdatei gespeichert. Davon zieht man eine Kopie Projekt_2.py, welche die Grundlage für eine erweiterte Programmversion darstellt. Dort erweitert und/oder verfeinert man das bis dato schon lauffähige Programm. So verfährt man weiter bis zum gesteckten Ziel. Wichtig: Damit ist der Entwicklungsfortschritt in jeweils lauffähigen Programmen dokumentiert, den man sich nachträglich vergegenwärtigen kann. Hat man sich „verlaufen“, weil nichts mehr so geht wie vorher oder sich ein Fehler eingeschlichen hat, kann man leicht zum vorherigen Zustand zurück kehren. (Achtung: Die Tasten-Kombinationen Strg-Z und Strg-Y des Thonny-Editors machen dies aber oft unnötig. Hilfsprogramme wie WinMerge vergleichen Dateien wie Projekt_n.py und Projekt_n+1.py und zeigen übersichtlich die Unterschiede).
Verständlichkeit
Wo immer möglich, sollten die Programmlogik und die Abläufe im Detail erklärt werden und für die SuS so leicht nachvollziehbar sein. Nichts sollte sich hinter ominösen Spezialaufrufen verbergen. Hier kann der Debugger mit den Thonny-Panels „Variablen“ und „Objektinspektor“ großen Beitrag leisten: Er liefert maximale Transparenz zu jedem Zeitpunkt des Programmablaufs wie auch nach dessen Ende.
Eine Ausnahme stellt die grafische Programmierung dar. Bei Turtle, tkinter und PyGame passiert einiges hinter den Kulissen, doch für diesen Kurs ist nur wichtig zu wissen, was dort getan wird und nicht wie es realisisert wird.
Fehlerkultur
Ein wichtiger Aspekt des Programmierens ist der Umgang mit Fehlern. Diese sollten nicht schrecken, sondern bei den SuS die gelernte Analyse bzw. Problembehandlung auslösen. Je nach Umstand lernen die SuS,
- auf der Konsole ausgegebene Python-Fehlermeldungen richtig zu deuten.
- mögliche Fehlerumstände im Programmablauf mit den Python-Blöcken try und except abzufangen und konstruktiv zu bearbeiten.
- mit dem Debugger das Programm Schritt für Schritt auszuführen und dabei sowohl den Zustand der Variablen im dafür im gleichnamigen Thonny-Fenster zu beobachten als auch den Kontrollfluss des Programms zu beobachten: Macht das Programm eigentlich das, was es soll bzw. was habe ich falsch programmiert? Wichtig: Nach Ende des Programmablaufs ist die Python-Sitzung nicht abgeschlossen und kann analysiert werden – auch mit dem Objekt-Inspektor!
- wann es Sinn macht, auf eine Vorgängerversion des eigenen Programms zurückzugehen, um dort dasselbe Fehlerszenario nachzuspielen.
Schönheit ist kein Selbstzweck
Wesentliches Qualitätsmerkmal jeder Software, genauer: jedes Quelltextes, ist die Lesbarkeit. Damit ist gemeint, dass sich ein geschulter menschlicher Leser möglichst schnell ein korrektes Bild der implementierten Lösung und ihrer besonderen Merkmale machen kann. Das erfordert insbesondere die Einhaltung von Formatierungs- und Namenskonventionen. Diese sollte der Lehrer ständig im Blick haben und den SuS ausdrücklich anschaulich vermitteln.
MINT Wissensvermittlung
Durch die Bearbeitung der Projekte sollen die Schüler sich auch den Sachgegenstand erarbeiten. Dies gilt u.a. für die Projekte Benzin, Bahnhofsuhr, Neues von der Platte, Datenanalyse, Proteinsynthese, Wo ist die ISS?, Mandelbrot-Menge, Mondlandung, Moonshot, Korrelator, Bügeleisen, Corona-SIR, Boids, Navigation, Lissajous etc.
Dialogische Unterrichtsführung
Auch wenn vielleicht selbstverständlich, will ich trotzdem den Dialog zwischen Lehrer und Schülern propagieren, besonders wenn es um die eigentliche Programmentwicklung geht: Wie könnten wir diese Anforderung angehen? Beschreibe deine Vorstellung des Ablaufs und der Logik mit Worten, ohne an Python zu denken! Was müssen wir speichern? Worauf müssen wir prüfen? Wie machen wir das? Was soll dann passieren? Bitte diktiere mir, was ich am Lehrer-PC eintippen soll!
Natürlich wird der Lehrer am Anfang viel vorgeben müssen, aber mit wachsender Erfahrung hilft es sowohl den Schülern als auch dem Lehrer, wenn erstere ihre Ideen und Mutmaßungen äußern. Nicht zuletzt kann so der Lehrer den Lernfortschritt der Gruppe erspüren und gegebenenfalls Verständnisprobleme adressieren.
Voraussetzungen
Ich setze voraus, dass die SuS den Umgang mit einen PC grundsätzlich beherrschen. Erwünscht ist auch, dass die SuS die Python-Thonny-Kombination daheim auf ihrem eigenen PC installieren und damit zwischen den Kursterminen spielen und experimentieren, aufbauend auf den im Kurs erarbeiteten Skripts.
Was andere sagen…
Seymour Papert meint:
- The role of the teacher is to create the conditions for invention rather than provide ready-made knowledge.
- The goal is to teach in such a way as to produce the most learning from the least teaching.
- I am convinced that the best learning takes place when the learner takes charge.
Dem kann ich mich nur anschließen!