Monthly Archives: Dezember 2012

I like it the HARD WAY (rather than the insulting and indigenous, incredibly boring baby steps EASY way)

Man kann so anfangen:

Declaring variables in Python is easy; you just write out a name/identifier, like spam, and use = to assign it a value, and you’re done!

Set the variable my_variable to the value 10.

Oder so:

This exercise has lots of math symbols. Let’s name them right away so you know what they are called. As you type this one in, say the names. When saying them feels boring you can stop saying them.

Das erste Zitat stammt von der Code Academy. Plom besuchte mich vorgestern, damit wir zusammen Python (und kochen)lernen können. Ich hatte schon vor einer Weile mit dem Python Track begonnen und recht schnell Fortschritte gemacht bis ich zur Übung “Pyg Latin” kam. In dieser Übung soll ein Programm geschrieben werden, das eingelesene Sätze in eine Art Geheimsprache übersetzt. Aber nach der zweiten Aufgabe verlor ich meine Motivation. Plötzlich war mein Studium wieder enorm wichtig und ich vergaß alles, womit ich den Bologna-Druck systematisch dekonstruiert hatte. Uni statt Programmieren! Und wenn mich jemand fragte, wie’s so mit dem Programmieren läuft, antwortete ich: “beschissen”. Und war angesichts der Stagnation – erst bei C, jetzt bei Python – ehrlich gesagt sehr viel enttäuschter, als ich es zugegeben hätte und jetzt tun würde!

Aber spätestens nachdem ich nun ein anderes Tutorial ausprobierte, habe ich mir genügend Gedanken darüber gemacht, um die Schuld auf das Konzept von Code Academy abwälzen zu können.
Es gibt diverse Eingeschaften des Code Academy Konzepts, die ich problematisch finde.

1. Programmieren im Browser

Code Academy erfordert nicht von Anfang an, dass ich in einer Python Shell oder in meinem eigenen Terminal mit der Sprache arbeite. Das, was mich an Assembler begeisterte, bspw. die Nähe zur Maschine, die umfassenderen Lernergebnisse und das über die bloße Sprache hinausgehende Verständnis von Code und Computern war kaum bis gar nicht vorhanden. Bei der Code Academy schreibe ich in einem Terminal IM Browser. Das sieht dann so aus:

Screenshot - codeacademy

Zwar ist Python eine interpretierte Programmiersprache, das heißt, Programme in Python muss ich nicht erst im Terminal kompilieren, um sie ausführen zu können, aber gerade diese Notwendigkeit bei Assembler oder C ließ mich gleichzeitig auch mein Terminal, die dazugehörige Sprache Bash und den Zusammenhang von Prozessor/Computer und Code besser verstehen.Dieser Ansatz führt m.E. zu einem unnötig partiellen Verständnis.

2.  Fehlermeldungen

Daran bin ich auch letztendlich gescheitert. In der Aufgabe oben hätte ich statt “printf” (C-Syntax) einfach “print” schreiben müssen. Aber man kann sich ja mal vertun. Allerdings sind die Fehlermeldungen für mich recht kryptisch und vor allem für AnfängerInnen vermutlich kaum nachvollziehbar. In diesem Fall kann ich durch aufmerksames Lesen den Fehler finden. Später hatte ich einen Indentation Error als Fehler in einer Zeile, den ich nicht selbständig beheben konnte. Ich bin mir nicht sicher, ob ein besserer Debugger das Problem für mich hätte lösen können, allerdings hätte ich dafür auch ein Terminal verwenden müssen.

3. Lineare Lösungswege

Für die meisten Probleme gab es einen einzigen richtigen Lösungsweg. Ich persönlich halte diesen Ansatz nicht für nachhaltig. Andere meinen, dass das Umsetzen von Kreativität im Code erst später erlernt werden soll damit nicht lauter Spinner herangezüchtet werden oder so, die uns mit …”kreativen Lösungswegen” quälen.
Aber genau das halte ich für ein emanzipatorisches Moment, wenn ich verstehe, dass ich durch das Programmierenlernen nichts weiter als Kreativität und ein Terminal brauche, um eine Lösung für ein Problem zu finden. In diesem Falle ist aber das Problem das Finden des Lösungsweges, den sich der/die AutorIn erdacht hat. Und die Lösung ist, sich zu überlegen, was “man” von einem wohl wolle. Eigentlich fände ich es besser, wenn man genau den einen Lösungsweg nicht verwenden dürfte und nur drumrum programmieren darf. Aber darüber dürft ihr euch gerne in den Kommentaren kloppen.

4. Langeweile

Das eingangs erwähnte Beispiel wird wie folgt fortgesetzt:

Great! We can now summon the value 10 by calling out the name my_variable whenever we need it.

Set the following variables to the corresponding values:

my_int to the value 7

my_float to the value 1.23

my_bool to the value True

Und dann tippst du die ganze Scheiße wieder ein und hast gelernt, wie man Scheiße eintippt.
Das ist natürlich ein furchteinflößendes Beispiel, später wird es doch komplexer, aber die Langeweile wich nie von mir. Dabei kann Programmierenlernen Spaß machen. Jawohl:

>>>>> PROGRAMMIERENLERNEN KANN SPAß MACHEN! <<<<<

Zum Beispiel wenn man mit dem genialen, aber betrunkenen Bukowski der Online Tutorials Programmieren lernen: Learn Python the Hard Way. Nachdem Plom und ich sicher eine halbe Stunde schweigend und gelangweilt die Code Academy Übungen gemeinsam nachprogrammierten, fasste er sich irgendwann ein Herz und überredete mich, stattdessen mit LPtHW anzufangen. Glücklicherweise!
Ich habe das Tutorial keineswegs als “schwieriger” wahrgenommen. Im Gegenteil, ich hatte Spaß daran und das Gefühl, innerhalb kurzer Zeit sehr viel zu lernen. Außerdem kicherte ich über Aussagen wie

Every programming language has some kind of way of doing numbers and math. Do not worry, programmers lie frequently about being math geniuses when they really aren’t. If they were math geniuses, they would be doing math, not writing ads and social network games to steal people’s money.

“Learn Python the Hard Way” ist lustig, herausfordernd, klug und unterhaltsam. Und er hat sogar einen wunderschönen Absatz für “Smarties” parat um klarzustellen, an wen sich das Buch richtet:

If you are reading this book and flipping out at every third sentence because you feel I’m insulting your intelligence, then I have three points of advice for you:

  1. Stop reading my book. I didn’t write it for you. I wrote it for people who don’t already know everything.
  2. Empty before you fill. You will have a hard time learning from someone with more knowledge if you already know everything.
  3. Go learn Lisp. I hear people who know everything really like Lisp.

For everyone else who’s here to learn, just read everything as if I’m smiling and I have a mischievous little twinkle in my eye.

Hihihihihihihi! I will!

Der Kurs auf LPtHW beginnt charmanterweise mit einer Einführung für solche, die noch nie mit einem Terminal und Editor gearbeitet haben. Noch viel charmanter ist, dass er sogar einen Command Line Crash-Kurs  zur Verfügung stellt. Nach so etwas habe ich übrigens schon lange gesucht, für Leute die ich davon zu überzeugen versuche, dass ein Terminal überlegen ist.  Und spätestens seit der Einführung namens “Shut up and shell” bin ich komplett missioniert worden:

You are not going to destroy your computer. You are not going to be thrown into some jail at the bottom of Microsoft’s Redmond campus. Your friends won’t laugh at you for being a nerd. Simply ignore any stupid weird reasons you have for fearing the command line.

Why? Because if you want to learn to code, then you must learn this. Programming languages are advanced ways to control your computer with language. The command line is the baby little brother of programming languages. Learning the command line teaches you to control the computer using language. Once you get past that, you can then move on to writing code and feeling like you actually own the hunk of metal you just bought.

#Hach!

Die erste Lektion beginnt mit dem gewöhnlichen ersten Geschnupper an der “print”-Funktion und viel Getippe. Dazu gibt es nach jeder Lektion ein paar “Study Drills”. Danach lernt man sofort, wie Kommentare erstellt werden (nämlich mit Octothorpes!) und schon geht’s los mit dem ersten Rechenprogramm, das gleich alle Operatoren und Eigenheiten einführt, die aber durch die Analyse des Codes und des Outputs dechiffriert und erklärt werden können. Daher ist eine der “Study Drill”-Aufgaben, jede Zeile mit einem Kommentar zu versehen, gar nicht mal so blöd.

print "I will now count my chickens:"

# String wird geprinted, danach die Aufgabe gelöst
print "Hens", 25 + 30 / 6
# String wird geprinted, danach die Aufgabe gelöst, als erstes 25*3, dann Modulo
print "Roosters", 100 - 25 * 3 % 4

print "Now I will count the eggs: "

print 3 + 2 + 1 -5 + 4 % 2 - 1 / 4 + 6

print "Is it true that 3 + 2 < 5 - 7?"

# Vergleich, gibt True oder False aus
print 3 + 2 < 5 - 7

print "What is 3 + 2?", 3 + 2
print "What is 5 - 7?", 5 - 7

print "Oh, that's why it's False. "

print "How about some more."

# String, dann Vergleich
print "Is it greater?", 5 > -2
print "Is it greater or equal?", 5 >= -2
print "Is it less or equal?", 5 <= -2

Als nächstes wird die Python Shell dazu genutzt, Rechenaufgaben zu lösen. Indem ich einfach “Python” in mein Terminal tippe, verwandelt sich mein Terminal mittels Magie in eine Python Shell und ich kann Python Befehle direkt ausführen (bzw. interpretieren lassen). Dadurch habe ich eigentlich eine Art Rechner (Calculator) zur Hand. Das sieht dann z.B. so aus:

Screenshot - 12032012 - 09:28:29 PM

In der ersten Zeile, lasse ich berechnen, ob es mein Statement “3 ist kleiner als 4″ wahr ist. Und Python sagt “True” dazu. Dann lasse ich ein bisschen komplexere Aufgaben ausführen, um schön viel grüne Ziffern auf meinem Terminal zu sehen. Plom stellte mir dann die Aufgabe, herauszufinden, wie ich wieder aus der Python Shell heraus komme. Ich probierte es mit Strg+C, mit “EXIT”, übersah, dass die Antwort bereits in der Fehlermeldung stand und fand dann irgendwann raus, dass Strg+D die Antwort war. Dann versuchte ich meinen Computer kaputt zu machen und potenzierte eine sehr große Zahl mit einer ebenfalls sehr großen Zahl. Aus Gründen, die ich in Assembler gelernt, verstanden und mir gemerkt habe (!), funktioniert das nicht.

Ich bin unheimlich froh darüber, erneut einen kleinen Motivationsschub bekommen zu haben, sicher spielt es auch eine große Rolle, dass wir jetzt wieder gemeinsam programmieren. Das würde ich eh aus den vielen Erfahrungen diesen Jahres schlussfolgern: Gemeinsam Programmieren Lernen ist Bestes Programmierenlernen. Heute Abend ist schon die nächste FLP-Session und gestern Abend versuchte ich eine Beleidigungsmaschine in C zu programmieren. Es geht also weiter und ich hoffe, vor Weihnachten noch ein paar Fortschritte machen zu können. Jedenfalls kann ich jetzt schon Learn Python The Hard Way empfehlen, natürlich auf Vorbehalt, da ich den Kurs gerade erst angefangen habe. Aber Spaß habe ich damit auf alle Fälle.

Und zu Weihnachten solltet ihr selbstverständlich allen, die euch lieb und teuer sind, den GRATIS-Terminal-Crash-Kurs schenken. Damit das weniger erbärmlich, unangemessen und vernerdet wirkt, könnt ihr den ja ausdrucken oder so. Dann sind sie auch dazu gezwungen, alles einzutippen :3

Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.

Schließe dich 104 Followern an