Freie Software in der Schule: Programmieren mit Python und Spyder

  Roland Lötscher   Lesezeit: 11 Minuten  🗪 1 Kommentar Auf Mastodon ansehen

Welche Programmiersprache soll man heutzutage Gymnasiast:innen beibringen und welche Entwicklungsumgebung eignet sich dafür? In diesem Artikel wird eine Lösung für den Programmierunterricht im Schwerpunktfach PAM (Physik und Angewandte Mathematik) präsentiert.

freie software in der schule: programmieren mit python und spyder

Wer Schüler:innen das Programmieren beibringen soll, kommt nicht darum herum, sich über Programmiersprache und Entwicklungsumgebung Gedanken zu machen. Das Programmieren wird an unserem Gymnasium im Kanton Zürich in drei verschiedenen Fächern unterrichtet:

  • im (nicht-obligatorischen) Ergänzungsfach Informatik im 12. Schuljahr (Maturajahr),
  • im (nicht-obligatorischen) Schwerpunktfach PAM (Physik und angewandte Mathematik) im 11. Schuljahr
  • im frisch eingeführten (obligatorischen) Grundlagenfach Informatik im 9. und 10. Schuljahr

Eine Schnellbleiche im Programmieren erhalten Schüler:innen auch im 2. Semester des 7. Schuljahrs im Rahmen des Fachs "Naturwissenschaft und Informatik". Dies betrifft aber nur die Schüler:innen, die bereits ab dem 7. Schuljahr das Gymnasium besuchen. Es ist auch möglich, erst im 9. Schuljahr dazuzustossen.

Als Mathematik-Lehrperson unterrichte ich von den genannten Fächern mit Programmierbezug vor allem das Schwerpunktfach PAM und meine folgenden Empfehlungen beziehen sich auf den Schwerpunktfach-Unterricht. Inwiefern sich die Empfehlungen auf ein anderes Fach/ein anderes Schulsystem übertragen lassen, muss der Einschätzung des:der Leser:in überlassen werden.

Wahl der Programmiersprache

An Schweizer Gymnasien wird die Lehrfreiheit gross geschrieben. Es gibt wenig Vorgaben, was wie zu unterrichten ist. Der Lehrplan gibt bloss eine grobe Richtung vor. Bezogen auf das Schwerpunktfach an unserer Schule lautet sie etwa:

Algorithmische Lösungen für einfache Probleme finden und in eine Programmiersprache umsetzen

Insbesondere ist hier die Wahl der Programmiersprache der Lehrperson überlassen. Ich habe mich hier für Python entschieden und zwar aus folgenden Gründen:

  • Python eignet sich gut für den Programmiereinstieg, da die Sprache relativ einfach zu erlernen ist und der natürlichen Sprache relativ nahe kommt.
  • Python muss nicht kompiliert werden und es können auch einzelne Befehle in der Konsole getestet werden.
  • Python eignet sich gut für den Alltag, um mit Hilfe von kleinen Skripten Dinge zu automatisieren und den eigenen Arbeitsfluss zu optimieren.
  • Python hat mächtige Bibliotheken für wissenschaftliches und symbolisches Rechnen, Datenbearbeitung, Visualisierung und maschinelles Lernen. All dies ist in Studienrichtungen und Berufen relevant, in welchen Schüler:innen aus dem Schwerpunkt PAM typischerweise landen.
  • Python lässt sich für extrem viele verschiedene Anwendungszwecke einsetzen und gilt (meines Erachtens zu Recht) als zweitbeste Programmiersprache für alles.
  • Python ist (wie allerdings die meisten Programmiersprachen) frei und plattformübergreifend einsetzbar.
  • Python-Programme sind meist um einiges kürzer und übersichtlicher als Programme in kompilierten Programmiersprachen wie z.B. Java oder C/C++.

Übrigens hat sich an unserem Gymnasium auch die Informatik-Fachschaft auf die Programmiersprache Python im Grundlagenfach geeinigt. Künftige Schüler:innen im Schwerpunktfach werden also auch Programmiererfahrung in Python mitbringen, wenn sie ins 11. Schuljahr eintreten.

Wahl der Entwicklungsumgebung für Python

Die Entwicklungsumgebung soll einerseits einsteigerfreundlich und übersichtlich sein, aber die Schüler:innen auch mit ausreichend Funktionalität unterstützen können etwa was das Ausführen von Code, Syntax-Hervorhebung, Autovervollständigung, die Fehlersuche und die Anzeige und Visualisierung von Daten betrifft. Hier muss ein Mittelweg gefunden werden zwischen einem elementaren Texteditor und einer professionellen IDE. Am unteren Komplexitäts-Ende finden sich etwa Idle (Python’s Integrated Development and Learning Environment) und Thonny (Python IDE for beginners), am oberen Ende Pycharm und VS Code bzw. VSCodium. Erwähnung verdienen auch TigerJython (A Python IDE for Education) und Jupiter-Notebooks (webbasierte interaktive Umgebung). TigerJython ist schlicht gehalten und wird von didaktisch hochwertigem Unterrichtsmaterial begleitet. Es beruhte in der Vergangenheit auf einer Java-Implementierung von Python 2 (namens Jython), was die Verwendung von Modulen wie numpy verunmöglichte. In der neusten Beta-Version lassen sich auch andere Python-Interpreter verwenden. Wie gut das noch mit dem Unterrichtsmaterial zusammenpasst, wäre abzuklären. Meine Empfehlung lautet jedoch Spyder (The Scientific Python Development Environment).

Im Bild oben sieht man die Spyder Entwicklungsumgebung. Links im Bild ist der Code, der die Mandelbrot-Menge generiert und mit Hilfe von matplotlib darstellt, rechts unten die interaktive Konsole. Rechts oben kann zwischen "Hilfe", "Variablenmanager", "Abbildungen" und "Dateien" umgeschaltet werden. Ganz oben gibt es auch die Menüleiste sowie die Werkzeugleiste mit Knöpfen zum Speichern von Dokumenten (in Weiss), Ausführen von Python-Code (in Grün), Debuggen (in Blau), sowie verschiedenen Einstellungen. Es gäbe noch weitere Bereiche, die eingeblendet werden könnten (etwa für Profiler, statische Codeanalyse, Haltepunkte, Projektverwaltung etc.) und viele Konfigurationsmöglichkeiten, womit sich das Aussehen und Layout des Editors verändern liessen. Jedoch kommen einem diese zusätzlichen Möglichkeiten nicht in die Quere, wenn man sie nicht braucht. Mir gefällt die grosse Übersichtlichkeit, die trotz hoher Funktionalität vorhanden ist. Alles hat seinen logischen Platz.

Auch die Integration von populären wissenschaftlichen Bibliotheken wie matplotlib, numpy und sympy vereinfacht das Leben. Konkret bedeutet dies zum Beispiel im Falle von matplotlib, dass ich den Code im Bild nur über Klick auf den grünen Dreiecksknopf ausführen muss und schon erscheint unter "Abbildungen" das über matplotlib generierte Bild (die Mandelbrot-Menge) und wird in die Verlaufsgeschichte (rechts davon) eingefügt. So lassen sich aktuell erzeugte Plots mit früheren Versuchen einfach vergleichen. Im Falle von numpy lassen sich Matrizen (wie etwa die Matrix it im Code-Beispiel) einfach durch Klick auf die entsprechende Variable im Variablen-Editor anzeigen.

So lässt sich gut ein Überblick über die generierten Daten erhalten, auch wenn man sich Zeile für Zeile durch den Code bewegt. Im Falle von Sympy erhält man eine saubere LaTeX-formatierte Ausgabe:

Weitere Inhalte

Programmier-Aufgaben im Schwerpunktfach haben bei mir oft einen direkten Bezug zur Mathematik, wie oben die Aufgabe zur Erzeugung der Mandelbrot-Menge. Weitere Aufgaben dienen z.B. dazu

  • eine Laplace-Wahrscheinlichkeit durch Generierung aller möglichen Fälle zu berechnen,
  • nachzurechnen, ob eine eingegebene Zahl eine Primzahl ist,
  • das Sieb des Erathostenes zu erzeugen,
  • eine natürliche Zahl in einem bestimmten Intervall zu erraten,
  • alle Darstellungen einer natürlichen Zahl als Summe vierer Quadrate zu erhalten,
  • die Eulersche Zahl auf mehrere Tausende Nachkommastellen zu berechnen,
  • Wurzeln mit Hilfe des Heron-Verfahrens zu approximieren,
  • den Schnittpunkt zweier Tangenten an einen Graphen zu berechnen,
  • mit Hilfe einer Häufigkeitsanalyse einen Text zu dechiffrieren, in welchem die Buchstaben nach festem Schema permutiert worden sind,
  • Punkte, Vektoren, Matrizen und Quaternionen mit Hilfe objektorientierter Programmierung zu definieren,
  • Drehungen im Raum mit Hilfe von Quaternionen zu realisieren.

Damit soll insbesondere nebst dem spielerischen Umgang mit mathematischen Objekten und Konzepten das algorithmische Denken gefördert werden. Häufig besteht der erste Schritt zur Lösung darin, formulieren zu können, wie man etwas Schritt für Schritt von Hand lösen würde, wenn man genügend Zeit hätte.

Installation von Spyder

Spyder steht unter der MIT-Lizenz und kann auf Linux, Windows und MacOS bequem installiert werden. Auf Debian-basierten Linux Distributionen genügt dazu ein

sudo apt install spyder

An unserem Gymnasium bringen alle Schüler:innen ihr eigenes Gerät mit und in Klassen mit Schwerpunkt PAM haben erfahrungsgemäss die meisten Windows installiert, jedenfalls solange sie (noch) nicht zu Linux konvertiert sind. ;-) Ich empfehle dann jeweils WinPython zu installieren. Dies ist eine Python-Distribution for Windows, die vorgefertigte Pakete für wissenschaftliches Python und eben auch Sypder enthält. Auch pygame für Spieleprogrammierung und pyQt5 für die Erstellung einer graphischen Benutzeroberfläche sind dabei, was meine Schüler:innen beim projektartigen Arbeiten (im zweiten Semester des vorletzten Schuljahrs) gerne verwenden. Es ist also alles Wesentliche mit dabei. Beim projektartigen Arbeiten muss meist einzig noch git via "Git for Windows" nachinstalliert werden. Schliesslich will ich als Lehrperson die Beiträge der Gruppenmitglieder eines Projekts bei der Beurteilung auseinanderhalten können und die Schüler:innen können lernen, zusammenzuarbeiten und ihre Beiträge (Commits) sauber zu beschreiben.

In Sypder lassen sich im Übrigen auch Kommandozeilen-Befehle in der Konsole ausführen. Man muss vor den Befehl nur ein Ausrufe-Zeichen schreiben. So können also auch git-Befehle ausgeführt werden.

Nun würde mich natürlich auch interessieren, welche Programmiersprachen und Entwicklungsumgebungen ihr, liebe Lehrerkolleg:innen, für den Programmier-Unterricht einsetzt und ob die Kombination Python/Spyder auch was für euch wäre. Schreibt es bitte in die Kommentare.

Quellen:

Tags

FediLZ, Programmieren, Python, Spyder, Entwicklungsumgebung

Ralf Hersel Admin
Geschrieben von Ralf Hersel am 26. November 2024 um 20:06

Danke für den Hinweis auf die Spyder-IDE; die kannte ich bisher nicht. Mich schreckt die Installationsgrösse von 1,6 GB ab. Flatpak: https://flathub.org/apps/org.spyder_ide.spyder Ich bin mit Geany zufrieden: klein, schnell, ausreichend. Kann aber wesentlich weniger als Spyder. Flatpak: https://flathub.org/apps/org.geany.Geany