Mini-Programmierwelten

Das Erlernen von Programmiersprachen und die Entwicklung von Programmen sind nicht trivial. Sicher gibt es Schüler, die sehr schnell damit zurechtkommen. Viele haben aber Probleme mit der Komplexität der Thematik und sind schnell frustriert. Für einen einfachen Einstieg in die komplexe Welt der Programmierung wurden daher bereits in den 70er Jahren des vergangenen Jahrhunderts so genannte Mini-Programmierwelten (micro worlds) entwickelt. Sie reduzieren den zugrunde liegenden Befehlssatz auf ein Minimum, enthalten spielerische Elemente und verbinden mit den entsprechenden Befehlen visuelle Aktionen von virtuellen Akteuren auf dem Bildschirm.

Ur-Vater dieser Miniwelten ist „Karel the Robot“. Karel ist ein virtueller Roboter, der mit Befehlen, wie move oder turnLeft durch eine virtuelle Landschaft gesteuert werden kann und dabei verschiedene ihm gestellte Aufgaben zu lösen hat.

Eine andere weit verbreitete Mini-Programmierwelt ist das „Hamster-Modell“. Programmieranfänger erlernen hiermit die grundlegenden Konzepte der Programmierung sowie den Programmentwicklungsprozess, indem sie virtuelle Hamster durch eine virtuelle Körner-Landschaft steuern. Der Befehlsatz besteht dabei aus vier Grundbefehlen (vor, linksUm, gib, nimm) und drei Testbefehlen (vornFrei, kornDa, maulLeer). Programmieranfängern werden bestimmte Aufgaben gestellt (der Hamster soll alle Körner in seinem Territorium finden und fressen, der Hamster soll ein Labyrinth durchlaufen, …), zu denen sie dann Hamster-Programme entwickeln müssen, die die Aufgaben lösen. Mit dem so genannten Hamster-Simulator wird dabei eine Programmierlernumgebung zur Verfügung gestellt, mit dem Hamster-Programme eingegeben, compiliert, getestet und ausgeführt werden können (siehe https://www.java-hamster-modell.de)

Weitere bekannte Mini-Programmierwelten sind „Kara der Marienkäfer“, bei dem ein virtueller Marienkäfer Kleeblätter suchen und dabei Pilze verschieben und Baumstümpfen ausweichen muss oder die „Schildkrötengraphik“, bei der eine virtuelle Schildkröte mit Hilfe eines Stiftes Zeichnungen (Fraktale) malen kann.

Derartige Mini-Programmierwelten weisen im Allgemeinen folgende Eigenschaften auf:

  • Es gibt einen (virtuellen) Akteur, der mit Hilfe bestimmter Befehle durch eine (virtuelle) Landschaft gesteuert werden kann.
  • Die Komplexität eines Computers wird auf einen minimalen Satz von Befehlen eingeschränkt, die dem Akteur erteilt werden können.
  • Die Programmierkonzepte werden schrittweise und aufeinander aufbauend eingeführt und jeweils durch zahlreiche Beispiele demonstriert.
  • Anhand vieler Aufgaben mit einfach zu verstehenden Aufgabenstellungen können die Programmieranfänger selbst überprüfen, ob sie den Stoff nicht nur verstanden haben, sondern auch praktisch umsetzen können.
  • Für die Bearbeitung der Aufgaben existiert eine einfach zu bedienende Programmierlernumgebung, die die Erstellung und den Test von Programmen unterstützt und Programmausführungen, d.h. die Aktionen der Akteure, visuell auf dem Bildschirm darstellt.

Programmierlernumgebungen

Prinzipiell sind die meisten der existierenden Mini-Programmierwelten zunächst einmal programmiersprachenunabhängig. Für viele existieren mehrere Implementierungen, die unterschiedliche Programmiersprachen unterstützen (Java, Scratch, endliche Automaten, …).

Im Folgenden soll zwischen den beiden Begriffen Mini-Programmierwelt und Programmierlernumgebung unterschieden werden.

Bei einer Mini-Programmierwelt (MPW) handelt es sich um ein (didaktisches) Modell, in dem die Akteure und anderen Objekte einer virtuellen Landschaft, ihre Beziehungen untereinander und ihre möglichen Aktionen und die Befehle zum Steuern der Akteure festgelegt werden. Beim Hamster-Modell gibt es bspw. einen virtuellen Hamster als Akteur sowie Mauern und Körner als weitere Objekte. Diese befinden sich in einer Landschaft, die aus einzelnen Kacheln besteht. Der Hamster kann Körner in sein Maul aufnehmen, er darf nicht gegen Mauern laufen. Als Befehle gibt es die Grundbefehle vor, linksUm, nimm und gib und die Testbefehle vornFrei, kornDa und maulLeer.

Um mit einer MPW tatsächlich programmieren lernen zu können, bedarf es einer Programmierlernumgebung (PLU), oft auch als Simulator bezeichnet. Hierbei handelt es sich um ein Computerprogramm, das eine konkrete MPW abbildet und das das Erstellen und Testen von Programmen der MPW unterstützt. Beim Hamster-Modell bildet der Hamster-Simulator eine solche PLU.

PLUs bestehen dabei aus mehreren Komponenten:

  • Die zugrunde liegende MPW, in der festgelegt wird, welche Akteure und Komponenten es gibt, welche Befehle der Akteur kennt und was die Befehle bewirken.
  • Einem Editor, um Programme zu erstellen.
  • Einem Ausgabebereich, in dem die Miniwelt grafisch dargestellt wird und in der die Aktionen des Akteurs ausgeführt werden.
  • Ein Simulationskomponente zum Starten, Pausieren, Fortsetzen und Stoppen von Programmen und zum Regeln der Ausführungsgeschwindigkeit.
  • Eine Gestaltungskomponente, über die die Miniwelt grafisch-interaktiv manipuliert werden kann.

Das (theoretische) Entwickeln einer für Programmieranfänger geeigneten und interessanten Mini-Programmierwelt sollte (für kreative Didaktiker) eigentlich ein geringeres Problem darstellen, als das (software-technische) Entwickeln einer dazu gehörigen für Programmieranfänger einfach zu bedienenden trotzdem aber ausreichend mächtigen Programmierlernumgebung. Eine PLU muss als Bestandteile zumindest Komponenten zum Editieren und Compilieren von Programmen, zum visuellen Gestalten einer virtuellen Landschaft und zum Ausführen entsprechender Programme mit visuellem Feedback der einzelnen Befehle in der Landschaft zur Verfügung stellen. Die Entwicklung einer solchen PLU ist – selbst für erfahrene Programmierer – sicher eine Aufgabe, die mehrere Wochen oder Monate in Anspruch nehmen kann.

Genau an dieser Stelle wollen wir nun ansetzen und Werkzeuge für die Entwicklung spezieller PLUs entwickeln. Mit Hilfe dieser Werkzeuge sollen einigermaßen erfahrene Programmierer innerhalb kurzer Zeit PLUs für bestimmte definierte MPWs entwickeln können.

Aber es gibt doch bereits eine Reihe von Mini-Programmierwelten mit dazugehörigen Programmierlernumgebungen. Wofür werden denn überhaupt noch weitere benötigt? Antwort:

  • Als Entwickler des Hamster-Modell und des Hamster-Simulators bekomme ich oft Emails von Lehrern, die fragen, ob es nicht möglich ist, bestimmte Eigenschaften des Modells bzw. Simulators ändern zu können. Einige wollen den Befehl rechtsUm als weiteren Grundbefehl, andere wollen englischsprachige Befehle, andere wollen die Icons austauschen, andere wollen den Hamster gegen einen anderen Akteur umtauschen, usw. Durch Einsatz unserer Werkzeuge können derartige Änderungswünsche an existierenden PLUs innerhalb kurzer Zeit problemlos selbst durchgeführt werden.
  • Nach geraumer Zeit wird es (ungeduldigen) Programmieranfängern oft langweilig, immer nur Programme derselben MPW schreiben zu müssen. Natürlich wäre es für Lehrer möglich, bspw. nach einiger Zeit vom Hamster-Modell zu Kara zu wechseln. Allerdings bedarf das doch einer Umgewöhnung der Programmieranfänger, was die Handhabung der dazu gehörigen PLU betrifft. Mit unseren Werkzeugen erstellte PLUs sind jedoch in ihrer Bedienung gleichartig, so dass ein solcher Wechsel problemlos möglich ist.

Ein Werkzeug zur Entwicklung von PLUs als Desktop-Anwendungen existiert bereits seit einigen Jahren: Solist (https://www.boles.de/programmierkurs-java/solist/). Solist und die damit entwickelten PLUs basieren wie viele andere PLUs auf Java. Gerade bei Programmieranfängern kommt es dabei oft zu Problemen bei der Installation.

Aus diesem Grund wollen wir mit einem neuen Werkzeug die Entwicklung von Web-basierten PLUs unterstützen, d.h. PLUs, die ohne jegliche Installationen in gängigen Webbrowsern lauffähig sind. Die PLUs sollen 100% Client-seitig aufgebaut sein, d.h. ausschließlich Client-seitige Technologien wie HTML, CSS, JavaScript und XML einsetzen. Es sollen keine Server-seitigen Abhängigkeiten bestehen.

Viktoriia Atamanska hat in ihrer Bachelorarbeit an der Universität Oldenburg erste Ideen für ein solches Werkzeug entwickelt. Entstanden sind dabei zwei PLUs für den Hamster und Kara. Sie basieren auf Google Blockly. Google Blockly (https://developers.google.com/blockly) ist eine Toolbox, um Web-basierte Editore zur Block-basierten Programmierung zu entwickeln. Google Blockly ist einfach konfigurierbar und erweiterbar und lässt sich ohne große Probleme an unterschiedlichste Szenarien anpassen. Diese beiden Blockly-PLUs stellen wir auf dieser Website zur Verfügung. Hinzu kommt eine PLU für Niki den Roboter, die Ronja Krüger aufbauend auf den Arbeiten von Viktoriia entwickelt hat. In nächster Zeit sollen Blockly-PLUs für weitere MPWs folgen.

Materialien

Die folgende Tabelle enthält je eine Zeile für eine MPW. In jeder Zeile vorne steht der Name der MPW mit einem Link zur Website des Originals. Es folgt ein Video mit einer Einführung in die Nutzung der zugehörigen Blockly-PLU. Anschließend folgt ein Link zur konkreten Blockly-PLU. Diese funktioniert in allen gängigen Browsern, auch auf Android-Smartphones und -Tablets sowie iPhones und iPads. Am Ende jeder Spalte steht eine zip-Datei mit den gesamten Sourcen zur Verfügung. Diese können Sie gerne nutzen, wenn Sie die entsprechende Blockly-PLU lokal oder auf einem eigenen Server installieren möchten oder wenn Sie selbst kleinere Änderungen vornehmen möchten. Werfen Sie dazu einfach einen Blick in die in der zip-Datei jeweils vorhandene README-Datei.

MPW Video Blockly-PLU Sourcen
Hamster BlocklyHamster.mp4 BlocklyHamster-PLU BlocklyHamster-1.0.zip
Kara der Marienkäfer BlocklyKara.mp4 BlocklyKara-PLU BlocklyKara-1.0.zip
Niki der Roboter BlocklyNiki.mp4 BlocklyNiki-PLU BlocklyNiki-1.0.zip
Karel the Robot in Kürze in Kürze in Kürze
Karel (fredoverflow) BlocklyKarel2.mp4 BlocklyKarel2-PLU BlocklyKarel2-1.0.zip
Turtle-Grafik in Kürze in Kürze in Kürze

Hinweise

Ich habe festgestellt, dass die Zählschleife (zähle i von v bis b in Schritten von s mache)in Google Blockly anders funktioniert als man es von gängigen Programmiersprachen gewohnt ist: Wenn der bis-Wert b kleiner ist als der von-Wert v, wird die Zählvariable i in jedem Schleifendurchlauf um den Schrittwert s erniedrigt. D.h. bspw. bei "zähle i von 1 bis 0 in Schritten von 1" wird die Schleifenanweisung zweimal ausgeführt, einmal für i gleich 1 und einmal für i gleich 0.

Aus dem Grund sind die Beispiele in den Videos oben nicht ganz korrekt. Wenn in den Beispielprogrammen der Videos die Akteure keine Gegenstände aufgenommen hätten (anzahl also den Wert 0 enthält), würden die Akteure am Ende versuchen, 2 Gegenstände abzulegen. Die Programme würden in dem Fall also nicht korrekt arbeiten. Daher muss in den Beispielen der Videos die Zählschleife noch in eine if-Anweisung der folgenden Form eingebettet werden: "falls (anzahl > 0) mache Zählschleife"