Nach dem Umstieg von JAVA auf Python habe ich recherchiert, ob es Alternativen zu BlueJ bzw. Greenfoot (bzw. Gamegrid) für Python gibt. Die schlechte Nachricht: Es gibt leider keine. BlueJ und Greenfoot sind die besten beiden Argumente für die Verwendung von JAVA als erste Programmiersprache. Der dritte Grund ist die Verbreitung. Alle anderen Argumente sprechen aber gegen JAVA. Kaum ein Programmierer würde zustimmen, dass Java durch besondere Zugänglichkeit und didaktische Reduktion besonders gut für Programmieranfänger geeignet sei. Java wirkt für viele Programmieranfänger abschreckend und wird nicht umsonst im englichsprachigen Raum zunehmend als erste Programmiersprache verdrängt.

Eine Alternative zu Greenfoot in Java Gamegrid , ein stark an Greenfoot angelehntes Framework, welches mittels Jython auch mit Python programmierbar ist. Da ich allerdings ungerne auf Jython wechseln möchte, habe ich begonnen selbst ein Framework zu schreiben, dass Gamegrid bzw. Greenfoot für JAVA ersetzen soll. Das ganze steckt noch in den Kinderschuhen (ich habe einen halben Tag Arbeit investiert), wird aber demnächst weiterentwickelt. Hier findet ihr das GIT-Repository: https://github.com/asbl/gamegridp Hier findet ihr das Projekt in Pypi: https://pypi.python.org/pypi/gamegridp/0.1 .

Ein Projekt für die Sommerferien habe ich mir auch schon ausgeguckt: Hier findet man einen Ansatz für eine Umsetzung von BlueJ auf Python. Diesen möchte ich gerne weiterentwicklen. Wenn BlueJ auch für Python existieren würde, würde es praktisch keinen Grund geben, Java als erste Programmiersprache zu verwenden.

 

Die Lerntheke dient dem Trainieren für die erste Klausur. Sie ist sowohl Offline ausdruckbar. Dank Inspiration von Jan-Martin Klinge ist sie auch Mobil mit dem Tablet nutzbar. Auf den einzelnen Karten befinden sich dann interaktive Links zu den Hilfekarten. Die Lerntheke steht unter CC0-Lizenz, d.h. ihr könnt damit anfangen was ihr möchtet.

 

Hinweis: Da der Abschnittszoom nicht in der Online-Variante von Office funktioniert, müsst ihr die Datei herunterladen. Ich werde die Dateien noch zu einem anderen Cloud-Anbieter verschieben, damit diese ärgerliche Einschränkung nicht weiter irritiert.

Hier der Download:

 

 

3. Stunde Python: Nachdem die Schüler mit Turtle-Grafik erste Erfahrungen gemacht haben und im Online-Kurs parallel die Grundlagen trainiert haben stand nun in der dritten Stunde das Thema Text-Adventures auf dem Programm.

Prinzipiell ist es mein Ziel, den “langweiligen” Teil des Programmieren-Lernens auf den Online-Kurs zu verschieben und dann im Unterricht selbst spannende Anwendungsfälle untersuchen zu können. Text-Adventures sind deshalb besonders gut geeignet, da man hier sehr gut den Umgang mit Kontrollstrukturen lernen kann (man benötigt eine Mainloop und einen Haufen verschachtelte If-Elif-Else Abfragen) und sieht, wie selbst sehr simple Programme schnell aus sehr komplexen Code bestehen (der Umgang mit Komplexität ist einer der Dinge, die die Informatik als Disziplin ausmacht).

Der Grundaufbau eines Textadventures in Python kann so aussehen:

zustand="start"
while (zustand!="ende"):
    if zustand=="start":
        print("Situationsbeschreibung")
        eingabe = input("Was tust du (f: In den Flur, a: Abhauen)")
        if eingabe=="f":
            zustand="flur"
        else:
            zustand="ende"
    elif zustand=="flur":
        print("Du betrittst den Flur")
        eingabe = input("Was tust du?")
    elif zustand=="ende":
        print("Du läufst davon...")
            


Das ganze wird natürlich schnell extrem unübersichtlich… daher enstand bei einigen Schülern von sich aus bereits der Wunsch den Code irgendwie übersichtlicher zu gestalten, was hier zum Thema Funktionen führt:

def flur():
    print("Du gehst in den Flur... oben hörst du Geräusche...")
    eingabe=input("""Was tust du?
        [r]ückwärts: Ich gehe zurück zum Haupteingang
        [o]ben: Ich gehe die Treppen hoch""")
    if eingabe=="r":
        return "haupteingang"
    if eingabe=="o":
        return "Erster Stock"

Weiterhin bietet es sich auch an Zufallsfunktionen einzuführen (um z.B. Kämpfe oder Gefahren zu simulieren). Das nächste mal werde ich daher diese Einheit mit einer Lerntheke ergänzen, auf der man die wichtigsten Funktionen nochmal nachlesen kann.

 

Interessanterweise kamen alle Schüler sehr ordentlich mit den Aufgaben zurecht. Eine Erfahrung, die ich mit Java+Guis oder Java+Greenfoot so noch nicht gemacht habe. Wenn wir über Probleme gesprochen haben, dann meist nicht über einfache Syntaxfehler, sondern über grundlegende Logik-Fehler, die von den Schülern mit etwas Hilfestellung selbst entdeckt wurden. So macht mir das Unterrichten viel mehr Spaß und ich habe das Gefühl, dass viele Schüler schneller und mehr lernen, als in meinen bisherigen Java/Lazarus Kursen.

Bei Übernahme meiner E-Phase Informatik zum Halbjahr musste ich mit Erschrecken feststellen, dass ich nur 10 Doppelstunden bis zu den Sommerferien habe. Darunter sind zwei Stunden, in denen ich die Klausur schreibe. Dazu kommen erfahrungsgemäß Ausfälle durch Schulveranstaltungen, Krankheit oder ähnliches…

Wie soll ich in dieser kurzen Zeit Schülern das Programmieren beibringen?

Ich habe lange recherchiert und dann auf der Plattform Stepik begonnen, einen Online-Kurs für Python anzulegen. Die Schüler müssen Aufgaben aus dem Kurs als verpflichtende Aufgaben lösen. Ich sehe live wer welche Aufgaben bearbeitet hat. Da Stepik nur kostenlos ist, wenn die Kurse unter CC-Lizenz öffentlich zugänglich sind, könnt ihr diesen Kurs auch gerne verwenden um das Programmieren mit Python zu lernen. Der Kurs wird im Laufe des Halbjahres noch deutlich wachsen: https://stepik.org/course/6229/

Im hessischen Abitur werden zum Thema “Objektorientierte Programmierung” die Programmierbeispiele in zwei Sprachen angeboten: JAVA und Delphi.

Delphi bzw. Lazarus als Open Source Alternative hat inzwischen einen gewissen historischen Wert. die Sprache wird außerhalb des deutschen Informatikunterrichtes praktisch nirgends mehr benutzt. In Hessen ist sie nur deshalb noch von Bedeutung, da diese lange Zeit Grundlage der Informatikausbildung war und vor allem viele Quereinsteiger keine andere Sprache sprechen.

JAVA ist da schon ein anderes Kaliber. JAVA ist die meist verbreitetste Sprache überhaupt und wird auch von vielen Universitäten als erste Programmiersprache verwendet. Mit Greenfoot, BlueJ, dem JavaEditor, Gamegrid, Kara, dem Hamstersimulator verfügt JAVA über zahlreiche gute Entwicklungsumgebungen und Frameworks, die zum Unterrichten mit der Sprache geeignet sind. Gleichzeitig ist das Lehren mit JAVA auch mit zahlreichen Fallstricken versehen, da die Sprache für die professionelle Entwicklung in großen Teams gut geeignet ist, aber nicht als erste Programmiersprache für Programmieranfänger vorgesehen ist. Dies fängt mit dem üblichen Grundkonstrukt an:

public static void main(String args[]) {
}

verbunden mit zahlreichen Problemen, die dem ersten Problemlösen in Java im Weg stehen:

  • Installation des SDKs und richtiges Setzen der Pfadvariablen.
  • Zahlreiche Syntaxfehler beim Vergessen von runden oder geschweiften Klammern oder des Semikolons am Ende einer Zeile.
  • Durch das Strong Typing wird mehr “Fingertyping” benötigt, es dauert dadurch einfach länger bis man zu Ergebnissen kommt. Und spätestens wenn man in der Objektorientierung mit Containern und Casts beschäftigt, muss man sowieso darüber nachdenken was für einen Typ das aktuell verwende Objekt gerade haben könnte.
  • In Kombination mit Greenfoot: Zahlreiche Programmierkonzepte müssen “gleichzeitig” gelernt werden um einfache Programme zu schreiben (Objektorientierung, Interaktion von Objekten, Vererbung)
  • In Kombination mit GUIS: Komplizierte Klassenhierarchie (man verwende nur mal ein JTextField, auch hier müssen wieder viele Konzepte (imperative Programmierung, Objektorientierung) gleichzeitig gelernt werden.
  • Lesen und Schreiben in Dateien ist eine einzige Qual. Auch das Lesen von Tastatureingaben ist umständlich
  • Man muss sich als Lehrer und Lernender entscheiden, ob man statische Arrays oder direkt mit den objektorientierten ArrayLists anfängt. In der Regel benötigt man für objektorientierte Programmierung letzteres. Sollte man dann also die Arrays direkt überspringen?
  • und vieles mehr…

Meine persönliche Erfahrung aus mehreren Java-Kursen an der Schule und der Universität war folgende: Java wird von Lernenden als extrem schwergewichtige Sprache wahrgenommen. Alleine der Gedanken nach einiger Zeit Programmierpause sich wieder in Java einarbeiten zu müssen, verursacht Stöhnen. Ich kenne auch fast niemanden -außer Informatikstudenten-, der Java gelernt hat und anschließend für irgendeinen Zweck noch einmal freiwillig verwendet hat.

Schön wäre es daher, wenn man statt Java auf eine leichtgewichtige Sprache setzt, die leicht zu lernen ist, besser im Kopf behalten werden kann und daher besser dazu befähigt, Probleme zu lösen. Das Lösen von Problemen mit Hilfe eines geeigneten Werkzeuges sollte meiner Meinung nach einer der Kernkompetenzen sein, die Schüler im Informatikunterricht lernen sollten. Siehe dazu auch eine der ersten Fragen im großartigen Buch “How to think like a computer scientist”:

What is the most important skill for a computer scientist

a) To think like a computer
b) To be able to code really well
c) To be able to solve problems
d) To be really good at math.

Die richtige Antwort ist ganz klar c). Doch wenn Schüler eine Programmiersprache später nicht mehr benutzen, weil ihnen diese als schwergewichtig und umständlich erscheint, dann haben wir als Informatiklehrer unser Ziel verfehlt.

Ich setze daher in meinem neuen E-Phasen Kurs auf Python als erste Programmiersprache und werde zu einem späteren Zeitpunkt meine Erfahrungen teilen. Gegebenenfalls werden wir später in der Objektorientierung nochmal auf Java wechseln, so wie es von dem großartigen deutschen Online-Lehrbuch Informatik in der Schule vorgeschlagen wird.

Der Vorteil von Java ist natürlich, dass es sehr gute Tools gibt um die Objektorientierung zu lernen, wie z.B. den Java Editor oder BlueJ. Insbesondere das interaktive erzeugen von Objektdiagrammen, die Kombination von Klassen- und Objektdiagrammen kann ein Riesenvorteil für den Unterricht sein. Ich finde es aber falsch den Hauptfokus des Fachs Informatik auf die Objektorientierung zu legen. Objektorientierung ist ein wichtiges Paradigma um zu verstehen, was notwendig ist, damit Programme im großen Stil und im Team programmiert werden können. Wie bedeutend Objektorientierung oder die Verwendung von Java ist, ist tatsächlich aber umstritten (siehe [1], [2], [3]), siehe dazu auch folgende Zitate. Damit ich nicht falsch verstanden werde: Es ist schon wichtig im Unterricht objektorientierte Programmierung zu lernen. Viel wichtiger ist es aber das Programmieren zu lernen und zu lernen wie man Probleme löst. Wie so oft versperrt die Objektorientierung hier auch in der Lehre schnell den Blick auf das Wesentliche.

Würde das Abitur in Hessen nicht Java als Programmiersprache vorsehen (wobei bisher noch kein Schüler an unserer Schule das schriftliche Abitur absolviert hat), dann würde ich auch erwägen komplett auf Python umzusteigen.

Meine erste Erfahrungen sind übrigens durchweg positiv: Die Schüler können mit wenigen Sprachkonstrukten schon schnell vielfältige Programme schreiben. Sie sind produktiv. Sie lernen keinen Sprachbalast, sondern direkt, wie sie Aufgaben lösen können. Vieles deutet darauf hin, dass ich mich mit diesem Weg anfreunden könnte.

Was spricht noch für Python:

  • Python wird von fast allen großen US Universitäten als erste Programmiersprache verwendet.
  • Verbreitung: Python ist nach TIOBE die meistverwendeste, leichtgewichtige Programmiersprache, nach Redmonk ebenfalls im Spitzenfeld mit Java und C#, nach PYPL direkt hinter JAVA. In allen Vergleichen sieht man aber, dass die Verbreitung von Python zunimmt, während die Verbreitung von Java konstant bleibt oder sogar abnimmt. Es ist durchaus vorstellbar, dass Python meistverbreitetste Programmiersprache sein könnte.
  • Durch die Einfachheit haben Schüler von Tag 1 an direkt tolle Erfahrungen und Erfolgserlebnisse.
  • Hervorragende Standardbibliothek, so dass auch echte Probleme (z.B. Bildbearbeitung) früh gelöst werden können.
  • Python ist Open Source! (Im Gegensatz zur Standard-Runtime-Environment von Java)

Nach meinen ersten Berufsjahren bin ich noch am rätseln darüber, was eigentlich der “Kern” des Faches ist. Am meisten bin ich am überlegen, wo ich die Prioritäten in der Q1 (In Hessen das erste Halbjahr der Oberstufe) legen sollte. Die Themen in dieser Jahrgangsstufe sind objektorientiertes Programmieren, sowie Algorithmen. Zunächst mal die Ausgangssituation: Prinzipiell werden neben Programmierung in Hessen auch noch andere Themen gelernt (Datenbanken, Theoretische Informatik, Netzwerke). Da sich zwei Halbjahre mit der Programmierung beschäftigen (E2: Imperative Programmierung, Q1: Objektorientierte Programmierung) ist dies schon zurecht eines der Schwerpunktthemen im Unterricht.

Prinzipiell gibt es sehr unterschiedliche Ansätze das Programmieren zu unterrichten:

  • Ein Ansatz versucht mit Hilfe von spielerischer Umgebungen wie GameGridGreenfoot oder dem Programmieren von IDEs mit integrierten GUI-Erzeugern wie z.B. dem Java-Editor den Spaß am Programmieren zu fördern. Dadurch, dass die Schüler schnell Ergebnisse erzeugen können, Spiele und interaktive Windows-Anwendungen programmieren, soll die Motivation gefördert werden. Das Problem bei diesem Ansatz: Dadurch, dass man gleichzeitig sowohl mit imperativen Sprachelementen und mit Klassen und Objekten arbeiten muss, müssen die Schüler sehr viele Sprachkonstrukte gleichzeitig lernen, oft führt kein Weg daran vorbei Sprachelemente erst einmal zu nutzen und später genauer zu verstehen.
  • Ein weiterer Ansatz setzt die Programmierkonzepte in den Vordergrund, Man verzichtet auf optisch ansprechende Anwendungen zugunsten einer Fokussierung auf Sprachkonstrukte. Es reicht dann, die Ausgabe auf eine Kommandozeile auszugeben, dafür können die Schüler ein Programmierkonzept nach dem Anderen lernen. Die Gegner dieses Ansatzes argumentieren damit, dass dieser wenig motivierend ist. Dafür ist für die Schüler klar nachvollziehbar, was gerade passiert. Einer unserer Aufträge als Informatiklehrer ist es meiner Meinung nach die “Magie” aus der Technik zu entmystifizieren. Hier kann es meiner Meinung nach hilfreich sein, sich zunächst stärker auf die grundlegenden Konzepte zu konzentrieren und alles was für die Schüler nicht verständlich sein kann auch erstmal nicht zu benutzen.
  • Darüber hinaus gibt es noch Konzepte wie LOGO oder verschiedene Implementierungen von Turtle-Grafik, die reduzierte Umgebungen zur Verfügung stellen, oft in Kombination mit grafischer Programmierung. Das schöne an diesem Ansatz ist, dass hier die grundlegenden Programmierkonzepte gelernt werden können und gleichzeitig Ergebnisse sichtbar sind. Gerade mit Turtle-Grafik habe ich bisher sehr positive Erfahrungen gemacht.

Nachdem ich jetzt das erste Jahr komplett mit Greenfoot gearbeitet habe, muss ich feststellen, dass ich mit dem ersten Ansatz nicht glücklich geworden bin. Die Schüler mit Vorerfahrungen haben hier zwar tolle Sachen gemacht. Ich hatte aber das Gefühl, dass gerade die Schüler, die Schwierigkeiten beim Programmieren hatten, es einfacher gehabt hätten, wenn sich der Unterricht auf die wesentlichen Konzepte beschränkt hätte. Die Schüler auch eine klare Struktur. Man beginnt irgendwie gleichzeitig mit Objektorientierung und imperativer Programmierung, braucht schnell Konstrukte, die die Schüler zu diesem Zeitpunkt noch nicht verstehen können, so dass ihnen der klare rote Faden fehlt. Zudem war die aktuelle 3er Version auch sehr instabil, was am Ende dazu führte, dass wir ein Absturzranking führten.

Mein zweites Problem folgt dann aber auch schon:

  • Wie wichtig ist mir das Programmieren eigentlich überhaupt?
  • Was ist daran wichtig?

Im Informatikunterricht der E2 und Q1 ist es so, dass sich beim Programmieren die Spreu vom Weizen trennt: Der gerne programmiert und dies auch in seiner Freizeit tut, der wird glücklich werden. Wer nur die 2 Stunden absitzt und sich ansonsten nicht mit Informatik beschäftigt, der wird auch am Programmieren scheitern und nur Frustration sammeln. Dies ist deshalb schade, weil das Fach Informatik noch so viel mehr bietet als das. Entweder man kann beim Programmieren in die Tiefe gehen und sich immer mehr Techniken aneignen, um Probleme zu lösen, oder man kann die Breite des Faches entdecken und z.B. die unterschiedlichsten Algorithmen entdecken um eine riesige Vielzahl von Problemstellungen kennenzulernen. Mein aktueller Q1-Kurs hat z.B. nach einem programmierintensiven Start in das Schuljahr und erster Untersuchung von Such- und Sortieralgorithmen den Wunsch geäußert einen stärkeren Fokus auf die Algorithmik zu legen. Die Begeisterung ist dabei sprunghaft angestiegen.

Dabei kam mir zwischenzeitlich der Gedanke, dass man sogar fast komplett auf das Programmieren verzichten könnte. Aber ist dies tatsächlich eine Option?

Die Informatik ist ein Fach, dass eine unglaubliche Bandbreite an Themen und Gebieten vorzuweisen hat. Wenn man Informatik unterrichtet muss man sich daher fragen: Was ist im Sinne der Vorbereitung auf das Studium und zur Selbstbewussten Teilnahme an einer digitalen Gesellschaft wichtiger? Den Schülern gute Programmierkenntnisse beibringen oder die ganze Bandbreite des Faches Informatik aufzeigen, um die Vielfältigkeit dieser Wissenschaft zu vermitteln?

Könnte man eines der Ziele des Informatikunterrichtes, Technik zu entmystifizieren nicht auch ohne Programmierung erreichen?Dann würde man viel Zeit gewinnen um Themen zu bearbeiten, die massiv zur Allgemeinbildung beitragen und die bis jetzt nur am Rande oder sogar gar nicht im Informatikunterricht in Hessen thematisiert werden, z.B. (Public Key) Kryptographie, Data Mining, Machine Learning, Künstliche Intelligenz, Graphen, Bildverarbeitung, ….

Andererseits ist das Problemlösen eine der Kernkonzepte unseres Faches. Programmieren ist ein Werkzeug, dass unser Denken erweitert. Zum einen ermöglicht es uns erst, viele Problemstellungen zu bearbeiten und ist daher auch für Nichtinformatiker eine zunehmend wichtigere Fähigkeit. Zum anderen wird durch das Programmieren auch unser abstraktes Denken geschult, man lernt komplexe Situationenzu modellieren, Probleme zu zerlegen und in eine für einen Computer verständliche Sprache zu übersetzen. Ohne das Programmieren würde im Unterricht sehr viel fehlen.

Vielleicht ist es aber auch gar kein “entweder oder”. Mein erster und aktueller Lösungsansatz ist folgender:

Das Programmieren soll weiterhin als wichtiger Baustein erhalten bleiben. Gleichzeitig soll der Fokus vom Programmieren stärker verschoben werden von “Lernen einer Sprache” hin zu “Lernen eines Werkzeuges zum Problemlösen”. Daer habe ich Java zunächst einmal in die Eistonne gelegt, bin auf die Programmiersprache Python umgestiegen und verwende eine einfache IDE (Thonny).

Die Idee ist folgende: Dadurch, dass sich hier auf eine winzige Anzahl an Konzepten konzentriert werden kann, soll vor allem die Verwendung dieser Konzepte zum Problemlösen in unterschiedlichen Bereichen im Vordergrund stehen. So werde ich später natürlich auch die Objektorientierung behandeln und werde auch den ein oder anderen Sortieralgorithmus implementieren lassen. Ich erhoffe mir durch eine Reduzierung auf das Wesentliche beim Programmieren gleichzeitig mehr Zeit zu haben, auch andere Themen einzubinden.

Ich verwende am Anfang noch keine GUIs, sondern schreibe einfache Programme (z.B. Zinsrechner), verwende Turtlegrafik und steige dann auf ein didaktisch möglichst stark reduziertes GUI-Framework (vermutlich http://appjar.info/ ) um, werde aber gleichzeitig auch Bibliotheken benutzen, damit die Schüler “echte” Probleme mit möglichst wenig Code lösen können. Mein Ziel ist es, das bei den Schülern der Eindruck hängen bleibt, dass Programmierung nichts “magisches”, nichts “schwieriges” sein muss. Ich hoffe darauf, dass der ein oder andere Schüler oder Schülerin, die nicht Informatik studiert, trotzdem noch einmal Python installiert um damit “schnell” ein Problem zu lösen. Auch beim Thema Objektorientierung wird es nicht mein Ziel sein, dass die Schüler lernen objektorientierte Programme zu schreiben, sondern dass Objektorientierung verwendet wird, um damit Problemstellungen zu lösen (möglicherweise verwende ich dafür gamegrid, eine gute Python Alternative zu Greendoot.

Ich werde daher auch in der Q1 weniger Zeit für die objektorientierte Programmierung in Anspruch nehmen sondern stärker die informatischen Konzepte (Suchen, Sortieren, Rekursion, Graphen, Bäume, lineare Datenstrukturen, Hashing, …) verwenden. Meine Erfahrungen im letzten Halbjahr waren so positiv, dass ich auch diesesmal wieder einzelne Themen als Referate vergeben werde, so dass die Schüler sich selbst in die Themengebiete einarbeiten können.

Ob dies der “goldene Weg” ist, ist natürlich vollkommen offen. Die grundlegenden Fragen “Wie viel Programmierung braucht der Schüler und wie führt man diese am besten ein?” werden mich auf jeden Fall noch eine ganze Zeit lang beschäftigen. Ich bin gespannt, wohin mich diese Überlegung in den nächsten Jahren führen und wie dies meinen Unterricht beeinflussen wird.

Letzte Bearbeitung: 25.02.2018 – Da dies einer der meistgelesenen Artikel auf dem Blog ist, aktualisiere ich diesen gelegentlich, da sich auch meine Gedanken zu dem Thema ändern. Ich habe jetzt auch das Gefühl die Fragestellung nur im Ansatz angekrazt zu haben und daher werde ich den Text sicherlich noch das ein oder andere mal umformulieren, bis ich mit der Form zufrieden bin.

Für ein gemeinsames Projekt bei der kommenden Projektwoche arbeite ich mich gerade wieder in Blender ein.

Ich habe Blender zweimal im Informatikunterricht angeboten und mich selbst mühsam eingearbeitet – Im Studium habe ich zwar einen Raytracer programmiert, aber nicht mit einem Modellierungstool gearbeitet. Jetzt habe ich das Glück mit einem erfahrenen Kollegen zusammenzuarbeiten, der in seiner Freizeit mit Blender modelliert. Ich freue mich schon auf alles, was ich in den kommenden Tagen lernen kann, so dass ich die Kenntnisse das nächste mal in einen WU-Informatik einbauen kann.

In dem Zuge habe ich auf Anraten meines Kollegen die Tutorial-Videos auf https://www.blenderguru.com angeschaut und konnte noch mal einiges lernen und systematisieren. Die folgende Tutorial-Serie kann ich daher nur für euch empfehlen, wenn ihr in Blender einsteigen wollt: https://www.blenderguru.com/tutorials/blender-beginner-tutorial-series

Hier meine  Umsetzung des Tutorials (An einigen Stellen bin ich etwas faul vorgegangen, da ich die Schritte vorher schon einmal separat gemacht hatte und keine Lust hatte mehr sie mit gleichem Aufwand genauso detailliert und genau zu machen.

Und noch eines der Lieblingsspielzeuge unseres Kindes:

EDIT: Das schöne an solchen Projekten ist ja, dass talentierte Schüler mit dem Input denen man ihnen gibt alles mögliche umsetzen. Einige der Resultate waren wirklich beeindruckend.

Prinzipiell mag ich Entwicklungsumgebungen wie Greenfoot https://www.greenfoot.org/door . Ich denke, dass diese dabei helfen können

 

 

  • a) Die Motivation der Schüler zu steigern
  • b) Ein Verständnis über den Zusammenhang von Klassen und Objekten zu fördern

Leider hat sich bei mir die 3er Version von Greenfoot als nicht stabil genug herausgestellt. Am Ende waren die Schüler hauptsächlich frustriert, da ihr Programm oft abstürzt. Außerdem ist die Fehlersuche -einer der Kernelemente des Programmierens- in Greenfoot wirklich schlecht gelöst.

Eclipse hat sich bei ersten Versuchen schonmal als bessere Alternative bewiesen. Zwar müssen die Schüler zunächst mal mit einigem Overhead klarkommen, wenn dieser aber aus dem Weg geräumt wurde hat man die Vorteile einer mächtigen Entwicklungsumgebung auf seiner Seite. Insbesondere die inkrementelle Fehlersuche erfüllt im schulischen Umfeld auch eine didaktische Funktion, da die Schüler direktes Feedback auf ihre Aktionen erhalten und nicht warten müssen, bis sie auf compilieren gedrückt haben. Dennoch vermisste ich zunächst die Vorzüge von Greenfoot, bis mir folgende Alternative ins Auge fiel:

http://www.java-online.ch/gamegrid/index.php

GameGrid ist ein Framework zum Programmieren von Spielen, dass sehr stark an Greenfoot erinnert. Es gibt hier aber keine graphische Entwicklungsumgebung, sondern die Programme können in jeder Umgebung geschrieben werden, die man bevorzugt (z.B. Eclipse). Alternativ gibt es auch einen Online-Editor, mit dem man Programme direkt bearbeiten kann. Man findet online auch eine Android-Version, so dass es mit dem Online-Editor ohne weiteres möglich ist, auch Android-Spiele mit GameGrid zu entwickeln.

Sowohl die Syntax als auch die Menüleiste bei einem neu erstellten Spiel erinnern extrem stark an Greenfoot

Jeder Actor verfügt wie bei Greenfoot über eine act()-Funktion, die nach einem Klick auf Run in einer Endlosschleife ausgeführt wird, Grafiken und Sounds können ohne größere Schwierigkeiten hinzugefügt werden.  Nicht nur Spiele in einem Grid, sondern auch Pixel-basierte Spiele sind möglich (Mein erstes Spiel handelte von einer Rakete, die Meteoren ausweicht).

Bei meinen ersten Experimenten bin ich auch auf einige Grenzen gestoßen. Die Umgebung ist definitiv nicht für Personen geeignet, die sich tiefer in die 2D-Spieleentwicklung vertiefen wollen. Für schulische Zwecke halte ich sie aber sehr geeignet, auch weil hier einige gute didaktische Vereinfachungen getroffen wurden

Ich habe eine allererste Version von “GameGridCards” erstellt, mit denen die Schüler mit Gamegrid+Eclipse relativ selbstständig erste Projekte erstellen können. Ich stelle diese zur Verfügung (mit dem Hinweis, dass diese sicher noch an einigen Stellen Arbeit benötigen).

-> Download Gamegridcards

Insgesamt war ich enttäuscht von der JAVA-Lernplattform Greenfoot ( https://www.greenfoot.org/door ): Zwar ist die IDE schön, die Idee mit den Miniwelten toll, aber in den letzten Monaten sind meinen Schülern so viele Greenfoot-Bugs begegnet, das alle nur noch genervt waren. Vielleicht war es auch ein Fehler auf die 3er Version zu setzen und nicht die stabile 2er Version zu wählen, die auf den Schulrechnern vorinstalliert ist.

Dennoch gab es ein Highlight:  In der Greeps Miniwelt ( https://www.greenfoot.org/competition/greeps/ ) müssen Aliens Tomaten einsammeln, die Teams traten gegeneinander an und konnten auf 3 Karten ihre Greeps trainieren, während auf den restlichen Karten dann der Sieger ausgetragen wurde: https://www.greenfoot.org/competition/greeps/ . Alleine für diese Miniwelt hat sich Greenfoot dann doch gelohnt. Im Greenroom gibt es übrigens einen Nachfolger, vielleicht probiere ich diesen mal aus…