Frage zu Python Videokursen (MIT,Coursera,etc...)

Gute Links und Tutorials könnt ihr hier posten.
Antworten
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

Hallo,
ich wollte mal fragen ob hier einige der diversen Python-Videokurse amerikanischer Universitäten bekannt sind und was ihr von denen aus Anfängerperspektive haltet. Es geht insbesondere um die folgenden:

Introduction to Computer Science and Programming Using Python (MIT, leider noch Python 2.7):
https://www.edx.org/course/mitx/mitx-6- ... puter-1498

Learn to Program: The Fundamentals (University of Toronto):
https://www.coursera.org/course/programming1

Programming for Everybody (University of Michigan):
https://www.coursera.org/course/pythonlearn

An Introduction to Interactive Programming in Python (Rice University):
https://www.coursera.org/course/interactivepython

Mir ist natürlich klar, daß man mit Videovorlesungen nicht schneller lernt oder es irgendwie weniger arbeitsintensiv wäre als mit einem Buch. Es geht dabei mehr darum den inneren Schweinehund auszutricksen. Man überwindet sich schneller mal eben ein Video per Mausklick zu starten als ein Buch in die Hand zu nehmen, auch wenn es am Ende darauf hinausläuft, daß man das im Video angeschaute eh im zugehörigen Buch nachliest und am Rechner im Editor nachvollzieht. Bis auf den zuletzt aufgeführten gibt es auch stets ein zugehöriges Lehrbuch oder zumindest sehr umfangreiches Skript.

Da MIT-Serie noch Python 2.7 behandelt hier auch noch die grundsätzliche Frage: spielt das für mich als Anfänger keine Rolle, ob ich mit 2.7 oder gleich 3.4 einsteige?
BlackJack

@Cobalt: Zu den Kursen kann ich nichts sagen, aber bei der Python-Version: Für einen Anfänger spielt das fast keine Rolle. Python 2.7 ist allerdings so wie es aussieht die Version, die in der Praxis verwendet wird.
DaftWullie
User
Beiträge: 37
Registriert: Donnerstag 17. Mai 2012, 21:28

Ich habe im letzten Frühjahr den Kurs "An Introduction to Interactive Programming with Python" absolviert. Das war ganz amüsant und ich habe mich in dem Zuge endlich mal mit "Ereignisgetriebender Programmierung" beschäftigt. Ich fand auch die Videos ganz gut gelungen. Bei dem Kurs wurde "Peer evaluation" groß geschrieben, man musste also jede Woche die Lösung der Wochenprojekte vonm 5 Kommilitonen bewerten. Etwas zeitraubend...

Allerdings muss man damit umgehen können, dass die einen sehr speziellen Python Interpreter benutzen, der nicht komplett kompatibel zu offiziellem Python ist, ebenso eine eigene GUI-Bibliothek. Es gab dazu damals auch ein paar Postings hier im Forum.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ich finde ja die Videos auf PythonByteSize sehr gut gemacht. Da wird man nicht nur vollgelabert während man 20 Minuten dabei zusehen soll, wie Codefragmente in einen Editor getippt werden... :wink: Wobei das jetzt keine Bewertung der hier verlinkten Videos, die ich nicht gesehen habe, sein soll.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

@DaftWullie: was heisst spezieller Python-Interpreter? Hat das öfters Auswirkungen auf die verwendete Syntax?

Ich habe jetzt mal den MIT-Kurs (6.00x) angefangen. Aber dort wird explizit darauf hingeweisen, daß die Übungsprogramme teilweise nicht unter Python 3 funktionieren. Leider ist die Audio-Qualität zumindest bei einigen der ersten Videos teilweise schlecht. Inhaltlich scheint er aber soweit mir die ersten paar Videos ein Urteil erlauben nicht schlecht. Aber als Anfänger ist mein Urteil da natürlich wenig aussagekräftig.

----
Dann schnuppere ich grad noch in diesen Kurs rein:
Intro to Computer Science - Building a Search Engine
http://www.thegoodmooc.com/2013/05/revi ... cs101.html

Der Link führt zu einer externen Beschreibung. Direkt unter Udacity sieht man den genauen Inhalt leider erst nachdem man einen Account angelegt hat. Leider wird auch hier Python 2.7 verwendet, was ich gleich bei der PRINT-Funktion (unter 2.7 ohne Klammern, ab 3.0 MIT Klammern) zu spüren bekam.

Hat Python 2.7 eigentlich noch irgendwelche Vorteile gegenüber den Versionen ab 3.0, oder ist der Grund für die weiter andauernde Verbreitung schlicht im hohen Trägheitsmoment der User gegenüber dem Umstieg begründet?

@mutetella: Danke für den weiteren Link.
BlackJack

@Cobalt: Die vorherige Diskussion ist hier zu finden Anfängerkurs in Python bei Coursera.

Spezieller Python-Interpreter bedeutet das die einen in JavaScript implementiert haben der im Browser läuft, allerdings nicht 100% Python-Kompatibel ist.

Die Frage nach den Vorteilen würde ich anders herum stellen. Hat Python 3.x genug Vorteile das sich ein Umstieg lohnt. Und die Frage beantworten halt viele die bereits eine Codebasis in Python 2.x geschrieben haben mit Nein. Ein Umstieg würde einfach nur arbeit für's portieren bedeuten, inklusive Fehler die man dabei machen kann und die man suchen und beseitigen muss. Und der Lohn für die ganze Mühe ist dann erst einmal nur eine höhere Versionsnummer, na toll. Sofern man überhaupt so einfach portieren kann, denn normalerweise verwendet man ja nicht nur die Standardbibliothek sondern weitere Bibliotheken, und die müssen für einen Umstieg natürlich auch für Python 3.x verfügbar sein.

Bei einigen kommt dann noch dazu dass sie auf absehbare Zeit noch Python 2.6 und 2.7 unterstützen müssen, also die Arbeit anfällt die vorhandene Codebasis nicht nur zu portieren, sondern auch noch für zwei Versionen parallel zu pflegen. Und das dann auch wieder ohne einen wirklichen Zusatznutzen davon zu haben.

Trägheitsmoment klingt ein wenig negativ — ich hätte grundsätzlich ja nichts dagegen auf 3.x zu wechseln und da auch ein wenig Extraarbeit reinzustecken, aber das Gefälle zwischen Aufwand und Nutzen ist mir im Moment einfach noch viel zu gross. Und damit bin ich offensichtlich nicht alleine.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

@BlackJack: Danke für den Link zur anderen Diskussion.

Ja, Trägheitsmoment klingt negativ, war aber natürlich neutral gemeint.

Kann man für einen Anfänger grob skizzieren, was im wesentlichen beim Sprung von Python 2.7 auf 3.x geändert wurde? Oder wurden damit vielleicht erst einmal nur die Voraussetzungen für in Zukunft nach und nach einzuführende umfangreiche Neuerungen geschaffen?
Und wie sieht es mit der Verwendung der bisherigen Bibliotheken aus? Müssen die etwa auch alle in einer neuen Version vorhanden sein?

Mir geht es darum nicht in absehbarer Zeit umlernen zu müssen, wenn ich nun erst mit Python 2.7 anfange. Als Anfänger besteht ja auch die Gefahr, daß man dann anfängt die Syntax der unterschiedlichen Versionen durcheinander zu werfen. Meine Zeit ist auch leider begrenzt und es ist ja bereits absehbar, daß ich ergänzend irgendwann auch noch C/C++ benötigen werde. Daher wäre es mir schon am liebsten in die zukunftssicherere Version einzusteigen.
BlackJack

@Cobalt: Bei jeder Version ist in der Dokumentation ein „What's New?”-Abschnitt. Da kann man die Änderungen von Version zu Version ganz gut nachverfolgen.

Im Wesentlichen ist aus der ``print``-Anweisung eine Funktion geworden, es gibt den neuen `bytes`-Typ der das alte `str` ersetzt, und das alte `str` ist das was vorher `unicode` war, und in der Standardbibliothek sind ein paar Sachen umbenannt und anders auf Pakete verteilt worden. Des weiteren ist einiges an alter Syntax und Funktion verschwunden was man auch in Python 2.x schon lange nicht mehr verwenden sollte. Die wahrscheinlich umfangreichste Änderung hat die `bytes`/`str`/`unicode`-Geschichte verursacht, weil da zumindest intern in der Standardbibliothek alles mal durchgegangen werden musste welche Auswirkungen das hat und ob und was man entsprechend ändern muss. Das ist auch der Teil der bei eigenem Code beim portieren wahrscheinlich die meiste Arbeit macht, weil man das nicht wirklich automatisieren kann.

Und mit der Zeit sind jetzt neue Module in der Standardbibliothek hinzugekommen, die aber alle auch als Backport für Python 2.7 verfügbar sind, und ein wenig neue Syntax, die nicht zurückportiert wird, weil es offiziell keine 2.8 geben wird.

Letztendlich ist es keine wirklich radikale Änderung, was lustigerweise ein Grund ist warum der Umstieg sich so ewig hinzieht. Die Änderungen haben keine tollen neuen Sachen gebracht die man unbedingt haben möchte, Module werden rückportiert, damit bleibt nur die Syntax. Und da hat mich jetzt auch nichts vom Hocker gehauen wo ich sagen würde das muss ich um jeden Preis haben.

Ich denke wenn meine eine der beiden Major-Versionen beherrscht, dann ist das umlernen auf die andere keine grosse Sache. Es gibt auch Werkzeuge die beim portieren helfen. 2to3.py ist direkt bei Python (2 und 3) dabei. Und es gibt ein 3to2.py für die Gegenrichtung. Wenn man in einer Übergangszeit beide Versionen unterstützen will, oder wie in vielen Fällen auch unterstützen *muss*, ist der bevorzugte Weg Code zuschreiben der ohne Änderungen unter beiden Versionen läuft. Da gibt es Hilfe in Form von Modulen wie `six`, welche die Unterschiede vor dem Programmierer verstecken helfen. Letzteres ist mein Plan für die Zukunft: Wenn hier ca. ein Viertel der Systeme mit denen ich arbeiten muss Python 3 als Standardpython haben, fange ich an mittels `six` beide Versionen zu unterstützen, bis irgendwann alle auf 3 laufen. Alles natürlich unter dem Vorbehalt das Python 3 überlebt. Da zweifeln ein paar Leute dran. :-)
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

Ohje, also hat man derzeit als wirklich zwei mehr o. weniger parallel existierende Versionen. das verunsichert mich als blutigen Anfänger extrem.
Gibt es denn irgendwo eine Art (möglichst einsteigerfreundliche) tabellarischer Auflistung aller Änderungen, vielleicht in Form einer tabellarischen Gegenüberstellung alt<->neu? Idealerweise auch noch mit ergänzendem Hinweis, welche Elemente bereits unter Python 2.7 nicht mehr verwandt werden sollten?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Cobalt hat geschrieben:Ohje, also hat man derzeit als wirklich zwei mehr o. weniger parallel existierende Versionen. das verunsichert mich als blutigen Anfänger extrem.
Man hat das Gefühl, du hast den Text von BlackJack nicht gelesen. Die Unterschiede sind nicht groß, umlernen musst du bei einem Umstieg quasi nichts.
Cobalt hat geschrieben:Gibt es denn irgendwo eine Art (möglichst einsteigerfreundliche) tabellarischer Auflistung aller Änderungen, vielleicht in Form einer tabellarischen Gegenüberstellung alt<->neu?
BlackJack hat die What's-New-Abschnitte schon erwähnt.
Das Leben ist wie ein Tennisball.
BlackJack

@Cobalt: Es hat sich ja nicht die Sprache an sich geändert so dass Python 3 nun total anders aussehen würde als Python 2. Vieles lässt sich automatisiert mittels 2to3.py umschreiben. Einiges kann man auch vorher schon für Python 3 schreiben. Das `__future__`-Modul sei hier erwähnt, mit dem man auch in Python 2 zum Beispiel ``print`` zu einer Funktion machen kann, oder alle Zeichenkettenliterale zu Unicode-Zeichenketten.

Aber so ganz grundsätzlich funktionieren die Kontrollstrukturen und das Objektmodell (sofern man in Python 2 von `object` erbt) in beiden Versionen gleich.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

EyDu hat geschrieben: BlackJack hat die What's-New-Abschnitte schon erwähnt.
Naja, ich habe mal die What's-New-Abschnitte von Python 3.2, 3.3 und 3.4 überflogen und muß sagen, daß ich als blutiger Anfänger kaum etwas damit anfange kann. Das sind ja sehr lange Listen. Das meiste verstehe ich nicht und ich kann nicht differenzieren, was davon für mich als Einsteiger relevant wäre und was nicht.

Wenn ich euch richtig verstehe ist Python 3 aber im Prinzip also schon ausgereift und die volle Funktionalität und das ganze Repertoire an Bibliotheken auch mit der Version 3 nutzbar? Ich habe als Programmieranfänger ja keine Ahnung inwieweit es beim Schreiben eines Programms in Python 3.4 bei Verwendung von Bibliotheken, die in der alten Version geschrieben wurden zu Problemen kommen könnte. Als Anfänger weiß ich nicht einmal, inwieweit "Bibliotheken" in sich geschlossene autarke "Subprogramme" bzw. Sammlungen von Funktionen darstellen. Für mich ist ja alles neu.
Wenn mittlerweile im wesentlichen die volle Funktionalität mit Python 3 verfügbar ist, dann würde ich jedenfalls lieber gleich mit der Version 3.4 einsteigen.

Auf Python.org schreiben sie im Wiki ja:
"In particular, instructors introducing Python to new programmers may want to consider teaching Python 3 first and then introducing the differences in Python 2 afterwards (if necessary), since Python 3 eliminates many quirks that can unnecessarily trip up beginning programmers trying to learn Python 2. "
BlackJack

@Cobalt: Ein wirklich wichtiges What's New-Dokument ist das für 3.0 weil da die Unterschiede zu 2.7 drin stehen. Das war ja die erste Version bei der mit Rückwärtskompatibilität gebrochen wurde.

Das *nicht* alle Bibliotheken die man so gebrauchen könnte, schon für Python 3 verfügbar sind, ist doch gerade das Problem was viele vom migrieren abhält.

Den Satz aus dem Python.org-Wiki kann ich so nicht wirklich nachvollziehen. Vielleicht liegt das aber auch daran, dass ich mich nicht so gut in einen Programmieranfänger hinein versetzen kann.

Ich denke wichtig wäre es einfach überhaupt mal anzufangen, statt sich jetzt ewig damit aufzuhalten mit welcher Version man das am besten tut. Wenn die Kurse die Du ins Auge gefasst hast Python 2.7 verwenden, dann fang halt damit an, oder wenn Du mit Python 3.x anfangen möchtest, dann such Dir dazu passendes Lehrmaterial. Entweder 2.7 oder 3.4 zu lernen ist deutlich mehr Aufwand als hinterher dann die Unterschiede zwischen den beiden zu lernen um auch in der jeweils anderen Version zu Programmieren. Und wie gesagt es gibt mit 2to3.py und 3to2.py „Übersetzungshilfen” in beide Richtungen. Und das ebenfalls schon erwähnte `six`-Modul aus dessen Dokumentation man auch Informationen über die Unterschiede bekommt.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

BlackJack hat geschrieben:Entweder 2.7 oder 3.4 zu lernen ist deutlich mehr Aufwand als hinterher dann die Unterschiede zwischen den beiden zu lernen um auch in der jeweils anderen Version zu Programmieren.
Die Formulierung ist etwas missverständlich. Du wolltest wohl schreiben beide Versionen gleichzeitig zu lernen ist mehr Aufwand als sich erstmal nur auf eine zu konzentrieren und dann im Nachhinein gezielt die Unterschiede zu lernen, oder? So habe ich es ja auch vor. Wird dann wohl die Version 3, auch wenn die meisten Videokurse leider noch in 2.7 sind. Aber letzten Endes sollten die Videos ja nur der Motivation dienen. Im Prinzip lernt man eh mit einem Buch effektiver.

Aber das die Migration der Bibliotheken so langsam von statten geht ist mir ein Rätsel. Python 3 existiert doch schon seit nunmehr 5 Jahren.
Und zum 2to3.py: gibt es da Nachteile und muß man da auch noch manuell nachbessern? Ich meine falls dies perfekt funktionieren würde, dann hätte man doch schon alle Bibliotheken damit per Skript portieren können. Also ist die Sache doch etwas hakelig oder?

Wie sind denn eure Zukunftsprognosen (sofern ihr eine Glaskugel habt)? Ist schon absehbar wann eine Aktualisierung aller Bibliotheken auf Python 3 abgeschlossen sein wird?
BlackJack

@Cobalt: Nein ich meinte das schon als exklusives oder. Die Sprache zu lernen ist im Vergleich zu den paar Unterschieden zwischen den beiden Major-Versionen deutlich mehr Aufwand.

Wie gesagt, den meisten wird einfach die Motivation gefehlt haben, oder auch immer noch fehlen. Python 2.7 funktioniert ja. Es gibt viele Module und Pakete dafür. Die werden auch noch weiterentwickelt, und es kommen auch neue hinzu. Das was bei Python 3 an Modulen zur Standardbibliothek hinzukommt, wie zum Beispiel `pathlib`, gibt es als Backport für Python 2, dafür muss man also nicht wechseln. Einzig neue Syntax bekommt man nicht mehr, oder wenn in der CPython-Implementierung für Python 3 irgend etwas radikal verändert würde. Das bisschen neue Syntax in Python 3 was man nicht in Python 2.7 haben kann, reisst mich jetzt nicht vom Hocker. Und radikale Änderungen erwarte ich eher von PyPy — was auch noch bei 2.7 steht. Jython hat erst eine Beta von 2.7 draussen, da ist 2.5 noch die stabile Version. Dropbox will eine Konkurrenz zu PyPy entwickeln — ein weiteres Python 2.7. Die meisten verbreiteten Linux-Distributionen fangen jetzt gerade erst an Python 3 als Standardpython zu verwenden, oder planen es demnächst zu tun. Unter Windows ist Python in der einen oder anderen Software als Sprache eingebettet, auch überwiegend Python 2. So auf Anhieb fällt mir nur Blender ein, die früh auf Python 3 gesetzt haben, und wohl etwas enttäuscht waren, dass sie damit erst einmal eine Insellösung hatten.

Bei 2to3.py muss man in der Regel manuell nachbessern. Oder im Vorfeld schon ein wenig anpassen um es dem Programm einfacher und eindeutiger zu machen. Zum Beispiel bei Zeichenketten: `str` wurde in Python 2 von den meisten Leuten sowohl für Texte als auch für Binärdaten benutzt und ein Programm kann nicht wirklich zuverlässig entscheiden was in welcher Situation eigentlich gemeint war. Und das der ``/``-Operator in Python 3 bei ganzzahligen Operatoren kein ganzzahliges Ergebnis mehr haben muss, kann sich auf Ergebnisse auswirken. Das muss man also nach dem portieren testen, ob da immer noch das gewollte heraus kommt, oder ob man ``/`` an der einen oder anderen Stelle durch ``//`` ersetzen muss. Umbenannte Module können automatisch korrigiert werden, aber bei aus der öffentlichen API weggefallenen Modulen wie zum Beispiel `thread` kann man natürlich nicht viel machen. Da muss schon ein Programmierer ran und das auf das `threading`-Modul umschreiben.

Ich denke mal so 5 Jahre wird das mindestens noch dauern bis entweder mehr Leute Python 3 produktiv einsetzen als Python 2, oder man mal darüber nachdenken sollte Python 3 als gescheitert zu erklären. Was davon wahrscheinlicher ist — darüber würde ich jetzt keinen Tipp abgeben wollen.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

BlackJack hat geschrieben:@Cobalt: Nein ich meinte das schon als exklusives oder. Die Sprache zu lernen ist im Vergleich zu den paar Unterschieden zwischen den beiden Major-Versionen deutlich mehr Aufwand.
Ach so war es gemeint. Ok, das habe ich für so selbstverständlich gehalten, daß ich es für einen Formulierungsfehler hielt, daß Du extra darauf hingewiesen hast.
Wie umfangreich sind die Änderungen denn Für Leute, die sagen wir mal so ein Jahr Programmierpraxis mit Python besitzen? Würde wenige Nachmittage reichen, um sich von Python 2.7 kommend auf 3.x umzustellen?

Aus meiner zugegebenermaßen beschränkten Anfängersicht klingt das alles ein wenig abschreckend. Ein manuelles Nacharbeiten umfangreicher Module oder gar einer ganzen Bibliothek stelle ich mir grausig vor. Es klingt auch alles ein bißchen so, als würde die Weiterentwicklung nun auf die zwei unterschiedlichen Versionen aufgespalten. Also die eine Bibliothek nur unter 2.7, die andere nur unter 3.x weiterentwickelt?
BlackJack

@Cobalt: Bei einem Jahr Erfahrung sollten ein paar Nachmittage in der Tat ausreichen. Bei 2.7 wird nichts mehr weiterentwickelt. Jedenfalls nicht von „offizieller” Seite. Die Backports kommen aus der Community und sind üblicherweise im Python Package Index zu finden.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

Ok, mit dem Weiterentwickeln meinte ich die Bibliotheken für 2.7. Das habe ich doch richtig verstanden, daß sich da die Energie für deren Weiterentwicklung so ein bißchen spaltet zw. den zwei Versionen oder?
Aber nach allem was hier bisher geäußert wurde scheint die Entscheidung mit welcher Version man anfängt dann ja in der Tat nachrangig.
BlackJack

@Cobalt: Ja, sogesehen gibt es eine Spaltung.
Cobalt
User
Beiträge: 32
Registriert: Freitag 4. April 2014, 11:54

DaftWullie hat geschrieben:Ich habe im letzten Frühjahr den Kurs "An Introduction to Interactive Programming with Python" absolviert. Das war ganz amüsant und ich habe mich in dem Zuge endlich mal mit "Ereignisgetriebender Programmierung" beschäftigt. Ich fand auch die Videos ganz gut gelungen. Bei dem Kurs wurde "Peer evaluation" groß geschrieben, man musste also jede Woche die Lösung der Wochenprojekte vonm 5 Kommilitonen bewerten. Etwas zeitraubend...
Ok, dieser Kurs läuft leider grad schon seit mehreren Wochen. Bezieht sich die Peer-Evaluation auf die Mini-Projects? Der Kurs hat ja eine Unmenge positiver Reviews erhalten und scheint stark frequentiert. Bin daher grad am überlegen vom MITx 6.001x (auch verlinkt im Eingangsbeitrag) zu wechseln. Aber keine Ahnung, ob dies nun, wo er schon fast in die vierte Woche geht noch Sinn macht. Ich muß allerdings sagen, daß mich Spieleprogrammierung überhaupt nicht interessiert. Ich lerne Python (und demnächst auch Matlab/Octave) um mich mit maschinellem Lernen auseinanderzusetzen. Ich frage daher mal im von BlackJack verlinkten Faden zu diesem Kurs Anfängerkurs in Python bei Coursera, ob er für mich trotz meiner anders gearteten interessen geeignet wäre. Also alles, was eher nur für Spieleprogrammierung relevant ist, wäre für mich ja überflüssig.
Antworten