Spezialisierungs-Zertifikat

In den letzten Wochen habe ich eine Coursera-Spezialisierung gemacht:
Python for Everybody.

Die Spezialisierung ist in fünf Kurse gegliedert, wobei empfohlen wird mindestens die ersten beiden (nicht nur den ersten) zu machen, das sind:

  • Programming for Everybody (Getting Started with Python)
  • Und: Python Data Structures

Falls jemand von euch daran interessiert ist, mal ins Programmieren reinzuschnuppern, dachte ich mir, könnte ein kurzer Einblick interessant sein.

Zunächst aber eine kurze Vorwarnung: Ich habe mit null Vorkenntnissen gestartet und weiß auch jetzt noch so wenig, dass sich vermutlich jeder Informatik-Zweitsemester aufgrund all der Fehler in dem Text an den Kopf greift. Meinen Text jetzt bitte also nicht als Tutorial oder Informationsquelle für irgendwelche Begriffe verwenden, sondern nur als Anregung, ob der Coursera Kurs – oder vielleicht auch grundsätzlich Coursera Kurse – interessant für euch sein könnten.


Was erwartet euch?

In dem Beitrag wird es jetzt erstmal darum gehen, was ich in den fünf Teilen gelernt habe. Dann kommt ein (zugegebenermaßen sehr amateurhaftes) Video zu einem noch amateurhafterem Programm, das ich geschrieben habe. Und danach gibt es ein grundsätzlicheres Fazit zu den Kursen (der University of Michigan) und Coursera (auch im Vergleich mit der Wissensvermittlung im traditionellen Format einer Universität).

Was habe ich gelernt?

Im ersten Teil des Kurses habe ich zum ersten Mal in meinem Leben die Eingabeaufforderung/ Command Line von Windows verwendet und so beginnt der Kurs wirklich ziemlich weit vorne: Was ist Python? (Eine Programmiersprache) Und wie verwende ich die Eingabeaufforderung eines Computers (siehe Screenshot) überhaupt?

Eingabeaufforderung

Dann ging es auch schon damit los, die ersten Programme zu schreiben. Wie schaffe ich es, dass nach Ausführen eines Programms bestimmte Zeichen oder Wörter auf diesem schwarzen Hintergrund erscheinen?

Nach und nach lernt man einige eingebaute Funktionen und Methoden des Python-Programms und jeweils am Ende einer Coursera-Woche findet man meist sowohl ein Quiz als auch ein kleines Homeassignment, die bestanden werden müssen, um am Ende jedes Kurses ein Zertifikat zu erhalten.

Im ersten Kurs ist so ein Homeassignment dann zum Beispiel: Ein kleines Programm zu schreiben, das den Nutzer erst nach seinen gearbeiteten Stunden sowie seinem Stundenlohn fragt, um ihm dann (unter Beachtung eines 1,5-fachen Stundensatzes bei Überstunden) seinen Gesamtlohn auszugeben.

Klingt jetzt erstmal nach einer Matheaufgabe und nicht nach programmieren, ist es auch vorrangig, aber dabei muss man eben die in Python eingebauten Funktionen verwenden, sie teils umformen und lernt sie sowie die Objekte, die in ihr verwendet werden, (z.B.: Strings und Floating Points, im zweiten Teil dann auch Listen, Dictionaries und Tupel …) nach und nach kennen.

Es geht dann weiter damit anzufangen “Files zu parsen”. Meinem bisherigen Verständnis nach ist das (anfangs meist Text-) Dateien “nach bestimmten Zeichenkombinationen durchsuchen”, damit man sich dann (beispielsweise) aus einer Textdatei mit hunderten Emails jeweils Zeilen, die mit einem “From: ” beginnen, heraussucht und sich so die E-Mail-Adressen ausgeben zu lassen.

Oder man lässt sich einfach nur die Anzahl der Zeilen mit einer E-Mail-Adresse darin ausgeben. Im Atom-Texteditor sieht sowas dann, wenn man den Code als eine Python-Datei speichert, so aus:

Fancy, nicht?

Und beim Schreiben unterschiedlicher Programme für die Homeassignments lernt man nach und nach, zumindest ein bisschen über das Programmieren. Und das bedeutete für mich dann beispielsweise sowas wie “Loop-Denken” zu erkennen / kennenzulernen / beginnen zu lernen anzuwenden.

Was meine ich mit Loop-Denken und sowas wie Loop-Denken?

Wenn wir uns im Screenshot die nicht-grauen Zeilen ansehen, dann öffnen wir zunächst (in Zeile sechs) eine Textdatei, setzen danach eine Variable count gleich null und danach iteriert hier meine Variable “i” (nach dem lilanen “for” im Screenshot) durch die Text-Datei “fname” durch, wobei i jeweils eine Zeile in dieser Textdatei ist. (Als würde man jede Zeile einer Tabelle durchsuchen, dann (in der nächsten Iteration) zur nächsten gehen, usw.) Bei jeder Iteration werden dann die Zeilen 14 bis 17 ausgeführt. Zeile 14: “i = i.rstrip” lässt überflüssige Leerzeichen verschwinden; die Zeilen nach “if i.startswith (‘From ‘) :” (Zeile 15) werden nur ausgeführt, wenn eine Zeile eben mit “From ” beginnt, usw.

Mir geht es hier auch gar nicht darum, dass ihr versteht, was da passiert… dazu sind ja eben die Kurse da…, sondern, dass es eine gewisse, logische Art des Denkens gibt (z.B.: durch etwas “durchzuloopen”), die man auch schon in diesem kleinen Kurs… naja… zumindest erhält man erste Einblicke.

Ein anderes Beispiel für einen “Aha… sowas gehört also auch zum Programmieren”-Moment war für mich dieses “count = count + 1″ danach im Screenshot. Mathematisch ist das klar: falsch (count ist ganz sicher nicht count + 1), aber nicht hier. Hier nimmt meine Variable “count” einfach nur mit jeder Iteration durch den For-Loop einen um eins höheren Wert an. Und so zählt man durch. Simple, aber eben auch cool… (also… ich finde das cool) und bei den Codes, die unser Professor uns zur Verfügung stellte, dachte ich mir eben manchmal: “elegante, smarte Lösung… sowas will ich auch können, schlau ausgedacht.”.

Das war jetzt nur mal so ein ganz kleiner Einblick in die ersten beiden Teile.


In den Teilen drei, vier und fünf
  • Using Python to Access Web Data,
  • Using Databases with Python,
  • und Capstone: Retrieving, Processing, and Visualizing Data with Python

lernt man dann noch auf Websites zuzugreifen und wer sich schon einmal den Seitenquelltext einer Seite angesehen hat (der kommt später auch kurz in dem Video), weiß, dass die teilweise halt nicht ganz so schön sind, für mich immer noch abschreckend aussehen und deswegen lernt man auch ein erstes Tool, mit diesen Seitenquelltexten umzugehen, (namens BeautifulSoup*) kennen.


*BeautifulSoup ist übrigens benannt nach einer Textstelle aus Alice’s Adventures in Wonderland:

BEAUTIFUL Soup, so rich and green, 
Waiting in a hot tureen! 
Who for such dainties would not stoop? 
Soup of the evening, beautiful Soup! 
Soup of the evening, beautiful Soup!

Beau- ootiful Soo-oop! 
Beau- ootiful Soo-oop! 
Soo- oop of the e- e- evening, 
Beautiful, beautiful Soup!

Beautiful Soup! Who cares for fish, 
Game, or any other dish? 
Who would not give all else for two 
Pennyworth only of Beautiful Soup? 
Pennyworth only of beautiful Soup?

Beau- ootiful Soo-oop! 
Beau- ootiful Soo-oop! 
Soo- oop of the e- e- evening, 
Beautiful, beauti- FUL SOUP!

Lewis Carroll

*Beautiful, beauti- FUL SOUP!*

🕺🏼

Ein wenig abgekommen vom Thema, sorry.


In Using Databases with Python lernt man SQL (Structured Query Language) kennen, mit deren Hilfe man dann beginnt Datenbanken zu erstellen. Man speichert also zum ersten Mal Daten, an denen unser geschriebenes Programm in einer nächsten Sitzung weiterarbeiten kann, anstatt wieder neu anfangen zu müssen.

Analysiert man zum Beispiel am ersten Tag 100.000 Emails, kann man die relevanten Daten darin, dann in strukturierter Form in einer Datenbank speichern, um dann das selbe Programm am nächsten Tag weiterlaufen zu lassen und aus den weiteren Emails relevante Daten in diese Datenbank einzufügen.

Im fünften Teil wurden dann zum ersten Mal Daten auch visualisiert, aber das nur sehr bedingt, selbst kann ich nach den Kursen nichts visualisieren. (Meine Vermutung ist, dass ich dazu noch HTML-Code schreiben können müsste.) Was ich kann ist nicht allzu spektakulär, aber weil zumindest dieser Texteditor, in dem die Programme geschrieben werden so cool aussieht, weil es vielleicht ganz nett zu sehen ist, was man dann am Ende der fünf Kurse für ein Programm schreiben könnte, wenn man wollte, und natürlich wegen einer highend Wörterwolkenillustration am Ende, erkläre ich das jetzt in einem Video.

In einem Satz macht mir das folgende Programm eine Wortliste mit den hundert meistverwendeten Wörtern in einem Beitrag von mir. Dazu muss ich nur den URL und die Anzahl der zu scannenden Paragraphen in die Eingabeaufforderung eingeben. Außerdem zeigt es mir an, wie oft das jeweilige Wort verwendet wurde. Aus dieser Wortliste macht es dann eine HTML-Datei, die ich im Browser öffnen kann, und dort sehe ich dann eine sexy, bunte Wörterwolke.

Dazu jetzt mehr im Video, das kann man aber auch ohne Probleme natürlich einfach skippen.

Video (leider aufgrund des Datenvolumens nicht in bester Qualität und in drei Teilen – scusi)
Video Teil I
Video Teil II
Video Teil III

Kurse eins und zwei wollte ich auf jeden Fall machen, um einen Einblick ins Programmieren zu erhalten. Kurse drei, vier und fünf hatte ich vor allem deswegen gemacht, weil ich die paar kleinen Handgriffe, die ich in den Teilen eins und zwei gelernt habe, nicht sofort wieder vergessen wollte.

Was für mich jetzt nach Beendigung des Kurses schwierig wird ist, hin und wieder Programme zu schreiben und mehr zu dem Thema zu lernen. Denn, auch wenn es manchmal so aussieht als würde ich Dinge halbwegs schnell lernen, vergesse ich sie danach doch gefühlt mindestens genauso so schnell wieder. Vor allem, wenn ich sie nach dem Lernen nicht für einen längeren Zeitraum anwende.

Daher, bevor wir zu einem kurzen Fazit zu den Coursera-Kursen im Allgemeinen kommen, noch einmal ein Zitat aus Alice’s Adventures in Wonderland.

“Well, in our country,” said Alice, still panting a little, “you’d generally get to somewhere else—if you run very fast for a long time, as we’ve been doing.”

“A slow sort of country!” said the Queen. “Now, here, you see, it takes all the running you can do, to keep in the same place. If you want to get somewhere else, you must run at least twice as fast as that!”

Lewis Carroll – (das sogenannte: “Red Queen’s Race”)

Für die nächste Zeit ist deswegen der Plan, sich zumindest Mal (1) mit anderen programmierbezogenen Themen auseinanderzusetzen (in der Hoffnung, dass sich da dann Synergieeffekte ergeben, die mich das angeeignete bisschen Python weniger schnell vergessen lassen). Außerdem, (2) sich Gedanken zu machen, was ich für Programme mit den erworbenen Kenntnissen schreiben könnte und sich dafür Zeit zu nehmen. Ersteres werde ich ziemlich sicher bald machen, damit ich Zweiteres tue, muss ich mich wirklich zusammenreißen und benötige auch noch Glück, eventuell ein, zwei passende Einfälle zu haben oder auf sie zu stoßen.

Coursera

Im Folgenden geht es mehr um Coursera Kurse im Allgemeinen und weniger die Inhalte der Python-Spezialisierung.

Bisher habe ich auf Coursera nur sechs Kurse abgeschlossen. Mein erster Kurs war “Model Thinking” und danach jetzt die fünf Python-Kurse. Außerdem habe ich einen weiteren Kurs angefangen, aber sehr schnell wieder aufgehört(, weil er meines Erachtens nach schlecht aufbereitet war). Aber durch den anderen habe ich auch die University of Michigan Kurse mehr zu schätzen gelernt.

Während man als Student in der Uni zwangsläufig auch mal in der Lage sein muss, sich mit Kursinhalten auseinanderzusetzen, die wenig ansprechende gestaltet wurden und/ oder die einen persönlich wenig ansprechen, hatte ich in meiner Freizeit (sowohl aus Faulheit aber auch aus Effizienzgedanken) einfach keine Lust dazu.

Was ich an den sechs Kursen der University of Michigan schätzte sind die hochwertigen Videos. Meist sind das abwechselnd Nahaufnahmen des Professors und dann wieder erklärende Folien dazu:

Screenshot aus Teil I

Die Videos sind sympathisch gemacht und bei Bedarf kann man sie kurz anhalten, um einen Gedankengang nachzuvollziehen oder Notizen zu machen oder spielt sie in doppelter Geschwindigkeit ab, wenn man bspw. denkt etwas schon zu wissen.

Speziell bei der Programmier-Thematik denke ich, dass gute Aufbereitung sehr wertvoll ist. Ich vermute stark, dass ich beispielsweise ein Informatik Studium an der Uni sehr bald abbrechen würde, weil mir das einfach zu trocken ist. Meiner Vermutung nach ist das vor allem anfangs viel auswendig lernen: Was ist ein Tupel, was ist ein String, was ist der Hexadezimalcode zu “*”? Aber auch später kann ich mir an unseren Hochschulen gut vorstellen, dass man nicht so sehr zum Programmieren eigener Programme angehalten wird, sondern hauptsächlich die Theorie dazu lernt und zwar auf eine Weise, dass zumindest ich froh gewesen wäre, wenn ich, sobald die Theorie gelernt ist, nichts mehr davon hören muss.

So ein Studium wird dann vermutlich an anderen Stellen schnell (unter Verwendung dieser Begriffe) eine fiese Mischung aus langweilig und sehr kompliziert, dann ist man geneigt zu sagen, “das ist einfach nichts für mich” oder “dafür bin ich einfach zu dumm”. Aber gerade bei solchen leicht trocken-werdenden Themen ist für mich eine gute (bildliche) Aufbereitung und ein ansprechendes Format sowie die richtige Häppchengröße oft Gold wert. Das ist in den Kursen gut umgesetzt. Und so kann man auch in sowas zumindest mal reinschnuppern, ohne sofort vollkommen abgeschreckt zu sein.

Im Laufe meines Studiums und Eigenstudiums habe ich schon oft Dinge verstanden, von denen ich anfangs dachte, “das kann ich einfach nicht verstehen”, sodass ich diesen Gedanken bereits kenne und einfach immer um ein “noch” ergänze. Oft fehlt einem einfach unfassbar viel Hintergrundwissen, um es darin einzubetten (oder welches es interessant machen würde), manchmal die richtige Aufbereitung, manchmal einfach noch zwei Wochen Disziplin. Aber am Ende ist es doch möglich.

Und um herausfordernde Erfolgserlebnisse zu haben, die die Frustration mindern, waren die Quizze, vor allem aber die Anwendung in den Homeassignments super. Teils haben die mich wirklich “gefuchst”, aber alle waren machbar… in dem letzten Teil wurden sie sogar zu leicht. (Dass die Tests dort leicht sind, liegt aber nicht an meiner unfassbaren Awesomeness, sondern wird explizit gesagt.)

Dazu gibt es dann noch das E-Book, in dem ich auch immer wieder Sachen nachlese und welches ergänzend oder beim Wiedervergegenwärtigen hilfreich ist.

Wenn ich die Kenntnisse jetzt anwende (und das Gute ist, die Kurse sind so gemacht, dass das möglich ist), dann habe ich aus diesem Kurs sehr viel mehr mitgenommen als aus vielen universitären Kursen, die gleichzeitig weitaus mehr Aufwand erforderten.

Und der Vergleich bietet sich ja schon irgendwie an:
Hochschule und Coursera.
Auch wenn sich, soweit ich weiß, Coursera mehr als Ziel gesetzt hat, Bildung flächendeckend zugänglich zu machen, als traditionelle Universitäten zu ersetzen (der Kurs ist ja gerade von einer Universität gemacht) und ich nach sechs Coursera-Kursen nicht ausreichend Informationen dafür gesammelt habe, eine wohlbegründete Meinung zu haben, folgt jetzt trotzdem mal meine Meinung dazu:

Ist Coursera einer Hochschule ebenbürtig oder gar überlegen?

Puh. Meine erste Reaktion ist: “Nein…”

Ich schränke das aber zu meiner eigenen Überraschung ein. Ich denke, was die Effizienz im Lernen angeht, ist Coursera, wenn die Kurse so aufbereitet sind wie die der University of Michigan, (für mich) überlegen.

[Ich bin aber auch ganz gut darin, mir selbst Druck zu machen, etwas zu erledigen, auch wenn es über große Teile kein unmittelbarer Spaß ist. Zumindest sobald ich einen gewissen Sinn darin sehe oder es mir empfunden autonom als Herausforderung gestellt habe. (Das wirkt vielleicht ein wenig unstimmig angesichts des vorherigen Plädoyers für die Wichtigkeit der guten Aufbereitung, ist es aber gar nicht so unstimmig.)]

Die Uni gibt und fordert gleichzeitig mehr als Wissensvermittlung. (Und trotzdem werde ich im Folgenden auch immer wieder auf die Wissensvermittlung als Faktor eingehen, weil das für mich auf jeden Fall eine wichtige Aufgabe einer Hochschule sein sollte. Stimmt man hier nicht mit mir überein, ist die ganze Argumentation natürlich hinfällig.)

Erstens
ist im Studium die Herausforderung zu meistern, große Mengen an Stoff für eine bestimmte Klausur zu können. Das ist eine Stresssituation und etwas das Coursera (bisher) nicht so abfragt. Hier sind es leichter verdaubare Happen.

Die Frage ist: Braucht man das? … Ich weiß es nicht. Wenn man die Informationen in gestückelter Form vielleicht sogar besser im Kopf behält und dann trotzdem in späteren Kursen auf diesem Vorwissen aufbaut, dann ist jene Herausforderung vielleicht ein gutes Signal in Sachen Disziplin und Durchhaltevermögen (negativer konnotiert könnte man es wohl auch als “blinden Gehorsam” bezeichnen), vielleicht auch für ein Mindestmaß an Intelligenz, zumindest für Gewissenhaftigkeit, aber sie ist nichts, was notwendig wäre, wenn es darum geht, Wissen zu vermitteln.

[Ich weiß, dass es Hypothesen gibt, dass bei einem universitären Abschluss Wissensvermittlung nur geringe Relevanz hat, sein primärer Zweck darin besteht, Unternehmen Gewissenhaftigkeit und Intelligenz zu signalisieren… – abgesehen davon, dass ich es schädlich und traurig finde, das so zu sehen; man sich, wenn es dazu geworden ist, darum kümmern sollte, das wieder zu ändern – ist das nämlich in jedem Fall ziemlich ineffizient, braucht man für so ein Signal fünf Jahre.]

Und trotzdem ist das Aushalten solch einer Stresssituation vermutlich eine gute Übung und auch wichtiger Teil der Bescheinigung am Ende eines Studiums, die Coursera Kurse so nicht liefern.

Zweitens
stößt man durch die einhergehenden Freiräume manchmal auch in der Uni, im universitären Kontext oder im Studentenleben (wobei ich selbst alles andere als Tanzend-Freiheiten-auskostendes-Paradebeispiel bin) erst auf Themen, die man zuvor überhaupt nicht auf dem Schirm gehabt hatte oder zuvor gar ausgeschlossen hatte und dann doch aus einem Zwang heraus interessant werden. (Gleichzeitig kann man auf solche Themen auch im außeruniversitären Kontext kommen und trotzdem bieten die universitären Freiräume gemischt mit einem Mindestmaß an Struktur doch meines Erachtens nach sogar mehr die Gelegenheit dazu als bspw. ein Gap-Year. Einen Haken schlagen wir noch: Das sage ich, obwohl ich nie ein Gap-Year gemacht habe und mir deshalb dazu wohl kein Urteil erlauben sollte.)

Drittens:
Hat man in einer traditionellen Uni zwangsläufig Umgang mit Menschen. …

Und das ist vielleicht der schwerwiegendste … Vorteil traditioneller universitärer Bildung. Gerade, wenn man die Tendenz dazu hat zu vereinsamen, sind Präsenzveranstaltungen und Gruppenarbeiten hilfreich und notwendig (wenn auch manchmal unangenehm). Darüber hinaus lernt man an der Uni aber eben neue Menschen kennen, die zumindest mal aus irgendwelchen Gründen das selbe Studienfach gewählt haben (eventuell deutet das ja auf weitere Gemeinsamkeiten hin) und dann über diese vielleicht auch noch weitere Köpfe, die nett, interessant, hilfreich und noch mehr sein können.

Coursera ist allerdings mit den “Discussion Forums” durchaus darum bemüht, Austausch zwischen Studenten anzuregen. Die Komponente “Real-Life” kommt hier aber wohl eben oft zu kurz.

Viertens:
Ein letzter kurzer Punkt: Abschlussarbeiten.

Dieses gründliche Auseinandersetzen mit einem Thema, das eigenständige Vertiefen und im Zuge dessen auch neue Erkenntnisse entwickeln als Teil des Zertifikats sehe ich bei Coursera so auch noch nicht. Teils kann man sicher argumentieren, dass das eigenständige Arbeiten bei Coursera meist schon systemimmanent ist, trotzdem besitzt eine Abschlussarbeit noch einmal eine andere Qualität und Tiefe, die so, denke ich, noch nicht Teil der Zertifikate ist.

Fazit:

Coursera ist toll.

Es gibt viele Kurse, in denen man gut aufbereitet, angenehm und, wie ich finde, effizient (und effizienter als in der Hochschule) lernt. Gerade die der University of Michigan, aber… um die Signale zu setzen, die ein Hochschulabschluss vermutlich setzt, was zu ersetzen – wie gesagt und soweit ich weiß nicht ausgeschriebenes Ziel der Plattform, der es mehr um Bildung an sich geht, ist -, fehlt noch einiges.

Ende.


P.S.: Aller guten Dinge…

There seemed to be no use in waiting by the little door, so she went back to the table, half hoping she might find another key on it, or at any rate a book of rules for shutting people up like telescopes: this time she found a little bottle on it, (“which certainly was not here before”, said Alice,) and tied round the neck of the bottle was a paper label with the words “DRINK ME” beautifully printed on it in large letters. It was all very well to say “Drink me”, but the wise little Alice was not going to do that in a hurry: “no, I ’ll look first”, she said, “and see whether it’s marked ‘poison’ or not:” for she had read several nice little stories about children who had got burnt, and eaten up by wild beasts, and other unpleasant things, all because they would not remember the simple rules their friends had taught them, such as, that a red-hot poker will burn you if you hold it too long; and that if you cut your finger very deeply with a knife, it usually bleeds; and she had never forgotten that, if you drink much from a bottle marked “poison”, it is almost certain to disagree with you, sooner or later.

Lewis Carroll – Alice’s Adventures in Wonderland