Ich habe Python im Jahr 2007 entdeckt – auf der Suche nach einer geeigneten Programmiersprache für den Informatikunterricht
im Wahlpflichtbereich (seinerzeit Klasse 9/10). Bis dahin hatte Pascal für einige Jahre gute Dienste geleistet.
Die Anfänge von Pascal reichen allerdings zurück bis in die frühen 70er Jahre des letzten Jahrhunderts, und das merkt man der Sprache auch an.
Modernere Sprachkonzepte, wie etwa die Objektorientierung, wurden Jahre später nachträglich oben draufgepackt. Die Möglichkeiten der Benutzerinteraktion
waren nicht mehr zeitgemäß. Eine Erweiterung von Pascal auf Delphi/Lazarus war für die Sekundarstufe I nicht angezeigt.
Also habe ich mich umgesehen ...
Java, JavaScript, Ruby, PHP und einige andere habe ich mir angesehen. Experimente gemacht und
schließlich die meisten dieser Sprachen als nicht geeignet verworfen. Übrig geblieben ist Python.
Erstsprache Python
Bis dahin hatte ich hauptsächlich in Pascal (inkl. Delphi, Kylix und Lazarus) und Java programmiert und so war ich – und bin es bis heute – sehr bald
von der Einfachheit und zugleich unglaublichen Leistungsfähigkeit von Python angetan.
Kleinere Programmierprobleme lassen sich fix mit ein paar Zeilen lösen.
Auf der anderen Seite lassen sich selbst komplexe Programme mit GUI entwickeln oder HTML-Seiten dynamisch (serverseitig) erzeugen und im
Browser anzeigen. Formulare auf Webseiten lassen sich auslesen und verarbeiten. Und die Datenstrukturen, die Python mitbringt, sind elegant, mächtig und effizient.
Hinzu kommt das – gerade für Programmieranfänger – geniale Prinzip der Blockbildung durch Einrückung. Es zwingt zum strukturierten Programmieren
und reduziert zugleich die Anzahl an Klammern oder Schlüsselwörtern, was erheblich zur guten Lesbarkeit von Quelltexten beiträgt bzw. beitragen kann.
Außerdem ist Python einschließlich einer für den Informatikunterricht völlig ausreichenden integrierten Entwicklungsumgebung
(IDE) kostenlos und für alle gängigen Betriebssysteme verfügbar.
Und – last, but not least – Python ist verglichen mit manchen anderen Sprachen hervorragend dokumentiert.
Die offizielle Dokumentation ist enorm umfangreich und immer auf aktuellstem Stand.
Aktualität und Qualität kann man ebenfalls dem deutschen Python-Forum bescheinigen –
auch hier hebt sich Python positiv von vielen anderen Sprachen ab.
Ein Beispiel
Der Anwender soll eine natürliche Zahl eingeben, das Programm addiert alle ganzzahligen Werte von 1 bis zu dieser Zahl und
gibt die Summe als Ergebnis aus. Ja, man kann das mit der Gaußschen Summenformel auch direkt berechnen ...
Zum Vergleich zeige ich eine Lösung in Pascal und das formale Äquivalent in Python. Das wäre die Lösung, die
im Rahmen des Informatikunterrichts entwickelt bzw. erwartet würde.
Lösung (Pascal):
var k,n,summe:longint;
beginwrite('Zahl eingeben: ');
readln(n);
summe:=0;
for k:=1 to n do begin
summe:=summe+k
end;
writeln('1+..+',n,' = ',summe);
end.
Lösung (Python):
n = int(input("Zahl eingeben: "))
summe = 0
for k inrange(n+1):
summe += k
print("1+..+",n,"=",summe)
Beide Programme werden (ggf. innerhalb einer eingesetzten Entwicklungsumgebung) im Terminal ausgeführt.
Den Ablauf des Programms – für den Anwender sehen beide gleich aus – kann man sich hier im (simulierten) Terminalfenster
selbst ansehen:
Zahl eingeben:
Functional Power
An diesem – simplen – Beispiel lässt sich zugleich auch wenigstens ansatzweise aufzeigen,
wie elegant und knapp sich manche Problemstellung in Python lösen lässt.
In dem Fall liegt das an den Elementen der „funktionalen Programmierung“, die Python (als primär imperative und objektorientierte Sprache)
standardmäßig mitbringt. Das Paradigma der funktionalen Programmierung ist für den Informatikunterricht in der Mittelstufe
allerdings nicht relevant, die beiden nachfolgend gezeigten Quelltexte gehen also über den Unterricht hinaus.
Lösung (nochmal Python):
n = int(input("Zahl eingeben: "))
print("1+..+",n,"=",sum(range(n+1)))
Mit Python 3.8 wurden so genannte „Zuweisungsausdrücke“ („Assignment Expressions“) neu eingeführt. Damit lässt sich
das Beispielprogramm sogar als Einzeiler schreiben, und zwar als echter Einzeiler ohne Semikolon,
der faktisch nur aus einem einzigen Funktionsaufruf der print()-Funktion besteht:
Die neue Programmiersprache für den Informatikunterricht schien mit Python also gefunden.
Zumindest solange man sich auf das EVA-Prinzip beschränkt – „Eingabe - Verarbeitung - Ausgabe",
und zwar über das Terminal. Das kann Pascal auch. Etwas weniger elegant, aber im Ergebnis vergleichbar.
Die „neue“ Programmiersprache sollte aber ja gerade den Mangel von Pascal im Bereich einer zeitgemäßeren
Anwenderinteraktion beheben. Was hat Python da zu bieten?
Viel. Es gibt mehrere GUI-Toolkits, die auf Python aufsetzen und mit denen sich auch komplexe GUI-Anwendungen
umsetzen lassen – wie etwa der von mir entwickelte Modellrechner MOPS:
Besonders attraktiv ist Tkinter.
Nicht, weil es die umfangreichste Ausstattung an
GUI-Elementen („Widgets“) mitbringt oder optisch besonders ansprechend ist.
Verglichen etwa mit PyQt oder Kivy ist eher das Gegenteil der Fall.
Attraktiv ist Tkinter, weil es zur Standardbibliothek von Python gehört und somit sofort einsatzbereit ist.
Und der Quelltext bleibt – verglichen mit allen anderen mir bekannten GUI-Toolkits – relativ übersichtlich. Aber eben auch nur „relativ“.
Nach gründlicher Beschäftigung und reichlich Experimentieren mit Tkinter lautete mein Fazit:
Für den Einsatz im Informatikunterricht der
Mittelstufe ist selbst Tkinter zu komplex. Trotz seiner relativen Schlichtheit würde der Einsatz dieses GUI-Toolkits dem Erlernen der wesentlichen
Elemente der Programmierung im Wege stehen. Es droht zu viel „copy & paste“ und zu wenig „echte Programmierung“.
Was also tun?
Python mitohne Schildkröte
Zur Standard-Bibliothek von Python gehört das Modul turtle. Es handelt sich dabei
die Adaption der so genannten Turtle-Grafik der Programmiersprache Logo,
die Ende der 60er Jahre des letzten Jahrhunderts als spezielle Lernsprache für Kinder entwickelt wurde: Eine „Schildkröte“ (engl. turtle) in Gestalt eines kleinen Dreiecks
wird mittels eines minimalen Befehlssatzes in einem Zeichenfenster bewegt (relative Bewegungen und Drehungen) und kann durch „heben“ und „senken“ eines
„Stiftes“ dabei Zeichnungen erstellen.
Die Idee der Turtle-Grafik ist aus meiner Sicht für die (graphische) Programmierung im Rahmen des Informatikunterrichts tatsächlich interessant,
weil entsprechende Programmieraufgaben bzw. die Problemlösungen auch das geometrische Vorstellungsvermögen schulen.
Nun war allerdings zum Zeitpunkt meiner Suche nach einer neuen Programmiersprache Python 2.5 die aktuelle Version und das dort enthaltene turtle-Modul
war in seinen Möglichkeiten derart eingeschränkt, dass man mehr als ein paar Spielereien mit unansehnlichem Ergebnis damit nicht machen konnte.
Fazit: Die Schildkrötenidee ist gut, das von Python (2.5) angebotene turtle-Modul aber für ernsthafte Programmierung selbst
für den Informatikunterricht der Mittelstufe leider völlig unbrauchbar. Es musste also eine andere Lösung gefunden werden ...
Python mit Frosch
Diese Lösung bestand letztlich darin, für den Einsatz im Unterricht ein eigenes Modul zu entwickeln, das auf dem turtle-Grafik-Konzept basiert,
dieses aber durch eine erheblich erweiterte Funktionalität und eine konsequent objektorientierte Realisierung unterrichtstauglich macht: Das frog-Modul.