Gesucht: Python-Aufgaben für Schul-Programmierkurs

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.
lordnaikon
User
Beiträge: 58
Registriert: Dienstag 9. Februar 2010, 13:41

lunar hat geschrieben: Die meisten Menschen denken einfach nur nach, wenden mithin intuitive Logik an. Das muss die Schule nicht vermitteln, das können Menschen auch so (nun ja, nicht alle, aber das sei dahingestellt).
Das ist aber allenfalls sehr traurig! Hier muss ich widersprechen, genau das sollte auch in der Schule gelehrt werden, wenn wir nicht wollen, dass Schulabgänger nur "Arbeitswerkzeuge" sind - nur ausgestattet um in der Arbeitswelt zu bestehen. Wie kann man in solch einem Fall noch von einem mündigen Bürger, der die Schule verlässt, sprechen? Hier muss ich pillmuncher recht geben, Logik ist in vielen Fällen einfach nicht intuitiv genug. Große Denker sind schon daran gescheitert, weil sie sich einfach intuitiv was zusammengezimmert haben und nicht die Werkzeuge hatten ihr Erdachtes zu überprüfen. Es war halt intuitiv logisch. Darum müssen wir lernen sie zu verstehen, genau weil wir sie zu wenig anwenden! Sprechen muss ich formal nicht lernen, weil ich es "aufschnappe" - es alle paar Minuten verwende. Richtiges logisches Denken machen die wenigsten (traurig aber wahr). Wo sonst als in der Schule hätten wir die Möglichkeit so etwas richtig zu lernen? Ich bin für Logik in der Schule! Ich bin zwar auch nicht der hellste, mich ärgert es aber manches mal bei Diskussionen jemandem erklären zu müssen, warum seine Argumente "nicht logisch" sind. Hätten die Leute in der Schule Logik gehabt, hätten sich vielleicht mehr Leute gefragt, welcher logischen Zusammenhang zwischen "Websprerren" und "Schutz der Kinder vor Missbrauch" besteht. Wenn das logische Schließen öfter geübt und verinnerlicht werden würde, würden sich vielleicht mehr Menschen über Sachen wie die "Beitragsermessungsgrenze" wundern; oder warum wir immer die "wahnwitzig" schnell "tickende" Schuldenuhr präsentiert bekommen, mit dem "logischen Schluss" wir müssen sparen, sparen, sparen. In jeder Unternehmens Bilanz gibt es sowas wie Aktiva und Passiva. Bei uns scheint das aber scheinbar "niemand" zu tun und verpasst das noch "wahnwitzigererere" emporschnellen der Privatvermögen. Niemand "schließt" mal das die "Schulden" letztendlich in den Vermögen landen.

Sry wegen dem harten Offtopic.

Um vielleicht doch noch was zum Thema beizutragen: Wie sieht es denn mit einer Evaluierung der "Betroffenen" aus? Wie ist der Wissenstand der Jugendlichen - auch im Hinblick auf HTML, Javascript wäre super ... usw. Was wollen sie selber im Kurs machen?
lunar

@lordnaikon: Du übertreibst und Du redest Unsinn. Es geht nicht um logisches Denken im Allgemeinen, sondern ganz speziell um formale Logik. Lies vielleicht nochmal die Beiträge von pillmuncher, und dann versuche dann mal, den von Dir behaupteten logischen Zusammenhang zwischen der Lehre formaler Logik und Kindesmissbrauch bzw. Staatsschulden so richtig formal zu beweisen. Ich hoffe, Du erkennst dann selbst, wie unsinnig Deine „Argumente“ sind, und dass Du selbst getan hast, was Du eigentlich kritisiert: Unlogische Argumente so zusammen zu zimmern, dass sie zu Deiner (vorher schon gefassten) Meinung passen.
lordnaikon
User
Beiträge: 58
Registriert: Dienstag 9. Februar 2010, 13:41

@lunar: Ich finde meinen Unsinn gar nicht so übertrieben. Überspitzt, Ok - unverständlich, vielleicht auch. Was ich eigentlich nur sagen wollte ist: Man bekommt ein "besseres" Gefühl für logisches Denken im Allgemeinen, was du ja außen vor lässt. Ich weiß es gibt einen Formalismus. Ich weiß meine Intuition kann sehr schnell sehr falsch sein. Mir ging es auch nicht darum aufzuzeigen wie super ich Kindesmissbrauch herleiten kann o.Ä. Es ging darum die "Sinne" zu schärfen und bekanntes aus der formalen Logik auch für das Leben zu verwenden um zu erkennen wo logische Fehler sind, beispielsweise in der Argumentation von Leuten. "Die Straße ist nass, also spannt den Regenschirm auf denn es Regnet! Ihr habt keinen, dann kauft einen. Ihr könnt euch keinen Leisten? Dann müsst ihr sparen, sparen. sparen!"

So meinte ich das.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

lunar hat geschrieben:@pillmuncher: Um das Verhalten Deines Kollegen geht es nicht. Mit Top-Down vs. Bottom-Up hat es wenig zu tun, es mangelt ihm offensichtlich einfach nur an Einsicht [...]
Ich denke schon, dass es einen Zusammenhang zwischen der Vorliebe für Top-Down-Entwurf und dieser Art zu Programmieren gibt. Wenn man ein System von oben nach unten entwirft, wird man zwangsläufig irgendwo in der Mitte haltmachen müssen, weil sich sonst die Komplexität des Entwurfs der des fertigen Programms annähern würde. Man bestimmt also beim Entwurf mehr oder weniger willkürlich eine unterste Abstraktions-Stufe und beginnt zu programmieren. Programmierer des von mir kritisierten Typs neigen dazu, alles unterhalb dieser untersten Entwurfs-Ebene als flach anzusehen (weil sonst wäre es ja schon beim Entwurf als nicht-flach gekennzeichnet worden). Folglich programmieren sie auch flach, ohne Abstraktion/Generalisierung der Konstrukte der Programmiersprache, also alles mittels if-Statements, Zustands-Variablen, Index-Zugriffen auf Listen, etc.. Beim Bottom-Up-Entwurf (AKA wir bauen uns Libs und interne DSLs) dagegen schichtet man so lange Abstraktions-Ebenen aufeinander, bis das Programm trivial zu implementieren wird. Wie Paul Graham schreibt: "[...] bottom-up design doesn't mean just writing the same program in a different order. When you work bottom-up, you usually end up with a different program. Instead of a single, monolithic program, you will get a larger language with more abstract operators, and a smaller program written in it."

'a smaller program' bedeutet uaa.: weniger komplex, einfacher zu implementieren, und vor allem: weniger Bugs, weil die Anzahl der Bugs in Programmen korreliert ist mit deren SLOC, wie Les Hatton in diesem PDF schreibt.
lunar hat geschrieben:Gute Python-Programmierer schreiben in Python im Rahmen der Sprache idiomatischen Python-Quelltext, den jeder andere gute Programmierer zumindest verstehen kann, auch wenn er selbst vielleicht einzelne Teile anders implementieren würde. LISP-Programmierer dagegen schreiben Quelltext, denn selbst andere gute LISP-Programmierer nicht mehr so weiteres verstehen, eben weil es gar nicht mehr LISP selbst ist, sondern eine ganz andere Sprache, nämlich die DSL, welche der Programmierer sich für sein Problem gezimmert hat.
Vielleicht suchen LISPer einfach nach ultimativer mathematischer Eleganz, wohingegen Pythonistas glauben: readability counts, und practicality beats purity.

[EDIT]
lunar hat geschrieben:Den Rest Deines Beitrags habe ich nur überflogen, weil er mir ehrlich gesagt zu weitscheifend war. Mag ja sein, dass formale Logik essentieller Bestandteil der philosophischen Kulturgeschichte, im praktischen Leben ist formale Logik kaum je von Nutzen.
Es gibt kein spezielles Wissen oder Können, das nur Philosophen zugänglich wäre. Philosophen versuchen einfach, sich systematisch dumm zu stellen, um dann die dummen Fragen unter Aufbringung jedes geeignet erscheinenden Mittels zu beantworten. Die formale Logik verwenden Philosophen dabei nicht wegen ihrer Formalität, sondern weil sie hoffen, durch größere Klarheit über die Fragestellung differenziertere und zutreffendere Antworten zu gewinnen. Die Möglichkeit, größere Klarheit über Probleme und bessere Lösungen für sie zu finden, ist etwas, das man in Beruf und Alltag genauso brauchen kann.
[/EDIT]

lunar hat geschrieben:Niemand trifft Entscheidungen, indem er sie formal aus Fakten inferiert.
Die meisten Menschen denken einfach nur nach, wenden mithin intuitive Logik an. Das muss die Schule nicht vermitteln, das können Menschen auch so (nun ja, nicht alle, aber das sei dahingestellt).
Ich gebe gerne zu, dass die wenigsten ihre Entscheidungen unter Rückgriff auf formale Methoden treffen. Aber ich frage mich, ob die Erde nicht ein besserer Ort wäre, wenn mehr Menschen es tun würden.

Und was formale Logik und Programmieren angeht, verweise ich auf Coding Horror: Separating Programming Sheep from Non-Programming Goats. Bedeutungslosen Regeln zu folgen oder sie im Rahmen eines Programms aufzustellen fällt ungemein leichter, wenn man ein geeignetes Werkzeug besitzt. Die formale Logik ist so ein Werkzeug. Und sie ist ja nicht mal schwer zu verstehen, da, wie du zurecht sagst, jeder schon ein intuitives Vorverständnis mitbringt. Ich bin eben der Meinung, man sollte dieses Vorverständnis zu einem richtigen Verständnis ausbauen, und die Schule wäre IMO der geeignete Ort dafür.
Zuletzt geändert von pillmuncher am Sonntag 12. Juni 2011, 17:36, insgesamt 1-mal geändert.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

problembär hat geschrieben:Ich finde auch bis zu einem gewissen Grade wichtig, zu verstehen, warum jemand eine neue Sprache geschaffen hat, also warum es zu dieser neuen Sprache überhaupt gekommen ist.
Sehr richtig. McCarthy hat, Paul Graham zufolge, LISP weniger erfunden, als entdeckt. Was er dem zufolge entdeckt hat, war ein neues theoretisches Modell für Berechnungen durch Computer. Er definierte ein paar grundlegende einfache Funktionen und definierte dann mittels dieser die eval-Funktion, die LISP-Programme als Argumente entgegennahm und deren Ergenbis berechnete. Er veröffentlichte es lediglich als Paper, aber "Steve Russell said, look, why don't I program this eval..., and I said to him, ho, ho, you're confusing theory with practice, this eval is intended for reading, not for computing. But he went ahead and did it. That is, he compiled the eval in my paper into [IBM] 704 machine code, fixing bugs, and then advertised this as a Lisp interpreter, which it certainly was. So at that point Lisp had essentially the form that it has today...."
In specifications, Murphy's Law supersedes Ohm's.
BlackJack

@pillmuncher: Ob die Erde wirklich ein besserer Ort wäre wenn mehr Leute Entscheidungen wie Banken und Versicherungen treffen würden!? Dabei wäre mir auch ein wenig unwohl. ;-)
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

BlackJack hat geschrieben:@pillmuncher: Ob die Erde wirklich ein besserer Ort wäre wenn mehr Leute Entscheidungen wie Banken und Versicherungen treffen würden!? Dabei wäre mir auch ein wenig unwohl. ;-)
Wie wäre es, wenn AKW-Betreiber gezwungen wären, eine AKW-Haftpflichtversicherung abzuschließen?

Ich denke, das Problem liegt nicht am rationalen Verhalten der Banken und Versicherungen, sondern am irrationalen Verhalten der Wähler, die Politikern Macht an die Hand geben, die sie gegen die Wähler einsetzt, zugunsten des Kapitals. Die letzte Wirtschaftskrise lag nicht am Versagen der Banken, sondern an dem der Politiker, die es den Banken ermöglicht haben, relativ risikofrei abenteuerliche Geschäfte einzufädeln. Das Problem liegt in einer irrationalen Wirtschaftsordnung, die das Recht auf Kapitalvermehrung höher achtet, als jedes andere Recht, und bei der am Ende der gewinnt, der als reichster stirbt.
In specifications, Murphy's Law supersedes Ohm's.
lunar

@pillmuncher: Wo in Gottes Namen sind wir denn jetzt gelandet?! Bei formaler Logik als Waffe gegen die Ausbeitung der Arbeiterklasse durch das Kapitel?! Sorry, aber dieser Sprung ist mir um einiges zu weit. Auch wenn ich die politischen Ansichten, die durch Deine Beiträge schimmern, einigermaßen teile, so ist das erstens vollkommen themenfremd und zweitens übertrieben, polemisch und ziemlich einseitig. Die Welt wäre auch ein besserer Ort, wenn Menschen ihre Argumente und Ansichten mal ausgewogen gestalten würden ...

Im Bezug auf LISP siehst Du die Dinge ähnlich einseitig. Auch wenn Dein Beispiel als Argument nicht taugt, weil es einfach nur einen schlechten Programmierer offenbart, nicht aber allgemeine Schwächen einer bestimmten Entwurfstechnik offenbart, so muss man natürlich zugestehen, dass Programmierer es oft genug an Abstraktion mangeln lassen. LISP (oder beispielsweise auch funktionale Sprachen wie Haskell) ist allerdings nicht die Lösung, sondern meist nur das andere extrem: Vom Problem wird so lange abstrahiert, bis das zu lösenden Problem und mithin auch die Lösung unter all den Abstraktionen nicht mehr zu erkennen ist.

Die Qualität von Programmen ist keine inhärente Eigenschaft einer Sprache, und folgt auch nur sehr bedingt aus der Sprache.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

lunar hat geschrieben:@pillmuncher: Bei formaler Logik als Waffe gegen die Ausbeitung der Arbeiterklasse durch das Kapitel?! [...] Auch wenn ich die politischen Ansichten, die durch Deine Beiträge schimmern, einigermaßen teile, so ist das erstens vollkommen themenfremd und zweitens übertrieben, polemisch und ziemlich einseitig.
Immerhin bin ich da derselben Ansicht wie Otto Neurath. Und im Politischen darf man, finde ich, durchaus polemisch übertreiben, und man muss auch einseitig sein. Die Gegenseite ist es ja auch. Aber das ist tatsächlich OT, also lassen wir das Thema lieber.
lunar hat geschrieben:Auch wenn Dein Beispiel als Argument nicht taugt, weil es einfach nur einen schlechten Programmierer offenbart, nicht aber allgemeine Schwächen einer bestimmten Entwurfstechnik offenbart, so muss man natürlich zugestehen, dass Programmierer es oft genug an Abstraktion mangeln lassen.
Ich habe den Eindruck gewonnen, dass viele, die sich vom Top-Down-Entwurf angezogen fühlen, sich so verhalten, wie ich es beschrieben habe. Ich habe natürlich keine Studie parat, mit der ich das belegen könnte, aber ich hatte ähnliche Erlebnisse oft genug, um ein Muster zu erkennen. Genauso wie du ein Muster bei den LISPern erkennst:
lunar hat geschrieben:LISP (oder beispielsweise auch funktionale Sprachen wie Haskell) ist allerdings nicht die Lösung, sondern meist nur das andere extrem: Vom Problem wird so lange abstrahiert, bis das zu lösenden Problem und mithin auch die Lösung unter all den Abstraktionen nicht mehr zu erkennen ist.
Wie ich schon schrieb, LISPer neigen womöglich dazu, mathematische Eleganz über Lesbarkeit und Praktikabilität zu stellen. Jeder hat so seine Lieblings-Ideen, die er irrational verteidigt und durchzieht, ich möglicherweise ebenso, aber ich bemühe mich, meine immer wieder einer strengen Prüfung zu unterziehen.

Eine dieser Ideen ist, dass Bottom-Up-Entwicklung besser ist. Top-Down-Entwicklung führt IMO immer wieder dazu, dass Lösungen für inexistente Probleme entworfen werden, oder dass die Implementierung entlang der Planungen gar nicht möglich ist, weil manches gar nicht umsetzbar ist. Ein Bekannter von mir sollte mal ein Netzwerk programmieren, bei dem jederzeit neue Knoten dazukommen konnten, die dann ihren nächsten Nachbarn ihre Anwesenheit kundtun sollten, worauf diese die Nachricht weiter zu leiten hatten, bis alle Knoten Bescheid wussten. Das aber, laut Entwurf, in konstanter Zeit. Dazu das von mir genannte Problem mit der Flachheit der Implementation. Mir gefällt das alles nicht.

Auf StackOverflow hat mich mal jemand auf Abschlussdokumente der NATO Software Engineereing Conferences von 1968 und 1969 hingewiesen. Im ersten Jahr kann man mit etwas gutem Willen eine teilweise Favorisierung von proto-agilen Methoden und Bottom-Up-Entwicklung finden, zB. in diesem Beitrag von Kinslow:
The design process is an iterative one. [...] In my terms design consists of:

1. Flowchart until you think you understand the problem.
2. Write code until you realize that you don’t.
3. Go back and re-do the flowchart.
4. Write some more code and iterate to what you feel is the correct solution.
und in diesem von Ross:
The most deadly thing in software is the concept, which almost universally seems to be followed, that you are going to specify what you are going to do, and then do it. And that is where most of our troubles come from. The projects that are called successful, have met their specifications. But those specifications were based upon the designers’ ignorance before they started the job.
Im nächsten Jahr waren diese Stimmen mehr oder weniger verschwunden und Big Design Upfront mittels Top-Down-Entwurf wurde propagiert.

Zum Trost noch ein Beitrag von 1968, von Naur:
…software designers are in a similar position to architects and civil engineers, particularly those concerned with the design of large heterogeneous constructions, such as towns and industrial plants. It therefore seems natural that we should turn to these subjects for ideas about how to attack the design problem. As one single example of such a source of ideas I would like to mention: Christopher Alexander: Notes on the Synthesis of Form.
Die Geschichte der Programmierung ist interessanter als man denkt. Und wie Buffy The Vampire Slayer einst sagte:
Those who fail history are doomed to repeat it in summer school.
Zurück nochmal zu meiner Ausgangsthese, dass der Kern der Programmierung nicht das Technische, sondern das Analytische ist. Da sind LISPer oft näher dran, als die Benutzer von nicht-funktionalen Sprachen. Und natürlich ist:
lunar hat geschrieben:Die Qualität von Programmen ist keine inhärente Eigenschaft einer Sprache, und folgt auch nur sehr bedingt aus der Sprache.
aber jede Sprache zieht gewisse Typen von Programmierern an, die etwas an ihrem Abstraktionsgrad, ihren Konstrukten und ihrem idiomatischen Code finden, was ihnen gefällt und mit dem sie gerne arbeiten. LISP zieht Leute an, die gerne abstrakt über Probleme nachdenken und die Generalisierungen mögen, aus denen sie dann ein Programm als Spezialfall allgemeinerer Konzepte entwickeln. Mir gefällt das. Aber ich sehe selbstverständlich auch, wie das in Übertreibungen enden kann. Die Kunst liegt darin, das richtige Maß zu finden.

Gruß,
Mick.
In specifications, Murphy's Law supersedes Ohm's.
Antworten