Spielend programmieren lernen

Programmierkurse für Kinder, Jugendliche und Erwachsene

User Tools

Site Tools


de:blog:2015:0801_kursleben

Title: Erfreuliches aus dem Kursleben: Sommerkurse und Pyrogue Date: 2015-08-01 21:0 Modified: 2015-08-04 07:04 Googleadsense: True Tags: kursleben, learning, teaching, code, education, python Slug: 20150801_kursleben Authors: Horst JENS Summary: Zwischenbericht über die Sommerkurse im Juli 2015 und über den ersten spielend-programmieren Sommerkurs mit Nachmittagsbetreuung. Erfahrungen mit rogue-like Spielen als Lernmaterial.

Kurzlink: http://goo.gl/rVsAO7 Hashtag: #pyrogue

spielend programmieren

Der Sommer 2015 ist halb vorbei und es gibt Erfreuliches aus dem spielend-programmieren Kursleben zu berichten:

  • erstmals fand ein Sommerkurs mit Nachmittagsbetreuung statt
  • in allen bisherigen Sommerkursen 2015 wurde ein rogue-like Spiel in Python (und Pygame) programmiert. Die deutschsprachige Version des Spiels wurde auf Github.com publiziert, an einer internationalen, englischsprachigen Version wird gearbeitet.

Nachmittagsbetreung


Bildrechte: Amazon.com

Normalerweise finden spielend-programmieren Sommer-Programmierkurse nur Vormittags von 9:00 bis 12:00 Uhr statt, ein Kurs dauert von Montag bis Freitag. Heuer hatte ich erstmals auf Wunsch eines Kunden eine Nachmittagsbetreung organisiert, wobei ausgemacht wurde dass die Kinder sich in der Mittagspause selbstständig mit Essen versorgen und Nachmittags kein direkter Programmierunterricht stattfindet. Vormittags wurden insgesamt sechs Kinder unterrichtet, vier davon blieben in der Nachmittagsbetreuung.

Entgegen meinen Befürchtungen (Aufsicht, Unfallrisiko, Versicherung, Koordination mit “nur”-Vormittagskursteilehmern etc.) verlief die Nachmittagsbetreuung für alle Beteiligten sehr entspannt: Wetterbedingt gab es mehrmals nachmittags einen Ausflug in den nahe gelegenen Augarten um lokale Spielplätze zu erforschen und auf einer Slackline zu balancieren. Die restliche Zeit wurde auf Wunsch der Kursteilnehmer auch am Nachmittag programmiert, wobei ich für Fragen zur Verfügung stand aber keinen neuen Unterrichtsstoff vortrug. Außerdem beschäftigtten sich die Kursteilnehmer am Nachmittag mit Brettspielen (Risiko, Risiko Evolution) sowie dem Pen and Paper Rollenspielen Dungeon Slayers, dessen komplexes Regelwerk die Kursteilnehmer durch ein eigenes ersetzten.


Kinder spielen Dungeon Slayers

Sommerkurs Veteran Keanu debütiert als Dungeon Master

Nachmittags unterrichten? Voller Bauch studiert nicht gern


Bildrechte: Amazon.com

Gegenüber dem Konzept Ganztags-Programmier-unterricht bin ich aus mehreren Gründen skeptisch. Ich sehr intensiv (3 Stunden non-stop) und bin daher nachmittags, genau wie meine Schüler, eher müde. Vor allem lehrt mich die Erfahrung aus über 20 Jahren Erwachsenenbildung dass Ganztags-Seminare am Nachmittag (nach dem Essen) vom pädagogischen Standpunkt her herzlich sinnlos sind, unabhängig von Pausen- und Unterrichtsstoff-Einteilung. Meine Erfahrung bezieht sich auf Programmierkurse und EDV-Seminare mit Erwachsenen. Erfahrungsgemäß kann ich nach einem intensiven Vormittag voll neuer Themen am Nachmittag “wiederholen”, “intensivieren” und “üben” aber kaum neuen Unterrichtsstoff vorbringen - er wird nicht gelernt. Das Mittagsessen ist sozusagen der Feind der intellektuellen Aufnahmefähigkeit.

Mit meiner bislang ersten Sommerkursgruppe mit Nachmittagsbetreuung hatte ich hingegen Glück: Ohne Zutun oder auch nur einen Hinweis meinerseits verkürzten die Kinder ihre (selbständige) Mittagspause und reduzierten im Laufe der Woche mittags die Nahrungsaufnahme (Brot von der Bäckerei anstatt Mittagsmenü bei der Pizzeria). Laut eigenen Angaben war ihnen ein ein großes Mittagessen zu viel und sie investierten ihren Hunger lieber in Frühstück und Abendessen.

Ebenfalls ohne mein Zutun nutzten die Kinder alle Nachmittage selbstständig zum üben, weiterprogrammieren und Debuggen (Fehler beheben) ihrer am Vormittag erstellten Programme. Meie Rolle beschränkte sich im Augarten auf die eines Slackline-Operators während ich im spielend-programmieren Büro als jederzeit abrufbarer menschlicher Hilfstext und Debugger fungierte.


Slackline

Nachmittagsbetreung: Slacklining im Augarten

Fazit

Insgesamt war die Nachmittagsbetreung ein unerwarteter Erfolg, ich werde ihn in Zukunft öfter anbieten, zumindest auf Anfrage.

Pyrogue - Programmieren unterrichten mit Rogue-like Games

Meine Leidenschaft für (selbstversändlich frei lizensierte) rogue-like Spiele im Allgemeinen und Dungeon Crawl Stone Soup im Besonderen fließt natürlich in die spielend-programmieren Programmierkurse für Kinder ein. Leider gehören Rogue-likes - speziell im Textmodus- nicht zu den zugänglichsten oder anschaulichsten Computerspielen. Ganz im Gegenteil, es ist etwas Einarbeitung erforderlich, um überhaupt das Spielgeschehen optisch zu erkennen. Im Lauf der Juliwochen verbesserte ich mein Code Bei-Spiel eines kleinen Python rogue-likes immer mehr, die derzeitige Version (Textmodus) ist genau 300 Programmzeilen lang. Außerdem gibt es eine grafisch aufwendigere, in python und pygame programmierte Version.

Nach vier Wochen Feldforschung mit unterschiedlichen Schülergruppen (Burschen und Mädchen) kann ich erfreut berichten dass alle Kursteilnehmer nach kurzer Einführungszeit das Spielkonzept eines Rogue-Likes Spieles (im Textmodus) verstanden hatten. Die etablierten Rogue-likes (ob im textmodus oder in grafisch ansprechenderen Varianten) sind für Kinder nicht allzu attraktiv (zu viel Text zum lesen, zu viele Tastenkürzel zum Auswendig-lernen). Attraktiv werden rogue-likes sobald es sich um das “eigene” Spiel handelt:

Der “Aha”-Moment stellte sich meiner Beobachtung nach ein sobald die Kursteilnehmer mit ihren eigenem Programmcode eine Spielfigur (den Klammeraffen [@]) in einem selbst erstellten (Text) Dungeon bewegen konnten. Ab diesem anscheinend magischem Zeitpunkt wurden eifrigst Dungeons designt, immer komplexere Spielmechanismen verlangt, implementiert und debuggt und vor allem die eigenen Spiele (im Textmodus) mit atemberaubender Geschwindigkeit gespielt. Da für den Textmodus reines Python (input) verwendet wurde musste nach jedem Bewegungskommando zusätzlich die Enter-Taste gedrückt werden. Trotz dieses physikalischem Mehraufwandes gegenüber der grafischen Version schafften es die Kinder derart schnell zu spielen / zu tippen dass ich nur noch ein Textflimmern wahrnahm und keine einzelnen Bildschirme mehr erkennen konnte. Die Kursteilnehmer versicherten mir dass sie trotz dieser hohen Tippgeschwindigkeit dem Spielverlauf folgen konnten. Ich nehme an der Trick besteht darin, die mühsamst programmierten Statusmeldungen (print Befehle) komplett zu ignorieren.


Pyrogue Textmodus

Pyrogue im Textmodus. Die Spielfigur ist der Klammeraffe @

abtippen und debuggen

Meine Kursteilnehmer sind meistens zwischen 11 und 15 Jahren alt und bringen unterschiedliche PC-Kenntnisse von zu Hause mit. Fast alle können einen Computer bedienen, die meisten können auch einigermaßen tippen und dank dem österreichischen Schulsystem können fast alle, zumindest nach gutem Zureden, auch lesen. Was sie nicht wirklich können ist längere Texte am Computer schreiben (bzw. von Vorlage abtippen). Ich rede dabei gar nicht von mangelnder Motivation oder Geschwindigkeit bei den Kursteilnehmern (Erstere ist vorhanden, Letztere entsteht durch Üben). Ich rede von den vielen Kleinigkeiten die man als geübter PC-Anwender weiß, die aber Anfängern erst dann zu vermitteln sind wenn sie merken dass diese Kenntnisse einen realen Nutzen haben; vor allem primitivste Textverarbeitungs- und Dateimanagement-Kenntnisse. Beispiele:

  • Textverarbeitung
    • es gibt bei Text-Editoren zwei Schreibmodi, den Einfügemodus (Standard) und den Überschreib-Modus (wechseln mit [Einfügen]/[Ins] Taste)
    • es gibt zwei Löschtasten, die Rücklösch (Backspace) und Entfernen (Del)
    • man muss die ALTGR Taste gedrückt halten um eckige bzw. geschweifte Klammern zu schreiben
    • man kann durch drücken der Entfernen-Taste Zeilen nach oben verschieben
    • man kann in Programmier-Editoren wie Geany mit der TAB-Taste und SHIFT-TAB die Einrückung eines Absatzes verändern
    • man kann mit SHIFT und Cursortasten 10 x so schnell und viel genauer Text markieren als mit der Maus
    • es gibt mehrere Möglichkeiten Text zu verschieben. Markieren mit Maus und Kontexmenü-Aufruf mit rechter Maustaste ist die langsamste Möglichkeit
    • Die Pos1 / End Tasten haben eine Bedeutung
  • Datei-Management
    • es spielt eine große Rolle wohin man eine Datei speichert
    • besonders dann wenn man mehrere gleichnamige Ordner hat mit gleich lautenden Dateinamen
    • Ein Ordner “Desktop” am Desktop ist eine besonders dumme Idee
    • Texte (Source-Code) ist nicht “Im Editor” gespeichert sondern in einem Ordner auf der Festplatte
    • Wer eine Datei in einem Zip-Archiv doppelklickt anstatt sie zu entpacken kann sie zwar öffnen, weiß aber nicht wo sie sich befindet
    • Leerzeichen in einem Dateinamen sind keine gute Idee

Dazu kommen Schwierigkeiten beim Debuggen welche sich aus der Programmiersprache Python selbst ergeben. Häufige Beispiele:

  • Es ist ein großer Unterschied ob man in einem Programmcode ein kleiner-Zeichen [<] oder ein größer Zeichen [>] tippt
  • Es ist ein großer Unterschied ob eine Variable “monster” oder “monsters” heißt
  • Vergessene schließende Klammern erzeugen gemeinerweise eine Fehlermeldung in der nächsten (korrekten) Code-Zeile
  • Einrückungen sind bei Python sehr wichtig, am Papier, speziell bei Seitenumbrüchen, teils schwer zu erkennen

Lust und Frust

Nach einigen Versuchen mit Iterationen (abtippen → spielen) eines immer komplexer werdenden Programms in der ersten Woche änderte ich für die nachfolgenden Kurse meine Taktik: Aufgabe war von Beginn an, ein 300-Zeilen Programm (auf Papier ausgedruckt) möglichst fehlerfrei abzutippen, während ich in Pausen dazwischen die im Spiel enthaltenen Befehle in der Python-Shell erklärte.

Die Kursteilnehmer wurden von mir dazu angehalten schon beim Abtippen nach jeder Fuktion und nach jeder Klasse den Programmcode zu starten und die auftretenden (Syntax)-Fehler zu debuggen. Die Tippgeschwindigkeit lag bei allen Kursteilnehmern bei 100-300 Zeilen Programmcode (fehlerfrei) pro Vormittag. Frustrierend war für manche Kursteilnehmer die Tatsache dass ein Programmcode der frei von Syntax-Fehlern ist noch nicht bedeutet ein lauffähiges Spiel zu haben. Vor allem Logik-Fehler (z.B. bedingt durch falsche Einrückung oder duch Verwechseln von Größer- und Kleinerzeichen) waren schwer aufzuspüren.

Level Design und Cheat Codes

Viel Spaß hatten alle Kursteilnehmer mit dem Design und dem Testen möglichst komplexer Levels für das Spiel - praktischerweise ebenfalls mit dem Code-Editor Geany. Das oft langwierige Austesten kompletter Levels (wobei sich die Spielfigur durch Horden von Gegnern und Fallen kämpfen muss) führte dann zu den ersten selbst implementierten Änderungen im Spiel - eigenen Cheat-Codes. Beliebt waren Cheat-Codes welche der Spielfigur Lebenspunkte oder spezielle Waffen hinzufügten.

Grafische Version

Bedingt durch die kurze Kursdauer (15 Stunden) beschränkte ich mich darauf, die in pygame programmierte hübschere Version des Spiels nicht vollständig zu erklären. Stattdessen sollten die KursteilnehmerInnen Features von der Textversion (selbst erstellte Level, Cheatcodes etc.) übernehmen und außerdem eigene Sounds und Grafiken einbauen. Zu Hilfe kam uns dabei die offene Lizensierung der Spiele Dungeon-Crawl und Battle of Wesnoth: Nicht nur deren Programmcode, sondern auch deren Grafiken und Sounds sind frei lizensiert. Dies führte zu -für Programmieranfänger- überraschend gut aussehenden eigenen Spielen.


Pyrogue Grafikmodus

Pyrogue, die gleiche Spielszene wie oben, im Grafikmodus (Pygame)

Fazit

Abtippen von Listings und programmieren lernen mittels Rogue-likes Games in Python haben sich in den Sommerkursen 2105 bewährt, ich werde dieses Konzept weiter verfeinern. Besonders gefreut hat mich die Tatsache dass einige Veteranen (die schon frühere Sommerkurse besucht hatten) mit Linux-Distributionen am eigenen Rechner (bzw. Virtual Machines mit Linux) den Kurs besuchten. Sehr nett war auch die große gegenseitige Hilfsbereitschaft und Neugierde aller KursteilnehmerInnen. Vor allem gegenseitige Hilfe beim Debuggen und gegenseitiges “unterrichten” der KursteilnehmerInnen untereinander über die Python-Befehle (um spezielle Cheats zu ermöglichen) haben mir als Kursleiter viel Freude bereitet und das Kurskonzept überhaupt erst ermöglicht.

Wie ein Teilnehmer der Nachmittagsbetreungsgruppe im folgenden Abschlussvideo treffend bemerkt: Die KursteilnehmerInnen merkten dass sie im Laufe des Kurses immer weniger Zeit zum Fehlersuchen benötigten:

/var/www/horst/spielend-programmieren.at/data/pages/de/blog/2015/0801_kursleben.txt · Last modified: 2017/10/12 09:40 (external edit)