An dieser Stelle kurz für meine eigenen Notizen und für interessierte Schüler die Rahmendaten zu einer besonderern Lernleistung:

  • Die Schulleitung entscheidet, in welchem Aufgabenfeld die BLL liegt (i.d.R. im sprachlich naturwissenschaftl. Bereich). Sie kann die mündliche Prüfung im fünften Prüfungsfach ersetzen.
  • Beantragung bis spätestens zu Beginn des zweiten Jahres der Qualifikationsphase (d.h. zu Beginn der Q3) mit betreuender Lehrkraft bei der Schulleitung.
  • Umfang: Im Rahmen eines Kurses von 2 Halbjahren. Schriftliche Dokumentation. Wesentliche Bestandteile dürfen noch nicht anderweitig angerechnet wurden sein.
  • Die Bewertung setzt sich aus einem schriftlichen Teil zusammen, sowie einem Kolloquium von 20 Minuten, das vom Fachausschuss durchgeführt wird.

Mehr Infos: Siehe hier
http://gymnasium.bildung.hessen.de/gym_sek_ii/abitur/bell/material_bll/

Ich kann mir sehr gut vorstellen, dass eine Besondere Lernleistung im Rahmen der Weiterentwicklung des Miniworldmaker-Frameworks oder in der Konzipierung eines Online-Kurses für ein Thema bestehen könnte.

Mögliche Themen wären hier (Stichpunktartig, da das Thema sowieso vom Schüler/der Schülerin selbst gewählt werden muss):

  • Onlinekurs zum Thema Internet und Webprogrammierung (ggf. mit Datenbanken)
  • Erweiterung des Miniworldmaker-Frameworks, z.B. um eine Physik-Engine, Basisklassen zur Programmierung von bestimmten Spielegattungen (z.B. Kartenspiele)
  • oder deine eigene Ideen

Die erste Lektion mit dem Miniworldmaker war ein Erfolg.

Während die Schüler erste Erfahrungen und Ideen sammeln konnten, erwies sich das Framework so stabil, dass alles glatt gelaufen ist und keine nennenswerte Bugs aufgefallen sind.

Während die API ab jetzt weitgehend stabil bleiben wird (damit die Programme der Schüler laufen), hoffe ich das Framework moderat weiterzuentwickeln, so dass es in den nächsten Wochen noch stabiler wird,Fehler verständlicher rückgemeldet werden und die API um sinnvolle Funktionen erweitert wird.

Anbei noch ein repl.it zu Miniworldmaker. Ein kleines Flappy-Bird Spiel mit weniger als 70 Zeilen Code:

Aus Gamegridp wird MiniWorldMaker.

Das System nähert sich langsam einer stabilen Version an (Zeitplan: Nach den Osterferien soll die API weitgehend nicht mehr verändert werden) und ich bin zunehmend zufriedener mit der Code-Basis.

So sieht der Code für dieses Beispiel aus:

from miniworldmaker import *


class MyBoard(PixelBoard):

    def __init__(self):
        super().__init__(columns=200, rows=200)
        self.add_image(path="images/stone.jpg")
        self.add_to_board(Robot(), position=(50, 50))


class Robot(Actor):

    def __init__(self):
        super().__init__()
        self.size = (30, 30)
        self.add_image("images/robo_green.png")

    def act(self):
        pass

    def get_event(self, event, data):
        if event == "key":
            if "A" in data:
                self.turn_left(10)
            if "D" in data:
                self.turn_right(10)
            if "W" in data:
                self.move(distance=3)


board = MyBoard()
board.show()

Hier die Ergebnisse meiner Recherche nach interaktiven Online-Programmierkursen. Manchmal ist die Suche etwas abgedriftet, daher finden sich auch andere Tools:

  • Mein Favorit bisher war Stepik.org auf dem ich den Nachfolger meines Programmierkurses entwickelt habe. Mit Stepik kann man als Lehrer kostenlose Programmierkurse unter Creative Commons Lizenz erstellen und den Prozess seiner Schüler überwachen.
  • Neben dem mir bereits bekannten Python-Kurs von cs-circles habe ich neu entdeckt den Kurs snakify – Auch hier kann man als Lehrer den Prozess seiner Schüler verfolgen.
  • Edabit: Auf der Seite kann man Erfahrungspunkte sammeln, in dem man zunehmend schwerere Programmieraufgaben löst. Wer es hier geschafft hat auch die schweren Aufgaben zu lösen ist auf jeden Fall ein guter Programmierer.
  • Alternativ gibt es auch spielerische Herangehensweisen, z.B. https://checkio.org/
  • Pythontutor.com ist ein tolles Tool zum Visualisieren von Code. Noch besser, da etwas reduzierter, ist die Variante von cscircles
  • SQLZoo bleibt mein liebstes Tool zum Lernen von SQL, auf ähnlichem Niveau sind aber auch sqlbolt und das deutsche Tutorial https://imoodle.de/sqltutorial/home.html
  • Flaci ist ein geniales Tool für die Theoretische Informatik.
  • Regexone ist ein interaktives Tutorial zum Lernen von regulären Ausdrücken
  • https://ideone.com/ ist das perfekte Tool, wenn mal wieder irgendetwas an der Entwicklungsumgebung nicht funktioniert.
  • https://visualgo.net/en Die beste Seite um Algorithmen zu visualisieren.

UPDATE: Die neue Version von Gamegridp gibt es nun unter neuen Namen hier: miniworldmaker.it-teaching.de

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.