Transcript: PP04 - Python für Einsteiger
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast in der vierten Episode.
Heute geht es darum, wie man am besten Python lernen kann oder anderen Menschen Python beibringt.
Was machen wir eigentlich? Ja, wir sind diesmal tatsächlich nicht mehr in der Raumschiff-Kommandozentrale, sondern wieder bei Jochen im Wintergarten.
Ja, ich habe so ein bisschen was an meinem Equipment geupgradet und mal gucken, wie das jetzt so wird.
Wir haben jetzt zwei Headset-Richtige und auch so ein bisschen mehr Mischpult ist jetzt heute als sonst, weil wir uns dann zu diesem Thema zwei Leute noch mit dazugeholt haben,
die dort die Einsteiger-Veranstaltung für Python jetzt schon seit einiger Zeit betreuen.
Die sehr gute Einsteiger-Veranstaltung.
Oh, das ist zu viel Lob.
Ja.
Ja, und genau, mal schauen, wie es so wird damit.
Ja, Fragen, Anmerkungen, Kommentare und alles, was ja so erlos werden müsste, bitte immer gerne in unsere E-Mail schreiben, hallo at python-podcast.de.
Dabei auch jetzt direkt vielen Dank an die Kommentare, schöne, bei der letzten Folge.
Einmal Gruß nach Rostock, an den Matthias und in die Schweiz an den Dirk.
Genau, und das war sehr positiv und das ist natürlich immer sehr schön, wenn man da auch irgendwie
und das ist natürlich immer sehr schön, wenn man da auch irgendwie
mitbekommt, dass das so ein bisschen wahrgenommen wird.
Die Punkte, die da angesprochen wurden, waren einmal, dass es halt nett wäre, wenn wir jetzt irgendwie Kommentare doch auch dabei hätten.
Und dazu haben wir uns natürlich auch schon irgendwie Gedanken gemacht und haben erstmal gesagt, wir lassen die bewusst weg,
weil, naja, das ist halt irgendwie, alle Zeit, die wir da rein investieren müssen, einmal das Feature zu bauen,
aber dann auch irgendwie den Kram zu maintainen, können wir halt nicht irgendwie zum Aufnehmen von Podcasts verwenden.
Aber, ja.
Also, genau, falls unser AXE mal stumpf werden sollte, dann denken wir nochmal über die Kommentare nach.
Ja, also, ich meine, ich glaube, es ist auch nicht so schwierig, das zu implementieren und wenn man das auf User beschränkt, die sich irgendwie eingeloggt haben,
aber das ist halt die Frage, wie sinnvoll das dann noch ist, wenn man das macht, dann ist das auch nicht allzu schlimm, aber, ja, wir müssen mal gucken.
Es gibt ja eine ganze Menge Dinge, die wir da eventuell noch einbauen wollen und, ja.
Ja, das kannst du vielleicht gleich nochmal bei der Modulvorstellung von deinem neuesten DjangoCast-Fortschritt erwähnen.
Was die Leute sich auch gewünscht hatten, also unsere Hörer, war Struktur.
Ja, stimmt, das ist natürlich schon so ein gewisser Punkt.
Ja, wir versuchen das aber trotzdem heute mal umzusetzen.
Wir haben uns heute einfach auf ein Thema beschränkt, da ist die Struktur vielleicht nicht so wichtig.
Wir fangen vielleicht erstmal nochmal damit an, was in letzter Zeit denn so los war und dann erzählen wir halt darüber, was man mit Python alles lernen kann und, ja, vielleicht noch ein paar Module.
Genau, vielleicht machen wir einfach erstmal eine Vorstellungsrunde.
Genau.
Genau, gut, wir beide sind jetzt schon irgendwie bekannt, aber wer ist denn...
Ja, ich würde sagen, Alter vor Schönheit.
Ich bin der Dodo oder der zweite Dominik.
Ich mache zusammen mit dem Niklas das Python-Foo-Light im Chaosdorf.
Das ist das Python-Foo für Anfänger in Python oder Anfänger in Programmierung im Allgemeinen.
Das ist jeweils der erste und zweite Donnerstag im Monat.
Und, ja, da versuchen wir Leuten Python als Programmiersprache beizubringen.
Und das machen wir jetzt seit drei Jahren.
2015, oder?
Ja, ich glaube, mittlerweile drei Jahre.
Irgendwann im Sommer, ja.
Ja.
Ja.
Da kann man übrigens immer gerne vorbeikommen.
Ja, natürlich.
Ja.
Ich bin der Niklas, hallo.
Wir haben das damals angefangen, ich glaube, irgendwie ein halbes Jahr, nachdem es den GameDev gab.
Es gibt da gewisse personelle Überschreitungen mit Leuten, die dann halt nicht mehr die Zeit hatten, auch noch den Python-Foo viermal im Monat zu machen.
Und dann sind wir halt eingesprungen in den ersten beiden Donnerstagen.
Ja, vor allem hatten wir festgestellt, dass sich gerade Anfänger häufig erschlagen fühlen, wenn sie zum Python-Foo kommen und über viel komplexere Themen besprochen wird, als sie, die ihnen jetzt erstmal nichts sagen, weil sie gerade mit Python anfangen möchten.
Und da dachten wir, dass eine Veranstaltung, die sich eben dediziert an die Anfänger wendet, wo man dann auch die blösesten Fragen stellen kann, doch eine ganz gute Sache wäre.
Ja, da dachten wir, wenn jemand die Anfänger erschlägt, dann wir.
Genau.
Und wenn jemand blöde Fragen beantwortet, sind wir ja immer noch wie das.
Wir stellen die auch meistens.
Ja.
Ja.
Ja, das klingt doch auf jeden Fall gut.
Und ja, vielleicht können wir euch dann auch direkt mal auf dem Kalt- bzw. auf dem falschen Fuß erwischen, wenn wir euch fragen, was habt ihr denn in letzter Zeit so an Python-Neuigkeiten mitbekommen?
Weil das wäre vielleicht auch ganz interessant, was da so, wenn man sich jetzt nicht irgendwie da bewusst für entscheidet, irgendwie diese...
Den News da zu konsumieren, was dann da irgendwie hängen bleibt.
Also ich lese ab und zu die Release-Notes zu neuen Python-Versionen, aber es gab jetzt schon ein halbes Jahr keine mehr.
Eigentlich nicht so wirklich, nein.
Ich glaube, das Letzte, was ich gelesen hatte, also hin und wieder bekomme ich halt von den neuen Releases was mit.
Das Letzte, was ich mir angeschaut hatte, waren die Data-Classes, die jetzt in den neueren Python-Versionen vorkommen sollen.
Die hatte ich mir einmal angepokert.
Ja, die Python-News lese ich meistens als RSS-Feed.
Da habe ich mir von Planet Python den RSS-Feed gezogen und kriege da ganz unterschiedliche Nachrichten jeweils.
Das ist auch relativ interessant.
Ich setze mir dann meistens einfach nur eine Flagge im RSS-Feed wieder, weil meistens komme ich dann nicht dazu, die Nachrichten komplett zu lesen.
Ich habe nur die Kurzbeschreibung, aber ich finde, das ist ein sehr gutes Mittel, um News über Python zu bekommen.
Ich habe meine RSS-Reader seit irgendwie drei Jahren nicht mehr aufgemacht.
Eine Zehntausend Nachrichten.
Das Letzte neue Feature von Python, das ich verwendet habe, war NameTupels, glaube ich.
Das fand ich ganz cool, so als einfacher Klassenersatz.
Es gibt noch einen coolen Newsletter für Python, ne?
Oh, Newsletter.
Ja, da stehen auch die Show-Notes dann vielleicht mal rein.
Ja, der linkste finde ich auch interessant.
Die Newsletter vielleicht mal reinfangen.
Also es gibt ein paar.
Ich habe irgendwie einen Awesome-Python, einen Python.
Einen Python-Weekly.
Ich habe auf GitHub die Trending-Repos abonniert.
Das gibt es für familiäre Sprachen und unter anderem auch für Python.
Oh, das ist ja super.
Das kommt einmal die Woche.
Das ist halt teilweise Sachen, die halt irgendwie nur zufällig in Python sind und nicht wirklich dafür relevant sind.
Aber manchmal ist auch was Spannendes dabei.
Ja, das klingt auf jeden Fall interessant.
Ja, da können wir vielleicht einfach einen Punkt machen, wo wir so ein bisschen sammeln, wie man sich eigentlich da aktuell halten kann.
Ja, also ich bin auch ein großer Fan von RSS und ich habe eigentlich auch irgendwie, ich verwende schon ganz lange,
einen Feed-Reader.
Bin dann, da irgendwie gab es, ganz am Anfang habe ich irgendwie Aggregator verwendet unter KDE.
Und dann gab es aber den Google Reader und der war so gut.
Den fand ich total toll.
Den habe ich ganz lange verwendet.
Ich habe ganz lange dieses Sharing-Feature verwendet, was auch viele andere irgendwie gerne benutzt haben.
Und da gab es ganz tolle Sachen.
Und das war irgendwie so ein, das war das einzige Mal, dass so Social Network für mich so ein bisschen funktioniert hat.
Und dann hat Google den Reader eingestellt.
Das war ganz furchtbar.
Und jetzt habe ich zwar immer noch einen Feed-Reader, aber es ist irgendwie alles nicht mehr so das Gleiche.
Und genau, ich habe da auch Planet Python und noch so ein paar Blogs von Leuten,
die halt da an Python und Junkroom entwickeln, halt auch abonniert.
Ja, genau.
Ja, das mit den Dataclasses ist Python 3.7.
Aber es gibt ja jetzt vorletzte Woche, glaube ich.
Python 3.8 nochmal ein paar Ankündigungen.
Genau, da gab es eine neue Alphabet.
Und zwar gibt es da auch eine Syntaxänderung.
Ich weiß nicht, ob ihr von der schon gehört habt.
War das das mit dem Doppelpunkt gleich, dass man in, wie war das, in der Deklaration von einer Weil-Schleife kann ich mir die Variable setzen, oder?
Das war eine Zuweisung, die dann auch wieder direkt den Wert hat.
Genau, also man macht eine Zuweisung und gleichzeitig hat die entweder true oder false.
Es gab da auch irgendwie einen witzigen Namen für den Apparator.
Ja, da kommen wir nochmal.
Irgendwie nach einem Tier, ne?
Walrus.
Ja, genau.
Ja, weil Augen und Zähne, ja.
Das ist so ein bisschen wie dieser Turbo-Fisch, wenn du hast, ne?
Turbo-Fisch.
Das hatte ich auf Twitter, glaube ich, mitbekommen.
Das hatte mir irgendwer retweetet.
Das fand ich auch sehr interessant.
Aber, ja.
Ja, und genau, man kann sich damit halt, also man halt macht halt oft sowas, wie man holt irgendwas, einen Wert aus einem Dikt und dann muss man erstmal überprüfen.
Ob das nicht ein Name ist, weil man weiß halt nicht, ob es...
Und die Zeile kann man sich jetzt immer sparen und man schreibt dann halt direkt if irgendwie dann irgendwas Walrus Operator Dikt.getKey, dann macht man halt weiter, wenn es drin war und ansonsten...
Ansonsten wäre sowas ja auch so ein Safe Navigation Operator nett.
Es gibt ja Sprachen, da kannst du irgendwie Fragezeichen Punkt machen und die machen dann in den Zugriff nur, wenn das Objekt selber nicht null ist.
Ein Safe Navigator, das musst du bitte kurz erläutern.
Also es ist ja auch praktisch so,
dass du irgendwie ein Objekt hast und es hat ein Attribut.
Dann machst du irgendwie Objekt Punkt Attribut
Punkt irgendwas.
Und eigentlich musst du ja bei jedem dieser Schritte prüfen,
ob das Attribut selber nicht null ist.
Und dann kannst du ja nicht Punkt machen.
Es gibt halt Sprachen, die haben so ein
Syntax-Fragezeichen Punkt.
Die macht halt den Zugriff nur, wenn das Objekt
selber nicht null ist und ansonsten ist der Wert
halt auch direkt wieder null.
Das fände ich cool, kenne ich über Python nicht.
Ja, und da hatten wir tatsächlich, ich weiß nicht, kennt ihr das?
Es gibt eine
Telegram-Channel zur Python User Group
Düsseldorf, PyDDF.
Nee, kenne ich nicht.
Ah, ja.
Die User Group, die kenne ich, da war ich ein paar Mal,
aber den Telegram-Channel sagt mir nichts.
Genau, es gab auch lange,
oder es gibt immer noch eine Mailing-Liste, aber der Telegram-Channel
ist tatsächlich was, was jetzt auch
stärker genutzt wird. Und da gab es eine Diskussion
genau darüber und Chesi, den wir
als Expertengast von unserer Django-Folge
da hatten, hat da auch irgendwie
quasi, es gibt einen Python-Enhanced-Proposal,
wo genau so eine Syntax mit einem Fragezeichen
vorgeschlagen wird. Hat das dann halt auch
irgendwie da mal vorgestellt und meinte so,
das wäre doch eine tolle Idee. Und dann hat
sich das aber relativ, also es war
sehr kontrovers, sehr polarisierende
Also ich habe es auch noch nie genutzt.
Ich weiß nur, das existiert in anderen Sprachen.
Ja. Ja, ich bin mal gespannt.
Kann ja sein, dass es auch in Python irgendwann kommt.
Äh, genau.
Ja, es gibt noch mehr Neuigkeiten dann
von dem Steering-Counter.
Da wolltest du vielleicht noch was zu sagen.
Ja, genau. Ich habe das auch
nicht so im Detail verfolgt,
aber es ist halt so, dass Guido,
ja sozusagen
so einen unbegrenzten Urlaub
genommen hat von seiner
BFDL-Rolle und
Guido das Hippo,
also wo wir eben bei den Tieren waren, war ja auch das Hippo.
Weitere Gehör, ob ich gar nicht so gut bezahlt ist,
ehrlich gesagt, aber genau, der
der, äh,
ja, ähm,
und jetzt gibt es halt ein, ein, ein,
ist ein Steering-Council gewählt worden,
der halt dann in, äh, wenn
quasi eine Entscheidung benötigt wird
und das sonst niemand tun will und so und man dann halt,
äh,
wie ein letztes, äh, jemand irgendwie
das letzte Wort haben muss, dann gibt es halt
diesen Rat, der das dann halt hat
und da sind halt irgendwie fünf Mitglieder reingewählt
worden, unter anderem auch Guido
und, äh, genau, das werden wir auch verlinken,
kann man sich ja mal angucken, ist alles nette Leute
insofern, ja, sieht gut aus.
Genau, und es gab noch eine nächste Neuerung, zwar gibt es jetzt
lokale Packages in Python.
Äh, nee, das gibt es auch erst
mit, äh, Python 3.8, genau, ja,
mhm, ja, ja, ja, stimmt, das war auch in der Alpha-Release
drin, äh, Python Local, äh,
ähm, ja, Pip Local,
äh, gibt es so ein Verzeichnis
dann, ui, jetzt muss ich mich wieder versuchen,
daran zu erinnern, was das eigentlich genau war,
das ist quasi dann so ähnlich wie bei, bei, bei JavaScript
und, äh, dass man halt die Pakete,
die man installiert, halt in dem Verzeichnis, in einem speziellen
Verzeichnis direkt hat und,
ähm, dann, äh,
irgendwie drumrum kommt, sich mit diesem ganzen
Virtual-Env-Kram rumschlagen zu müssen.
Ah, also quasi,
man, man konnte doch bisher auch schon bei Pip
Install irgendwie ein Target angeben
und das ist dann, ah, okay, ja.
Und das ist dann, glaube ich, einfach ein,
das dann, dann heißt dann einfach Pip Local
und dann installiert es halt in das Verzeichnis rein
und dann... Dann hast du alles in einem Ordner.
Genau, das ist eigentlich... Das ist cool.
Ja, auch gar nicht so schlecht.
Also, ich weiß nicht, ob es jetzt Virtual-Env
komplett ersetzen wird dann, aber, äh,
das ist auf jeden Fall... Also, ich meine, gut, wir haben ja jetzt
erst drei oder vier unterschiedliche Arten, wie man das machen kann.
Das würde bestimmt das Problem lösen.
Das Beste ist natürlich Pip-Env.
Ja, Pip-Env ist auch voll, das ist schon gut.
Ja, aber, genau, zu sowas,
Virtual, äh, Isolierung, äh, Isolation,
Virtual-Envs, Docker, diesen ganzen Kram,
wie kriege ich eigentlich unterschiedliche
Projekte auf einer Maschine irgendwie, äh,
so installiert, dass sie sich nicht
gegenseitig kaputt machen, dazu müssen wir auch mal...
Ja, eine Extra-Folge, okay.
Ja.
Ja, dann fangen wir doch
jetzt am besten mit unserem Thema an, oder?
Ja.
Ja, ich glaube, ähm,
das hängt
von einem selber ab. Also,
es gibt verschiedene Arten, wie man
Python lernen kann, und
ich würde sagen,
da muss man
so für sich die beste
Art und Weise rausfinden.
Die Frage ist ja auch, ähm, kann man
schon programmieren? Kennt man vielleicht andere
Programmiersprachen, die sich ähnlich verhalten,
was Objektorientierung und sowas angeht? Oder muss man
das auch noch erstmal lernen?
Ja, und, ähm, wenn man
schon eine andere Programmiersprache hat, gibt es
natürlich, sind gewisse
Einstiegshürden einfach nicht mehr da. Also,
wenn ich schon mal im Texteditor
ein Programm geschrieben habe, dann
muss mir nicht mehr erklärt werden,
wie ich mit dem Texteditor arbeite.
Oder wenn ich schon mal eine IDE bedient habe,
weiß ich, was eine IDE ist. Oder Schleifen.
Genau.
Das geht natürlich weiter
mit den, ähm, Kommandostrukturen.
Wenn ich, äh, eine IF-Bedingung
kenne ich dann, wenn ich schon mal programmiert
habe, eine Schleife, etc.
Wenn ich schon mal mit einer, ähm,
stark objektorientierten Programmierung
in der Programmiersprache gearbeitet habe, muss man mir
Objektorientierung nicht mehr erklären.
Also, da kommt es,
gibt es dann Einstiegshürden, je nachdem,
ob ich mich schon mal mit einer
Programmiersprache beschäftigt habe,
eventuell sogar mit einer, die
Python sehr ähnlich ist.
Ansonsten sind halt so Sachen wie, wie irgendwie, äh,
Namespaces oder dynamische
Typisierung vielleicht eventuell sogar einfacher zu lernen,
wenn man das aus einer anderen Sprache noch nicht kennt.
Ja, das heißt, wenn du
nicht gewohnt bist, dass du
deine Variable in festen Typen
hat, äh, ja, dann
könnte es sogar einfacher sein.
Ähm, an der Stelle bietet
Python natürlich einen einfachen Einstieg,
weil, ähm,
es eben eine dynamische, strenge
Typisierung bietet.
Ähm, ja.
Ja, ich hab so die, die hab ich gemacht, so auf, auf
Hackathons oder so, wo ich dann irgendwie,
äh, Leute hatte, die dann
halt sehr, aus sehr unterschiedlichen Bereichen
kamen, aus sehr unterschiedlichem Wissensstand hatten
und dann hat man versucht, irgendwie so ein Projekt zu machen
mit denen und dann, äh,
ähm, äh, äh, ja, genau,
versucht man halt einfach nur, irgendwie das
Projekt zu bootstrappen, das heißt,
irgendwie, die müssen irgendwie Python installieren, dann
irgendwie, äh, irgendwas aus Git ziehen,
dann Virtual Env erzeugen, dann irgendwie
die Abhängigkeiten installieren. Und dann sind zwei Tage rum.
Und, genau, und das, ja,
das ist teilweise, weil, was mir dann immer passiert,
oder die schlimmsten Fälle sind immer so, ja, okay,
Python installiert, ja, aber das ist mein Firmenrechner,
da, da ist ein Windows drauf und ich, äh,
ich kann da auch eigentlich nichts installieren, so, dann ist schon mal so,
okay, dann ist man halt vielleicht nach einer Stunde
irgendwie so, dass man eine Python-Stelle hat, aber,
äh,
ähm, wie, wie geht ihr damit um?
Oder macht ihr irgendwie, äh,
Ansagen, was, was schon vorausgesetzt
wird, wenn man überhaupt da hinkommt, oder? Also, um
den ganzen Kram drücken wir uns ein bisschen, ähm,
andererseits, wir verwenden
zumindest am Anfang nichts, was irgendwie
extra Module braucht, also man braucht einfach
nur einen Python-Interpreter und
viele Systeme, irgendwie, weil die OSX
oder die meisten Linux-Distros haben ja einen schon dabei.
Ja. Ähm,
und wenn jemand einen Windows-Rechner mitbringt,
haben wir so die Hoffnung, dass die Person weiß,
wie man da auch Programme installiert.
Weiß ich nicht.
Bei den meisten Leuten, die ins Chaos aufkommen, hat das dann
vielleicht auch funktioniert? Ansonsten kann man sowas
ja im Notfall auch, auch irgendwie online machen.
Es gibt ja irgendwie Zeiten Anywhere oder sowas.
Das geht ja irgendwie.
Außerdem haben wir, glaube ich,
in Wiki die Ansage stehen, dass man,
wenn man zum Python-Vo kommt,
einen Rechner mitbringt und, äh,
auf diesem Rechner, genau.
Ja. Ähm.
Können wir vielleicht ein Raspberry ausleihen oder sowas?
Ja. Oder, ähm,
auch auf vielen Android-Smartphones.
Und wenn du ein Handy neuer als
N105 hast, kannst du da Python drauf installieren. Problemlos.
Gut, das Tippen ist ein bisschen ekelhaft,
das Smartphone.
Ja gut, Bluetooth-Tastatur. Oder sowas, ja.
Ähm, ja.
Meistens haben wir ja sogar, äh,
Linux-User, da, äh,
Windows-User sind natürlich,
wenn's um die Installation von
Paketen geht, immer ein bisschen fummelig.
Aber im Allgemeinen kriegen wir das auch hin.
Ja. Also gerade so Sachen wie,
irgendwie, installier das mal
von Pip oder so, das machen wir nicht am ersten Abend.
Genau. Das, ähm,
das ist einerseits natürlich da, um
die Einstiegshürden zu nehmen,
denn so können wir das auch
auf Windows, MacOS oder Linux
machen, weil wir dann eben nur
die Standard-Bibliothek nehmen und einfach nur
einen Texteditor und einen
Python-Interpreter brauchen.
Wir hatten witzigerweise noch niemanden, der dann irgendwie mit
React oder BSD oder sowas aufgetaucht ist.
Ich glaube, das brauchen wir auch nicht.
Ja, okay. Aber das ist ja schon mal, das ist ja schon mal interessant.
Ihr verwendet doch einfach die ganz normale, äh,
ja, Python, äh,
Python-Reppel oder was kann ich
mir das, äh, also, äh...
Also wir zeigen die Beispiele meistens entweder im
Texteditor oder irgendwie in I-Python,
B-Python, aber das braucht man ja
nicht, um das nachzuprogrammieren. Das sieht dann halt nicht so
schön aus. Aber, ähm,
ja, und
ansonsten, wir haben halt auch nicht so
viele Anforderungen. Also Beispiele laufen auf allen
Versionen, die neuer sind als 3.4 oder so.
Ja. Und das
hat ja sogar der wie ein neues Table oder sowas.
Ist ja kein Problem.
Das ist ja auch ne, ähm, Vorteil
der Python-Standard-Library, dass
die eben so umfangreich ist, dass man
die meisten Sachen gar nicht nachinstallieren muss, sondern
so viel schon dabei ist,
dass man für ein
grundlegendes Verständnis der Sprache
brauchst du eben nur die
Standard-Library. Wenn das dann ins, äh,
komplexere Sachen geht, also
wo du wirklich konkret was machen willst, da
installierst du dir dann ein, äh,
eine Library, aber...
Request ist, glaube ich, so die erste, die wir dann
mehr zeigen. Ja, genau.
Stimmt, ja. Und ein QPy.
Stimmt. Ja, aber das ist, äh,
eine Datei mit 56
Teilen, also ich glaube, die muss man nicht installieren,
die kann man in Notfall runterladen. Genau.
Mhm. Die könnte man wahrscheinlich sogar
abtippen. Äh, äh, was, was war das
mal genau? Ich hab das, glaube ich, grad nicht so richtig verstanden. Ähm, QPy,
ähm... Kenn ich gar nicht. Es ist ganz, äh,
schön, um eine klare Statusmeldung auszugeben.
Das macht dann halt irgendwie, äh, es gibt QPy
.info und dann bekommst du irgendwie so einen, so einen
blauen Kasten links und eine Welle und dann
kriegst du den Text. Ah, wow, okay. Farben im, äh,
Terminal. Mhm. Und, ähm,
es funktioniert auf allen Systemen, also Windows
ist nur neuer als 10, aber, äh,
ansonsten... Und es ist halt
eine wirklich kleine Datei. Ähm,
verzeichnet dir mal die Fletchen, die machen
ekelhafte Sachen mit, mit Dictionaries und Lambdas
und sowas, aber, ähm, das muss man
ja nicht wissen. Ja. Also,
die...
das Github-Repo da ist, äh, sehr
erhellend, weil dann auch... Das Readme ist sehr gut.
Ja, das Readme ist sehr gut, weil da,
äh, der Entwickler da
vergleicht, wie schwierig es ist,
äh, mit anderen, äh,
Bibliotheken Farbe
ins Terminal zu bringen und wie einfach das mit
UPy ist. Okay, diese Tabelle, wo nur
ich UPy die höchste Punktzahl erreicht.
Ja, ja. Ein bisschen
Eigenwerbung soll ihm ja auch gegönnt
sein. Ich verwechsel das nur
leider immer mit, äh, Python
Hui, ne? Genau.
Ja, UPy und Python Hui
sind zwei verschiedene Dinge wichtig
zu wissen. Wir installieren immer
die falschen am Anfang, ne?
Wie habt ihr beide denn Python gelernt?
Oh, ich weiß
ehrlich gesagt nicht mehr. Ich glaube, ähm,
ich hab früher mit nem Freund
zusammen PHP angefangen.
Irgendwann an Grundschule. Und dann fanden
wir irgendwann PHP nicht mehr cool.
Und dann ist er zu
Perl gewechselt und ich fand Perl auch nicht cool.
Dann hab ich mir angeschaut, was gibt's noch für Ansprachen.
Dann hab ich mit Python angefangen. Hat er festgestellt,
Python fängt auch mit P an. Ja, genau.
PHP, Perl, Python ist eh fast das gleiche.
Ja. Ähm,
ja, bei mir war das deutlich später als
die Grundschule. Ich weiß noch, ich hatte
in der achten Klasse
oder neunten Klasse, ähm,
Wahlpflicht Fach Informatik.
Ah, ja. Und, äh,
in der Schule, äh, hatten wir dann in der
achten Klasse Word und Excel und in der
neunten Klasse haben wir dann auch richtig programmiert
mit Turbo Pascal. Und, äh,
Wir hatten damals schon PHP in der Schule.
Pascal muss ich auch noch mal.
Eigentlich hat es mir Spaß gemacht mit
Turbo Pascal zu programmieren, so viel
Spaß man eben damit haben kann.
Oh, doch, das war, das war toll.
Ich weiß jetzt nicht, welche Version
ihr da verwendet habt, aber ich hatte, ich hatte
da mal, oh, ähm, ja.
Naja, alles gut. Dein Handy.
Ach ja, das ist in Ordnung, das macht ja nix.
Der P war lecker.
Ja.
Ähm, danke, Tja. Also, äh, genau.
Damals, damals war das irgendwie
Turbo Pascal 5.5 und das lief alles,
äh, sozusagen auch irgendwie
in einer Shell, äh, oder
sozusagen auf der, auf der MS-DOS-Kommandozeile.
Und das war als IDE,
eigentlich tatsächlich ziemlich, ziemlich klasse.
Wenn man irgendwie auf F9 gedrückt hat, dann hat das irgendwie sofort
kompiliert und es ausgeführt und man konnte
zum, zum Debugger durch, durchsteppen und so.
Das war, ja, aber, äh,
keine Ahnung, wie das, bei euch war das dann wahrscheinlich schon
Windows oder so, oder? Ja, ich glaube, wir hatten da
eine, ähm, Free Pascal.
Das war so ein bisschen wie
Python Idle, nur ich fand's halt
sau anstrengend mit
Turbo Pascal zu programmieren.
Und irgendwann war die 9. Klasse dann
fertig und ich glaube, so zu den
Sommerferien fing ja im Chaosdorf das
Python-Foo an, weil das bekam halt,
das Chaosdorf bekam halt neue Räume.
Ach, du hast die alten Räume noch gesehen? Äh,
jaja. Oh. Und, äh, da
fing das Python-Foo dann auch
komplett im Renovierungsmodus mit, ähm,
ähm, ja. Umzug auf Python 3.
Genau.
Man könnte sagen, es lag am Umzug
auf Python 3, aber nein, da wurde
grad das Chaosdorf umgebaut. Und
ja, da fing dann das, äh, Python-Foo
an. Und da ich halt eine
etwas modernere Programmiersprache lernen
wollte, äh, ja, hab ich dann da
angefangen. Dann
hab ich mich zwei Jahre
relativ intensiv mit Python beschäftigt.
Bin auch so ungefähr bis zur
Objektorientierung bekommen.
Die war mir dann aber zu kompliziert und, äh,
bin bei funktionaler Programmierung geblieben.
Ja, und dann... Ja, Objektorientierung
hab ich auch nie wirklich verstanden, dass ich
zum Python-Foo gekommen bin. Ja.
Später hab ich dann wieder eingesetzt und, ja,
seitdem beschäftige ich mich damit hobbymäßig.
Hm.
Und das wohl wann? Naja,
weil... Ihr Geld bekommt man dafür nicht,
hehehe.
Ja.
Naja, aber, äh,
ich, ich mein, habt, ihr habt ja dann wahrscheinlich
auch schon ne, ne Menge Leute, äh,
sozusagen kommen und gehen sehen. Gibt's denn irgendwie
welche, die dann irgendwann mal, äh,
dazugestoßen sind und dann halt länger dabei geblieben sind?
Ihr verfolgt ja wahrscheinlich auch, was dann so ein bisschen
mit den Leuten passiert. Äh, ist das,
ist das eher ne Sache, die einen dann motiviert, oder
ist es deprimierend, dass alle Leute dann doch wieder irgendwann
aufhören und verschwinden, oder?
Der Schweiner davon sitzt ja hier.
Ja. Ups.
Ich muss jetzt überlegen, wer.
Ähm. Wie, wie, wie sind
meistens da? Ja, ja, ähm,
ja, ich glaub,
ein paar Leute sind
tatsächlich zum
Python-Foo hinzugekommen.
Hm. Aber meistens hatten die
schon ein bisschen, äh, Background
Python-technisch. Hm. Es gibt halt Leute,
die kommen einmal, es gibt Leute, die kommen zweimal.
Und es gibt Leute, die kommen immer
wieder. Genau.
Ja. Ähm, das ist, glaub ich, auch so ne
Schwierigkeit von dem Termin, dass wir eh
Die ersten beiden Donnerstage.
im Monat haben und dann ist nach dem zweiten Donnerstag wieder ein Monat dazwischen.
Da haben sie wieder vergessen, da kommen sie nicht mehr.
Da haben sie wieder vergessen.
Da wäre, glaube ich, tatsächlich wöchentlich, oder wie zwei wöchentlich oder so was, alle
zwei Wochen jedenfalls ein regelmäßigeres Treffen, glaube ich, sinnvoller.
Wie oft habt ihr denn schon die erste Lektion Leuten geteilt?
Die erste können wir am besten, weil wir es am häufigsten getan haben.
Also das ist natürlich bei uns auch ein, ja, das wollte ich progress sagen.
Es war mal eine sehr schöne E-Mail geschrieben, warum wir alles zu schnell machen.
Auf die wir auch nicht geantwortet haben, weil wir sind super.
Ich fand die nicht so schnell.
Ja, also die erste Lektion, ich glaube, 20 Mal haben wir die bestimmt schon gemacht.
Mehr.
Ich habe jetzt grob im Kopf überschlagen, aber tatsächlich ist das bei uns natürlich
auch ein steter Vorgang, dass wir uns immer wieder verbessern.
Ich finde das ganz schön.
Wir haben die Beispiele und auch die Hinweise ja auch so ins Getriebe.
Und da kann man sehen, was wir geändert haben.
Könnt ihr einmal kurz die Adresse noch mal?
Wir diktieren, könnt ihr die nicht einfach?
Ja, ja, doch, doch, doch, klar.
Die fangen wir in die Show Notes.
Python for Light.
Ihr findet das Repo in den Show Notes.
Ja, ich glaube, das ist auch schon in der ersten Folge oder?
Aber das ist ja schon, wenn man das ein paar Mal gemacht wird, dann ist das dann immer polierter.
Habt ihr mal darüber nachgedacht, das irgendwie, keine Ahnung, irgendwie davon Screencast zu machen
oder das irgendwie mal mitzuschneiden und zu veröffentlichen oder so?
Weil das ist ja ein Gefühl.
Wir sind ja nicht geldgetrieben.
Ja, wir sind nicht.
Nee, darum geht es aber, ich meine, darum geht es ja gar nicht.
Aber einfach, weil so viele Leute, die das so oft gemacht haben, gibt es ja wahrscheinlich gar nicht,
die in so einer Einführungsveranstaltung irgendwie tatsächlich...
Wir haben uns halt überlegt, dass wir das Gitarre-Repo möglichst ausformulieren,
dass halt auch Leute, die nicht zu der Veranstaltung kommen, sich das angucken können.
Screencast haben wir bisher nicht gemacht.
Nee.
Da müssten wir uns ja auch hinsetzen und das schneiden und so.
Ja, stimmt.
Wir verbringen halt meistens wirklich nur Zeit, wenn wir da sind.
Der Vorteil ist halt, wenn wir dann mal Abend haben,
wo niemand kommt, können wir an den Beispielen arbeiten, was ja auch schon mal vorkommt.
Ja, prinzipiell ist das natürlich auch eine schwierige Sache,
weil, wie gesagt, es gibt verschiedene Arten davon, wie man das am besten lernt, so für einen selber.
Und klar gibt es die Leute, die einfach nur Code lesen und den abarbeiten können,
aber es gibt natürlich auch die Leute, die möchten, dass man denen das erklärt und mit denen macht.
Und deshalb fände ich es schwierig.
Um quasi den Code so zu halten, dass der für alle passt.
Deshalb sind wir da ja auch relativ anpassungsfähig, je nachdem, wer zu uns kommt.
Jetzt auffällt es, dass Leute tatsächlich relativ selten Fragen stellen.
Da sollten wir vielleicht auch noch häufiger gucken, dass das passiert.
Ja, dass wir das interaktiver gestalten, meinst du?
Ja.
Ja, was...
Da fragte ich aber letztens ein paar Ideen.
Und diese E-Mail.
Eine interessante Strategie, die ich schon ein paar Mal gesehen habe, die ganz gut funktioniert,
ist, wenn die Leute sich nicht trauen, Fragen zu stellen,
dass man dann einfach...
Als derjenige, der eine Schulung macht oder einen Vortrag hält oder so,
dann einfach, vor allen Dingen, wenn es nicht so viele Leute sind, geht das gut,
dann die Leute fragt.
Oh nein.
Das ist ein bisschen übergriffig.
Das habe ich früher in der Schule schon gehört.
Ich meine, das Gute ist ja, dass wir ja meistens zu zweit sind
und uns dann auch selber an dem Ball so ein bisschen zuspielen können.
Ja.
Unsere Überleitungen sind immer grandios.
Oh ja.
Wir sind berühmt.
Ich hoffe, positiv.
Ja.
Ich glaube, wir haben da durchaus noch Verbesserungspotenzial,
gerade was den Beispielcode angeht.
Ulrich, das sind keine gesehen.
Gerne, genau.
Ja.
Ich glaube aber, dass wir das schon relativ gut hinkriegen.
Bis zu welchem Level geht denn der Python-Fool light?
So lange, bis Leute bleiben.
Wir haben das ja in Level aufgeteilt,
in die er gerade schon erwähnt hat,
damit man das quasi...
Ja, damit jemand, der zu uns kommt,
den können wir dann sagen,
guck mal, wir haben hier 10 Level.
Lies die mal durch und sag mir, wo du dich einordnest.
Nenne eine Zahl zwischen 1 und 10.
Nenne eine Zahl zwischen 1 und 10
und dann machen wir von da an.
Einerseits dient das natürlich der Strukturierung,
weil dann kann man sagen so,
okay, Level bla bla bla macht das und das,
Level bla bla bla macht das und das.
Dann lese ich mir jetzt das Level durch
und kann mich mit dem Thema beschäftigen.
Das ist auch wichtig für Leute, die wiederkommen,
weil wir uns dann nicht merken müssen,
wohin haben wir gemacht.
Das ist natürlich unsere Bequemlichkeit.
Ich glaube, das Repo hat offiziell 10 Level.
Angefangen bei,
wie führe ich Code in Python aus?
Was ist eine Variable?
Was ist eine Variable?
Wie weise ich eine Variable zu?
Was sind Zahlen?
Wobei, das geht, glaube ich,
in die Zahlentheorie rein.
Das wollen wir, glaube ich, nicht.
Das sind ganz einfach Zahlen.
Das sind Mengen.
Das sind leistmäßige Mengen.
Genau, bitte.
Ja, das geht dann über
If-Bedingungen, Flicen,
Funktionen, Rekursionen.
Konsolenanwendungen.
Konsolenanwendungen.
Das ist ein neues Kapitel,
das wir eingeschoben haben,
weil wir dachten,
wenn wir direkt mit der Objektorientierung ankommen,
dann sind die meisten Leute ein bisschen überrascht
und uns wäre es lieber,
wenn man Sachen dann zu dem Zeitpunkt
mal praktisch anwenden könnte.
Ja.
Das ist ja auch eine Stärke von Python,
dass die Objektorientierung zwar,
da ist und auch
alles in Python ein Objekt ist,
aber du musst sie eben nicht verwenden.
Also, du kannst in Python auch komplett
ohne Klassen arbeiten.
Und das hatte der Shisi tatsächlich
einmal erzählt,
dass er, wenn er mit Klassen arbeitet,
eben nur objektorientiert,
weil die anderen Arten von Klassen,
die es da gibt,
braucht man ja nicht.
Und fragen halt immer Leute,
wofür brauche ich denn jetzt
diese Objektorientierung?
Wir können das nicht beantworten,
weil das geht meistens auch,
ohne.
Ja.
Ja gut, also nach Objektorientierung
machen wir dann noch Generatoren
und sowas.
Assert, Yield.
Wir haben dann ein Beispiel
für eine grafische Anwendung
mit QT, glaube ich.
Ja.
Und irgendwie so eine
Whisky-Sache mit Werkzeug.
Die haben wir noch niemandem gezeigt,
weil Leute sind nicht lange noch gekommen.
Ist natürlich auch...
Ich kenne es ja auch noch nicht,
die Whisky mit Werkzeug.
Ja, musst du mal wieder kommen.
Ist geplant.
Ich bewundere übrigens auch,
wie du die Markdown-Seite
im Kopf ausländisch kannst.
Naja, es sind jetzt drei Jahre.
Das hat sich nicht so gut
an die Enderzeit geändert.
Aber du hast die Witze entfernt.
Wir hatten...
Es gibt da so eine Geschichte.
Wir saßen mal in einem Zug
nach Hamburg
und es war ein bisschen langweilig.
Und dann haben wir
zu Kapitel 5,5
einen Text geschrieben,
den man nur noch
in der Wiki History findet.
Ich glaube, das reicht jetzt.
Erzählen wir es?
Okay.
Level 5,5 ging damals um Themen,
die in den bisherigen Leveln
keinen Platz gefunden haben.
Ist Kapitel 5,5 sowas wie Gleis 9,5?
Ja, ein bisschen.
Wir wollten halt noch Themen unterbringen,
über die wir bisher nicht gesprochen haben,
weil entweder passten die nicht,
die wären zu weit gegangen
oder sie hätten den Fortschritt
so ein bisschen...
Sie hätten den Fortschritt
so ein bisschen aufgehalten
und das war dann hauptsächlich,
Meta-Themen,
die jetzt nicht zwingend
direkt was mit Python zu tun haben,
sondern mehr,
da ging es dann darum,
welchen Text-Editor benutze ich?
Wie mache ich das mit Git?
Wie schreibe ich am besten Doku?
Wie schreibe ich Doku?
Mir fällt übrigens ein,
wir sollten noch ein Kapitel
zu Tests einführen.
Ja, wir sollten nicht nur erwähnen,
dass sie wichtig sind,
sondern uns trotzdem mal selber angucken,
wie das überhaupt geht.
Also ich habe das meiste,
was ich über Python weiß,
tatsächlich da betrachtet.
Und dann habe ich gelernt,
dass ich es anderen Leuten beibringe,
weil man dann immer noch so Sachen merkt,
sieht, wo man merkt,
oh, das weiß ich doch eigentlich gar nicht so wirklich,
wie das im Detail funktioniert.
Das fällt mir immer wieder auf,
dass wir dann auch,
da wir gegenseitig uns den Ball zuspielen
und doofe Fragen stellen
und auch Grenzen austesten,
dass ich jeden Abend,
wo ich anderen was beibringe,
auch selber sehr viel mitnehme.
Dann halt das Problem haben,
dass wir vielleicht dann auch
ein bisschen zu tief einsteigen,
dass den Leuten, die da sitzen,
dann doch nicht so viel
nicht so wichtig ist.
Ja, das stimmt.
Ja, weil es gibt halt auch Leute,
die Interesse an diesen ganzen Details haben.
Und ihr habt auf jeden Fall vollkommen recht,
dass dieses Lernen einfach großartig ist,
irgendwie um tiefer einzusteigen in das Thema.
Habe ich übrigens auch gemacht,
also ganz am Anfang,
obwohl ich noch nicht so viel selber konnte.
Aber das, was ich konnte,
konnte man schon kleinen Kindern beibringen
und die haben sich sehr darüber gefreut
und haben tatsächlich dann auch
ihre ersten Programme schreiben können.
Das ist echt super.
Und dadurch sind halt die Basics
dann irgendwann wirklich feste.
Das ist vielleicht nicht so unwichtig.
Ich glaube auch,
dass Python eine sehr gute Programmiersprache ist,
um quasi,
als kompletter Anfänger,
als erste Programmiersprache Python zu lernen.
Einerseits, weil es relativ wenig Einstiegshürden hat,
die anderen Programmiersprachen bieten.
Es gibt ja diesen schönen Spruch,
irgendwie Python ist wie Pseudocode,
aber man kann ihn ausführen.
Ja, das und,
ihr hattet das, glaube ich,
in eurer ersten Folge erwähnt,
dass Python einfach ist
und dadurch sehr gut für Anfänger geeignet ist.
Und ich finde,
das ist auch so weit korrekt,
ja, Pseudocode, den man ausführen kann,
passt schon sehr gut.
Womit fangt ihr denn an,
wenn ihr Leuten jetzt quasi sozusagen
das so Python nahe bringen wollt?
Was wäre denn sozusagen euer erstes Beispiel oder sowas?
Hello World natürlich.
Hello World natürlich, genau.
Das ist natürlich viel einfacher, ja.
Ja, normalerweise fangen wir,
zeigen wir einfach auf dem großen Fernseher
einen Interpreter und fangen an,
Code zu schreiben.
Danke, Herr Plant.
Danke, Herr Plant, vielen Dank.
Ja,
wir sitzen dann da am langen Tischreihe
und einer sitzt meistens nah am Fernseher
und zeigt dann auf B-Python meistens Code.
Gerade für kürzere Sachen
haben wir festgestellt,
dass der Interpreter geeigneter ist,
als wenn wir das in der Datei schreiben würden
und ausführen würden.
Natürlich könnte man das auch
als Jupyter-Notebook machen.
Das wäre,
vielleicht sogar noch einen Schritt weiter.
Ich benutze manchmal in den höheren Leveln
Hydrogen.
Das ist ein Atomplugin,
das so wie Jupyter funktioniert,
zahlenweise.
Aber das macht halt erst ab größeren Dateien
auch irgendwie Sinn.
Am Anfang kann man das halt einfach neu eintippen.
Gerade auch, weil B-Python so einen Modus hat,
wo du die gesamte Historie
im Texteditor bearbeiten kannst
und dann wieder ausführen kannst.
Und dann musst du es halt eigentlich
nicht unbedingt speichern.
Und B-Python kommt uns natürlich da
sehr entgegen.
So mit Autovervollständigung,
Syntax-Haltern,
das ist schon echt cool.
Also, ja.
Es ist bunt.
Geht das B für bunt?
Ja, das steht für bunt-Python.
Weil, das ist auch deutsche Sprache.
Das muss man so.
Ja, und meistens
in, ich glaube,
spät höheren Leveln zeigen wir dann auch
einfach die Code-Beispiele, die wir geschrieben haben.
Aber gerade am Anfang,
weil man im Interpreter auch deutlich besser
auf Fragen eingehen kann, da kann ich dann
einfach den, wenn mir
mich, wenn ich gefragt werde,
was ist denn, wenn ich das und das mache,
kann ich das einfach direkt zeigen, als wenn ich das
in eine Datei schreibe und dann den Commit,
das wieder committen muss.
Also, wir wechseln dann meistens so bei
if und schleifen.
Ja, weil da ist es dann irgendwann...
Dann hast du auch Verschachtelungen und sowas
und dann wird es schwieriger, einfach nach oben zu drücken.
Ja.
Da wird es dann anstrengend irgendwie mit B-Python.
Das könnte man tatsächlich wahrscheinlich eben
im Jupyter Notebook
machen.
Ja.
Aber dann hat man halt
tatsächlich auch wieder erstmal so einen Webbrowser dazwischen
und dann muss man, wenn die Leute das nachvollziehen...
Wenn die Leute das nachvollziehen
wollen, wird es wieder schwerer.
Ja, es ist nicht so...
Jupyter habe ich immer gerne mal versucht, so zwischendurch anzutesten.
Das ist natürlich super nett, gerade wenn man so Grafen noch
einbaut, weil man direkt die Auswirkungen
von dem Datensatz in diesen Grafen sehen kann.
Aber ansonsten fand ich das eher so ein bisschen anstrengend.
Aber vielleicht bin ich jetzt auch nicht
wirklich drüber gestolpert.
Ja, also ich glaube, man hat
erst so richtig den... Also oder für
mich hat es halt dann richtig funktioniert,
als ich
gemerkt habe, dass ich mir damit
eine Menge Zeit sparen kann, wenn
man Schritte hat, also die irgendwie Daten
laden oder Sachen, die lange
laufen und wenn man dann irgendwie
Fehler macht und dann nicht alles
weg ist, sondern man
den Fehler korrigieren kann und das dann nochmal
die Zelle ausführt und es dann einfach weitergeht.
Das war dann so, wo ich mir dachte, wow.
Das ist der beste Debuggen dann quasi.
Ja, das ist halt so das, wofür ich das dann
brauche. Aber wenn ich jetzt
zum Beispiel Webentwicklung mache, dann
benutze ich das zwar auch, aber deutlich
seltener. Also eigentlich eher nur dann, wenn ich halt so
viel Jobs
habe, die eine Menge Zeugs berechnen.
Ja.
Aber nee, das ist schon...
Ja.
Jetzt sind wir ja gerade wieder bei der Umgebung.
Welche nutzt ihr denn so privat dann?
Inwiefern
Umgebung?
Benutzt ihr überhaupt eine oder bleibt alles in der Shell?
Ich schreibe meinen Code
bis der Nadel auf der Platte.
Ach so.
Ich persönlich bin ein großer Fan von Atom,
weil ich halt nicht nur Python
benutze, sondern auch irgendwie für
die Software, die wir im Dorf haben, die existiert
oder ob ich auch für die Uni
diverse Programmiersprachen nutzen muss.
In Atom kann ich halt Plugins für irgendwie alle Sprachen
installieren und dann funktioniert das halt ähnlich.
Ich muss mir das nicht immer einzeln anschauen.
Ja.
Ja, ich glaube, ich habe jetzt einmal
alles ausprobiert.
Am Anfang war es tatsächlich
G-Edit, der
vorinstallierte Texteditor von Gnome.
Das hat auch gut
funktioniert, weil es hat halt Syntax-Highlighting
und mehr brauchte ich da nicht.
Dann war so ein bisschen meine
Sublime-Text-Site.
Das hat jetzt auch nur ein bisschen
mehr gemacht als G-Edit. Also ich konnte
den Code auch im
Editor direkt ausführen.
Sublime hat dann eine Python-Konsole
aufgemacht. Das hat auch gut
funktioniert. Dann habe ich
auch Atom benutzt, auch mit Plugins.
Die mir dann zum Beispiel
den Linter
gemacht haben oder eine Python-Konsole.
Mittlerweile bin ich bei
VS-Code angelangt mit
ich glaube, ich weiß nicht, ob es da
Plugins oder Add-ons heißt.
Jedenfalls ein Flake-8-Add-on,
dass er mir direkt die
Type-Annotations
Oh ja, MyPile.
Ich glaube, das ist
ich habe, glaube ich, nur das Flake-8
oder auch MyPile.
Großartig, habe ich auch für mich entdeckt.
Da kann man ja auch die
Kit-Verwaltung direkt einbauen und
man hat so eine tolle Live-Share-Funktion.
Da kann man kollaborativ direkt arbeiten.
Da ist man vor dem gleichen Rechner.
Geht in Atom auch alles.
Aktuell mein Workflow ist
Das gibt man im BI auch.
Screen-X
Das ist schon so ein bisschen
angestaubt.
Letztendlich sind wahrscheinlich alle Texteditoren irgendwie.
Aber wir scheinen alle nicht wirklich so eine Idee
zu nutzen, sondern eher ein Texteditor mit
zig Plugins.
PyCharm habe ich installiert. Ich starte es irgendwie
jedes halbe Jahr mal und mache es dann direkt wieder zu.
Ich verwende es tatsächlich
auch manchmal länger.
Wobei, ehrlich gesagt,
eher WebStorm als PyCharm.
Also die
gleiche Idee, aber für JavaScript.
Oder halt TypeScript
in meinem Fall jetzt.
Ja, aber ich finde PyCharm
auch schwer zu bedienen.
Es kann schon auch coole Sachen,
aber es fühlt sich
nicht so gut an wie ein richtiger
Editor irgendwie.
Und ich
meine, ja, selbst
Atom, das ja im Grunde auch mehr so
ein
Browser mit irgendwie JavaScript und dann
im Editor in JavaScript in dem Browser ist,
fühlt sich halt viel
irgendwie so agiler an
als PyCharm.
Was man da sagen muss, ist, dass die bei Atom in den letzten
zwei Jahren wirklich stark an der Performance gearbeitet
haben. Also wahrscheinlich auch dadurch bedingt, dass viele
Leute auf VSCode umgestiegen sind, weil es halt
schneller war. Atom ist
wesentlich schneller geworden tatsächlich.
Ah, okay. Muss ich vielleicht auch nochmal ausprobieren.
Ich finde, der Niklas hat auch eben
einen guten Punkt gebracht, dass
eben, klar, wenn ich mit Python arbeite,
gibt es wahrscheinlich nichts Besseres als
PyCharm, also keine umfassendere
Lösung, gerade weil
die Professional-Version
auch noch sehr gute
Interaktion
mit anderen Sachen, zum Beispiel
Git oder Django liefert. Nur
gerade wenn ich
in meinem Git-Repo nicht nur
Python-Dateien, sondern eventuell noch eine
Markdown-Datei oder ein Bild habe,
oder ganz andere Sachen,
dann hilft mir
PyCharm nicht, weil
dann habe ich VSCode und dann kann ich da
die Code-Dateien öffnen, dann kann
ich die CSV-Datei
ändern, da kann ich die
readme.nd ändern, da kann
ich mir das Bild angucken,
alles in einem Programm, statt dass ich
die Python-Datei in PyCharm
bearbeite, die Markdown-Datei
in meinen Markdown-Viewer,
das Bild in meinen Bildbetrachter
und die CSV-Datei in
meinen Tabellen-Kalkulation.
Also so am krassesten
habe ich mich gefühlt tatsächlich, als ich mit
Platt, wo wir irgendwie so ein Diagramm gemacht
habe, das dann halt in Atom
auch direkt schreiben und dann live gerendert habe und das
dann in readme eingebunden und
das war halt schon
recht cool. Gerade für so Sachen, wo
man eben nicht nur Code-Dateien
im
Repo hat, ist glaube ich so ein Text-Editor
mit Atoms
die bessere Option, weil dann kann ich
mir VSCode
und dann habe ich eben
Autocompletion für Python
und meinen Linter und
meinen MyPy und
vielleicht dann noch ein Preview
für Markdown-Dateien und
der Bildbetrachter ist eingebaut.
Da habe ich dann alles in einem Programm,
habe an der Seite die
Ordner-Übersicht
und dann kann ich da durchgehen,
habe das in einem Programm
zweites Fenster noch, das
Terminal und bin damit voll zufrieden.
Und die Einstiegshöhe ist auch geringer,
ich kann mir irgendwie Subclime installieren, die Datei
öffnen und da kann ich direkt anfangen zu
programmieren. Ich muss mir nicht mehr
erstmal durch den Einstellungsdialog klicken,
um auch zu finden, wie ich jetzt zoome oder so.
Das funktioniert halt alles so, wie man es erwarten würde.
Das finde ich schon praktisch.
VSCode habe ich jetzt
erst seit neuerdings, also vielleicht
drei Monate
und
da habe ich mich positiv überrascht.
Ich habe VSCode geöffnet und wollte dann
einfach meine Python-Datei ändern
und da hat er direkt mir
vorgeschlagen, hier möchtest du nicht
dieses Add-on installieren,
das dir die Autocompletion macht
und ich so, ja, gerne.
Hier wähle dein Linter aus.
Ja, gerne.
Brace yourself, Linter.
Das ist ja sehr user-centric.
Natürlich.
In meinem RSS-Feed lese
ich dann auch hin und wieder, welche Neuerungen
in VSCode jetzt bezüglich
Python kommen und das sieht schon
sehr gut aus.
Das einzige große Problem, was ich mal mit
Atom hatte, ist, Atom konnte
sehr spät so Type Notations.
Das hat bis irgendwie 1.25
oder so, wenn
ein Feil in der Methodensignatur war,
ist das ganze Highlighting kaputt gegangen.
Das war sehr witzig, weil das ja eigentlich
schon seit Python 3 im Sprachstandard
enthalten ist und dann, ja,
aber gut, ja.
Ich muss auch sagen, seitdem ich VSCode mit
einem direkt eingebauten Linter
benutze,
nicht nur, sondern
da benutze ich auch
richtig gut die Type Notations
und selbst, wenn es irgendwie ein Skript von
50 Zeilen ist,
dadurch, dass der mir
darauf hinweist, wenn ich was falsch mache,
benutze ich es häufiger
und das finde ich, das ist schon ein positiver
Nebeneffekt, dass ich schöneren
dokumentierten Code schreibe.
Ja, aber so Type Notations machen wir uns am Anfang
auch nicht sicher, wie wir das jetzt
tatsächlich, sollen wir das zeigen,
sollen wir das nicht zeigen?
Wir haben es am Anfang so gemacht, dass wir
die alte Syntax genommen haben, wo die Typen
nicht bei den Variablen standen, sondern
in den Kommentaren dahinter, weil wir uns
überlegt haben, wir wollen eigentlich, dass unsere
Beispiele mit allen Python-Versionen laufen.
Zumindest mit allen Python-3-Versionen.
Also auch mit 3.4.
Mit allen aktuellen
verschützten
Python-3-Versionen. Aber wenn dann jetzt
3.4 irgendwann stirbt, dann können wir uns
überlegen, ob wir das nicht vielleicht auf die neue
Syntax ändern.
Ja.
Das ist natürlich auch so, gerade wenn
man den Code für Einsteiger
schreibt und nur
sagt Python 3,
dann muss man natürlich auch darauf achten,
dass der Code kompatibel bleibt.
Wir hatten für ein Glück noch niemanden, der damit
3.2 oder 3.3 aufgetastet hat.
Das ist einfach zu schwer zu installieren.
Das schafft sowieso kein Anfänger.
Gibt es wirklich noch zwei Sachen irgendwo?
Docker, Python, Doppelpunkt 3.2.
Ja, also ich
habe durchaus schon noch,
zum Beispiel, was mich irgendwie auch
genervt hat beim Roster eines Kunden,
dessen aktuellste Version war,
war Python 3.3.
Das war auch bei Debian
eine Zeit lang das, was
dabei war.
Das ist halt schon schlimm.
3.4 wäre echt gut gewesen.
Wir sagen uns halt, wenn die Version
im Moment noch supported ist,
dann versuchen wir auch die zu verwenden.
Es ist ja nur 3.4 im Moment noch.
Insofern ist 3.4 eigentlich
für mich war so 3.4 die erste
richtig gute Dreier-Version,
die man
ja,
wo einem nicht mehr so dauernd
Sachen auf den Fuß gepresst wird.
Wann hast du mal Python 2 über den Weg gelaufen,
so im aktiven Betrieb?
Mir ehrlich gesagt
schon ganz lange nicht mehr.
Ich würde sagen, das müsste dann schon
so wahrscheinlich 2000,
na okay, so lange ist das jetzt auch nicht her,
2014,
2015 gewesen.
Letzte Woche hatte ich ein Startup getroffen,
die so einen Sensor betrieben haben auf
Python 2 API-Base.
Ich habe ein bisschen...
Haben sie noch ein Jahr,
zwei Jahre Zeit.
Ich habe aber auch
mittlerweile das Gefühl, dass Python 3
doch mittlerweile weit
genug verbreitet ist. Also,
dass Python 2 doch langsam stirbt.
Ja.
Endlich das Problem gelöst. Keine zwei Sprachen mehr,
sondern Progress.
Weil Python 3 ist dann irgendwann
nicht mehr Zukunft, sondern Gegenwart.
Wann kommt dann endlich Python 4?
Sollte es ja eigentlich gar nicht geben,
wenn ich die Leute...
Ich habe einen Blogpost von 2015 gefunden,
wo es 2020 drin stand, aber...
Aber da ist dann Python 3 42 oder so.
Ich glaube es auch nicht.
Da stellt sich dann natürlich die Frage,
ob man bei Python
überhaupt eine 4 oder 3,1
4,1
Wobei, es gab doch,
ich meine, in den
2.3.7 oder so, gibt es irgendein
Feature, dass Type Annotations
als String betrachtet werden,
wo steht, dass das im Moment Opt-in ist,
irgendwie mit From-Future-Import, aber Python 4
macht das dann als Standard. Und dann habe ich mir gedacht,
okay.
Das mit dem Annähern
an so eine Zahl,
das ist leider schon ein bisschen vergeblich.
Ich glaube, Lattech macht E und Tech macht
Pi oder so, oder?
Die nähern sich mit ihren Versionen schon irgendwie.
Wenn sie bei Sempfer
bleiben würden, wäre ich davor.
Ja, das wäre auch ganz gut.
Wenn die Versionen
nichts bedeuten, ist das auch so ein bisschen schlecht.
Ich kann doch jedes Jahr wieder
hochzählen, dass wir irgendwann 2020
angekommen sind.
Wenn sich da nichts großartig ändert, warum nicht?
Das verwirrt mich ja immer noch bei den
Ubuntu-Versionen, die sich nach
Buchstaben benennen
und dann nach Z wieder bei A
angefangen haben.
Was hättest du erwartet, dass die irgendwie auf Emojis springen, oder was?
Anderes Alphabet, Brille.
Ich hätte Witz nicht gefunden.
Naja.
Ja.
Was mich jetzt noch
interessieren würde,
nicht in Gründen. Was wäre denn mit dem nächsten Level?
Also wenn ich jetzt so die ganzen Basics irgendwie so
ein bisschen verstanden habe,
was würde ich denn als nächstes machen?
Also wir müssen uns ja nicht immer
da sklavisch an
unser Rahmenprogramm halten. Das haben wir ja nur
vorbereitet, damit wir notfalls was haben.
Also wenn Leute
Fragen zu Themen haben, dann gehen wir da auch
drauf ein oder wenn die irgendwie Projekte haben
oder sowas. Projekte ist vielleicht ein gutes Stichwort.
Das heißt, wenn man bei euch durch ist mit Tutorial,
dann sollte man mit Projekten anfangen oder
was würdet ihr empfehlen, um die Sprache so
ein bisschen besser zu verstehen oder irgendwie so Konzepte
zu gestalten? Ja, ich glaube, es ist
tatsächlich ein sehr guter
Ansatz, dass man,
wenn man mit dem Programmieren anfängt
und dann das Tutorial bei uns
absolviert hat, das muss
noch nicht mal alle 10 Level sein, sondern das
kann halt auch, ich glaube
mit Level 6 haben wir
Funktionen abgearbeitet. Ich glaube, es sind mehr als
10 Level.
Ich glaube, mit Level 6
haben wir Funktionen abgearbeitet,
und dann, wenn man dann quasi
ein Projekt hat, wenn man
sich überlegt, ich möchte
irgendwas mit Bildern machen,
ich möchte irgendwas mit Zufall
machen, ich möchte... Oder mit Netzwerk.
Oder mit Netzwerk, dass man dann
quasi anfängt,
normalerweise fange
ich immer so an, erstmal
wie macht man den
Brandham-Algorithmus
in Python, dann google ich das und dann gehe
ich auf Stack Overflow und gucke ich mir an.
Jetzt musst du ganz kurz für unsere Akteuren,
was der Bandham-Algorithmus ist.
Würde ich auch gerne wissen.
Das war ein Beispiel.
Damit habe ich mich irgendwann mal beschäftigt,
ich weiß es selber nicht mehr.
In die Shownotes kommt das dann.
Ich kann es rausrufen.
Also wie gesagt,
meistens hilft es, wenn man
ein Projekt hat, das möchte man machen,
und dann
beschäftigt man sich
daher mit Python, weil dann hat man
ein Ziel, und dann
kann man gezielter Fragen
stellen.
Ansonsten haben wir ja auch
diese Situation,
dass wenn Leute
beim ersten Donnerstag im Monat zu uns kommen
und beim zweiten Donnerstag im Monat zu uns kommen,
dass die Personen dann ja doch
irgendwie was mitgenommen haben, hoffentlich.
Und dann kann man auch zum dritten Donnerstag
im Monat kommen, und dann sind wir nicht mehr da,
und dann können wir sicherlich was anderes tun.
Ja, aber
genau, wenn ihr sagt, ihr macht dann
Funktionen, wie tief geht denn das eigentlich
sozusagen?
Jetzt haben wir Rekursionslimit.
Haha, okay.
Aber macht ihr auch so Dekoratoren
dann noch an Funktionen, oder?
Ja, aber nicht in dem Level, das kommt später.
Erklärt ihr sowas, was Kloschers
sind und solche Dinge?
Also das machen wir irgendwann,
wenn ich meine, dann haben wir Level 8, 9 oder so,
aber nicht dann.
Ja, ich glaube 8.
Ja, das ist immer eine schwierige Abwägung,
weil man kann in die
Themen viel tiefer reingehen.
Wir haben zum Beispiel am Anfang auch
nur positionale
Parameter gemacht, und das dreht dann auch hier weiter
auf GeoWord und sowas.
Weil
man möchte natürlich auch nichts erwähnen,
was man noch nicht erklärt hat.
Also zum Beispiel, wenn ich
ein String habe, wenn ich
ein Level 1 Strings durchgehe,
und dann sage, ja,
ich kann feststellen, ob
ein String
Uppercase oder Lowercase ist, wenn ich
String.isLower schreibe.
Dann müsste ich
eigentlich erklären, ja, das ist jetzt eine Methode
von String, die rufe ich auf den String auf.
Und dann kommt es halt als ersten Parameter selbst.
Ja, aber
ich persönlich finde es auch irgendwie doof zu sagen,
das müsst ihr jetzt wissen, aber das machen wir
später.
Was zu erwähnen ist einfach gar nicht.
Ja, aber ganz witzig da auch, weil
ihr beide habt so ein bisschen andere Arten und Weise,
diese einfacheren Dinge zu erklären, und weil
auch neue Leute dabei waren, hatte ich zum Beispiel so, dass ich
einige Lektionen von jedem von euch einmal gehört habe.
Und das war sehr cool, weil ich dann bestimmte Sachen noch
neu gelernt habe, die ich vorher noch nicht kannte.
Ja, das erinnert sich auch.
Ich war auch bei der gleichen Person jeden Monat.
Wir lernen ja auch dazu.
Das hoffentlich.
Ich behaupte, wir haben
beide schon sehr viel daraus mitgenommen.
Ich finde es halt immer doof, wenn man
Sachen nach hinten verschiebt und sagen muss,
ja, also Print, das ist
eine Funktion, und was eine Funktion ist,
das sagen wir später. Oder auch
in Programmierung in der Uni
in Java, ne? Erstmal, das ist
eine Klasse, das ist eine Funktion, das erklären wir
später. Ich finde das immer,
wenn man was erwähnt, dann soll man es
erklären.
Und klar, man kann
die Print-Funktion,
man kann auch einfach hinnehmen, dass, wenn
ich da einen String reintue, dann wird er ausgedruckt.
Wir können ja Funktionsaufrufe
auch machen, bevor wir selber Funktionen definieren.
Das ist ja kein Problem.
Man kann sagen, das ist eine Funktion,
die
bietet die Möglichkeit, einen Code
abzuspeichern und wieder auszuführen.
Und wie man das selber definiert,
machen wir später.
Aber gerade bei diesem
String-Beispiel, dass man eben Funktionen
hatte, die auf einen String aufgerufen
werden und nicht mit einem String,
das hat
bisher auch zum Glück niemand gefragt, warum da ein Punkt
steht.
Das ist so eine Schwierigkeit,
die es mit sich bringt,
wenn man eben
am Anfang Sachen erklären will, aber noch
nicht zu sehr darauf eingehen möchte, warum das
jetzt so ist.
Und wenn man dann
weitergekommen ist, dass man halt viele von diesen
Konzepten verstanden hat und sein eigenes Projekt angefangen
hat, dann ist halt die Frage,
möchte man jedes Projekt dann komplett abschließen oder hat man
in dem Projekt so schnell was gelernt, dass man direkt nächstes
macht? Wie viele von euren Projekten habt ihr nicht
fertig gemacht? Alle werde ich
irgendwann nochmal fertig machen, glaube ich.
Also das
erste Projekt, mit dem ich angefangen habe,
war
irgendwie eine Verwaltung
für einen Videorekorder. Ich habe zu Hause
so einen Festplattenrekorder, mit dem
konnte ich irgendwie Dinge aus dem Fernsehen aufnehmen.
Und dann habe ich mir gedacht, das wäre ja total
cool, wenn ich die dann irgendwie so sortieren
könnte, irgendwie nach einer Staffel,
Episode und sowas. Es gibt da ja auch
so Online-Datenbanken. Und das war
mein erstes Projekt und
ich mache da alle zwei Jahre nochmal irgendwie so
einen Commit. Und bitte guckt euch nicht auf Github
an, das ist schrecklich.
Ja, ich glaube, ich habe auch noch auf
meinem Github-Repo, in meinem
Github-Account, Karteileichen
von Projekten, die ich mal angefangen
habe, halbherzig
irgendwann dann liegen
lassen. Da müsste ich, glaube ich, auch mal
auskehren. Noch diesen einen
YouTube-Client, der irgendwann einfach
das Stack-Limit erreicht bei jeder
Menüpunkt neuer Regressionswissen.
Ja, das
Programm gibt es noch. Ich glaube, das funktioniert
sogar noch. Aber
da habe ich halt seit Jahren nichts mehr gemacht.
Und ich nehme mir vor,
das irgendwann zu tun, aber
ja.
Man kann die Repos
ja auf Github mittlerweile auch aktivieren. Aber ich hatte
bisher noch nie diese
harte Entscheidung getroffen, dass man doch nicht mehr
verwandelt.
Nee, das, genau. Es gibt da
mehrere, also bei mir gibt es auch, ich habe ganz,
ich weiß nicht genau, ich habe vielleicht so
60 Github-Repos
oder sowas.
Ich sammle die nicht, aber
im Verlauf der Zeit
passiert das irgendwie. Und dann gibt es halt unterschiedliche Stadien,
von denen sich
Projekte befinden können.
Also tatsächlich, ich habe auch noch nie
ein Github-Repo gelöscht oder ein Projekt wirklich komplett wieder
verschwinden lassen. Aber es gibt dann
halt welche, wenn ich dann schon mal
eine Domain registriere, dann ist es schon ernster.
Oh ja.
Ich habe
Projekte, die ziemlich gut funktionieren, zu denen
ich aber keine Doku habe. Und ich habe
welche, wo ich eigentlich nur das Konzept habe
und auch keine Software. Es gibt so eines,
da habe ich eine Domain, da zahle ich jedes Jahr Geld
für und da habe ich keine Software für.
Sehr gut.
Bei
einem Projekt, das hatte ich,
das ist mittlerweile jetzt auch
drei Jahre alt, da ging es um Gruppen,
Optimierung und ich hatte das angefangen
und da hatte ich
erst unglaublich viel Zeit
investiert, mir
viel zu viele Gedanken zu machen, okay,
wie mache ich das jetzt? Das war doch dein erstes
grafisches Programm, oder? Ja,
das war für mich aus
vielerlei Hinsicht interessant, weil ich da
einerseits einmal so richtig
mit Objektorientierung gearbeitet habe,
also so einmal
komplett Objektorientierung und Grafik
und... Weil es geht. Weil es geht.
Weil ich quasi daran auch selber
...
Dinge lernen wollte. Daran habe ich
dann auch Git viel besser
kennengelernt.
Konflikte mit sich selbst ist auch etwas, was man
vergabt haben sollte. Das muss man
einfach mal gemacht haben und
ich glaube, nach
ein paar Monaten, wo ich da wirklich hochkonzentriert
dabei geblieben bin, bin ich
dann in so eine Sackgasse gelaufen,
dass es einfach nicht mehr funktionierte. Dann habe ich
das liegen gelassen, dann habe ich irgendwann wieder angefangen,
die Codebasis
überarbeitet und dann lief es wieder
und dann habe ich das wieder ein bisschen
liegen gelassen und dann habe ich da irgendwann
mit weitergemacht und mittlerweile bin ich
da sogar auf einem relativ guten Weg.
Aber
mittlerweile ist
bei mir im Allgemeinen die
der Workflow
auch so, dass ich zwar Projekte lokal
anlege, auch als Git-Repo,
aber dann erst
auf meinen GitHub-Account
hochlade, wenn das quasi
so weit ist, dass ich der Öffentlichkeit
zeigen möchte.
Ja, also ich habe das vor, dass ich
alle, also dass ich eigentlich nur noch ein
oder ein Projekt habe, an dem ich
aktuell arbeite und das halt irgendwie so mal
entweder, weil mir das
eine irgendwann langweilig wird oder durch
so andere Faktoren, wie wenn ich
Zeit oder sowas, oder Leute
sprechen mich mal an mit, hey, was ist denn eigentlich
geworden aus, dass ich das dann so
einmal im Monat wechsle, was ich gerade
aktuell mache. Ja, ich glaube, bei mir
ist das relativ sprunghaft.
Also ich habe dieses große
Projekt mit der Gruppenoptimierung,
wo ich halt immer, wenn ich mal wieder
Zeit und Lust dran habe,
weiterarbeite. Da habe ich es jetzt
mittlerweile auch ganz gut mit der Doku hinbekommen,
dass ich auch vier Monate
später noch weiß, wo ich
war und was mein letzter Stand ist.
Hast du auch Tests?
Tatsächlich habe ich teilweise
Tests. 100% Coverage.
Naja, die werde ich niemals
erreichen, aber für die
Objektiorientierung, die da
zugrunde liegt, sind Tests
sogar schon fertig.
Die führe ich auch hin und wieder aus.
Aber meistens
ist es bei meinen Projekten eher
sprunghaft, dass ich halt
kleinere Projekte habe. Das sind dann
meistens auch nur so ein paar hundert Zeilen Code,
wo ich entweder
spontan die Idee dazu hatte
oder da hatte
mich wer gefragt und ich habe das einfach mal
ausgetestet oder wir hatten da
Donnerstag darüber gesprochen und ich wollte da
quasi noch weitergehen. Das hatte ich jetzt
letztens, da habe ich was mit Bildern
gemacht. Also aber du hast
die Sachen auch vorher mal direkt bei GitHub direkt hochgezogen.
Das ist ja interessant. Also ich habe jetzt auch so ein paar
Sachen entdeckt. Bitbucket kennt ihr ja bestimmt alle
und Azure. Da gibt es ja jetzt auch die Möglichkeit,
private Repositories unbegrenzt anzulegen.
Ja, dafür habe ich mir einen
extra GitLab-Account gemacht, damit ich
ein privates Repo anlegen kann.
Ja, aber das gibt es jetzt bei GitHub auch.
Das war früher, aber das ist
kostenpflichtig.
Also das ist jetzt neu, das ist nicht mehr kostenpflichtig?
Nee. Achso.
Da wollte ich dann auch überlegen, ob ich mein
Gruppenoptimierungs-Repo einmal
auf GitHub hochlade und eventuell
dann sogar ein öffentliches
Repo, weil es mittlerweile doch
ganz schön ansehnlich ist. Aber es gibt
bei diesen kostenlosen
privaten Repos auf GitHub
irgendwie Einschränkungen. Aber du kannst glaube ich
irgendwie dann keine Leute hinzufügen
oder sowas, die damit arbeiten können. Das kostet weiterhin
Geld. Ah, okay. Ja gut,
irgendwie soll GitHub ja auch nicht verdienen.
Also finde ich schon okay.
Aber Gruppenoptimierung,
das... Ich glaube,
nicht mathematische.
Nein, nein, nicht mathematische Gruppen.
Ja, so Teamzuteilung.
Ja, Teamzuteilung.
Hatte ich mir dann
in der Mitte der Entwicklung dann auch überlegt,
hm, weise ich
hier Menschenwerten zu, ob das noch
moralisch vertretbar ist.
Man muss wissen, Dodo macht Jugendarbeit.
Ja, ich mache das mit der Jugendarbeit
und da ist es immer schwierig, die Teams
fair zu gestalten.
Und irgendwelche Sensoren
die Arbeit übernehmen lassen für die Bewertung.
Ja,
da musste ich mir dann auch,
zum Glück funktioniert das Programm
auch mit beliebigen Attributen.
Also die sind nicht so tief
eingebaut, dass ich die nicht jederzeit ändern könnte.
Da musste ich mir dann
erstmal Gedanken machen, welche Attribute ich nehmen kann.
Aber da
habe ich dann auch gesehen, dass ich
das gar nicht kann, dass ich quasi
ein Projekt von vornherein aus plane
und dann irgendwann anfange. Das war
da am Anfang mein Fehler, dass ich mir viel zu
viele Gedanken gemacht habe, wie ich das
dokumentiere, wie ich das strukturiere.
Und es hat deutlich besser geklappt,
als ich dann irgendwann einmal die Codebasis
komplett umgeworfen habe und direkt
angefangen habe, Code zu schreiben
und danach zu dokumentieren,
was ich da gemacht habe,
als erst zu schreiben,
okay, ich habe hier ein Player-Objekt
und dann habe ich ein Team-Objekt
und dann müssen die so und so
miteinander interagieren.
Da hat es mir tatsächlich besser getan, einfach
anzufangen, Code zu schreiben,
dann ein bisschen zu dokumentieren, dann weiter
zu schreiben.
So ein bisschen Agile Hands-On, das kannst du auch
bestätigen.
Mir fällt das auch deutlich leichter, wenn ich
das so mache. Also ich meine, es gibt wahrscheinlich auch
einfach unterschiedliche Arten von
Leuten, denen
unterschiedliche Dinge leicht oder schwer
fallen. Aber das, was man ja sozusagen
erzählt bekommt, ist, dass
der Weg, wie es eigentlich
sein sollte, irgendwie top-down.
Man macht irgendwie Architektur und überlegt sich,
wie Dinge so funktionieren sollen.
Das ist aber schon sehr klassisch.
Und dann füllt man das sozusagen nur noch aus
bis zu, keine Ahnung, wenn
ein Konzern, das habe ich mal irgendwann von Siemens
gehört, wo es dann irgendwie, dann gibt es dann
irgendwie die Informatiker, die dann halt
sich die Architektur überlegen oder die UML-Diagramme
malen. Dann gibt es halt Programmierer, die dann halt
die Funktionssignaturen ausfüllen.
Es gibt ja auch so Tools, die dir aus UML-Diagrammen
dann automatisch Code erzeugen.
Ja.
Das finde ich auch ein bisschen ekelig.
Also aufgrund meiner eigenen Erfahrung
kann ich mir sehr schwer vorstellen, dass das irgendwie
zu einem guten Ergebnis führt.
Das ist das Problem der Digitalisierung, oder?
Dass halt alles völlig überplant ist und dann,
ändert sich die Umwelt viel schneller,
als der Plan noch aktuell ist.
Und dann ist der ganze Aufwand, den man
für das Plan betrieben hat, erstens dahin
und man ist dem Projekt noch nicht so weit. Man hat noch keine
Traction, wie man das so schön sagt,
bekommen irgendwo. Aber andererseits
sollte man durchaus schon so ein Konzept
haben, was man eigentlich machen möchte.
Ja, gut.
Aber das muss ja nicht komplett ausformuliert werden.
Nee, nee, nee.
Es reicht ja auch, wenn du weißt, was du vorhast.
Aber wenn du das da ausformulierst,
ist die...
der Wille,
sich an genau dieses Konzept zu
halten, größer, als wenn du einfach
nur ein Konzept im Kopf hast und dann...
Oder das kann auch
grob ausformuliert sein, aber ich hatte halt
versucht, das relativ
stark und streng
auszuformulieren und dann habe ich festgestellt, dass ich
beim tatsächlichen Schreiben des
Codes an Probleme stoße,
die ich vorher einfach nicht bedacht habe, die dann...
wo ich mein Konzept ändern müsste
und da habe ich dann nicht versucht, das Konzept
zu ändern, sondern den Code und das hat halt
nicht geklappt, bis ich dann irgendwann eben
das mit dem Konzept
gelassen habe und direkt angefangen habe, Code
zu schreiben, das klappte dann deutlich besser.
Ja, also mir geht das
oft tatsächlich so, dass man die Abstraktionen,
die man braucht, um das Ganze zu strukturieren,
weil Struktur sollte es dann am Schluss ja
vielleicht schon haben, erst einfallen,
wenn man das implementiert, weil viele Dinge,
die wichtig sind
und man gar nicht weiß,
bevor man es nicht gemacht hat und dann erst,
wenn man es hinschreibt, merkt man also,
oh, das ist mal ganz wichtig, das und...
dieses und dieses Ding, die vorher, wo ich vorher gedacht hätte,
die wären gar nicht gleich, die sind aber eigentlich fast das Gleiche,
dann kann ich die dann hier zusammenfassen und dann
kann es sein, dass da irgendwie
auch ein
elegantes Konzept oder so draus entsteht,
aber eher so im Nachhinein, wenn man
das Problem wirklich verstanden hat, aber um
das Problem wirklich zu verstehen, muss man irgendwie das
schon programmiert haben, sonst...
Ja. Aber gerade so,
wenn man mit großen
zeitlichen Abständen an einem Projekt arbeitet,
finde ich es persönlich wichtig, auch sich so Sachen aufzuschreiben,
weil ich es ansonsten einfach vergesse
und ansonsten,
was ich nicht, also gerade auch
bei Software, die dann auch tatsächlich Leute nutzen,
also die ich nicht nur für mich selbst schreibe,
finde ich das auch irgendwie wichtig, das
ein bisschen zu dokumentieren, weil
auch wegen dem Busfaktor und sowas,
also es wäre halt gut, wenn ich
das nicht nur in meinem Kopf habe, sondern es im Notfall auch
andere Leute machen könnten.
Kleine To-Do-Liste vielleicht, ich weiß nicht, wird das dann
schon viel sagen?
Wie macht
ihr Dokumentationen
sozusagen in euren Projekten?
Zu wenig?
Zu wenig, ja.
Das Gruppenoptimierungsprojekt
war jetzt das erste, wo ich wirklich
Dokumentation
gut angelegt habe.
Da habe ich halt eine
Readme-Datei, die so das Grobe umfasst
und dann zu bestimmten Themen.
Ich glaube, ich habe eine
GUI.md, die eben beschreibt, wie man die
GUI benutzen soll und wie die
so aufgebaut ist mit Mockup-Bildern und so.
Dann habe ich eine
Klassen.md, die beschreibt,
welche Klasse welches Objekt liefert
und was die tun
sollen, was die darstellen,
wie die miteinander interagieren
und ich glaube, ich habe noch eine
Backend.md, die beschreibt,
welche Funktionen in der Backend.py
tatsächlich die
Berechnung durchführen.
Und in der Main.py werden einfach
GUI und Backend zusammengeführt.
Ich habe gerade so ein ganz wichtiges
irgendwie Sphinx oder sowas,
dokumentiert.
Also ich benutze ja auch tatsächlich
Sphinx. Also Markdown,
wird das dann irgendwie
noch in was anderes verwandelt?
Nö, ich nehme rohe Markdown-Dateien.
Genau, weil
was ich normalerweise mache, aber
ich habe auch schon überlegt, nicht vielleicht
komplett Markdown verwenden das Richtige wäre, aber
was ich momentan verwende ist halt
Restructured Text als sozusagen
Format für Dokumentation
und dann Sphinx
als sozusagen Renderer,
der dann halt hinterher
entweder eine Webseite ausspuckt oder
ein PDF oder sonst irgendwas.
Und da nehme ich dann immer noch
dieses
Read the Docs
Theme dazu.
Es gibt so eine Seite,
das ist eigentlich ganz hübsch und dann,
wenn man dieses Theme mit installiert,
dann sieht die generierte Dokumentation
halt hinterher genauso aus und
man kann sie auch automatisch irgendwie direkt
auf Read the Docs hochladen, wenn man
jetzt da in GitHub
so einen Hook aktiviert.
Ja, ich glaube, ich habe bei Sphinx
aus seiner Dokumentation an den einzelnen
Funktionen und Methoden dran, also
aus den Docstrings, die erstellen lassen.
Kann man auch, genau. Man kann dann halt
Sachen, so API-Dokumentationen
und das kann man automatisch
erstellen lassen. Das ist aber die Frage,
wie hilfreich das ist, weil, naja gut,
das steht ja auch schon im Code irgendwie und
ja,
kann man
machen, aber weiß ich jetzt nicht, fand ich
bisher nie so wirklich hilfreich.
Ich meine, wenn man jetzt natürlich wahnsinnig viel,
äh, Dokumentationen in die, äh,
in Kommentare reingeschrieben hat, dann
macht das vielleicht schon Sinn, aber...
Gerade auch bei so Live-Voices muss ich dann unter Leute überlegen, wie rufe ich
jetzt die Funktion tatsächlich auf?
Ja, das ist tatsächlich gerade so
die Hürde, vor der ich jetzt so ein bisschen noch stehe, wenn ich jetzt
an meine Projekte denke. Ich habe dann irgendwie
eine fremde Bibliothek, die ich benutze, sei es jetzt
irgendwie Qt oder irgendwie sowas
und ich verstehe jetzt nicht, wie ich was Neues da
machen kann, wenn ich eine Idee habe, die jetzt nicht direkt
in den Klassen vorhanden ist und ich muss das irgendwie
selber generieren, dann habe ich dann
eine Dokumentation in C-Code mit,
äh, den Funktionen aufrufen, die da möglich sind
und wenn ich mir jetzt irgendwie
abstrakt überlegen soll, wie ich jetzt den Schritt weiterkomme,
das fällt mir so ein bisschen schwer, also,
ne, so, was, wie kann ich jetzt ein abstraktes
Modell in meinem Kopf erzeugen, das ich noch nie kenne?
Whiteboard. Ja.
Ja.
Also auch malen, sagst du,
und dann in kleine Teile zu legen. Ja, also
malen hilft doch
ziemlich stark, finde ich, dass ich dann so Sachen
auch besser vorstellen kann. Okay.
Kann ich nur bestätigen, ich habe zwar auch ein Whiteboard,
aber einerseits, ich habe zu Hause leider kein
eins, aber wir haben ja genug davon im Dorf.
Ja, mein Whiteboard hängt leider zu weit
vom Schrank weg, äh,
vom Schreibtisch weg, ähm, was ich dann
mache, ich nehme dann, äh, noch ganz altmodisch
Zettel und Papier und... Ich habe leider auch nichts
zu...
Also Schmierzettel,
meistens die Rückseite von irgendeinem
Fehldruck und nehme dann Bleistift und
mal das auf, weil
ich habe tatsächlich festgestellt, dass ich so
deutlich besser mir Sachen visualisieren
kann, wahrscheinlich
würde das auch mit einem Grafik-Tablet
gehen, aber dafür müsste man ja Geld
aufnehmen. Grafik-Tablets fände ich cool, aber ich, äh,
habe bisher noch keins gekauft.
Tatsächlich für das Gruppenoptimierungsprogramm,
wenn ich einmal, da hatte,
da ging es um den Algorithmus, der
tatsächlich die Optimierung macht, der
teilt die Teams nochmal auf
und ist
an einer Stelle ein bisschen rekursiv und so
und dann, ähm, habe ich tatsächlich
ganz viel Papier genommen
und Schnipsel erstellt, auf die ich, ähm,
die Sachen draufgeschrieben habe,
so, hier ist mein, äh,
Player-Schnipsel und hier ist mein Team-Schnipsel
und dann habe ich ein weiteres Schnipsel
genommen, die wie Pfeile aussahen,
dann habe ich den Teppich zur Seite gerollt,
das alles auf dem Boden aufgelegt, ein Foto von
mir gemacht und seitdem
habe ich im, äh, Repo ein
Foto von Schnipseln auf dem Boden,
da bräuchte man halt auch Platz auf dem Boden, ne?
Ja, da,
da der positive
Nebeneffekt war, der Boden ist jetzt
auch gesaugt, ähm,
aber seitdem habe ich im Repo
ein Bild von, ähm,
Zetteln auf dem Boden und
tatsächlich ist das gar nicht so doof,
ich hätte es natürlich auch mit einem Grafik-Tablet
schneller hingekriegt,
aber, ähm, ja.
Ja, ne, ich mache auch oft
dann tatsächlich Fotos von, von irgendwelchen Dingen,
die ich auf dem Zettel gemalt habe, weil das halt
irgendwie schneller geht, äh, als, ähm,
wenn man das bei dir per Machine Learning automatisch
getaggt und in den richtigen Ordner...
Nee, das ist alles, alles
Handarbeit, aber was ich auch faszinierend
finde, ist, dass ich, äh, ich weiß nicht genau
warum, ich, ich wollte eigentlich das Papier immer loswerden,
aber, ähm, irgendwie,
äh, das kann ja auch sein, dass das
irgendwie so eine, äh,
ja, so historisch, äh,
irgendwie noch so ist, dass irgendwie, wenn ich,
wenn ich Sachen aufschreibe, es, es kommt, ich hab,
also meiner Ansicht nach ist es gar nicht so wichtig,
was man sich aufschreibt, sondern allein das
vom Papier sitzen und mit dem Stift da irgendwie was
drauf rummachen, das hilft einem schon
irgendwie, oder meinem Gehirn irgendwie offenbar
dabei, äh, irgendwie im richtigen
Modus zu operieren und, äh,
wenn ich das auf nem, auf nem Tablet
mache, was ich halt auch habe, dann funktioniert das
irgendwie nicht, oder wenn ich auf einer Tastatur sitze, also wenn ich
irgendwie tippe, ist es was anderes, als wenn ich das auf
nem Zettel irgendwie aufschreibe, ich hab keine Ahnung, woran das
liegt, das ist irgendwie komisch. Also bei mir funktioniert das tatsächlich
auch ganz gut mit, mit Textdateien,
vielleicht ist es halt nur, dass ich dann sonst nichts habe, also
ich mach halt dann, dann wirklich auch, auch
den, den Bildschirm frei und guck halt,
dass ich wirklich nur das habe, was ich schreibe.
Der Sehen-Modus. Und dann geht das eigentlich
auch relativ gut, finde ich.
Vielleicht ist es aber witzig mit den Zeichnen,
also ich hab auch ein bisschen das Gefühl, dass das wirklich hilft,
vielleicht benutzt man andere Gehirnteile oder sowas
und wird dann neu, kreativ, oder?
Oder auch, wenn ich gerade nicht
im Rechner bin, kann ich nicht Twitter aufmachen auf dem
Whiteboard oder so.
Ich kann mir vorstellen, dass es so eine Kombination
daraus ist, dass man einerseits weniger abgelenkt
ist, dass andererseits,
was weiß ich, vielleicht hängt es auch damit
zusammen, dass wir aus der Schule,
die wir noch gewohnt sind, wenn wir
was auf Papier schreiben, dann konzentrieren
wir uns darauf. Ich hasse Papier und Papier
hasse ich nicht. Und wenn wir vorm Rechner
sitzen, haben wir da ganz andere Reize,
die auf uns zukommen. Also ich kann das auch
vollkommen,
vollkommen nachvollziehen, was ihr sagt.
Meistens brauche ich da auch
Stift und Papier,
weil Textdateien habe ich versucht,
aber meistens
kann ich in
Textdateien das nicht so
gut ausformulieren,
wie wenn ich mir ein Schaubild aufs
Papier male. Ja, gerade so
Pfeile und so was und Kästen
sind schwierig in Textdateien, ja.
Meistens brauche ich es dann ein bisschen grafisch, weil ich mir, was weiß ich, wenn ich mir, ja, jetzt fehlt mir ein Beispiel, meistens nehme ich dann kleine Grafiken, die ich mir dann aufs Papier zeichne, um mir das zu visualisieren und ich finde, das klappt deutlich besser, als wenn ich das versuche auszuformulieren.
Was würdet ihr denn machen, wenn ihr gar nicht mehr weiterkommt? Also ich habe das auch schon ein paar Mal gehabt, dann, keine Ahnung, weiß nicht, wie es geht, also mit einem Drohverlauf, dann ist da so eine Wand, da kommt man nicht einfach drüber und was würdet ihr empfehlen, wie sollte man da dann rangehen?
Schlafen oder irgendwas völlig anderes machen, also teilweise kommen mir die Ideen dann irgendwie auf den Klo oder hinter der Dusche, abends im Bett, drüber schlafen, davon ablenken, was anderes machen, generell häufig führt das zu was, weil
ich weiß nicht wieso, aber wie gesagt, mir fielen Sachen auch unter der Dusche ein, auf dem Weg ins Bett und dann dachte ich, ah ne, jetzt nochmal aufstehen.
Was mir auch geholfen hat, dass ich mich von dem Gedanken gelöst habe, dass es jetzt schlecht ist, wenn ich was lösche, also ich habe eine Versionsverwaltung, das heißt, ich kann auch einfach mal die letzten fünf Commits rückgängig machen und neu anfangen, also dass man...
Ich muss die Funktionen nicht schrittweise neu schreiben?
Ich kann jetzt löschen und neu schreiben, ich habe die alte Version noch.
Man darf auch ruhig mal 100 Zeilen Code auf einmal löschen und neu schreiben.
Nicht jeden Tag.
Nicht jeden Tag, weil irgendwo einen Fortschritt muss es auch geben, aber dann kann man beruhigt auch mal größere Mengen Code löschen und neu schreiben.
Meistens hilft das einem schneller, als wenn man versucht, alte Strukturen noch irgendwie zu laufen zu kriegen, weil man dann viel eher noch Sachen hinterfragt, die man vorher einfach akzeptiert.
Ja.
Und noch mal das Konzept mit dem Gelernten.
Ja.
Ansonsten, Wabadacking ist natürlich auch sinnvoll, wenn ich nicht alleine vor meinem Code sitze und frage, warum der die ganze Zeit einen Fehler wirft oder warum er nicht das tut, was er machen soll.
Gerade semantische Fehler sind halt da schwieriger, wenn ich dann einfach jemand anderen erkläre.
Also das Programm macht das und das und dann stellt der mir Fragen und wenn ich die Fragen nicht beantworten kann, dann lerne ich daraus.
Oder auch...
Oder Doku schreiben. Das ist ein bisschen quasi Wabadacking mit sich selbst.
Ja.
Und da fällt mir das dann auch teilweise auf.
So.
Ja.
Allein schon, weil man dadurch auch eine andere Blickweise auf das Problem bekommt.
Mhm.
Und das hilft einem meistens.
Wabadacking, Gummienten?
Ja.
Ja, das...
Stell dir vor, du erzählst es einer Gummientin.
Genau. Ich kenne das als Wabadack-Debugging sozusagen.
Ja, genau.
Man debugt dadurch, dass man einer Gummienten...
Erzählt, was da eigentlich passieren sollte.
Und dann, wenn man das 10 Minuten...
Also, es kommt aus der Erfahrung, dass man normalerweise anfängt, das irgendwelchen Leuten zu erzählen.
Und die dann irgendwie alle 30 Sekunden sagen so, ja, aber ich habe keine Ahnung.
Und das muss man dann ignorieren.
Und dann nach irgendwie 10 Minuten sagt man sich, ah, okay, ich weiß, warum es schief geht.
Ach, Mist.
Kommt halt immer auf die Leute an.
Also, wenn du genug Leute hast, die sich für ähnliche Dinge interessieren oder Zeit haben, das wirklich spannend finden,
dann geht das auch mit echten Menschen und nicht nur mit Gummienten.
Ja, vielleicht geht es auch sogar schneller.
Aber es geht halt...
Auch mit Gummienten.
Ja, genau.
Das ist halt das Faszinierende.
So eine Art von Gummienten bin ich irgendwo bei mir über die Jahre.
Es gibt tatsächlich Firmen, die so Gummienten als Werbegeschenke genau dafür verteilen.
Meistens ist es ja so, dass man tatsächlich nicht zu doof ist, sondern irgendetwas nicht bedacht hat.
Man steht irgendwie gerade auf einer Verleitung oder sowas.
Die Fehler sind meistens döver als man selber.
Ja, was weiß ich.
Da hast du dann irgendwie eine Klammer vergessen und auf einmal ist das kein Tuppel, sondern...
Sonst noch was?
Oh ja, ich habe mir ziemlich viel Zeit damit verschwendet, weil ich einen Tuppel haben wollte mit einem Element,
dann eine runde Klammer drum gemacht habe und es war dann kein Tuppel.
Nee, es fehlte eine Klammer.
Ja, ja.
Ja, wie gesagt, meistens sind es eben die doofen Fehler, die man am längsten sucht.
Weil es dann ja auch in Ordnung aussieht, wenn du drauf guckst.
Genau.
Ja.
Naja, da gibt es schon...
Aber das finde ich auch interessant.
Das ist auch vielleicht etwas, das halt irgendwie so den...
Wenn man...
Ja, die Tätigkeit beim Programmieren unterscheidet von anderen Geschichten.
Man ist ja als...
Ich glaube, das ist tatsächlich irgendwie ein bisschen was Besonderes, dass man, wenn man programmiert ist,
dass man halt irgendwie die ganze Zeit frustriert darüber, dass irgendwie Dinge nicht gehen.
Weil alles, was geht, das geht ja super schnell und ist super schnell automatisiert.
Und man ist immer eigentlich an dem Punkt, wo was nicht geht.
Und das ist, glaube ich, bei anderen Leuten nicht so.
Also ich meine, wenn ich jetzt irgendwie, keine Ahnung, irgendeinen Garten umgrabe oder wenn ich irgendwie so Dinge...
Dann habe ich immer wieder Phasen, wo ich weiß, naja gut, das geht jetzt so eine halbe Stunde,
weil ich muss das aber...
Ich weiß, wie das geht.
Ich mache das jetzt einfach mal eine halbe Stunde lang.
Zum Beispiel beim Kochen oder so, dann schnibbel ich irgendwas.
Man hat nicht die ganze Zeit das Problem, da wirklich von einem harten Ding, was man nicht versteht, zu stehen.
Sondern man hat immer wieder so...
Man hat natürlich auch diese Momente, aber oft weiß man eigentlich, was zu tun ist und muss das halt nur eine Zeit lang machen.
Und beim Programmieren ist es oft so...
Also ja, man muss sich erst daran gewöhnen, sozusagen überwiegenden Teil der Zeit halt irgendwie mit dem Kopf vor der Wand zu stehen.
Aber das ist ja auch irgendwie so wie Wadding, weil du halt da stehst und du hast...
Ja.
Ein Rätsel und du knackst es dann irgendwann halt hoffentlich, aber...
Ja, aber das kann auch ziemlich frustrierend sein.
Ich finde es aber dann als Abwechslung auch ziemlich entspannt, irgendwie, weiß ich nicht, irgendwas einzurichten oder irgendwie Dokus zu schreiben oder so,
weil du weißt, du kannst dann halt irgendwie die Zeit einschalten und du machst das dann halt und hast so ein Ergebnis nach der Zeit.
Das ist halt schon auch nett.
Ja, so zur Abwechslung, die Kommentare zu dem Code zu schreiben, ist auch schon ganz gut.
Ja.
Aber ich verstehe dann, was du meinst, dass du quasi Programmieren keinen Anteil an Fleißarbeit hast.
Sondern du bist halt immer bei den 80 Prozent, machst du in 20 Prozent der Zeit und danach hängst du bei diesen 20 Prozent fest.
Du musst einfach wissen, wie es geht.
Ja.
Und...
Sehr schön dichter, ne?
Wenn man tatsächlich messen würde, wie viel Zeit man so beim Programm braucht.
Ich meine, der Großteil ist ja schnell runtergeschrieben, nur die Fehler, die brauchen dann viel mehr.
Und im Grunde weiß man ja auch, was...
Man schreibt eine Zeile und weiß, in der nächsten Zeit...
In der nächsten Zeile muss das und das stehen und dann kommt die Vorschleife und dann packe ich da rein das und so weiter und so fort.
Wenn ihr so einen Fehler habt, wie geht ihr denn daran?
Also versucht ihr den zu debuggen, indem ihr guckt, warum das ist?
Oder versucht ihr dann auszuprobieren, wie man den lösen kann?
Ich habe noch nie wirklich einen Debugger verwendet, sondern immer nur Print.
Ja, ich auch nicht.
Also, wenn ich einen Hintag-Fehler habe, gut, dann sehe ich im Traceback, aha, Zeile das und das.
Was sagt denn der Fehler? Aha, okay.
Schwieriger ist es natürlich bei semantischen Fehlern.
Wo das Programm keinen Fehler wirft, sondern du mit der Ausgabe nicht zufrieden bist, da ist dann die Anwendung ja okay.
Ich packe da jetzt ganz viele Prints rein und gucke, da ist es noch richtig, da auch, da auch, da falsch.
Okay, der Fehler muss ungefähr da sein.
Oh ja.
Und dann, okay, das ist jetzt ein Ausdruck der drei ineinander verschachtelte Funktionsaufrufe.
Dann verschachtele ich die jetzt mal in drei Zeilen und dann jeweils Print vorher, Print nachher.
Und meistens mache ich es dann so.
Also, wie ist CodeTroll auch einen sehr guten Debugger an der Stelle haben für so Zeugs, dass man halt die Variablen testen kann, immer genau da und diesen Print sich dann immer einem, den man nicht extra in Code schreiben muss, sondern irgendwie einen Debugger und so.
Ja, aber meistens nehme ich dafür dann auch einfach einen Print und gut.
Und wenn euch nicht einfällt diese Lösung, guckt ihr dann in die Dokumentation oder werdet ihr dann einfach angezeigen in die Modulreihen oder sowas?
Also, es mag unglaublich doof klingen, aber wenn mir ein Fehler angezeigt wird, eventuell aus einem Modul, das ich importiert habe, den ich nicht kenne, der mir nichts sagt, dann kann ich den googeln und da wird garantiert schon wer anders auf Stack Overflow dieselbe Frage gehabt haben.
Und da hilft es meistens auch, zumindestens um schon mal zu verstehen, um was für einen Fehler es sich handelt.
Klar, bei den Normalen.
Bei den Normalen Facebacks ist das relativ simpel.
Wenn da Zero Division Ever steht, dann habe ich durch Null geteilt irgendwo.
Das kriegt man relativ gut gefixt, aber wenn man die Fehlermeldung nicht kennt, dann einfach mal googeln.
Ja, aber auch vielleicht nochmal, was interessant wäre, was seht ihr denn, wenn ihr jetzt da viel Anfänger dabei beobachtet, das zu lernen, was fällt denen denn besonders schwer?
Ist das immer das Gleiche oder ist es ganz je nachdem, wer das ist?
Ganz unterschiedliche Sachen.
Cool.
Bei Anfängern hat man teilweise noch tatsächlich Flüchtigkeitsfehler, so was weiß ich, Klammer nicht zugemacht, Gänsefühlchen offengelassen.
Das sind natürlich ja gut.
Ist man eventuell noch nicht gewohnt, ein klassischer Flüchtigkeitsfehler einfach vergessen.
Das kommt natürlich vor.
Dann gibt es Fehler, die quasi wir schon wissen, dass die aufhören.
Die auftauchen werden, weil, ja.
Welche zum Beispiel?
Jetzt wäre ein Beispiel gut.
Wenn man zum Beispiel die falsche Variable benutzt.
Wenn du in der Vorschleife statt die Durchlaufvariable dein Interact, statt die Variable, die du als Durchlaufvariable hast, die Variable nimmst, die du durchläufst.
Das passiert schon mal, aber das ist dann...
Das ist dann ja auch eher ein semantischer Fehler, weil es wirft nicht zwingend einen Fehler, aber es tut halt nicht das, was es soll.
Und auch Leute, die eine Funktion nicht aufrufen, sondern nur die Funktion dahin schreiben.
Ja.
Das passiert schon mal.
Vergessene Klammern beim Funktionsaufruf.
Ja.
Ich glaube, Anfänger machen jetzt nicht groß andere Fehler als Fortgeschrittene.
Wenn du mehr weißt, kannst du auch mehr Fehler machen.
Ja, das stimmt.
Tatsächlich, ich glaube, Anfänger machen einfach nur mehr Flüchtigkeitsfehler.
Die sind das ja auch nicht so gewohnt.
Wie sieht ein String aus?
Ich erkenne viele Fehler, der hat das letztlich auch optisch.
Ja.
Wenn mir der Editor anzeigt, guck mal, da geht ein String nicht zu.
Ja gut, dann mache ich den zu.
Aber wenn ich gerade damit anfange und jeder Buchstabe für mich quasi einen Einblick in eine neue Welt gibt, dann ist das eventuell schwieriger.
Das ist auch so, dass das...
Syntaxverleitung irgendwie in der falschen Farbe, das fällt mir zunächst mal auf.
Ja.
Weil man da auch ein gewisses, ich weiß nicht, Gefühl...
Oh.
Irgendwann hat man dann auch so einen Modus Operandi.
Zum Beispiel, wenn ich Gänsefüßchen nehme, dann macht mir der Editor automatisch zwei, wenn ich eins tippe.
Dann gehe ich einmal nach links, um in dem Gänsefüßchen zu sein und dann tippe ich da rein.
Und was weiß ich, ein Anfänger...
Ein Anfänger würde dann wahrscheinlich Gänsefüßchen, den String und dann nochmal ein Gänsefüßchen und dann vergisst es dir einen zweiten.
Oder der Text-Editor fügt da nochmal zwei ein.
Ja.
Dann hast du drei und dann klappt das auf einmal nicht mehr.
Dann laufe ich ja immer noch regelmäßig rein, tatsächlich.
Ja.
Also ich würde behaupten, Anfänger machen dieselben Fehler.
Vielleicht nur häufiger.
Aber ich glaube gar nicht so häufiger.
Ja.
Gibt es denn auch...
Gibt es denn auch Dinge, die Anfänger besonders toll finden?
Etwas, wo man irgendwie zuverlässig so einen Wow-Effekt mit erzielen kann?
Oder was sie überrascht, wie einfach das geht?
Gerade so grafische Sachen sind immer ziemlich überraschend.
Wir haben mal irgendwann Tirtel gezeigt.
Und dass man einfach so schnell irgendwie...
Also gerade so grafische Ergebnisse, weil sie nicht Rechtecke oder so was oder irgendwie Flächen überraschen Leute doch.
Ja.
Es ist natürlich immer gut, wenn man direkt was zeigen kann, was auch so ein bisschen über eine Kommando...
Also klar ist es noch eine Kommandozeilenanwendung, aber wenn dann plötzlich ein Fenster aufgeht und da ist ein Bild drin.
Oder wenn ein Fenster aufgeht und auf einmal ist dann ein Graf drin.
Was ich persönlich finde, finde bunten Text im Terminal ja spannender, aber...
Ich finde das auch schon sehr spannend.
Irgendwie sehen das andere Leute nicht so.
Die Leidenschaft hat nicht so ausgeprägt.
Wir haben, glaube ich, mal einen Abend heute ziemlich stark gelangen.
Wir haben einen Abend heute, in dem wir sehr viel zu Terminals erzählt haben.
Ja.
Ich glaube, du warst dabei, ne?
Ich fand's gut.
Das hatten wir ja letzten Abend.
Da haben wir was mit Bildern gemacht.
Das hat natürlich den Vorteil, dass man direkt was Buntes sieht und auch die Erinnerungen direkt sieht.
Was für die Augen.
Ja.
Ein bisschen was für die Augen.
Voll die krassen Sachen gesehen, wenn man Blender machen kann.
Man kann halt diese ganzen interaktiven Grafiken generieren lassen mit, weiß ich nicht, 20 Zeilen oder so.
Ja, aber dafür müssen wir eine Ahnung von Blender haben.
Ähm, tja.
Das sah auf jeden Fall cool aus.
Ich hab mir das tatsächlich, als wir am letzten Donnerstag was mit Pillow und Bildern gemacht haben,
hab ich mir das direkt als, ähm...
Hab ich da richtig was verpasst?
Ja.
Hab ich das direkt als Anfang dafür genommen, mich ein bisschen mehr mit Pillow zu beschäftigen
und, ähm, ja, hab da jetzt ein kleines Projekt, das sich mit Steganografie beschäftigt.
Oh.
Ja, gerade so zu den höheren Leveln fehlen uns doch sinnvolle Beispiele.
Ja, das stimmt.
Ja.
Aber da kommen wir gerade ja dazu, Pillow.
Was sind eure Lieblingsmodule?
Puh.
B-Python, ganz klar.
Ähm, ja, B-Python ist ja ein Interpreter.
Ja, gut gesagt.
Aber ich stimme ja zu, B-Python ist schon ziemlich cool.
Ähm, boah, mein Lieblingsmodul.
Jetzt hat er B-Python gesagt, jetzt will ich ihn nicht einfach auch B-Python sagen.
Ähm...
Jetzt kannst du C-Python sagen.
Oh, oh, oh.
B-Python.
Ähm...
Ja.
Ähm, ähm, Weekfest finde ich ziemlich cool, weil man damit sehr einfach, äh, halt Netzwerk
machen kann.
Gerade auch so, wenn Leute irgendwie, es gab Leute, die hatten irgendwie so eine, so eine
Comic-Seite oder so, und da wollten die irgendwie eine Benachrichtigung haben, wenn es einen
neuen gibt oder sowas.
Also gerade so, so Projekte, die eigentlich einfach sind, aber dann doch irgendwie überraschend
sind, gehen aber ziemlich schnell.
Ähm...
Ich glaube, ich, ähm, Waypy, das wäre schon, ähm, das finde ich cool.
Weil es bringt Farbe ins Terminal und besteht nur aus 56 Zeilen Code oder so.
Also, hm, das ist für mich ein schönes Beispiel, wie man sehr einfach ein, klar, das ist jetzt
auch nicht so das große Werkzeug, aber es bringt doch einen großen, ein großes Plus
an Usability und, ähm, dafür 56 Zeilen finde ich echt gut.
Vor allem, der Großteil davon ist einfach nur ein Dictionary.
Ähm, dann, was ich noch gut finde, ist Parflip.
Oh, ja.
Einfach, weil, wenn ich sehe, wie man vorher mit OS.par...
Ja, ja, damals nicht.
...Dateien, äh, mit Dateien gearbeitet hat und wie einfacher, wie viel einfacher das
jetzt mit Parflip geht, ähm, aber das ist ja kein, kein, also, ich meine, das ist ja
Teil...
Das ist Standard, Standard-Bibliothek, ja.
Aber, ja, ich meine, auch da gibt es ja viel zu viele Dinge, die eigentlich cool sind,
die zu wenig bekannt sind und so.
Ja, ja.
Ja.
Aber das finde ich, äh, ja.
Jochen, was ist dein, äh, dein Lieblingsmodul?
Huh, mein Lieblingsmodul?
Oh je, äh, ich weiß nicht.
Hm, äh, ich glaube, Lieblings, na ja, was, was könnte, äh, äh, ich hätte jetzt auch
gar nicht, gar nicht wirklich drüber nachgedacht.
Also, ähm, was ich letztens gesehen habe, was ich ganz cool fand, äh, was ich noch
nicht kannte, war SQL-Path.
Was so?
Äh, womit man, also, äh, SQL-Statements, die man ja, also, wenn man jetzt zum Beispiel
so, äh, ORM verwendet und dann fällt da so ein Statement bei raus und man guckt sich
ja dann manchmal an, weil irgendwie ein Statement ist langsam oder irgendwas, was man mit dem
ORM macht, ist langsam und dann, äh, äh, bei Django kann man halt einfach sagen, irgendwie
man das Query-Set hat, Query-Set.query und dann spuckt das Ding das SQL-Statement aus,
allerdings dann halt so als langen String, was, äh, äh, relativ unleserlich ist und,
äh, mit SQL-Path kann man halt einfach sagen, okay, formatier mir das mal neu, äh, indentiere
das alles und dann sieht das halt nach einem hübsch, äh, formatierten SQL-Statement
aus und dann sieht man halt auch, was passiert und, ähm, genau, dafür, äh, hab ich das
letztens verwendet und fand das sehr praktisch, dass es sowas gibt, ja, ähm, hm, tja, weiß
nicht, was, äh, was hättest du denn so an, an Python-Modulen oder so?
So viel hab ich jetzt doch gar nicht durch, aber ich finde Kiwi ganz witzig irgendwie.
Kiwi, ah.
Weil das auch direkt irgendwie so Touch bietet für so kleinen Unsinn und, ich meine, wenn
man jetzt nicht total die aufwendigen GUIs bauen will, da relativ einfach ganz witzige
Lösungen hinbekommen.
Ähm, ja, was mir da, ah, was mir noch einfällt, genau, ähm, ich weiß nicht, ob wir das schon
mal hatten, Pythonista ist ziemlich, ziemlich cool, äh, das ist so eine, ähm, das ist
tatsächlich ein Python-Interpreter auf, äh, iOS, äh, keine Ahnung, wie das Ding durch
den App-Store gekommen ist, das, äh, das kann eigentlich nicht mit rechten Dingen
zugegangen sein irgendwie, aber, äh, das ist tatsächlich, äh, irgendwie vollständiges
Python 3.6, äh, und, ähm, tatsächlich, wenn also jemand mit einem, äh, gut, das kostet
Geld, das kostet Geld.
Das kostet irgendwie ein paar Euro, aber, ähm, das ist wirklich, wirklich ganz toll,
hat auch eine schöne IDE dabei, äh, also wenn man jetzt irgendwie ein, ein iPhone hat
oder ein iPad und eine Bluetooth-Tastatur, dann könnte man auch tatsächlich, äh, wahrscheinlich
irgendwie Python-Fu, äh, mit, äh, damit teilnehmen, was man jetzt gar nicht so erwarten würde,
weil eigentlich ja iOS, äh, irgendwie auf, auf Objective-C, äh, äh, C++ und C und, äh,
das gibt's dann auch, Swift, äh, irgendwie beschränkt ist.
Aber, äh, genau, und was halt auch sehr schön, äh, ist, ist, dass man da viel Zugriff
hat auf, äh, die APIs, also man kann halt, äh, also wenn man, man kann auf die Fotos
zugreifen, Location-API, man kann Grafisch-Geschichten machen und, äh, das Ding nutzt halt auch
die nativen Widgets, ähm, von, von, äh, iOS, sodass das halt auch alles, äh, so jedenfalls
von den Animationen her und so schnell ist und, ähm, ich hab's halt mal benutzt, um
so ein, so ein Sharing-Dings, äh, äh, so ein, so ein, so ein Dings in ein Share-Sheet
reinzubauen, sodass man, wenn man im Browser sagt, äh, äh,
ein, ein URL teilen, dass ich das halt dann in meinen Bookmark, äh, Service, äh, irgendwie
reinpipen kann, äh, genau, und dann die ganze Bearbeitung, also das Sprechen mit der
REST-API oder so, das macht dann halt alles irgendwie Pythonista oder ein Skript, das
halt dann von Pythonista ausgeführt wird.
Joa, das ist auch ziemlich cool, wenn man das nicht kennt und iOS irgendwie pipen machen
möchte, dann ist das, glaub ich, ganz hilfreich.
Ja, sowas ähnliches gibt's auch für Android, ähm, Thermos, das ist...
Sogar mit Paketmanagement, allem drohen dran.
Genau, also es bietet halt sehr viele Möglichkeiten, auch mit Android selber zu interagieren, also
irgendwie, äh, weiß ich nicht, äh, Kontakte, SMS senden oder sowas, ähm, und es läuft
halt auch beidendrauf, also es kommt halt mit einem Paket-Repo von sehr vieler Software
und es ist halt eigentlich alles so in Sprachen dabei, die man haben wollen würde, also
irgendwie ein C-Compiler, Go-Compiler, Rust-Compiler, äh, was nicht so wirklich gut läuft, ist
leider Java, was bei Android ein bisschen komisch ist eigentlich, ähm, aber ansonsten,
ja, unter anderem auch Python.
Also, was ich auch noch tatsächlich cool finde, ist das GPIO, also auch dem Respy oder
sowas, das ist natürlich ein Zufall, weil man da ganz viele coole, einfache Sachen machen
kann, die man auch super schön zeigen kann, also einfach jetzt ein paar Pinne ansteuern
und so Lämpchen zum Leuchten bringen, das kriegt auch jedes Kind hin und man hat da
direkt was, was man sehen kann, das ist irgendwie immer schön.
Generell kann man auch sagen, dass die Python-Standard-Library sehr viele, sehr coole Module enthält.
DISS finde ich extrem cool, weil ich mich immer dafür interessiere, wie funktioniert
sowas eigentlich und mit DISS kann ich mir halt den Python-Byte-Code für eine Funktion
anzeigen lassen und es ist halt nicht nur einfach die Byte, sondern es hat auch wirklich
die Namen, die Instruktionen, die Parameter daneben und so und das ist schon ziemlich
cool.
Also generell ist die Standard-Library ja so umfangreich, dass wir bei den Anfängern
größtenteils nur die Standard-Library benutzen müssen.
Das sind halt auch so Sachen dabei, wo man sich denkt, warum ist das jetzt eigentlich
in der Standard-Library?
Und andere Sachen nicht.
Ja, das ist manchmal ein bisschen komisch.
Zum Beispiel IMG-HDR, das kann dir ja von einer Bilddatei sagen, welches Dateiformat
das ist.
Mhm.
Quasi so ein Pfeil-ähnliches Ding, das muss in der Python-Standard-Library eingebaut
werden, habe ich mir gedacht.
Warum?
Aber naja, das ist ganz praktisch manchmal.
Ja, ja.
Oder WAV ist es auch als Codec da drin.
Ja.
Ja, da gibt es andere Bereiche, in denen gibt es dann irgendwie drei Module, die irgendwie
das Gleiche nur auf unterschiedliche Art tun.
Urlib, Urlib 2 oder 3.
Einfach Request nehmen.
Und Request gibt es nicht in der Standard-Bibliothek und so.
Und das ist schon so ein bisschen...
Also Request ist auch so das eine Ding, wo ich mir wünschen würde, dass es in der
Standard-Bibliothek wäre.
Schreibt uns auf jeden Fall eure Lieblingsmodule.
Ja, wobei, was mich an Request halt noch so ein bisschen...
Also ich meine, das ist von der Benutzung her...
Ich meine, das ist ja auch der Anspruch irgendwie.
Das ist ja halt HTTP for Humans.
Wenn man das jetzt als Entwickler-Anwender benutzt, ist das halt sehr praktisch.
Aber wenn man jetzt zum Beispiel viele HTTP-Requests...
machen möchte oder so, dann ist das halt auch schon nicht mehr so toll, weil das ist
halt nicht asynchron.
Also man hat Multiplex halt sozusagen I.O. nicht wirklich.
Kann das dann eventuell machen, indem man halt Threads verwendet oder so.
Aber so von sich aus kann das das halt nicht.
Und dann gibt es halt vielleicht auch, wenn man das halt noch nicht kennt,
A.I.O.
HTTP ist, glaube ich, die Bibliothek oder das Projekt.
Ich weiß nicht so genau.
A.I.O. HTTP.
A.I.O. HTTP.
Und da gibt es einen Server drin und es gibt halt auch einen Client.
Und der basiert halt auf Async.io und das ist halt richtig schnell.
Und da kann man halt auch mal...
Da gibt es auch ein schönes Beispiel.
Das hat...
Da gibt es einen Artikel von...
Ich habe jetzt den einen Namen vergessen, aber Guido von Rassum ist der andere Autor.
Und die beschreiben halt so, wie kann man mal so eine Million Webseiten,
Millionen Requests machen irgendwie schnell.
Und das ist ein sehr nettes Ding.
Und...
So.
Ja.
Also ich würde sagen, viel gehört dazu, was wir...
Ja, wie man anfangen kann, wie man vielleicht weitermachen kann,
welche Probleme so am Anfang auftauchen, wie man die so ein bisschen umschifft.
Also wenn ihr in Düsseldorf unter den Regierungen seid, dann kommt doch einfach vorbei, ne?
Genau.
Ja, einfach so.
Ich glaube, nicht nur donnerstags sind da ein paar Jungs immer da.
Ja.
Ich sage, es ist halt jede Woche.
Ja.
Also nicht unbedingt mit uns, aber ja.
Da gibt es auch andere coole Menschen.
Ja.
Sehr gut.
Ja, wenn ihr irgendwas antragen wollt, nochmal event, wieder euer Feedback, Kommentare an hallo-podcast.de.
Ja, schön, dass wir wieder eingeschaltet haben.
Genau.
Und dann versuchen wir mal irgendwie die nächste Sendung etwas zeitnah hinzukriegen, aber das...
Ja, wir hatten eigentlich schon etwas vorbereitet, aber das hat nicht so gut geklappt.
Ja, dann müssen wir nochmal dran.
Datenbanken, wir können ja schon mal das Thema verraten.
Ja.
Haben wir uns eigentlich auch die Frage da geschrieben.
Wer hat eigentlich...
Wie hat man die Model-View-Controller erfunden?
You have to.
Okay.
Bis zum nächsten Mal.
Alles klar.
Tschüss.
Tschüss.