Python, die bessere Programmiersprache für den Informatikunterricht?
Das Land NRW hat zum nächsten Schuljahr neue Lehrpläne entwickelt und informiert im Moment die Kollegen über die Änderungen. Bei einer Veranstaltung, die ich zum Kernlehrplan Informatik besuchen durfte, wurde bekanntgegeben, dass, beginnend mit der nächsten Einführungsphase, nur noch die Programmiersprache Java für das Zentralabitur genutzt werden solle, da es im Zentralabitur nur noch Aufgaben mit Java-Quellcode geben wird.
Interessanterweise steht im neuen Kernlehrplan nirgendwo, dass ausschließlich Java eingesetzt werden darf. Es ist lediglich von einer “Programmiersprache” die Rede. Die Rückfrage, ob denn auch andere Sprachen wie z.B. Python eingesetzt werden dürften, wurde zwar nicht verneint. Allerdings wird es nicht empfohlen, da es beim Zentralabitur nur noch Aufgaben mit Java-Quelltext geben wird und Schüler, die eine andere Programmiersprache gelernt hätten ggf. Nachteile bei den Aufgaben dadurch hätten. Das hört sich für mich wie eine stille Festlegung auf Java an, die ich aber ablehne. Ich habe die Befürchtung, dass auf lange Sicht damit Java zur verpflichtenden Sprache festgelegt werden soll.
Da wir an unserer Schule seit diesem Jahr bewusst von Java auf Python umgestiegen sind, möchte ich hier für interessierte Kollegen/innen die Gründe darlegen und ggf. eine Diskussion anstoßen, ob Python nicht auf Dauer die bessere Lehrsprache ist.
Hintergrund
Bisher waren die Programmiersprachen Delphi und Java bei den Kollegen in NRW die verbreitetsten Programmiersprachen, wobei es nirgendwo explizit eingeschränkt ist, welche Programmiersprache man verwenden darf/soll. Es muss lediglich eine Sprache sein, in der man OOP umsetzen kann.
Delphi ist hier das historische Überbleibsel, da viele Kollegen ursprünglich mit Turbo-Pascal begonnen hatten und Delphi einen OOP-Überbau lieferte. In letzter Zeit gab und gibt es aber die Bestrebungen Java als modernere Programmiersprache in die Schulen zu bringen.
Ich selbst bin kein studierter Informatiker sondern habe wie der Großteil meiner Kollegen “nur” einen Zertifikatskurs besucht. Dort wird über einen Zeitraum von einem Jahr eine Programmiersprache (bisher Java oder Delphi) und Konzepte zur Vermittlung der Sprache sowie der Themen der Oberstufe behandelt. Grund für den Besuch war mein generelles Interesse an der Informatik, was aber leider im Studium nicht angeboten wurde.
Ich empfand meinen Kurs (in Java) und die dort präsentierten Materialien und das Konzept (s.u.) zunächst als ausgesprochen hilfreich, da ich vorher über wenige bis gar keine Programmierkenntnisse verfügte. Das dürfte bei vielen meiner Kollegen ähnlich sein. Nach diesem Kurs begann ich das Konzept im Unterricht einzusetzen. Privat kam ich parallel mit der Programmiersprache Python in Berührung und versuchte kleinere Projekte damit umzusetzen. Das ist mittlerweile 5 Jahre her. In den letzten vier Jahren habe ich mehrere Oberstufenkurse mit Java und dem in dem Kurs vermittelten Konzept unterrichtet. Meine Ausführungen beruhen also auf meinen konkreten Unterrichtserfahrungen. Mittlerweile unterrichten wir im Oberstufenunterricht mit Python.
Der Informatikunterricht soll kein ausschließlicher Programmierunterricht sein, viele Themen im Kernlehrplan benötigen noch nicht mal eine Programmiersprache, und das ist auch gut so. Trotzdem sollen grundlegende Konzepte der Programmierung erlernt werden. Hier sollte die Sprache eigentlich nebensächlich sein und jedem selbst überlassen werden, welche er verwendet. Insofern kann ich die Entscheidung auf Dauer ausschließlich auf Java zu setzen nicht ganz nachvollziehen.
Es geht hier nicht um einen prinzipiellen Vergleich zwischen Python und Java sondern um einen Vergleich im Hinblick auf Programmieranfänger und das Vermitteln von Konzepten im Informatikunterricht der Schule.
Meine Ausführungen beruhen dabei ausschließlich auf meinen gemachten Erfahrungen, ich würde mich über einen Erfahrungsaustausch mit anderen Kollegen freuen, da ich ja nicht der Nabel der Welt bin und bisweilen auch irren kann ;)
Einfachheit der Sprache
Java ist rein objekt-orientiert. Das hat zur Folge, dass jedes Programm mit einer Klasse geschrieben werden muss. Als einfacher Vergleich sei hier mal das oft benutzte “Hello World”-Beispiel genannt:
In Java:
public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World"); } }
In Python ist diese Aufgabe ein Einzeiler, da man in Python zwar unter Verwendung von Klassen programmieren kann, aber nicht muss:
print "Hello World"
Hier beisst sich meiner Meinung nach bei Verwendung von Java die Katze(Klasse) in den Schwanz. Ich muss in Java direkt mit einem Konzept programmieren, dass für viele Schülerinnen und Schüler noch gar nicht zu durchdringen ist, da sie zunächst mit ganz anderen elementaren Dingen beschäftigt sind, wie z.B. die Syntax der Sprache zu erlernen, was Variablen und Datentypen sind, die Verwendung der Programmieroberfläche, usw. Dies führt bei vielen Schülern schnell zu einer Überforderung. Die Antwort auf die Frage, warum man das so machen muss, kann nur oberflächlich erfolgen und ist für Schüler wenig befriedigend. Und Fragen in dieser Richtung wurden mir häufig gestellt.
Python geht hier den für Programmieranfänger besseren Weg, da man erst einmal gar nicht auf OOP eingehen muss, was bei einfachen Programmen meiner Meinung auch gar nicht notwendig ist und sogar viel mehr Arbeit verursacht als notwendig. Es könnte sogar bei Schülern der Eindruck entstehen, dass OOP das einzige Prinzip ist, da man ja ausschließlich mit Klassen arbeitet.
Syntax der Sprache
Python zwingt den Benutzer sein Programm zu strukturieren, indem es Einrückungen verlangt und dadurch im wesentlichen auf Klammern/Semikola verzichtet werden kann. Folgendes Code-Beispiel soll den Unterschied zeigen:
Java
if ( a == b ) { System.out.println("a ist gleich b"); } else { System.out.println("a ist ungleich b"); }
Python
if a == b: print "a ist gleich b" else: print "a ist ungleich b"
Neben der besseren Lesbarkeit hat man in Java acht Zeichen (nämlich ( ) { } { } ; ;), deren Vergessen eine mögliche Fehlerquelle sein kann, in Python gerade mal 2 (die beiden Doppelpunkte), bzw. 4, wenn man noch auf die richtige Einrückung achtet. In diesem Fall ist das aber bei Java immer noch eine 100% Steigerung gegenüber Python, wo Schülerinnen und Schüler Fehler machen können und die meisten Fehler, die Schüler zu Beginn in meinem Anfangsunterricht mit Java machten, sind auf fehlende schließende Klammern oder ein fehlendes Semikolon zurückzuführen. Hier kann zwar ein Java-Editor helfen, dessen Bedienung man aber auch erst einmal erlernen und dann auch benutzen muss. Das bringt wieder andere Probleme mit sich (s.u.). Die Fehler nehmen mit der Zeit zwar auch ab, gerade Anfänger sind dadurch aber schnell frustriert, weil das Programm nicht starten will und sie nicht wissen warum.
Hinzu kommt, dass Python-Quelltext gegenüber Java-Quelltext für Programmieranfänger lesbarer, weil kompakter, ist. Um eine Eingabe des Benutzers in Python (2.x) abzufragen, reicht ein einfaches
zahl = input("Bitte gib eine Zahl ein: ")
In Java sieht das anders aus, hier bedient man sich wieder eines Objekts einer Klasse, z.B. der Scanner-Klasse:
Scanner scanner = new Scanner(System.in); System.out.print("Bitte gib eine Zahl ein: "); int zahl = scanner.nextInt();
Für einfache Aufgaben, die man als Programmieranfänger zu sehen bekommt, bietet Python also eine viel kürzere Syntax an, da man eben nicht gezwungen ist OOP zu verwenden, ganz zu schweigen von den vielen Modulen in der Standardinstallation, die einem das Leben erleichtern (batteries included).
Ein weiteres Beispiel wäre eine for-Schleife. In Java wird in der Regel über eine lokale Variable iteriert, um z.B. ein Array zu durchlaufen:
String[] namen = {"Linus","Bill","Steve"}; for(int i = 0;i < namen.length; i++){ System.out.println(namen[i]); }
In Python kann man direkt über die Elemente der Liste iterieren, ohne einen Index zu bemühen
namen = ["Linus", "Bill", "Steve"] for name in namen: print name
Ehrlicherweise sei gesagt, dass man mit Java ab Version 5 die gleiche prinzipielle Schreibweise mit einer ArrayList möglich ist. In der Regel werden die Schüler aber erstmal mit einem Array konfrontiert, wo diese eben nicht geht.
OOP in Python – Unterschiede zu Java
OOP wird im sowohl im alten als auch neuen Kernlernplan als das zentrale Programmierparadigma propagiert. Dabei ist der Ansatz von Python und Java hier durchaus unterschiedlich, gerade was das Thema Datenkapselung und Geheimnisprinzip angeht. In Java sollen in der Regel alle Attribute bzw. verwendeten Objekte einer Klasse private sein, d.h. ein Zugriff ist außerhalb der Klasse nicht möglich. Um doch Zugriff zu gewähren sind dann die setter- bzw. getter-Methoden nötig. Das bläht den Quelltext unnötig auf und macht zusätzliche Arbeit, da man für jedes Attribut/Objekt zwei zusätzliche Methoden schreiben muss. Das kann zwar auch ein Editor für uns erledigen, aber dazu muss man auch wieder wissen, wie das geht (s.u.)
Ein Aha-Erlebnis hatte ich, als ein Schüler bei einer Aufgabe alle Variablen auf public gesetzt hatte. Als ich ihn fragte, warum er das so machen würde, sagte er: “Dann brauche ich nicht die getter- und setter-Methoden schreiben, das ist nervig!”
Es gibt mit Sicherheit auch gute Gründe für diese strikte Datenkapselung von Java, jedoch sehe ich diese Anwendungsfälle für Programmieranfänger nicht, zumal man sie ja in Python implementieren kann, wenn man denn unbedingt will/muss. Dasselbe ist zwar auch in Python möglich, jedoch nicht nötig, da Python einfach mal unterstellt, dass der Programmierer weiß, was er da tut, wenn er auf eine Objektvariable zugreifen will.
Oberflächenprogrammierung
Oft wird eine Programmierung einer grafischen Oberfläche als motivierend angesehen, jedoch sind die Frameworks für Java (z.B. swing oder awt) für Programmieranfänger zu schwer. Um dieses Problem zu umgehen, werden häufig didaktisch aufbereitete Bibliotheken verwendet, um die Schüler nicht zu überfordern (z.B. Hidden Classes, BasisBibliothek oder SuM) und trotzdem eine grafische Oberfläche zu Verfügung zu haben. Hier haben sich Kollegen viel Arbeit und Mühe gemacht, von der alle anderen profitieren (ich in meinen ersten Jahren auch). Vielen Dank dafür!
In meinem bisherigen Unterricht mit Java nutzte ich die oben verlinkte Basisbibliothek. Das grundlegende Konzept dahinter ist es, den Schülern eine begrenzte Klasse von Oberflächenelementen zur Verfügung zu stellen (Fenster, Knopf, TextFeld, Stift, …) mit denen die meisten Aufgaben dann bearbeitet werden können. Die ersten Stunden wird mit einem Stift auf einem Fenster gezeichnet, um die verschiedenen Kontrollstrukturen kennenzulernen. Ich muss den Schülern also quasi immer einen Teil des Quelltextes vorgeben (da sie ja noch nicht wissen, was Klassen und Objekte genau sind) und behandele dann Schleifen, if-Abfragen und Funktionen (eigentlich Methoden, da sie ja einer Klasse angehören) mit Parameterübergabe und Rückgabewerten usw..
In Python beginne ich komplett ohne Oberfläche und nutze die Eingabe über die Konsole, in dem die Schüler ein kleines Spiel programmieren, wie z.B. Zahlenraten. Auf der Fortbildung habe ich mit Kollegen darüber diskutiert, wie motivierend dies im Unterschied zum Programmieren mit einer Oberfläche ist. Die einhellige Meinung war, dass Programmieren mit Oberfläche für Schülern motivierender sei, “da sie ja auch bei der Bedienung des PCs im wesentlichen Oberflächen sehen und sie gerne wissen wollen, wie das geht”. Meine persönlichen Erfahrungen zeigen, dass dem nicht so ist. Die Schüler sind vielmehr dann motiviert, wenn sie schnell ein Ergebnis erzielen können und darauf aufbauend eigene Ideen weiterentwickeln können. Zumal geht die Oberflächenprogrammierung mit den didaktischen Bibliotheken auch an der “richtigen” Oberflächenprogrammierung vorbei, die bei Java wie bereits erwähnt für Programmieranfänger auch viel zu schwierig wäre (deswegen ja die didaktisch reduzierten Bibliotheken).
Wer in Python mit dem Ansatz der grafischen Oberfläche starten möchte, um z.B. Kontrollstrukturen einzuführen, kann das mit dem turtle-Modul auch machen (Beispiele z.B. hier), das in der Standardinstallation von Python dabei ist.
Bei Java bestanden die ersten Stunden im wesentlichen daraus den Schülern zu erklären, wie sie ein Programm anlegen, es im Editor starten und dann mit dem Stift ein “E” auf das Fenster zu zeichnen, indem ich dem Stift Befehle gebe. Dabei wurde viel Quelltext vorgegeben mit dem Hinweis, dass wir uns einige Besonderheiten daraus später noch genauer ansehen werden und das erstmal so hinzunehmen sei. Für mich und eine Vielzahl von Schülern eine unbefriedigende Situation.
Bei Python besteht die erste Stunde daraus, dass die Schüler ein kleines Zahlratespiel schreiben, das Ein- und Ausgabe über die Konsole vornimmt. Dieses Spiel wird dann in den nächsten Stunden erweitert und so Kontrollstrukturen und Datentypen eingeführt. Die Schüler haben eine Menge Spaß dabei auch eigene Ideen zu verwirklichen und sind in der Lage, selbstständig (z.B. im Internet) nach Erweiterungsmöglichkeiten zu suchen. Diese Möglichkeit ist bei der Verwendung von vorgegebenen Klassen nicht oder nur eingeschränkt möglich, da sie sonst keiner außerhalb der Schule nutzt.
Mein Vorgehen bedeutet natürlich nicht, dass ich den Schülern keine Oberflächenprogrammierung zeige, aber die kommt erst zu einem Zeitpunkt, wo das Konzept der OOP und Vererbung bereits verstanden worden ist. Hier eignet sich PyQt bzw. PySide meinen Erfahrungen nach hervorragend, da mit dem Qt-Designer eine Software zur Oberflächenkonstruktion zur Verfügung steht, die von Schülern gut benutzbar ist. Es ist dann natürlich notwendig die Konzepte der ereignisorientierten Programmierung (Signal-Slots) sowie der Layouts zu zeigen, was aber meiner Erfahrung nach Schülern keine Probleme bereitet. Im Gegenteil: Bei den didaktisch aufbereiteten Bibliotheken werden die Oberflächenelemente meistens absolut positioniert, was bei vielen Schülern sehr viel Zeit braucht, da sie ja eine schöne Oberfläche haben möchten. Eine Erweiterung einer Oberfläche nimmt noch einmal viel Zeit in Anspruch, da alle anderen Oberflächenelement ggf. neu positioniert werden müssen.
Schwache Schüler können mit dem Qt-Designer einfache Oberflächen erstellen, starke Schüler können selbstständig mit der Online-Dokumentation schnell eigene Erweiterungen einbauen. Die mit dem Qt-Designer erzeugte Oberfläche wird in einer Datei gespeichert, die mit einer einzigen Befehlszeile im Programm eingebunden werden kann. Beim Start des Programms wird die Oberfläche dann erzeugt.
Eine Differenzierung und effizientes Arbeiten ist hier meiner Meinung nach besser möglich als bei den Einschränkungen von didaktischen Bibliotheken.
Rückmeldungen der Schüler
Mein jetziger Q1-Kurs hatte das Glück (oder Pech) beide Programmiersprachen kennenzulernen, da meine Kollegin und ich im letzten Jahr noch in der EF in Java unterrichtet und zum Schuljahresbeginn einen Wechsel vollzogen haben. Die ersten Stunden bestanden im wesentlichen darin bekannte Konzepte in der neuen Sprache umzusetzen. Das war als Wiederholung sehr gut und die Schüler lernten schnell die Syntax von Python. Ich habe heute einfach mal nachgefragt, wie die Schüler beide Programmiersprachen sehen und wie sie den Wechsel fanden. Die Antwort war eindeutig, ausnahmslos alle finden Python wesentlich einfacher und wünschen sich Java nicht zurück.
Argumente für Java?
Natürlich gibt es auch Argumente für die Verwendung von Java, die immer genannt werden. Java wird in vielen Bereichen der Wirtschaft/Studium eingesetzt, Java ist für jede Plattform verfügbar und ist universell einsetzbar. Nur: Alle diese Argumente treffen auch auf Python zu. Und wer später im Studium/Beruf auf das Wissen der Schule zurückgreifen muss, sollte die Konzepte doch auch auf jede andere Sprache transferieren können.
Natürlich gibt es für Java didaktisch vorbereitete Standardbibliotheken und auch viel Unterrichts-Material im Netz (für Python übrigens auch), aber der Umkehrschluss bedeutet meiner Meinung nach nicht, dass man wegen der bereits geleisteten Arbeit auf einer Sprache bestehen sollte, wenn es eine (mMn bessere) Alternative gibt.
Lehrer sind (auch) Schüler
Die aktuelle Lehrerstellen-Situation in NRW ist in den MINT-Fächern alles andere als rosig und wird in der nächsten Zeit wohl nicht besser. Also müssen immer mehr Kollegen durch einen Zertifikatskurs zu Informatik-Lehrern ausgebildet werden. Auch dort ist der überwiegende Teil der Lehrer Programmieranfänger, d.h. sie sind zunächst mit den gleichen Problemen konfrontiert, die Schüler im Einstiegsunterricht haben. Ein einfacherer Einstieg in eine Programmiersprache würde ihnen viel Zeit/Nerven sparen, die sinnvoller genutzt werden könnte.
Apropos Zeit und Nerven: Ich habe festgestellt, dass das Korrigieren von Klausuren mit Python-Code wesentlich angenehmer ist (Schüler achten auf Einrückungen, Code ist kürzer und lesbarer). Das ist ein weiterer Vorteil gegenüber Java, der im Lehreralltag nicht zu unterschätzen ist.
verwendete Software/IDEs im Unterricht
Ich bin mit einem Kollegen bei uns für die Administration des Schulnetzwerks zuständig und somit auch mit der Problematik der Softwareinstallationen. Um Java-Entwicklung für Schüler angenehm zu gestalten sind bestimmte Editoren notwendig, wir haben bisher Eclipse verwendet. Es gibt aber auch noch andere wie BlueJ oder Greenfoot. Ich gebe zu, dass ich mich nicht wirklich mit den IDEs (bis auf Eclipse) beschäfigt habe, weil es unter Python eben meiner Meinung nach nicht nötig ist, zusätzliche IDEs als Programmieranfänger zu verwenden, da ich mit einem einfachen Texteditor bereits loslegen kann und kein Projekt im Anfangsunterricht so komplex wird, dass man die Hilfe einer IDE in Anspruch nehmen müsste. Im Nachhinein muss ich sogar sagen, dass ich es in vielen Fällen sogar kontraproduktiv finde, eine IDE zu verwenden, da man viel Zeit in die Bedienung investieren muss und nur einen Bruchteil der Funktionen als Anfänger wirklich verwendet. Ein Schüler sagte mir heute, dass er die Oberfläche von Eclipse als sehr unübersichtlich in Erinnerung habe und mit IDLE alles genauso machen kann, was er vorher mit Eclipse gemacht hat. In Python kann ich in IDLE sogar interaktiv Programme/Programmteile testen, was sehr viel Zeit spart. Auch ein Debugger ist eingebaut, wenn die Fehlersuche komplizierter wird.
Ein interessanter Vergleich: Die letzten Jahrgänge habe ich in Java am Ende der Einführungsphase mit Objekten und Klassen abgeschlossen. In der jetzigen Einführungsphase sind wir jetzt, zwei Wochen vor den Osterferien, mitten bei Objekten und Klassen, ohne dass ich Unterrichtsstoff weggelassen hätte oder die Übungsphasen kürzer gewesen wären.
Die zusätzliche IDE muss neben Java installiert und gepflegt werden. Ebenso muss ich mich um das Einbinden der didaktischen Bibliotheken kümmern. Das ist alles mit Zeit verbunden, die man gerne für andere Dinge verwenden würde. Einige Schulen, die externe Dienstleister haben, müssen sogar für zusätzliche Installationen bezahlen.
Bei Python reicht mir eine Standardinstallation aus (die bei Linux und MacOS übrigens bei der Grundinstallation des OS dabei ist). Daneben installiere ich noch PyQt4, das ist aber wirklich die einzige zusätzliche Installation. Auch hier gilt: Wer eine IDE verwenden will, kann das natürlich tun. Bei Java habe ich aber das Gefühl, dass es ohne IDE um einiges schwieriger ist, effizient zu programmieren.
Seit letztem Schuljahr haben wir einen Raum mit 24 Thin-Clients, die von einem Linux-Server mit dem LTSP betrieben werden. Ich habe versucht dort Eclipse zu starten und bin kläglich gescheitert, da die benötigten Resourcen einfach zu hoch sind. Das Programmieren mit Python ist in diesem Raum dagegen kein Problem.
Fazit
Wir an unserer Schule haben uns aus den genannten Gründen für Python entschieden. Ich würde mir wünschen, dass das Land keine strikten Vorgaben einführt und den Schulen hier ihre Freiheit lässt. Natürlich ist es mit mehr Aufwand verbunden auch Quelltexte für eine andere Programmiersprache im Zentralabitur zur Verfügung zu stellen, aber verglichen mit dem zusätzlichen Arbeitsaufwand den alle Informatik-Kollegen meiner Meinung nach bei der Verwendung von Java gegenüber Python haben, ist das verschwindet gering.
Eine andere Möglichkeit wäre es den Quelltext, der in den Aufgaben benötigt wird in einem vorher definierten Pseudo-Code zu schreiben, den die Schüler bei der Planung und Implementation von Algorithmen sowieso lernen sollen. Somit wäre jeder in der Wahl seiner Programmiersprache frei.
Ich bin gerade dabei parallel zum Unterricht ein Skript für Python zu schreiben, das ich meinen Schülern an die Hand geben kann, jedoch befürchte ich im Moment, dass ich für den Mülleimer arbeite, wenn die Festlegung auf Java Bestand haben sollte. Das ist frustrierend und nicht gerade motivierend.
Ich fordere gar nicht Java in der Schule abzuschaffen sondern würde mir für die Zukunft wünschen, dass auch Alternativen Berücksichtigung finden.
45 Gedanken zu „Python, die bessere Programmiersprache für den Informatikunterricht?“
Meiner Meinung nach vergleichen Sie hier OPP mit der strukturierten Programmierung.
Wenn Sie grundsätzlich anfangen über den Objektgedanken zu programmieren sieht es aber schon anders aus, dann wird die Zeile “System.out.print” schon ganz anders interpretiert. Zu: “dass jedes Programm mit einer Klasse geschrieben werden muss” kann ich nur sagen, es ist kein Programm sondern das Verhalten eines Objektes welches man festlegt. Der gedankliche Umgang mit der OOP darf nicht geprägt werden durch Vorerfahrungen in der strukturierten Programmierung. Wer versucht ein strukturiertes Programm in die Hülle der OOP einzuflechten wird immer den Zwiespalt erleben, den ich in Ihren Zeilen vermute. Gruß
Ernst Schulz
Die Krux das Java über eine Klasse den Programmeinstieg sucht, ist für den Unterricht nicht glücklich. Smalltalk macht es hier konsequenter.
Ja, natürlich! OOP ist aber nur ein mögliches Paradigma unter vielen und sollte mMn nicht ausschließlich vermittelt werden. Ich kann ja das print-Beispiel auch in Python mittels einer Klasse abbilden, wenn ich denn will. Ich habe also auch die Möglichkeit grundsätzlich mit OOP zu arbeiten. Aber es ist eben nicht notwendig bzw. für diese einfache Aufgabe zu aufgeblasen, weil es in diesem Fall in Python einfacher/kürzer geht. Java schreibt mir hier OOP vor! Erst bei größeren Projekten/Strukturen ist OOP aber erst von Vorteil. Um diesen Vorteil zu erkennen sollte man aber mindestens eine weitere Art kennenlernen und da ist der Einstieg mit einer Sprache, in der man auch einfache Skripte erstellen kann, mMn leichter.
Ich habe übrigens keinen Zwiespalt, ich nehme nur nicht gerne einen Bosch-Hammer, wenn ich einen Nagel aus der Wand ziehen möchte ;)
Ich teile einige der Argumente (nicht alle!), komme mit weiteren:
wir arbeiten mit Smartphones (seit 2007) – auf denen Python-Programme entwickelt werden, die auf diesen Geräten auch ablauffähig sind. Ich halte Java als Programmiersprache für den Unterricht didaktisch für völlig ungeeignet.
Wir sollten unseren Unterricht möglichst programmiersprachenunabhängig gestalten – vor allem sollten Abituraufgaben programmiersprachenunabhängig in Aufgabe/n und Lösung/en sein, denn wir unterrichten keine Sprachen, sondern Konzepte, die auch in 20 und 30 Jahren noch gelten.
Prof. Dr. L. Humbert
Ich habe bis vor einigen Jahren OOP anhand PHP unterrichtet, weil ich es – wie im Artikel dargestellt – ebenfalls als Vorteil ansah, dass die Verwendung von Klassen und Objekten in PHP optional ist.
Unter dem Java-Zwang des Zentraabiturs bin ich auf Java umgestiegen. Meine persönliche Erfahrung ist ganz deutlich die: In Java geht ohne Klassen und Objekte gar nichts – und deshalb haben die Schüler/innen das objektorientierte Paradigma nach kurzer Zeit kapiert und wenden es routiniert an. Wenn man mal so, mal so machen kann (meine Erfahrung aus PHP), dann ist die Lernkurve am Anfang steiler, stagniert dann aber massiv – weil es auch nach 1, 1.5 Jahren noch Leute gibt, die der Objektgedanke stresst.
Python eignet sich mMn im schulischen wie beruflichen Umfeld hervorragend. U.a. wegen:
– einfache Syntax (fast Pseudo-Code)
– leicht zu lernen
– wenige Flüchtigkeitsfehler
– vermittelt Gefühl für schönen Quelltext
– alle wichtigen Programmierparadigmen
– Bibliotheken für ziemlich alles
– extrem vielseitige Anwendung
– Skripte und Automatisierung (vgl. Bash oder cmd)
– Desktopprogramme aller Art inkl. GUI
– Webanwendungen
– besonders beliebt bei Datenanalyse, Machine Learning etc.
– weit verbreitet und immer weiter aufsteigend (TIOBE etc.)
… die leichte Syntax und die vielseitige Anwendung hat eigentlich jeweils 3 Unterpunkte (eingerückt). Das ist im Kommentar oben leider nicht zu sehen.