Kurstagebuch


Anbei ein Gedächtnisprotokoll über den letzten Intensiv-Programmier-Kurs im August 2012.

Der Kurs war insofern untypisch als er nicht von Montag bis Freitag sondern stattdessen von Freitag bis Donnerstag dauerte, der Stundenumfang (5 x 3 Stunden) blieb gleich wie bei allen anderen Intensiv-Kursen auch. Ebenfalls untypisch war die geringe Teilnehmerzahl von genau einem Teilnehmer … für mich als Kursleiter nicht so erfreulich (normalerweise 3 bis 6 TeilnehmerInnen pro Kurs).

Schon währende der Probestunde vor dem eigentlichen Kursbeginn konnte ich dem Kursteilnehmer (D., 13) eine kleine Einführung in die Spieleprogrammierung mit Scratch geben. Außerdem erfuhr ich dass D. von einem Freund über Ubuntu Linux bescheid wusste, auch wenn er es selbst noch nie installiert hatte.

Da ich mich immer darum bemühe dass die Kursteilnehmer eine komplette Linuxinstallation selbst durchführen können konnte ich schon während der Probestunde abklären dass D. zu Hause einen Computer mit seinem Vater teilt und eine unbeaufsichtigte Linuxinstallation auf diesem Rechner risikoreich ist. (Erklärung: mit jeder Linux-CD kann man das bestehende Betriebssystem löschen. Außerdem geht manchmal das verkleinern einer vorhandenen Partition schief). D.’s Vater konnte erfreulicherweise aus seiner Firma einen gebrauchten Laptop organisieren „zum rumspielen“…mit der expliziten Erlaubnis notfalls die ganze Windows-Partition überschreiben zu dürfen.

Erster Kurstag

Programmieren von einem Scratch-Spiel, erst unter Linux und danach unter Windows. Wenn ich mich richtig erinnere auch Veröffentlichung des Spieles auf der Scratch-Homepage. D. hatte erfeulicherweise schon eine (gmail)Email Adresse und konnte damit umgehen.

Der Schlüsselpunkt beim Scratch-Programmieren ist es zu verstehen wie die verschiedenen Spielobjekte (Sprites, Stage etc.) miteinander per „broadcast“ kommunizieren. Hat man dieses Konzept verstanden ist es relativ leicht Sprites komplett (mit ihrem Code) zu duplizieren, um z.B. einem Drachen zu erlauben, mehrere Feuerbälle gleichzeitig zu spucken.

Angenehm beim Arbeiten mit Scratch: Die Kursteilnehmer (Kinder) lernen gleich die englischen Programmierbefehle („for“ever, while, if-else, or, and, random), können aber notfalls per Mausklick Scratch komplett auf deutsch umschalten. Da jede ernstzunehmende Programmiersprache englische Befehle verwendet rate ich von einem Umschalten auf deutsch immer ab.

Ebenfalls sehr lebenserleichternd bei Scratch: man kommt fast ohne Tippen aus, alle Programmierbefehle werden als grafische Symbole dargestellt und lassen sich wie Puzzlesteine „zusammenkleben“.

Scratch

Am Ende vom ersten Tag experimentieren wir mit der Python Shell – zur Zeit verwende ich Dreampie mit Python3.

D. will vor allem wissen wie man in bestehende Spiele „hineinschaut“ um zu sehen wie sie gemacht sind. Ich lasse ihn eine Runde meines aktuellen pycrawl (ein rogue-like) spielen und zeige ihm dessen Python Source Code („oh, so viele Zeilen“). Um ihm das Konzept von rogue-like games im Allgemeinen und meiner aktuellen rogue-like Besessenheit im Speziellen zu vermitteln zeige ich D. das Spiel dungeon-crawl stone soup als Beispiel eines freien Softwareprojekts. D. erkennt sofort nach einem Blick auf die Tilemap dass er diese für seine eigenen Projekte verwenden kann. Außerdem zeige ich ihm die comic-ähnliche Grafik von Dungeons of Dredmor als Beispiel eines kommerziellen rogue-likes ( dessen Grafik und Quellcode wir leider nicht verwenden können, da proprietär ).

Zweiter Kurstag

D. kommt strahlend mit dem alten Laptop aus der Firma seines Vaters in den Kurs. Nach einer Kurzeinführung in Boot-Sequence und BIOS („du hämmerst auf die die Entf Taste, ich auf die F2 Taste, dann schaltest du den Computer ein“) folgt die erste unangenehme Überraschung: Die Ubuntu 12.04 CD nörgelt beim Booten dass irgendein wichtiger Treiber fehlt und bricht deshalb den Bootprozess ab. Während ich eine Alternate-CD downloade und brenne versucht D. sein Glück mit einer Lubuntu 12.04 CD welche anstandslos bootet. Wir hatten das auf dem Laptop vorhandene Windows XP bereits gebootet und wissen daher dass sich auf dem Rechner eine 30 GB Platte und eine 20 GB Platte (dargestellt mit einem Funk-Symbol) befindet. Das Linux Partitionsmenü verrät uns dass es sich in Wirklichkeit um eine einzige Platte handelt und dass es außerdem noch eine versteckte 2GB Partition gibt (wahrscheinlich die Treiber-CD).

Wir löschen die 20 GB Platte und richten eine ext4 Partition sowie eine kleine Swap-Partition ein und beginnen den Installationsvorgang.

Gestoppte 50 Minuten später (wir haben mittlerweile auf einem meiner Linux-Netbooks weiter gearbeitet) ist Lubuntu einsatzbereit, D. testet die Dual-Boot Funktion (Windows XP funktioniert noch) und installiert unter Lubuntu mit Hilfe von Synaptic die Programmiersprache python und einige Tools.

Es stellt sich heraus dass der gebrauchte Firmenlaptop nicht der Schnellste ist, dafür aber solide gebaut (mit DVD Brenner) und die gesamte Hardware (inkl. W-LAN) funktioniert out-of-the-box, ohne Nachinstallation proprietärer Treiber.

Nachdem D. auf meinem Laptop Ubuntu sieht will er es auch haben (weil der Desktop lila ist?) und ich zeige ihm wie er sich per Synaptic den Ubuntu-Desktop installiert und zwischen Lubuntu und Ubuntu hin- und herschaltet.

Unangenehme Überraschung: die per Rechtsklick auf den Desktop unter Lubuntu installierten „launcher“ für die Programme dreampie, ding, komodo-edit etc. funktoinieren unter Ubuntu nicht. Ich habe keine Lust mich lang mit dem Problem zu befassen und zeige D. wie man extrem einfache Shellscripte (.sh Dateien) erstellt welche problemlos funktionieren – unter Lubuntu genauso wie unter Ubuntu. D. findet selbst heraus wo sich die Symbolgrafiken befinden (/usr/share/pixmaps) noch während ich danach suche.

Dritter Tag

Ich bin körperlich angeschlagen und fürchte schon den Kurs abbrechen zu müssen (was bisher noch nie vorgekommen ist). Mit einem voll funktionsfähigen Ubuntu stürzen wir uns in die Python-Programmierung. Das Konzept von Variablen, Schleifen und Conditionals ( if – then ) kennt D. schon von Scratch, jetzt geht es hauptsächlich darum mit der Tastur umgehen zu können („wo ist die eckige Klammer ?“).

Dreampie als Python – Shell gefällt mir ausgesprochen gut, viel besser als die mit Python mitgelieferte IDLE. Dreampie erlaubt es eine Session als html-Dokument abzuspeichern ( inkl. Syntax Highlighting), was aber für D. nicht intuitiv benutzbar ist – er versucht die abgespeicherte html-Datei per doppelklick zu öffnen wodurch sie „im Internet“ ( im Browser ) geöffnet wird. Dort kann man sie zwar in imposanter Farbenpracht bewundern aber man kann nicht weiterprogrammieren. ( D. schafft es aber die Befehle per copy & paste zu übertragen ). Die korrekte Vorgehensweise ( Erst dreampie öffnen, in der Dreampie dann File – Open klicken ) erkläre ich zwar, doch es wundert mich selbst warum dreampie keinen „save-to-python-file“ Menüpunkt anbietet.

Wir konzentrieren uns auf die Arbeit mit Komodo-Edit (mein aktuelle Python-Lieblingseditor) und es dauert ein wenig bis ich Komodo-Edit mit Shortcuts für Python2 und für Python3 ausgerüstet habe. Dabei zeigt es sich dass Lubuntu Probleme damit hat wenn ein anderes Programm (wie z.B. Komodo-Edit) ein Terminal öffnen will. Es gibt zwar LX-Terminal, doch anscheinend fehlt ein installiertes Standard-Terminal oder eine Umgebungsvariable. Anstatt das Problem zu lösen arbeiten wir unter Ubuntu weiter, welches D. sowieso optisch besser gefällt und auch nicht fühlbar langsamer läuft als Lubuntu.

Ich zeige kurz die Programmierung von mutliple-choice boxen per python und easygui. Geplant war eigentlich, Grafiken von Battle of Wesnoth (open source Spiel) für ein eigenes easygui-Spiel zu verwenden. Ich zeige D. wie er die Battle-of-Wesnoth resourcen findet ( /usr/share/games/wesnoth/1.10/data/core/images/) und wir erstellen symbolische Links vom Bilder-Ordner zu Wesnoth und anderen Spielen deren Grafiken D. für eigene Projekte verwenden kann. Der Kurstag hört auf während wir damit beschäftigt sind, Wesnoth-Grafiken per GIMP zu editieren.

vierter Kurstag

Heute steht Python-Programmierung auf dem Plan, genauer gesagt Programmierung mit Hilfe des turtle Moduls. Logo-(turtle)-Grafik gibt es auch bei Scratch, doch D. sieht diese spezielle Art der Grafikprogrammierung zum ersten Mal im Einsatz mit Python3. Ich erkläre ihm ein paar grundlegende Grafikbefehle ( circle, forward, left .. ) und eine for-schlefe mit Hilfe von range.

Da ich versuche „nachhaltig“ zu unterrichten geht es mir nicht so sehr darum möglichst viele Programmierbefehle und -Beispiele in der verfügbaren Zeit in den Kursteilnehmer „hineinzupauken“. Wichtiger ist es mir den Kursteilnehmer dazu zu befähigen, die vorhandenen Online-Resourcen (Hilfe, Tutorials etc) selbstständig zu nutzen. In diesem Fall die weder kindgerechte, noch anfängerfreundliche und schon gar nicht deutschsprachige Dokumentation auf der Pythonwebseite selbst. Genauer gesagt: Die Webseite python3 libary reference turtle (und wie man sie findet). D. lernt dass man eine große Website mit STRG+F durchsuchen kann. (Später kommt D. von selbst drauf dass man auch große Code-Massen im Editor per STRG+F durchsuchen kann).

turtle star mit python3 turtle grafik

.

Auf der Python3 Seite vom Turtle-Modul ist ein schöner rot-gelber Stern zu sehen welcher D. sofort gefällt. Er kopiert sich den Code direkt von der Webite und ist sehr erfreut über das Ergebnis. Anschließend ändern wir die Farben, machen die Turtle schneller (warum ist die schnellste Geschwindigkeit turtle.speed(0) ? Ich weiß es auch nicht) und ändern die Strichbreite. D. „malt“ mit Hilfe von python und turtle einen Baum und baut sich ohne weitere Hilfe einen „Wald“ bestehend aus 3 Bäumen.

Ich erkläre ihm anschließend wie man eine Funktion schreibt und -mit Hilfe von random.randint()- einen Wald voller unterschiedlich großer Bäume malt.

Windows

D. wurde von seinem Vater beauftragt herauszufinden wie man Viren löscht. Ich ahne dass meine Standardantwort „deinstalliere Windows, installiere Ubuntu“ nicht so gut ankommen wird. Deshalb begebe ich mich auf eine gruselige Zeitreise in meine Vergangenheit unfreier Softwarenutzung. Damals, als ich noch Windows benutzte und wusste was ein Virus ist. Und Bescheid wusste welcher Virenkiller gerade en vogue ist. Leider bin ich nach jahrzehntelanger Linux Nutzung irgendwie „spoilt“ für Windows. Erster Gedanke:

sudo apt-get synaptic

, antivirus ins suchfeld tippen. Aja, gibt ja kein sudo unter windows. Und weder apt-get noch Synaptic. Na, dann ein freies Repository wie F-Ddoid verwenden. Falsch, F-Droid gibt es für Android, und für Windows gibt es keine Repositorys. Aber freie Software gibt es doch ? War da nicht – das heise Software Verzeichnis ? Oder ..tucows ? nein, …chip.de ? Schaut verdächtig werbeverseucht aus. Der Knoppicilin Eintrag den ich finde ist ein paar Jahre veraltet. Schließlich erkläre ich D. wie man auf heise.de eine angesagte antivirus-Software runterlädt und anschließend auf Windows kopiert.
Dabei merken wir dass der Internet Anschluss auf dem Laptop unter Windows nicht funktioniert ( unter Linux läuft er problemlos ) und dass wir zwar von Linux aus etwas auf die Windows C:-Platte kopiert haben ( c:/Dokumente und Einstellungen/Default User/Desktop… ) , die kopierte Datei aber unter windows nicht sehen können. Falscher Desktop ? Falscher Windows-User? Falsches Betriebssystem ! Was wir sehen ist ein vorinstallierter Virenkiller welcher nach Updates giert. Ich empfehle D. den Virenkiller notfalls auf usb-stick zu kopieren und von _Usb-Stick auf Windows zu installieren. Wir reboooten Ubuntu und beschäftigen uns wieder mit turtlegrafik-Programmierung.
Ich zeige D. wie man einen kleinen Planeten macht auf dem verschieden große Bäume wachsen.

Ein etwas eckiger „Baumplanet“ mit python-turtlegrafik. Die Originalversion von D. sah etwas besser aus und hatte 2-farbige Baumkronen.

Fünfter Tag

Letzter Kurstag, leider !
So wenig Zeit, und noch so viel Vorhaben…
D. hat zu Hause weiterprogrammiert und zeigt mir eine Sanduhr mit Turtle-Grafik. Allerdings ist er unzufrieden mit den Auswirkungen des fill-Befehls (trickreich: gefüllt wird nur das was zwischen turtle.begin_fill() und turtle.end_fill() steht).
D. hat zu Hause durch ausprobieren herausbekommen welchen Winkel und welche Länge er für die Diagonale (der Sanduhr) nehmen muss, damit sie in ein umschreibendes Quadrat hineinpasst. Ich frage ihn ob er in der Schule den Satz von Pythagoras gelernt hat, was er verneint.

Lange Erfahrung lehrt mich dass die meisten Kursteilnehmer altersunabhängig prinzipiell verneinen jemals etwas im Mathematikunterricht gelernt zu haben. Wenn man es ihnen konkret zeigt was man meint (z.B. eine Formel, eine Winkelberechnung) dann gibt es aber oft einen Wiedererkennungseffekt („doch, das habe ich schon eimal gesehen in der Schule“).

Ich erkläre D. in Kürze den Satz vom Pythagoras (hoffentlich profitiert er im nächsten Schuljahr davon) und schreibe mit ihm drei python-Funktionen:
Eine Funktion zur Berechnung einer Hypothenuse in einem rechtwinkeligen Dreieck
Eine Funktion zum Zeichnen einer Sanduhr ( 2 Diagonalen von einem umschreibendem Quadrat sowie die Unterseite und die Oberseite vom Quadrat) und schließlich
Eine Funktion zum Zeichnen eines Quadrats.

Alle 3 Funktionen sind so aufgebaut dass man die Seitenlänge des Quadrats als Parameter eingbeben kann.

Schlussendlich entsteht eine Spirale aus immer größer werdenden Sanduhren

Kursteilnehmer D. mit python turtle Grafik

Da ich glaube dass D. mittlerweile selbstständig mit der Dokumentation für die Turtle-Grafik zurechtkommt starten wir Ren’py.

Doch das Thema Mathematik lässt mich nicht los und ich zeige D. „nur ganz kurz“ (de facto bis Kursende) die Website der „Khan Academy„. Flugs ist D. angemeldet, ich werde offiziell sein „Coach“ und er verdient erste „Energy Points“ durch lösen von Subtraktionsaufgaben. Anschließend macht sich D. mit Hilfe vom Ubuntu Taschenrechner ans Lösen einiger Pythagoras Aufgaben „dann verdien‘ ich mehr Punkte“. Wozu er die Punkte brauchen kann hat er sofort heraus: „Dann kann ich mir bessere Avatars kaufen“.

Außerdem entdecken wir dass es auf Khan Acadmey Programmier-Tutorials gibt, und zwar in der Sprache Processing ( ein Wrapper für Java )

Das Schöne daran: Es ist außer einer Internetverbindung absolut keine Vorinstallation nötig, man kann den Sourcecode direkt im Web verändern (genialerweise auch ohne Tastatur, rein mit der Maus) und man sieht die Auswirkungen auf das Ergebnis (Grafik/Animation) in Echtzeit.

Leider gibt es noch keine Python Grafikprogrammierung innerhalb eines Webbrowsers ( Udacity verwendet Python im Webbrowser, allerdings ohne Grafik ). Processing wird hoffentlich durch die Bemühungen der Khan-Academy einen Popularitätsschub erfahren welchen es sich wahrlich verdient hat.

D. änderte sofort online an einigen Processing Sourcecode-Beispielen herum und wollte schließlich die „Hypnosespirale“ auf seinem eigenen Rechner haben.

Hypno-swirl auf der Khan-Academy Website (Link: auf das Bild klicken). Man beachte den scharzen Fleck links – man kann damit in Echtzeit per Maus eine Zahl (hier die Variable radius) im Programmcode verändern.

Ich übersetzte sie ihm den Processing-Source Code in
Python3 (turtle) Source Code ohne näher auf die Bedeutung von Sinus und Cosinus einzugehen.

Damit ging der Kurs offiziell zu Ende („wir haben viel gemacht“). Einen Tag nach Kursende erreichte mich eine Email von D. : „Wie installiert man die ‚Khan Academy Programmiersprache'“ ?
Indem man Java und Processing installiert.

Bitte Flattern:
Flattr this

Creative Commons Lizenzvertrag
spielend-programmieren Blog von Horst JENS steht unter einer Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 3.0 Österreich Lizenz.
Über diese Lizenz hinausgehende Erlaubnisse können Sie unter http://spielend-programmieren.at erhalten

Über Horst JENS

teaching open source game programming to kids
Dieser Beitrag wurde unter Erfreuliches aus dem Kursleben abgelegt und mit , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s