Neue Einführung in Python

Gute Links und Tutorials könnt ihr hier posten.
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 1. Februar 2009, 11:35

nomade hat geschrieben:BlackJack hat Recht.

Das hatten wir doch schonmal per Definition geklärt :wink:
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Beitragvon HerrHagen » Sonntag 1. Februar 2009, 16:16

Bei mir sind alle Code-Schnipsel auf deiner Seite in Großbuchstaben und somit auch nicht ausführbar.
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

Python Praxisbuch

Beitragvon farid » Donnerstag 19. Februar 2009, 12:59

Leonidas hat geschrieben:(da würde ich eher zum vergleichbaren Praxisbuch greifen, das ist zwar teurer und (dafür?) dicker und nicht ganz son falsch).


Vielleicht waere es sinnvoller gewesen es in zwei Teile aufzusplitten. Also Teile I und II als ein Band, und Teil III als ein weiterer Band. Na ja, im Falle einer eventuellen 2ten Auflage, waere es eine Ueberlegung wert. ;)
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Donnerstag 26. Februar 2009, 23:07

Schade dass auch dieser Kurs den aus meiner Sicht schlechten Lernansatz wählt. Ich suche ein Tutorial/Buch, welches aus objektorientierter Sicht in die Sprache einführt, also Konzepte der Objektorientierung und das Herumspielen mit class und . Die Vorteile sind m.E.:

- Es wird nicht sofort gecodet sondern erstmal der wirklich wichtige "TopDown-Objekt" Blick eines Programmiers gelehrt.

- Objektorientierung ist das derzeit meistverwendete Programmierparadigma und bietet einen hohen Wiedererkennungswert, wenn der Schüler sich bestehende Programme zu Lernzwecken ansieht.

- Andere Programmierparadigmen (insb. imperative und funktionale) führen ohne Übrung häufig zu undurchsichtigeren Code und verleiten zu schnellen Hacks.

- Beim Lernen in programmierunerfahrenen Gruppen haben auch Anfänger leichteren Zugang zu Materie da es keine reine Syntax-Diskussion geben kann und die Fortgeschrittenen lernen ggf. sogar was neues.

Nach Einführung der Objektorientierung werden dann Methoden eingeführt, welches ebenfalls Vorteile hat. Ein print("Hello World") als erstes Programm führen bei gängigen Lehrwerken schon Methoden ein die damit ein Vorgriff auf weitere Lehrinhalte darstellen.

Danach sollte man meiner Meinung nach in Pseudecode Algorithmen formulieren, um auch hier ein Verständnis von Sprachen zu haben.

Danach führt man dann die Syntax ein und zäumt so das Pferd von hinten auf.
BlackJack

Beitragvon BlackJack » Freitag 27. Februar 2009, 00:08

Dein dritter Punkt gilt genauso für OOP. Wer keine Übung hat kann damit genauso, wenn nicht sogar "besser", undurchsichtigen Quelltext und üble Hacks schreiben, wie mit imperativer oder funktionaler Programmierung. Wobei man in Python nicht ohne imperativer Programmierung auskommt, denn die hat man ja parallel zu OOP. Die beiden schliessen sich ja nicht gegenseitig aus. Jede ``for``- oder ``while``-Anweisung ist letztendlich imperative Programmierung.

OOP ist kein Allheilmittel und wenn man gleich mit Klassen anfängt, müssen die Beispiele auch hinreichend komplex sein, also eventuell zu viel für Anfänger. Denn trivialen Kram in Klassen zu stecken, nur um der Klassen wegen, ist kein OOP, sondern nur unnötig kompliziert -- Funktionen als Methoden verkleidet.

Insbesondere für ein "Hello, World!"-Programm ist eine Klasse der totale Overkill, und lehrt damit etwas IMHO grundfalsches. Dafür sind Klassen nicht gedacht, weil sie absolut keinen Vorteil bringen. So lernt man nicht so einfach wann der Einsatz von Klassen und OOP sinnvoll ist, und wann nicht.

Und letztendlich sind in Python auch Module mit Funktionen objektorientiert, ohne das man ``class`` schreiben muss, denn ein Modul mit Funktionen ist ein Singleton-Objekt, das man sich mit ``import`` erstellen bzw. das einzige existierende davon Exemplar in den Namensraum holen kann.
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Freitag 27. Februar 2009, 12:02

@BlackJack:
Selbstverständlich kann man mit jedem Programmierparadigma schlechten Code schreiben, das bestreite ich nicht.

OOP muss aber nicht unbedingt hinreichend Komplex sein, da 1. bei Python der Overhead relativ klein ist und 2. es bei OOP auch um Wiederverwendbarkeit geht. Mir stehen beim Lehren aber auch andere Werte im Vordergrund: Sichtweise eines Programmierers, Abstraktion, Formulierung von Algorithmen und letztendlich Programmierung. Nur Programmierung zu zeigen ist m.E. überholt.

Ein "Hello World" Programm ist sicherlich zu einfach, daher möchte ich ja darauf verzichten, denn es unterstützt ein methodisch falsches Lernen. Es benutzt zuerst eine Funktion print(), die nach herkömmlichen Lehrschema erst nach der Einführung von Schleifen und Verzweigungen gelehrt werden. Für Anfänger ist diese Methode also ungeeignet.

Die interne Objektorientierung der Sprache hat ja erstmal nichts mit dem verwendeten Programmierparadgima zu tun. Darum geht es mir aber.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 27. Februar 2009, 13:50

Hallo vicbrother, willkommen im Forum,

vicbrother hat geschrieben:Ich suche ein Tutorial/Buch, welches aus objektorientierter Sicht in die Sprache einführt, also Konzepte der Objektorientierung und das Herumspielen mit class und .

Das halte ich persönlich für einen schlechten Ansatz und das ist auch das was ich in der Lehre von Java als bedenklich einstufe. OOP ist nicht alles und gerade OOP-Lösungen finde ich oftmals aus Programmierersicht eher wenig spannend. Das schöne an Python ist eben dass es dem Programmierer die Wahl lässt wie er ein Problem löst und wenn man ein Problem besser funktional oder schlicht imperativ lösen kann dann ist OOP an dieser Stelle sogar nur störend.

vicbrother hat geschrieben:- Es wird nicht sofort gecodet sondern erstmal der wirklich wichtige "TopDown-Objekt" Blick eines Programmiers gelehrt.

Schau dir doch mal SICP an, eines der bedeutendsten Lehrbücher über Programmierung schlechthin.

vicbrother hat geschrieben:- Objektorientierung ist das derzeit meistverwendete Programmierparadigma und bietet einen hohen Wiedererkennungswert, wenn der Schüler sich bestehende Programme zu Lernzwecken ansieht.

Wieso? Meine bestehenden Programme zu Lehrzwecken verwenden oft kein OOP weil es einfach nicht sinnvoll ist, es einzusetzen. Dafür gerne mal seiteneffektfreie Funktionen.

vicbrother hat geschrieben:- Andere Programmierparadigmen (insb. imperative und funktionale) führen ohne Übrung häufig zu undurchsichtigeren Code und verleiten zu schnellen Hacks.

Also wenn du eine mathematische Lösung als Hack ansiehtst, dann gewiss :)

vicbrother hat geschrieben:Danach sollte man meiner Meinung nach in Pseudecode Algorithmen formulieren, um auch hier ein Verständnis von Sprachen zu haben.

Ist die Frage was für ein Interesse Anfänger an Algorithmen haben. Wenn man ihnen zeigt wie man Heapsort, Quicksort und Mergesort implementiert dann wirst du nur kritik Ernten wenn die Anfänger dann irgendwann merken dass die Methode ``sort`` oder das Builtin ``sorted`` wesentlich schneller funktionieren als ihre Algorithmen.

Das Problem ist eben die Algorithmen in Probleme einzubetten deren Lösung den Anfänger auch interessiert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Freitag 27. Februar 2009, 15:10

@Leonidas:
Du schätzt es persönlich für schlechter ein, das ist ok. Aber ich würde gerne einen methodisch anderen Ansatz ausprobieren. Beispielsweise lernst du als Mechaniker ja auch nicht die Zündmechanik eines Autos im Detail kennen, sondern wirst über die Bestandteile des Autos und dann des Motors in das System eingeführt. Bei Programmiersprachen nimmt man eigentlich immer den umgekehrten Weg und man lernt nicht, ein Projekt sinnvoll in Teile zu zerlegen und auch in einer Gruppe zu arbeiten.

Funktionale Programmierung mag ganz schon sein, ich habe selbst mit Miranda gearbeitet. Aber heute ist das i.d.R. nicht mehr das Konzept der Wahl und ist nur auf eine kleine Menge von Problemen anwendbar. Rekursion, Lambda und Curry-Prinzip sollte am Ende als schöne Programmiertechnik lernen. Denn im Bereich guten Code zu schreiben lernt man nie aus.

Sieht man sich Frameworks wie Qt an, so kommt man an OO nicht mehr vorbei.

Man kann natürlich Programme zu Studienzwecke schreiben, aber ich denke viele Anfänger schauen sich Projekte im Internet an (Ich kann das Studium von C/C++ anhand des FreeCiv-Codes nur empfehlen! :) ) und benötigen dafür schnell ein Verständnis für OO.

Wie gesagt: ich suche ein Tutorial/Buch welches meinen Vorstellungen einer methodischen Einführung entspricht. Was ist "SICP"? Gibt es dafür eine URL oder eine ISBN?
BlackJack

Beitragvon BlackJack » Freitag 27. Februar 2009, 15:24

@vicbrother: Doch OOP muss hinreichend komplex sein, denn sonst bietet es keine Vorteile und ist nur Selbstzweck und unnötige Komplexität. Auch bei Funktionen und Modulen geht es um Wiederverwendbarkeit, das ist kein Alleinstellungsmerkmal von OOP.

Und auch die Sichtweise des Programmierers, Abstraktion und Formulieren von Algorithmen sind nicht auf OOP beschränkt. Das habe ich früher in der Schule mit Pascal mal rein imperativ/prozedural gelernt und im Studium mit Haskell funktional. Das was Du da neben der eigentlichen Programmierung vermittelt haben möchtest, ist nämlich relativ unabhängig von den genannten Paradigmen. Das Problem erfassen, in handliche, lösbare Teilprobleme zerlegen, sinnvoll zu Gruppieren und sich Datenstrukturen ausdenken, ist in all den genannten Sprachen nötig um gute, saubere Programme zu schreiben. Und zu diesem Prozess gehört in Python auch zu entscheiden, wann etwas mit einer Funktion gelöst werden kann, und wann eine Klasse sinvoll ist. Dabei sollte man vom einfachen zum komplizierteren gehen. Was mit einer Funktion lösbar ist, gehört einfach nicht in eine Klasse, es sei denn man kann Begründen warum eine `staticmethod()` oder `classmethod()` an der Stelle Sinn macht. *Das* ist aber vielleicht nicht unbedingt der Stoff, mit dem man bei Einsteigern *anfangen* sollte.

Die Verwendung der Anweisung ``print`` oder der Funktion `print()`, je nach Python-Version, vor Schleifen und Verzweigungen, ist nicht methodisch falsch, denn es geht da um die *Verwendung*, nicht um die Definition. Ausserdem führst Du damit Deine Argumentation ad absurdum, weil das Lehren von *Klassen* vor *Funktionen* dann auch die falsche Reihenfolge ist. Methoden sind besondere Funktionen, deren erstes Argument "magisch" an das Exemplar gebundenden wird, über das auf die Funktion zugegriffen wird. Methoden bauen also auf Funktionen auf, wäre also sinnvoller die vorher zu Vermitteln.

Ich weiss jetzt nicht was Du mit "interner Objektorientierung" meinst!? Das in Python *alles* was man an einen Namen binden kann, ein Objekt ist, ist kein Implementierungsdetail, sondern das Wesen der Sprache. Das ist nichts "internes", das ist bewusst nach "aussen", also für den Programmierer, so garantiert.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 27. Februar 2009, 16:03

vicbrother hat geschrieben:Funktionale Programmierung mag ganz schon sein, ich habe selbst mit Miranda gearbeitet. Aber heute ist das i.d.R. nicht mehr das Konzept der Wahl

Nein. Gerade heute entstehen und werden so viele funktionale Sprachen wie nie zuvor verwendet und entwickelt. Schau dir Erlang an, das nun auch schon einige Jahre hat und ausgereift ist. Gerade bei Multicore-Prozessoren ist die Vermeidung von State in funktionalen Programmiersprachen wesentlich einfacher was zu viel einfacherer Parallelisierung führt. Siehe auch die neuen Sprachen wie Scala (quasi ein Superset von Java das viele funktionale Konzepte wieder in die Sprache reinbringt) oder Clojure (ein funktionales Lisp). Die Anzahl der Haskell-Libraries ist im Jahr 2008 vergleichbar oder schneller gestiegen als die Anzahl der Python-Libraries im selben Zeitraum.

vicbrother hat geschrieben:Sieht man sich Frameworks wie Qt an, so kommt man an OO nicht mehr vorbei.

Ich habe nicht gemeint, dass man OOP nicht nutzen sollte - doch durchaus. Nur eben wo es sinnvoll ist. In GUI-Toolkits ist es durchaus sinnvoll und selbst GTK hat mit GObject ein in C implementiertes Objektsystem (das dann von Vala mit Syntaktischem Zucker versüßt wird).

vicbrother hat geschrieben:Was ist "SICP"? Gibt es dafür eine URL oder eine ISBN?

Es hat sogar eine Wikipedia-Seite. Aber OOP wirst du nicht finden. Dafür einen interessanten Lehransatz.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Freitag 27. Februar 2009, 23:11

@BlackJack:
Mit interner Objektorientierung meinte ich den Sprachaufbau an sich. Das kann man einem Anfänger sagen, aber ohne die Einführung des OOP versteht er das nicht.

Methoden/Funtkionen ohne Definition einzuführen halte ich für wenig hilfreich, wenn das Grundverständnis nicht umgehend gelehrt wird.

Das OOP nicht das einzige Paradigma zur Abstraktion da ist, ist ja allen klar. Aber ich denke die Lehrmethodik ist einfach überholt.
Ich denke bei meiner Methodik auch insbesondere an Schülergruppen in der Schule. Man muss hier gruppendynamische Prozesse berücksichtigen. Einige kennen sich mit Programmierung aus - damit steigt der Frust bei denjenigen, die sich in das Thema erst hineindenken müssen. Daher würde ich lieber mit allgemeinen Beispielen und Denkweisen beginnen. OOP bietet sich dort an. Viele der Fortgeschrittenen machen dort ebenfalls Fehler oder sind dort nicht angelangt, man kriegt so eine eher gleichverteilte Startbedingung hin.

@Leonidas:
Ja, es gibt heute mehr Sprachen als je zuvor, unbestritten. Auch bestreite ich nicht, dass es Problemstellungen für funktionale Sprachen gibt, insbesondere im mathematischen Bereich. Aber die täglich eingesetze Software baut sehr selten auf funktionale Sprachen auf. Oder kannst du mir Beispiele nennen?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 27. Februar 2009, 23:20

vicbrother hat geschrieben:Aber die täglich eingesetze Software baut sehr selten auf funktionale Sprachen auf. Oder kannst du mir Beispiele nennen?

ejabberd ist in Erlang geschrieben, die Software die meine Arbeitszeit zusammenrechnet ist in Scheme geschrieben. MLdonkey und Unison sind in OCaml geschrieben und darcs in Haskell. Das ist alles Software mit der man durchaus Tag für Tag in Kontakt kommt.

Und gerade Hybridsprachen wie OCaml, Scala und zu einem gewissen Anteil auch Python ermöglichen das Mischen von OOP und funktionalen Konzepten. Ich habe etwa Properties in Klassen an anonyme Funktionen gebunden, die von ``partial`` aus benannten Funktionen erstellt worden sind. Die Lösung ist erstaunlich hübsch, in Java hätte ich dafür extra zwei Methoden schreiben müssen und in diesen Methoden andere Methoden aufrufen, obwohl sie tatsächlich nur Wrapper um Parameter anderer Funktionen sind.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Samstag 28. Februar 2009, 11:32

@Leonidas:
Mit MLdonkey kommt man als gesetzestreuer Mensch kaum in Berührung.

Unison und ejabberd sind kleine Programme - Unison m.W.wird nicht mehr fortgeführt. Gibt es keine großen Projekte die funktionale Sprachen nutzen? Die die du aufzählst sind eher Ein-Mann-Ein-Tag-Projekte....

Es gibt wirklich schöne Lösungen mit funktionalen Sprachen. Aber das sind einzelne Algorithmen und keine großen Gesamtprojekte.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Samstag 28. Februar 2009, 11:48

vicbrother hat geschrieben:@Leonidas:
Mit MLdonkey kommt man als gesetzestreuer Mensch kaum in Berührung.
Weil Filesharing nur illegal benutzt wird? ... da triffst du bei Python, das recht viel mit BitTorrent zu tun hat, auf die _richtig_ falschen Leute, ich sag's nur Oo'

vicbrother hat geschrieben:Unison und ejabberd sind kleine Programme - Unison m.W.wird nicht mehr fortgeführt. Gibt es keine großen Projekte die funktionale Sprachen nutzen? Die die du aufzählst sind eher Ein-Mann-Ein-Tag-Projekte....

Es gibt wirklich schöne Lösungen mit funktionalen Sprachen. Aber das sind einzelne Algorithmen und keine großen Gesamtprojekte.
Die wenigsten großen Programme sind in einer Sprache geschrieben. Ihre Aufgaben sind so stark abstrahiert, dass kritische und Kernsachen mit einer "niedrigen" Sprache optimiert werden... Also eine API geschaffen wird. Nun, andere Sprachen, wie die die Leonidas aufgezählt haben, benutzen nun diese Apis, um das Programm in einer effektiven Zeit zu optimieren und zu erstellen. Python und viele andere Sprachen (Ruby, die ganzen JVM-Sprachen) werden genauso eingesetzt. Deswegen ist diese Frage nach: "Worin ist das und das Programm geschrieben?"... oft nicht so leicht zu beantworten. Sonst könntest du ja sagen, dass Firefox in HTML und Javascript geschrieben ist. Wie dämlich klingt'n das?
vicbrother
User
Beiträge: 32
Registriert: Donnerstag 26. Februar 2009, 22:41

Beitragvon vicbrother » Samstag 28. Februar 2009, 12:14

@BlackVivi:
Python ist per se kein Verbrechen ;) , auch BitTorrent nicht. MLdonkey ist aber hauptsächlich mit illegalen Inhalten aufgefallen...

Es stimmt, dass viele Programme aus einer Sprachvielfalt bestehen. Ob das vom Standpunkt der Wartung so toll ist sei mal dahingestellt, aber es hängt vom Design der Sprache ab. Python ist eine Sprache die schnelles Entwickeln ermöglicht. Das bietet die Möglichkeit, problematische Stellen mit C zu beschleunigen. Das ist ok, da von der Sprache vorgesehen. Funktionale Sprachen sind dafür m.W. nicht entwickelt worden, man kann sie aber sicherlich so einsetzen. Das wäre dann aber eine Reduzierung der Sprache auf einige wenige Algorithmen.

Firefox besteht definitiv nicht aus JavaScript und HTML, ich würde das auch nie behaupten. Die Frage in welchem Programm die Sprache rein vorkommt darf aber gestellt werden. Es gibt viele Programme die nur in einer Sprache erstellt werden. Mit funktionalen Sprachen sehe ich nur keine großen Projekte verwirklicht.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder