An alle Schüler und Studenten mit Informatikproblemen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Bei uns an der Schule wird auch Python unterrichtet. Wobei "wurde" ist eingetlich die besserer Formulierung. Es ist jetzt auf Java umgestellt worden, damit man die Lehrer besser unter den Schulen austauschen kann...

Python wird immerhin zum Einstieg verwendet.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Lerikson
User
Beiträge: 14
Registriert: Freitag 13. November 2009, 08:52

ich versuche gerade meinen Info Lehrer von Python zu überzeugen :D :D
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Lerikson hat geschrieben:ich versuche gerade meinen Info Lehrer von Python zu überzeugen :D :D
Und mit welchen Argumenten?
Lerikson
User
Beiträge: 14
Registriert: Freitag 13. November 2009, 08:52

- einfacher zu lernen als Java (also für die Klasse, ich habe mich vor meiner Python Zeit mit Java auseinander gesetzt)
- bietet OOP an
- coole Syntax
- relativ schnell (in Entwicklung)
[- Ausführungsgeschwindigkeit ist auch nicht übel, worauf es aber ja nur in sehr seltenen Fällen drauf an kommt...;)]
- viele Einsatzmöglichkeiten

...das sind so meine Argumente für Python ;D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Na dann gebe ich mal als Stelle des Lehrers ein paar Argumente für Java:

- sehr gute Unterstützung durch kostenlose Werkzeuge
- reichhaltige Auswahl an Lehrbüchern
- praxisrelevant und jobsuchfördernd
- es gibt spezielle "Sandkasten"-Systeme für die Ausbildung wie z.B. BlueJ
- sehr umfangreiche Klassenbibliothek
- Ausblick auf weitere Scriptsprachen auf der JVM als Plattform möglich

Zu deinen Argumenten:

Das Python OO unterstützt, ist keine Besonderheit gegenüber Java. "Coole Syntax" ist kein echtes Argument und fällt wahrscheinlich mit "einfacher zu lernen" zusammen falls du nicht "lesbar" meinst. Und relativ schnell in der Entwicklung meint wahrscheinlich die interaktive Kommandozeile, die du mit Eclipse auch in Java haben kannst (ein sehr selten genutztes Feature) und ansonsten nicht so wichtig für Beispielprogramme in der Ausbildung ist, wie ein Debugger, mit dem man IMHO sehr gut Schritt für Schritt nachvollziehen kann, wie ein Programm funktioniert. Und derartige Dinger sind in jeder Java-IDE seit Jahren Standard.

Es bleibt somit nur das Argument, dass die Syntax einfacher erlernbar ist und die Sprache (IMHO) lesbarer als Java-Programme sind.

In Java fällt es dafür einfacher, dank IDE-Unterstützung und Code-Completion ideomatisch korrekten Code zu schreiben (oder man akzeptiert, dass die IDE jede Zeile mit einer Warnung versieht) und mit unbekannten Bibliotheken zu arbeiten, ohne das man Berge von externer Dokumentation lesen muss.

Stefan
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

sma hat geschrieben:In Java fällt es dafür einfacher, dank IDE-Unterstützung und Code-Completion ideomatisch korrekten Code zu schreiben (oder man akzeptiert, dass die IDE jede Zeile mit einer Warnung versieht) und mit unbekannten Bibliotheken zu arbeiten, ohne das man Berge von externer Dokumentation lesen muss.
Mit einer Kombination aus Eclipse + PyDev + pylint bekommt man eigentlich die selben Features. Wobei pylint für Anfänger vermutlich viel zu kritisch ist ;)
Trotzdem finde ich Python auch nicht so geeignet. Vor allem wenn die Lehrer dann auch erst mit Python anfangen. Dann orientieren sie sich an dem Wissen von anderen Programmiersprachen wie Java und vermitteln dieses komplett falsche Bild von Python vor allem in Bezug auf OO und schlechte Techniken (wie z.B. im OpenBook und aktuell in dem Webdeveloper Buch kritisiert).
Außerdem sehe ich auch Probleme mit besonderen Spracheigenschaften von Python wie LC, Generatoren, itertools, etc. Wenn man Python lernt, sollte man diese Dinge kennenlernen. Als Programmieranfänger muss man allerdings dann auch kennenlernen, wie diese Konstrukte in anderen Sprachen über normale Schleifen gelöst werden können. IMHO auch ein Punkt der dagegen spricht.

Allerdings finde ich auch Java nicht so gut geeignet um Programmieren zu lernen, da es in Bezug zu OO viel zu idiomatisch ist. Erst mit der Thematik Software Engineering kommt Java vernünftig zur Geltung. Zum "reinen" Programmieren sollte eigentlich eher eine maschinennahe Sprache wie C gelernt werden (vielleicht wäre auch GO geeignet, hab mich damit aber überhaupt nicht auseinander gesetzt). Wobei das auch wieder relativ komplex ist für Informatikunterricht in der Schule. Vielleicht wäre auch eine Sprache wie BASIC eine geeignete Wahl.
Echt schwieriges Thema...

Edit: In dem Umfang von Schulunterricht kommt man IHMO auch nicht wirklich so weit, um sich mit der umfangreichen Klassenbibliothek auseinanderzusetzen, deshalb zählt der Punkt auch nicht wirklich...
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

sma hat geschrieben:ein paar Argumente für Java:
-praxisrelevant und jobsuchfördernd
Für einen Schüler der eine Ausbildung als Informatiker anstrebt vielleicht, für alle anderen Schüler eher nicht. Beim Lehren einer Programmiersprache im Schulunterricht sollte eine einfache aber vielfältige Programmiersprache verwendet werden, die auch von anderen Fachrichtungen (Natur-, Sozial- und Kulturwissenschaften...) verwendet werden kann. Ziel sollte es sein, eine Programmiersprache zu lernen, mit der man einfache Aufgaben am Computer schnell erledigen kann, z.B:
- Umbenennen von Fotos
- Berechnen von Mittelwert und Standardabweichung einer Umfrage
- Plotten von Messwerten
- usw.

Ich denke Python ist hier deutlich praxisrelevanter und jobsuchfördernder als Java.

Grüße
Gerrit
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

http://openbookproject.net//thinkCSpy/p ... ith-python ist immer noch ein gutes Argument für Python.
Wir müssen uns die Zielsetzung der Kurse klar machen:
Grundlegende Konzepte der Programmierung verdeutlichen, nicht unbedingt idiomatischen Code schreiben. Und da ist es wesentlich einfacher, wenn möglichst wenig vom Relevanten ablenkt.
BlackJack

@sma: Ich denke relativ schnell in der Entwicklung bezieht sich bei OOP auch darauf, dass man sich wegen dem "duck typing" nicht unnötig Klassenhierarchien vorher ausdenken muss. Dabei geht auch viel Zeit drauf.

Mal davon abgesehen, dass die Standardbibliothek von Python auch ziemlich Umfangreich ist, kannn die umfangreiche Klassenbibliothek von Java mit den zigtausend Interfaces und Klassen auch ziemlich verwirrend sein. Man braucht sich ja nur mal die ganzen verschiedenen Datenstrukturenklassen und Interfaces anschauen und die dann mit den paar Typen in Python zu vergleichen, mit denen man auch ganz gut auskommt.

Python ist "mehr" OOP als Java, weil alles was man an einen Namen binden kann, ein Objekt ist. Das macht sich zum Beispiel bemerkbar, wenn man in Java Rückruffunktionen oder Closures mit (anonymen) inneren Klassen nachbauen muss, die nur eine Methode haben. So etwas wie einem `FutureTask` ein `Callable` zu geben und dass ganze dann erst noch an einen `Executor` oder `Thread` zum Ausführen übergeben zu müssen, ist aus Sicht eines Python-Programmierers eine ziemlich "barocke" API, die deutlich zu kompliziert ist. Eine Pythonische API wäre eine Funktion `call_async()`, die irgendetwas Aufrufbares bekommt und gut ist.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich weiß leider nicht, was die Ziele des Informatik-Unterrichts in der Schule sind. Lernen, wie man einfach Dateien umbenennen kann, sollte es IMHO nicht sein. Ich würde hoffen es geht darum zu lernen, wie Computer funktionieren, wie man sie programmiert und was somit Algorithmen und Datenstrukturen sind. Dazu kann dann gerne optional noch eine Prise "Software Engineering" kommen.

Ich sehe das aber offensichtlich aus dem Blickfeld eines Informatikers, der meint, dass es gut war zu lernen, was er gelernt hat. Möglicherweise ist es heutzutage auch nicht mehr wichtig, zu wissen, wie (und warum) Sortieralgorithmen oder Kellerspeicher (a.k.a. Stacks) implementiert werden und nur noch wissen, wo man diese Standardalgorithmen in der Klassenbibliothek findet. Vielleicht hat inzwischen das Zeitalter des Zusammenkopierens von Lösungen begonnen... und dann sollte man natürlich lieber dies lehren und lernen.

C passt da noch weniger als Java oder Python. IMHO sollte man mit einer Hochsprache beginnen. Aus Chancengleichheit würde ich durchaus zu Scheme tendieren, doch damit tut man vielleicht denen keinen Gefallen, die gerne unmittelbar auf den Nutzen für ihren beruflichen Werdegang schauen. Und da bleibe ich dabei: Mit Java-Wissen hat man's leichter einen Job (nach dem Studium) zu finden als nur mit Python. Der Entwickler, der beides kann, hat natürlich noch bessere Chancen.

Ich stimme jedoch ice2k3 zu: Echt schwieriges Thema.

Stefan
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

sma hat geschrieben:Ich würde hoffen es geht darum zu lernen, wie Computer funktionieren, wie man sie programmiert und was somit Algorithmen und Datenstrukturen sind.
Ja ist sicher nicht verkehrt, wir hatten damals z.B. auch Addierwerke etc. durchgenommen, war eine ganz nette Exkursion.
C passt da noch weniger als Java oder Python. IMHO sollte man mit einer Hochsprache beginnen.
Ich finde ja Scratch recht interessant. Graphische Programmiersprachen sind ja leider recht selten(und dann auch meist ziemlich schlecht).
Ronnie
User
Beiträge: 73
Registriert: Sonntag 21. März 2004, 17:44

sma hat geschrieben:Vielleicht hat inzwischen das Zeitalter des Zusammenkopierens von Lösungen begonnen... und dann sollte man natürlich lieber dies lehren und lernen.
Jein, ich befürworte wenn an Problemstellungen gelehrt wird, die praxisrelevant sind und man dazu eine Hochsprache (bevorzugt eine Skriptsprache) nutzt um den Lernenden möglichst schnell ein Erfolgserlebnis zu vermitteln. Das bedeutet nicht, dass man auf Fachlichkeit verzichtet, sondern erst mal ein Verständnis und eine Problemlösungskompetenz vermittelt, bevor man ans eingemachte geht (wo sinnvoll).

Um ein Beispiel zu nennen: Vor nicht allzu langer Zeit habe ich mit jungen Leuten gesprochen, die C++ in der Schule lernen. Die waren dann sehr verblüfft, als ich ihnen gezeigt habe, dass man das selbe Programm (Logdatei auswerten), dass in C++ rund 100 Zeilen einnimmt, wesentlich verständlicher in ca. 5-10 Zeilen einer beliebigen Skriptsprache umsetzen kann (auf den Perl-Einzeiler habe ich mal verzichtet).

Klar ist C/C++ Industriestandard und es gibt viele gute Gründe eine solche Sprache zu lehren. Die Wahrheit ist aber, dass oft Leute unnötig frustriert werden, weil sie damit beschäftigt sind mit der Sprache zu kämpfen, anstatt das man sie lehrt Probleme zu lösen.
Darii hat geschrieben:(...) wir hatten damals z.B. auch Addierwerke etc. durchgenommen, war eine ganz nette Exkursion.
Die ich als Grundlage der technischen Informatik immer noch befürworte. Die logischen Grundverknüpfungen - und damit verbunden die Fähigkeit mit Wahrheitstabellen und Schaltalgebra einen Funktionsplan zu entwickeln (und zu vereinfachen) halte ich für sinnvoll. In Verbindung mit einer Kleinsteuerung wie der Siemens Logo! (Moeller Easy, Mitsubishi Alpha, etc.) kann man direkt auch praktische Anwendungen zeigen. Beim Programmieren hilft es dann, wenn man in der Lage ist verschachtelte Bedingungen zu betrachten und u.U. sinnvoll umzuformen.
Achtung: User ist ein Python-Lehrling!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Die Bezeichnung "Informatik in der Schule" müsste man präzisieren: Es könnte sich um einen Programmierkurs in Klasse 8/9 handeln oder um einen Informatik-Leistungskurs in der Oberstufe.

Der Aspekt "bringt mir etwas für das Informatikstudium und den beruflichen Werdegang" ist in ersterem Fall irrelevant, in letzterem nicht. Im Fall des Informatik-Lk ist auch zu beachten, dass es ggf. curriculare Einschränkungen hinsichtlich der Wahl der Programmiersprache gibt. In NRW mit seinem Zentralabitur ist Python in der Oberstufe z.Zt. nicht einsetzbar.

Was den Anfangsunterricht "Programmieren" in der Kl. 8/9 angeht, so gibt es m.E. keine geeignetere Sprache als Python. Allein die klare, einfache Syntax, die wenigen Klammern und Semikolons und der Zwang zur Einrückung sind für Programmieranfänger Gold wert.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Wir haben in der Schule im Fach IT von unten nach oben gelernt. (Widerstände, Flipflops, Assembler)

In Informatik ging es dann anders rum. Erst Python und später dann C++, was dann keiner mehr mochte :).

Wir haben ca. 10 Stunden in der Woche nur IT, Informatik oder ein angegliedertes Praktisches Fach.


Und ich bin froh, dass wir es so gemacht haben.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
lunar

@sma: Es geht hier um Schulen und Schüler. Die sind ebenso wie viele Informatikerstsemester himmelweit von Jobs entfernt. Mit besseren Jobchancen zu argumentieren, ist weltfremd.

Vielleicht kommst Du auch mal in die Verlegenheit, Anfängern Programmierkurse mit Java geben zu müssen*. Der ehrbare Anspruch, Algorithmen und Datenstrukturen unterrichten und Jobchancen schaffen zu wollen, verliert sich dann nämlich ziemlich rasant in den Spitzfindigkeiten der Sprache und dem völligen Unverständnis der Schüler.

Wenn man überhaupt erstmal elementare Problemlösungskompetenz und die Fähigkeit, Probleme in Algorithmen umzusetzen, vermitteln muss, ist es alles andere als zielführend, den Unterschied zwischen int und Integer oder == und .equals() erklären zu müssen.

Ich stimme Dir ja zu, Algorithmen und Datenstrukturen sind wichtig, und auch der spätere Job ist nicht zu verachten, aber man muss auch mal auf dem Teppich bleiben. Aus meiner persönlichen Erfahrung heraus erachte ich es sogar für sinnvoll, an Schulen anfangs völlig auf "echte" Programmiersprachen zu verzichten, und lieber mit etwas wie "Robot Karol" zu beginnen. Denn meist muss man erstmal "Problem lösen" unterrichten, bevor man sich dem "Programmieren" widmen kann.

* Das wünsche ich übrigens allen, die Java als "Anfängersprache" oder als "einfach" bezeichnen.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

lunar hat geschrieben: Aus meiner persönlichen Erfahrung heraus erachte ich es sogar für sinnvoll, an Schulen anfangs völlig auf "echte" Programmiersprachen zu verzichten, und lieber mit etwas wie "Robot Karol" zu beginnen. Denn meist muss man erstmal "Problem lösen" unterrichten, bevor man sich dem "Programmieren" widmen kann.
Dem stimme ich voll und ganz zu. Diese Problemlösungskompetenz zu entwickeln ist das, was ich am Informatik-Unterricht als am Wertvollsten ansehen. Und es ist auch das, woran die meisten zu meiner Zeit scheiterten. Tiefe Einblicke in die Informatik oder auch nur eine bestimmte Sprache lassen sich in der eher knappen Zeit ohnehin nicht vermitteln.

Was ich noch wichtig finde: Ein BWLer, der in der Schule mal Informatik hatte, hat zumindest ne dumpfe Ahnung, wovon ich als Informatiker spreche und vor welchen Problemen ich stehe. Er muß es gar nicht beherrschen, aber es zumindest mal versucht zu haben erweitert den Horizont beträchtlich. Die Wahl der Programmiersprache ist in diesem Zusammenhang irrelevant. Zumal in jeder Nische der Informatik andere Sprachen bevorzugt werden. Aber wer weiß in Schulzeiten schon, in welcher Nische er landen wird?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Pekh hat geschrieben:Die Wahl der Programmiersprache ist in diesem Zusammenhang irrelevant.
Nein, ist sie nicht. Weil es Sprachen gibt, die einem den Einstieg in das problemlösende, algorithmische Denken durch völlig unnötigen und für Einsteiger gänzlich unverständlichen Ballast erschweren. Python hilft hingegen, sich auf das Wesentliche zu konzentrieren.
lunar

@numerix: Das sehe ich ganz genauso, auch wenn ich abhängig von Niveau der Schüler noch weiter reduzieren würde. In der Oberstufe oder im Programmierkurs für Informatik-Erstsemester ist Python eine gute Wahl (und um Welten besser als Java), für Schüler der Mittelstufe aber oder bei absolut blutigen Anfängern halte ich "Spielzeug"-Sprachen bzw. -Umgebungen für noch besser. Wenn man keine Ahnung von nichts hat, ist Python schon kompliziert genug ;)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich denke es hängt und scheitert am Lehrer. Ein guter Lehrer kann auch schwierigere Sachverhalte einfach und anschaulich erklären. Nichts destotrotz mag ich Python lieber als Java oder C++.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jbs hat geschrieben:Ich denke es hängt und scheitert am Lehrer. Ein guter Lehrer kann auch schwierigere Sachverhalte einfach und anschaulich erklären.
Das koennen die Schueler aber nur dann verarbeiten, wenn sie nicht mit der Sprache kaempfen.
Antworten