Transcript: PP01 - Die erste Sendung

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Ja, hallo liebe Hörerinnen und Hörer. Willkommen beim Python-Podcast. Allererste Folge, allererste Episode.

Wir wollen euch heute ein bisschen fügen und folgende Fragen beantworten. Was machen wir eigentlich und warum?

Wie finde ich einen Einstieg in Python? Also, wenn ich Anfänger bin, wie kann ich damit anfangen?

Und geben ein paar Anfängertipps. Und dann wollen wir noch ein bisschen erklären, wie Python funktioniert.

Ein paar Mythen über Python klären und so weiter.

Wenn ihr Fragen, Anmerkungen zu dem Podcast habt, Kommentare, alles was gut ist, was schlecht ist, dann sendet doch einfach eine E-Mail an hallo-at-python-podcast.de

Und ja, Links und zusätzliche Shownotes zur Sendung findet ihr natürlich in den Shownotes.

Ja, was machen wir eigentlich? Kleine Einführung?

Ja, genau. Vielleicht können wir uns einfach kurz vorstellen oder so.

Ja, also wir sind auf jeden Fall aus Düsseldorf, aus dem wunderschönen Wintergarten von Jochen, den ihr gerade kurz gehört habt.

Ja.

Wer sind wir denn? Hallo Jochen.

Hallo Dominik, genau.

Mein Name ist Jochen, der die wirklich wunderschöne Anmoderation gerade kam von Dominik.

Und genau, ja, wir benutzen beide Python und ich höre auch sehr viele Podcasts.

Und im englischsprachigen Raum gibt es da durchaus einige ganz gute Podcasts, die man da hören kann.

Aber ja, zur deutschsprachigen gab es immer mal wieder Versuche, aber letztlich momentan, soweit ich weiß, jedenfalls kein.

Der kontinuierlich aktualisiert wird.

Und ja, da dachte ich, na gut, wenn es niemand macht, dann kann man das ja vielleicht einfach selbst mal probieren.

Und ja, dann habe ich mich so ein bisschen herumgefragt, ob es Leute gibt, die das vielleicht auch gerne machen würden.

Und ja, so sind wir dann zusammengekommen.

Und ja.

Wie kamst du zu Python, Jochen?

Ja, das ist jetzt auch schon eine Weile her.

Irgendwann so 2000, Anfang der Nullerjahre sozusagen.

Ich war ursprünglich da eher so auf der Perl-Seite und dann war aber die, ich habe damals bei Web.de gearbeitet und die Firmensprache da war dann halt aber Python.

Und dann wurde mir nahegelegt, die Dinge, die ich da gemacht habe, irgendwie doch eher in Python zu machen als in Perl.

Und dann habe ich das erst so ein bisschen so gedacht, na gut, ob ich das wirklich toll finde.

Aber relativ schnell war ich da ziemlich begeistert von Python und mache seitdem eigentlich nur noch Python und kein Perl mehr.

Du bist schon ein ziemlich alter Hase.

Ja, das muss man so sagen.

Ja, alter Sack.

Genau, und ja, in unterschiedlichen Bereichen habe ich das jetzt schon so verwendet.

Und daher, ja, denke ich, ist es vielleicht auch ganz, kann ich da auch so ein bisschen was zu erzählen, was man mit Python alles machen kann.

Ja, deswegen bist du da, Jochen.

Also ich gehe davon aus, dass du mir alles erklären kannst, was ich an tollen Fragen habe.

Ich möchte nämlich noch jede Menge wissen.

Genau, und wie bist du zu Python gekommen?

Ja, ich bin ein türmischer Rookie noch.

Ich bin jetzt insgesamt...

Ich war anderthalb Jahre irgendwie bei Python dabei und interessiere mich vor allem für, ach, vielleicht ein paar Buzzwords, Data Science und Digitalisierung, was man damit so machen kann.

Ich habe zwar auch schon damals in der Schule angefangen mit ein bisschen Programmieren und war seit 96 in der Internet-AG.

Das war damals ganz besonders fancy und habe Webseiten da gebastelt und so ein Krams.

Habe dann aber einen ziemlich längeren Umweg gemacht über die Volkswirtschaftslehre, bis ich dann tatsächlich vor anderthalb Jahren mich dazu entschlossen habe, irgendwie nochmal einen ganz neuen Weg zu gehen.

Ein Umdrehen von vorne beginnen.

Und das zu tun, was mir wirklich am Herzen liegt.

Eigentlich wollte ich nur ein paar Daten analysieren.

Und ich bin dann über ein Python-Tutorial gestolpert.

Ja.

Und nach ungefähr 20 Minuten hat es mich dann irgendwie ziemlich vom Hocker gehauen und erwischt.

Und ich wusste, dass es genau das ist, was ich in Zukunft machen will.

Und so bin ich bei Python gelandet.

Ja, von einfach mal nur ein paar Daten analysieren zu, ja, neue berufliche quasi Herausforderungen.

Da klopft jemand an die Tür.

Das ist halt ein Spielzeug in der Hand.

Mhm.

Okay.

Nun gut, ich hoffe, das stört nicht so weiter.

Ja, das ist auf jeden Fall ein schneller Einstieg gewesen, als wenn das nach 20 Minuten schon geschnackelt hat.

Wäre jetzt ein bisschen länger gedauert, aber ja, das ist auf jeden Fall eine gute Sache, glaube ich.

Das war wirklich so.

Ich kam da rein, habe den ersten Code geschrieben und habe gedacht, ja, genau, das wollte ich dann machen.

Stimmt.

Hammer.

Also das liegt bestimmt auch vielleicht an der Einfachheit der Sprache, aber da kommen wir vielleicht ein bisschen später zu.

Was für Features?

Was für Features Python alle hat?

Ja, vielleicht fangen wir nochmal an.

Warum machen wir das eigentlich?

Für wen ist denn dieser Podcast genau?

Was glaubst du?

Für eigentlich jede, die sich für Python interessiert, oder?

Ja, ich denke schon.

Also das ist halt auch so ein Ding, dass Python momentan halt sehr viel an Popularität gewinnt.

Also ich meine, das hat es schon immer getan.

Also es war schon immer recht populär, aber in letzter Zeit gerade eben über Data Science und verwandte Themen,

Machine Learning, Deep Learning.

Und Dinge, die halt auch sonst sehr stark gehypt werden, ist Python halt sehr, sehr groß geworden.

Und mittlerweile hat es halt irgendwie Ausmaße angenommen, die dazu führen, dass es jetzt eine ganze Menge Leute gibt,

die das gerne lernen würden oder sich dafür interessieren.

Aber wenig Angebote sozusagen, diese ganzen Leute irgendwie abzuholen.

Und ich denke, da können wir auf jeden Fall eine Menge Hörer ansprechen, sozusagen.

Und aber ich würde das nicht unbedingt auf Anfänger beschränken, sondern einfach mal so quer durch alle größeren Themen oder so, die es gibt.

Wir hatten uns ja auch schon so ein bisschen Gedanken zugemacht, was man da alles mal,

worüber man, über welche Dinge man mal so eine Sendung machen könnte.

Und da haben wir auf jeden Fall genug Stoff zu senden.

Und da können wir auch gerne mal so richtig fies ins Detail gehen.

Ja, genau. Also ich glaube, bevor wir euch erzählen, was wir heute denn genau so machen,

wir haben ja einen kleinen Einstieg schon gegeben, gibt es tatsächlich diese ganzen vielfältigen Themen in Python.

Und wir wollen jetzt tatsächlich in mehreren Episoden euch das ganz Interessante mal so ein bisschen berichten.

Über Django, über Datenbanken, über Python Performance, über Machine Learning und ein bisschen Data Science,

MicroPython, es gibt ziemlich einiges, was wir jetzt hier auf dem Zettel haben.

Können also auch ein bisschen gespannt sein, was wir so machen.

Ja, was machen wir heute? Das ist der Einstieg in Python.

Genau, einfach mal so eine Übersicht.

Genau, und dazu haben wir vielleicht erst mal ein paar kleine Fakten über die Geschichte.

Dann kann Jochen bestimmt noch viel mehr zu erzählen als ich.

Aber soweit ich weiß, hat Guido van Rossum die Sprache entwickelt in den frühen 90ern.

Und zwar aus Amsterdam, das herausentwickelt.

Ja, also ist schon gute, wie lange?

Fast 30 Jahre halt, würde man gar nicht denken.

Python 3, das wir alle nutzen, ist seit 2008.

Und falls irgendwelche Nachfragen kommen, ja, wir finden nur noch Python 3.

Ich glaube, das hat sich mittlerweile so eingebürgert.

Die neueste Version ist jetzt erst im Oktober erschienen, 3.7.1.

Und für nächsten Herbst ist, glaube ich, 3.8. geplant.

Also wir sind im Jahr 2018 für alle Menschen, die das irgendwann später...

Ja, also Jochen, im Laufe der Jahre hat sich ziemlich viel getan in der Sprache, oder?

Ja, wobei erstaunlich viele Dinge auch recht ähnlich geblieben sind.

Also ich meine, das ist halt auch möglicherweise einer der Unterschiede zu Sprachen wie...

Jetzt nehmen wir mal JavaScript oder so, wo sich halt in letzter Zeit sehr viel getan hat.

Und man dann immer...

Also ich mache in letzter Zeit auch irgendwie ganz schön viel JavaScript.

Und oft muss ich dann, wenn ich jetzt irgendwas mache...

So, wie iteriert man denn jetzt nochmal über irgendwie quasi die Keys und die Values irgendwie in einem Hash oder so?

Wenn man danach guckt, dann findet man halt...

Zu jedem Jahr quasi und zu jeder neuen ECMAScript-Version eine andere Art, wie man das am besten jetzt tun sollte.

Und da ist Python eigentlich sehr, sehr stabil geblieben.

Das ist heute noch...

Ja gut, an der Stelle hat sich auch tatsächlich was geändert, aber sehr moderat und mehr oder weniger so vorschleifend.

Das ist halt von Anfang an so, wie es jetzt heute auch noch ist.

Also es hat sich seit 30 Jahren im Grunde nicht großartig geändert.

Wobei es da auch nicht so wirklich Bedarf gibt für eine Änderung, weil es war einfach von Anfang an...

Aber Antupa implementiert.

Ja, ich glaube, ja genau, 1991 ist das irgendwie gestartet.

Und ich weiß gar nicht, ob ich da so wahnsinnig viel zu erzählen kann, weil damals war ich auch noch nicht dabei.

Das habe ich auch alles nicht so richtig auf dem Schirm, was da passiert ist.

Ich habe irgendwann angefangen...

Also die erste Python-Version, an die ich mich erinnern kann, mit der ich irgendwie Dinge gemacht habe, war so, glaube ich, 1.5.2 oder so.

Das muss irgendwann Ende der 90er gewesen sein.

Da habe ich aber kaum mit Python...

Also da habe ich nicht wirklich Python gemacht, um Python zu programmieren,

sondern habe es halt verwendet in irgendwelchen Skripten und so.

Oder irgendwelche Skripte angefasst.

Und dann später so wirklich angefangen, damit größere Dinge zu programmieren, habe ich dann mit Python 2.1 oder so.

Das war die Version, in der ich die erste größere Geschichte geschrieben habe.

Was würdest du sagen, war so der größte Unterschied zu heute?

Der Umfang der Standardbibliothek?

Ja, natürlich, da ist einiges dazugekommen.

Aber das ist gar nicht so...

Ja, so was halt...

Ja, so diverse Sprachfeatures, also Generatoren, ich glaube, die kamen irgendwie mit 2.2 oder so.

Das ist heute doch etwas, was man viel mehr benutzt, als man es damals getan hat.

Überhaupt, ja, diverse Keywords, Yield, aber...

Ja, das stimmt, aber das ist auch schon relativ lange da.

Also ich weiß nicht, wann 2.2 rauskam.

Müsste irgendwann 2002, 2003 irgendwann gewesen sein oder so.

Was heute eine große Rolle spielt, und damals war das halt alles noch gar nicht da, ist alles, was irgendwie mit AsyncIO oder irgendwie, ja...

Wann kam das anfangen? Version 3, FHRs, oder von 2?

Nee, nee, die Syntax dafür, also das ist jetzt erst in 3.5, glaube ich, mit dazugekommen.

Und da hat sich auch noch was zu 3.6 geändert.

Gab es da vorher ein externes Modul für?

Ja, es gab schon immer irgendwie externe Module, mit denen man solche Dinge machen konnte, sowas wie Twisted oder G-Event.

Habe ich auch eine ganze Zeit lang verwendet.

Ist auch toll, aber das Problem ist, dass man, ja, quasi, wenn man dann auf eine dieser Bibliotheken aufsetzt, halt in seiner eigenen Welt mehr oder weniger gefangen ist.

Und wenn jetzt jemand anders was geschrieben hat, das auf Twisted, weil ganz viele Leute haben Twisted halt als Basisbibliothek für ihre Netzwerkkram benutzt.

Aber man kann das dann halt nicht einfach so verwenden, weil wenn man jetzt selber auf was anderem aufsetzt, dann geht das halt alles nicht.

Und das war kein so wirklich schöner Zustand.

Es war auch nicht total furchtbar, das ging alles.

Und man konnte...

Also irgendwie mit Threads konnte man auch eigentlich quasi das schon immer machen.

Irgendwie so IOMultiplexen, das ist halt das, was man vor allen Dingen macht, wenn man jetzt irgendwie quasi so asynchronen Dinge tun will.

Aber so wirklich schön war das alles nie.

Und jetzt inzwischen gibt es da halt eine nette Syntaxführer und das ist eigentlich ganz toll und das machen ganz viele.

Und genau, das war damals alles noch ganz weit entfernt.

Achso, auch damals, was dazugekommen ist, Newstyle-Classes.

Was?

Newstyle-Classes.

Newstyle-Classes.

Genau, die Klassen waren etwas anders davor.

Ja genau, jetzt müsste ich noch nachlesen, was da genau die Unterschiede waren.

Ich glaube, eigentlich weiß ich nur, dass man halt quasi dann immer nicht Doppelpunkt, also Lehrzeichen, Klassen-Name, Doppelpunkt geschrieben hat.

Sondern irgendwie die ganze Zeit lang hat man immer...

Auf Object geschrieben, damit es halt von Object erbt und man Newstyle-Classes automatisch verwendet.

Was man jetzt halt auch schon eine ganze Zeit lang nicht mehr tun muss.

Von jeder Klasse automatisch von Object dann, oder?

Ja, genau.

Und dann gibt es natürlich noch diverse Meta-Programmierungsgeschichten, Meta-Classes und so.

Ich weiß gar nicht, wann die dazugekommen sind.

Das gab es, glaube ich, am Anfang auch nicht.

Ja, dann...

Achso, auch eine neue Syntax, die sehr praktisch ist.

Das ist halt so...

So...

Also es gibt List Comprehensions, glaube ich.

Das gab es auch nicht, seit wann?

Die gab es bei 1.5 noch nicht.

Es gab es bei 2.1, sind die, glaube ich, dazugekommen.

Also jedenfalls, als ich angefangen habe, war das so, das war so eine neue Geschichte, die dazugekommen ist.

Dann kam, glaube ich, mit...

Dann weiß ich ja nicht, wann die Generator-Expressions dazukamen, wo man halt nicht eine List Comprehension hat, sondern dann quasi runde Klammern schreibt und dann das Ganze in Generator ist.

Das könnte sein, dass das erst mit 2-4 war oder so.

Und jetzt gibt es auch irgendwie so...

Syntax für Dict-mäßige Objekte.

Also man kann halt auch geschweifelt Klammer auf und dann V, K, V in irgendein Dict.items sagen.

Und dann würde sich...

Also kann man sich seine Diction erst generieren.

Ja, genau.

Und muss dafür nicht extra irgendwie nochmal Dict aufrufen oder so.

Ja, das ist jetzt...

Das ist aber dann relativ spät dazugekommen.

Ich glaube, es ist erst mit Python 2, 3 oder...

Äh, Python 3 dazu.

Äh, äh...

Dazu gekommen jetzt.

Wofür nützt man denn jetzt eigentlich Python heute?

Ja.

Insgesamt.

Vielleicht machen wir das nochmal als Frage für unsere Hörer, die das so genau wissen wollen.

Äh, genau.

Also am Anfang war es vor allen Dingen eine Skript-Sprache zum Verbinden von irgendwelchen Systemen.

Man hat das halt so...

Ja, man nennt die Dinge auch Glue-Languages und so, weil man halt...

Weil es schön einfach ist, diverse andere, ja, in anderen Sprachen programmierte Libraries anzubinden und die dann halt irgendwie miteinander zusammenzubinden.

Also verschiedene Server-Module mit Python-Kleis dazu geklebt.

Ja, irgendwie sowas wie, man hat ImageMagick oder so eine Bibliothek, die jetzt auf Bildern irgendwas macht und hat dann halt irgendwelche Bindings, die das in Python verfügbar machen.

Und dann hat man irgendwie eine Bibliothek, die irgendwie Mails macht oder dann kann man irgendwie E-Mails mit Bildern oder so dann irgendwie verknusteln und dann irgendwie...

Ja, E-Mails mit Bildern drin verschicken oder sowas.

Und solche Sachen hat man halt in Python vor allen Dingen gemacht.

Okay, da hat man halt ein Bild in der Hand und man hat einmal ein E-Mail in der Hand und Python gibt dann den Kleber, dass man ein E-Mail mit Bild...

Genau, ansonsten wenn man jetzt, keine Ahnung, irgendeine Bibliothek hat, die in Zyklospos geschrieben ist oder so, wenn man da jetzt irgendwie E-Mail-Support einbauen will oder irgendwie eine andere Bibliothek, die mal was anderes geschrieben ist, die einbinden will, das ist halt sehr schwierig.

Und mit Python kann man das alles sehr schön integrieren.

Also für sowas hat man es vor allen Dingen verwendet, aber auch für Web-Entwicklung von Anfang an.

Eigentlich schon, soweit ich weiß...

Welche Frameworks haben wir da groß? Also ich kenne jetzt zum Beispiel Flask, habe ich in einem Doktor gelehnt, und natürlich Django.

Ja, die kamen allerdings sehr viel später.

Also, sagen wir mal so, es wurde halt auch als CGI verwendet.

Als was?

Es gab es ganz früher, das ist schon fast ein bisschen Opa als Held vom Krieg-Sektion.

Ja, das ist ja deswegen natürlich hier.

Es gab das Common Gateway Interface.

Das war halt eine...

...Methode, wie Web-Server sozusagen Skripte aufrufen konnten, die dann irgendwie...

Also, am Anfang gab es nur...

Am Anfang waren statische Seiten, wo halt ein Web-Server irgendwie eine Datei ausgeliefert hat.

HTML pur.

Ja, und das ist aber ein bisschen wenig, wenn man jetzt also sowas hat wie eine Webseite mit einem Gästebuch.

Sowas gibt es heute auch alles nicht mehr, aber damals war das halt so.

Da musste man das haben.

Da musste man irgendwie einen Encounter haben, der irgendwie...

Da hat er sein Gästebuch rum und rein.

Ich war bei dir im Internet.

Genau.

Ich habe da was reingeschrieben.

Ich habe es benutzt.

Ja, und das geht natürlich mit statischen Seiten irgendwie nicht.

Also, wenn ich jetzt so ein Gästebuch habe und ich habe da ein Feld, wo ich irgendwas eingeben kann

und dann soll das halt irgendwo gespeichert werden, dann muss sozusagen der Text, der

in dieses Feld geschrieben wurde, irgendwie durch ein Skript durch und das muss das irgendwo

hinschreiben.

Und damit solche dynamischen Sachen gehen, gibt es halt dieses, damit quasi irgendwie

der Web-Server mit einem Skript kommunizieren kann, dass man halt irgendwie diesen Kram,

liest und wegschreibt, gibt es halt das Common-Gateway-Interface und das hat das dann so gemacht, es hat dann halt das Skript gestartet,

also weggeforkt und dann irgendwie da per Umgebungsvariablen irgendwie die Daten übertragen.

Das geht, aber es ist halt furchtbar langsam und alles nicht so richtig schön.

Aber so war das damals.

Und da, ich erinnere mich auch, dass man da durchaus Python-Skripte, also meistens hat man Perl verwendet,

aber das ging auch mit Python schon, hatte halt so ein bisschen das Problem, dass die meisten Hoster irgendwie kein Python-Instant haben.

Und deswegen man keine Python-Skripte als CGI-Skripte irgendwie da angeben konnte, aber...

Selbst musste man selber hosten, wenn man Python...

Ja, ja, genau, genau. Insofern war das halt nicht so populär.

Ja, die ganzen anderen Geschichten, das kam alles viel, viel, viel später.

Was war denn so das erste Framework, was so mit hochkam, wo man die ersten Seiten vernünftig mit...

Das gab es für Python, gab es da eigentlich fast nichts.

Also es gab, also da gab es eigentlich nur PHP, also da gab es ModPython.

PHP für den Apache.

Es gab auch einen ModPython, aber das war ziemlich furchtbar, das habe ich mal versucht zu verwenden,

oder ich habe es sogar eine ganze Zeit lang verwendet, aber das war alles ziemlich scheußlich.

Hatte MemoryLeaks, war alles irgendwie ätzend, da waren so komische Sachen passiert.

Also MemoryLeaks heißt dann, der Server stellt ab, wenn den Leute benutzen einfach, wenn die Leute auf dem Server sind.

Ja, man braucht immer mehr Speicher, man weiß nicht genau warum, und dann irgendwann ist er halt weg,

und dann muss man halt nachgucken, was da schiefgelaufen ist, und das ist nicht so schön.

Das ModPython war auch nicht so toll, aber das hat halt so schon irgendwie ganz gut funktioniert.

Ja, das war so die, auch die Anfang der Nullerjahre war so die große Zeit des sogenannten LAMP-Stacks,

so Linux, Apache, MySQL.

PHP?

PHP, genau.

Und das hat so halbwegs funktioniert.

Und ja, Python haben zwar Leute auch quasi als Web-Anwendung verwendet, aber dann immer,

ach doch jetzt, das Erste, was Leute tatsächlich da in Python gebaut haben,

war Soap.

Soap.

Ja, oder Soapy, ich weiß gar nicht genau, wie man das ausspricht.

Da gibt es das noch.

Das gibt es bis heute, und das ist bis heute irgendwie eine ganz tolle Community, irgendwie.

Und da gab es dann auch so ein Content-Management-System, oder irgendwie so ein Ding, was drauf aufgesetzt hat,

das nannte sich Plone.

Also daran erinnere ich mich auch, und das muss irgendwie 2004 gewesen sein,

als ich das zum ersten Mal ausprobiert habe.

Das war alles sehr nett, es war nur furchtbar langsam, aber ansonsten war es alles sehr schick.

Und ich glaube, das waren so die Ersten, die so irgendwie komplexere Web-Anwendungen in Python möglich gemacht haben.

Wie gesagt, manche Leute benutzen das bis heute.

Dieses Projekt hat ein großes Problem mit dem Umstieg von Python 2 auf Python 3.

Ich glaube, da ist noch eine ganze Menge Code nicht umgestellt.

Und ja, jetzt am 1. Januar 2020 läuft ja irgendwie der Support für Python 2 um.

Der ist ja weit, der hat ja noch Zeit.

Ja, das ist nicht mehr so wirklich viel Zeit.

Und keine Ahnung.

Also vielleicht haben sie das auch mittlerweile geschafft, dass sie da umgestiegen sind.

Aber ja, das ist ein bisschen blöd für dieses Projekt.

Ja, aber das waren so die Ersten, genau.

Und dann kam halt näher dazu, als es eine standardisierte, schöne Schnittstelle gab.

Also es gab dann diverse Schnittstellen, die auch besser funktioniert haben als CGI.

Es gab FastCGI.

FastCGI?

Ja, genau.

Das war schneller.

Das war schneller, da musste der Server das Skript nicht forken,

sondern da waren da schon so ein paar Skripte gepreforkt.

Dann konnte man das irgendwie, dann wurden die Daten da halt irgendwie per Interprozesskommunikation irgendwie hingeschoben.

Und das war alles deutlich besser.

Das ging halt dann relativ schnell.

Aber es war auch alles noch ziemlich hässlich.

Und es gibt dann, ich weiß nicht, wann das passiert ist.

Das müsste dann so Mitte der Jahrhundert gewesen sein.

Seitdem gibt es halt Whiskey sozusagen als Schnittstelle zwischen Webserver und Applikation.

Also sich das so halbwegs standardisiert hat.

Hört sich nach etwas ziemlich Holzigem zu trinken.

Ja, also wird aber W-S-G-I geschrieben.

Es wird nur lecker ausgesprochen.

Es ist nicht so lecker, wenn man es sich dann tatsächlich anguckt.

Aber genau.

Und damit ist dann eigentlich auch schon die große Zeit von Apache als Webserver irgendwie so ein bisschen vorbei.

Da tauchen dann plötzlich so andere Server auf, die man halt als Applikationsserver häufig verwendet.

Beziehungsweise man trennt dann eigentlich zwischen Applikationsservern und Web-Servern.

Wie den Servern, die halt statisch verheizt nach außen ausliefern.

Oder die so ein bisschen Reverse-Proxy halt vor den Applikationsservern sind.

Da nimmt man meistens auch nicht Apache, sondern dann sowas wie Nginx.

Oder am Anfang gab es dann LightHTTPD und so.

Und heute vielleicht, für heute nimmt man dann irgendwie sowas wie, na, wie heißt der noch?

Caddy.

Ein Google-geschriebener Webserver, der sich schön auch mit Let's Encrypt irgendwie verbindet.

Und dann hat man halt irgendwie ordentliches SSL nach draußen, irgendwie automatisch.

Man muss da nicht irgendwie, also bei Nginx, also ich habe mich dann beschäftigt, Nginx so weit zu kriegen,

dass es halt irgendwie beim Test von SSL-Labs irgendwie überall grün und okay ist.

Das hat mich irgendwie so zwei Tage gekostet und war irgendwie echt aufwendig.

Und bei Caddy geht das einfach so.

Das ist schon super.

Also den verwende ich jetzt mittlerweile auch meistens vor den Applikationsservern.

Applikationsserver sind sowas wie Junicorn, den verwende ich meistens.

Oder MewsGI oder UwesGI heißt ein anderer.

Oder Werkzeug oder da gibt es einige, die man halt verwenden kann.

Und die sind sozusagen dafür zuständig quasi, dass da drin die Applikation läuft.

Und die Requests, die halt sozusagen nur von der Applikation beantwortet werden können,

die gehen halt dann an diesen Server.

Und ja, die rufen dann halt eben quasi die Applikation mit der entsprechenden API auf.

Also ich wollte jetzt gar nicht unterbrechen.

Das finde ich auch super interessant.

Ich glaube...

Vielleicht sogar nach eigener Web-Folge.

Wir sind ja heute, das wollte ich nicht vergessen.

Ich hoffe, die Anfänger sind jetzt nicht alle schon ausgestiegen.

In der Anfänger-Folge.

Ja, ja, ja.

Da müssen wir noch ein bisschen mehr eingehen darauf, welche Funktionen man mit Python vielleicht noch machen kann.

Genau.

Also wir haben jetzt vielleicht einen kleinen Einstieg schon mal euch gegeben,

was es so an coolen Möglichkeiten heute gibt mit Python und Web-Frameworks.

Was machen wir noch?

Genau, das ist heute auch ein wichtiger Teil.

Glue ist auch noch immer ein wichtiger Teil.

Ich habe jetzt letztens...

Also...

Um vielleicht kurz Werbung zu machen für einen anderen, für einen englischsprachigen Python-Podcast.

Das war Talk Python to Me, glaube ich.

Doch, ja.

Talk Python to Me.

In der letzten Folge, da ging es um Python 3 bei Facebook.

Und da erzählt jemand, der halt Python bei Facebook irgendwie macht,

dass die ganzen Backend-Systeme, die halt irgendwelche Services machen

oder irgendwie Sachen hoch runterfahren, Sachen deployen,

das Ganze quasi Facebook...

Management, Zeugs, das ist halt alles Python.

Also Frontend ist zwar PHP, aber alles, was sozusagen Services miteinander verbindet

oder halt irgendwie interne Geschichten macht, das ist halt bei Facebook alles in Python.

Also natürlich auch YouTube ist in Python.

Ja, genau.

YouTube ist so ein bekannter...

NASA macht viele Sachen mit Python, habe ich gehört.

NASA, ja.

Wollte ich Disney-Filme produzieren und...

Ja, Pinterest auch ist, glaube ich...

Ich weiß nicht genau, ob die...

Die waren sogar Django irgendwie.

Aber auch halt Python hauptsächlich.

Instagram ist komplett Python eigentlich von der Web-Applikation her.

Also ja, es gibt auch durchaus im Frontend einige, die da Python verwenden.

Aber es ist halt im Grunde überall.

Und ja, also dieses Gluding ist auch immer noch eine sehr, sehr wichtige Geschichte.

Aber dann gibt es halt einen neuen Bereich seit einigen Jahren, der halt auch sehr, sehr populär geworden ist.

Das ist halt so ganze Data Science.

Machine Learning-Gebiet.

Daten, diese Sensor-Daten-Erfassung.

Ja, Scientific Computing, dieser ganze Bereich.

Also das, was man früher in so einem Matlab gemacht hat, würde ich sagen.

Ja, oder Mathematiker auch.

Mathematiker hat ja dieses schöne Konzept entwickelt von diesen Notebooks.

Also das kennt man vielleicht, wenn man jetzt im wissenschaftlichen Bereich ein bisschen unterwegs ist.

Weil es gibt so Labortagebücher oder so, wo man aufschreibt, was man irgendwie tut und so.

Also Python, die Jupyter-Notebooks.

Genau, die gibt es in Python.

Und bei Mathematik hatte das tatsächlich zuerst sozusagen dieses Feature, dass man halt solche Notebooks halt dann ausführen kann.

Und dann halt nachvollziehen kann, was da passiert ist, wenn man zu einem bestimmten Ergebnis gekommen ist.

Sehr, sehr gute Idee halt.

Hat sich nie so richtig durchgesetzt, weil Mathematiker ist halt proprietär und teuer.

Und ist auch eine...

Sehr exklusive Community irgendwie.

Und hat irgendwie nie so richtig abgehoben.

Obwohl es eigentlich schon eine sehr schicke Idee war.

Und dann wurde die halt aufgegriffen von den Leuten, die irgendwie so einen Interpreter...

Oder man nennt das irgendwie so...

Rappel...

Weiß gar nicht, wofür diese Abkürzung...

Also diese Shell, die man bekommt, wenn man jetzt Python eingibt.

Du meinst quasi iPython jetzt in dem Fall?

Genau, iPython.

Ja, ja.

Die haben halt sozusagen das da mit reingebaut.

Und das nennt sich dann iPython Notebook.

Also iPython hätte schon den ganzen Teil der Funktion, die man dafür braucht, wenn man sowas implementieren will.

Und iPython Notebook hat dann halt quasi sozusagen die Ideen von diesen Mathematiker-Notebooks irgendwie aufgegriffen.

Und ja, das war ein toller Erfolg.

Man hat das dann auch für andere Sprachen gemacht.

Für R und für Julia.

Und dann war irgendwie klar, dass iPython Notebook ein blöder Name dafür ist.

Weil wenn es halt nicht mehr Python ist, sondern auch andere Seelen, dann wurde das halt unbedingt in Jupiter.

Wobei das halt nicht

wie der Planet geschrieben wird, sondern mit PY halt wie für Python, weil es Julia, Python, R

quasi, also die drei Sprachen, die da halt hauptsächlich irgendwie

verwendet werden. Das sieht ja ganz schick aus, habe ich tatsächlich auch schon ein paar Mal gesehen, das kann man

tolle Sachen mitmachen und auch live den Code direkt testen, ausführen, was man damit macht. Genau, genau, das ist halt

super praktisch, das ist natürlich jetzt schwer, das zu umschreiben, jemanden, der

das nicht kennt, quasi, warum das toll ist,

es ist halt nur so, gerade bei so... Naja, stellt euch vor, ihr könnt ein Buch lesen

und habt ja irgendeine statistische Tabelle, die ihr anguckt und ihr könnt live da

die Daten eintragen, ändern und auch im Schaubild verändert sich direkt mit den neuen

Datensätzen das, was ihr da braucht, was ihr programmiert habt, der Algorithmus, um

das darzustellen, könnt ihr direkt live sehen, was da passiert. Ja, das ist eine der schönen

Geschichten, aber was für mich vor allen Dingen, also ich mache auch viel

Data Science Geschichten, dass das für mich sozusagen das

Top

Feature ist, ist halt irgendwie, so viele der Schritte brauchen eine Menge Zeit, also

wenn man große Datenmengen hat oder so, kann es sein, dass manchmal, wenn man irgendwas macht,

dauert das halt eine Stunde, sozusagen, und dann hat man ein Ergebnis,

irgendeine Berechnung, genau, die man macht, und man trainiert irgendein Modell

oder so, und das rechnet dann halt irgendwie so eine Stunde vor sich hin, und wenn man das jetzt alles in einem

Skript hat, so wie man das normalerweise hat, dann hat man irgendwie so, okay, man erzeugt dieses Modell, dann

macht man da irgendwelche Evaluationen drauf, dann visualisiert man das Ganze, dann macht man da

irgendwelche Tests oder einen möglichen Tragen.

Die ganze Arbeitsschrittkette durchgehen, bis man wieder an dem Punkt ist, den man gerade geändert hat.

Genau, man kann das natürlich dann irgendwie schlau cachen, das habe ich früher dann so gemacht,

da habe ich dann irgendwie Dekoratoren benutzt, die dann halt den Kram immer

irgendwo hingeschrieben haben in ein Verzeichnis, und dann sozusagen immer wieder

nur die Arrays, die dabei entstehen, halt wieder zurück, aber das ist halt

alles nicht so, also das kann man machen, aber diesen Aufwand treibt man auch nur

dann, wenn man sich sicher ist, dass man das wirklich braucht und dann verändern will,

und jetzt möchte man halt am Schluss dieser Kette, die halt irgendwas erzeugt, irgendwie eine Funktion

schreiben, die irgendwas mit den Daten macht, und dann baut man da einen blöden Fehler rein oder so,

und das passiert einem tatsächlich, wenn man, wenn man, wenn man das jetzt so, wie ich das auch

früher gemacht habe, passiert einem das relativ häufig, dass man dann halt den Fall hat, dass

irgendwie, es geht irgendwas schief, man sieht einen Trace weg und denkt sich schon so, oh nein,

was für ein blöder Fehler, und das Ergebnis von irgendwie einer Stundeberechnung oder so ist weg,

und man muss halt im Grunde nochmal eine Stunde warten, also selbst wenn man nur ein paar Minuten

warten muss, ist es halt voll blöd, weil es diesen, man ändert irgendwas, probiert es aus, Zyklus

aus, wenn, wenn, wenn, wenn da viel Latenz drin ist, dann wird man sehr langsam, und dieses Problem

löst Jupyter eigentlich, lösen die Jupyter-Notebooks komplett, weil da ist es halt so, dass man jede

Zelle getrennt ausführen kann, und wenn man jetzt eine Funktion geschrieben hat, die einen Fehler

enthält, und führt die halt aus auf den Daten, die man jetzt da irgendwie eine Stunde lang berechnet

hat, und es geht schief, dann ändert man die Funktion, führt sie nochmal aus, und alles ist

gut, weil, und das Ergebnis ist halt nicht weg, und das ist halt, das ist halt super.

Wenn man sowas arbeiten möchte, ist das, glaube ich, genau, und das, das, das macht einen halt viel, viel schneller,

und das ist, das ist halt total toll.

Also ist das auch für Anfänger sehr gut geeignet, würdest du sagen, auch zu lernen, der Sprache, ja?

Ja, ja, weil es, weil es halt so schön interaktiv ist, also es ist, man kann einfach eine ganze Menge ausprobieren,

ohne, dass man jetzt irgendwie

Editor lernen muss, und ohne, dass man irgendwie quasi wissen muss,

also das, ja, man kann halt einfach direkt was ausprobieren, wenn es halt schief geht, dann ändert man

die Zelle, und führt sie nochmal aus, und dann ist es okay. Ja, das bringt uns, glaube ich, direkt zu unseren Anfänger-Tipps,

ich glaube, das ist ja gar nicht so schlecht, also wenn ihr Fragen habt, natürlich direkt irgendwie an hallo

at pythonpodcast.de, einfach

stellen, dann erklären wir euch auch alles, was ihr gerade vielleicht noch nicht verstanden habt, oder was euch ein bisschen zu schnell

ging. Vielleicht mit ein paar Tipps anfangen, ich glaube, also

ganz wichtig ist natürlich die offizielle Dokumentation, Aussage des Food zum Lesen, ich glaube,

da findet man so die meisten Erklärungen für die Standardbibliothek, wie das alles so funktioniert,

außer von den Tutorials, die es jetzt gibt. Ich habe zum Beispiel mit

Python the Hard Way angefangen, und das Buch von Seth Torr gelesen, war ein ganz guter Einstieg,

ja, wenn man sich da so durcharbeitet, kommt man relativ tief in die Materie rein,

es gibt noch Automated

Boarding Stuff with Python,

geht auch auf deutschem Buch zu, das kostet dann leider Geld,

ansonsten ist das ein kostenloses Tutorial,

ja, die ganzen Tutorials gibt es sonst bei uns nicht,

auf Datacamp, Udemy, Udacity,

unzählige kostenlose,

ja, du hast ja gerade gesagt, anfangen

vielleicht mit Jupyter Notebook oder auch einem einfachen

Text-Title, also ich kann jetzt nicht empfehlen,

direkt mit einer großen Entwicklungsumgebung zu starten,

das hält dann erstmal so ein bisschen auf,

dann gibt es ja dann irgendwann später

ganz viele tolle Editoren,

PyCharm, Idle, PowerScore,

BI, Atom, MX,

was benutzt du?

BI,

ja, das ist,

ich benutze aber auch PyCharm zum Beispiel

mittlerweile, weil mich nervt, dass es halt

doch relativ langsam ist, und

ja, das ist

immer bei diesen,

eigentlich ist das schön, also diese ganzen IntelliJ

EDEs,

das ist alles schon sehr nett gemacht, die können auch

sehr viel, aber

die reagieren nicht so instantan,

also es ist immer, wenn man irgendwo draufdrückt oder so, dann

muss man erst mal, es ist so,

zu langsam, es ist einfach zu langsam,

es ist nicht, es ist nicht so,

es fühlt sich halt nicht so

snappy irgendwie ordentlich

an, wie sich halt so ein Profi-Werkzeug anfühlen

sollte, sondern es fühlt sich halt immer so an

wie, keine Ahnung,

wie diese, weiß ich nicht,

also ich meine, gut, das ist ein böser Vergleich, aber wenn man

so einen Fahrkartenautomat bei der Bahn steht und

drückt da drauf, und dann

passiert einfach nichts, und dann drückt man

nochmal drauf, aber dann, und dann macht es irgendwie so

Kennt ihr das, wenn ihr euch gerade so einen

Toko-Riegel aus dem Automaten ziehen wollt, und dann bleibt der irgendwo

ja oben hängen? Ja, und das ist

halt, das ist halt schon sehr,

so ein bisschen nervtötend, und deswegen benutze

ich das eigentlich nicht so gern, obwohl manche Features

halt durchaus so nett sind, dass ich es

halt auch immer wieder verwende, aber

wenn ich

BI verwenden kann, dann verwende ich eigentlich, also

BIM, da hat sich auch einiges getan.

Wie, hast du denn Python gelernt?

Hast du da irgendwie

Tutorials gemacht, oder warst du da direkt drin?

War das so basics, dass man alles selber weigen musste?

Ja, aber es gab nicht

so viele Bücher,

damals, es gab ein paar,

die waren aber auch alle nicht so wirklich hilfreich, also

doch, es gab ein Buch, das war hilfreich, ich weiß

aber nicht, ob das immer noch

eine gute Empfehlung ist, es war das Python-Cookbook,

das war ganz gut,

ansonsten

waren die meisten Bücher nicht so toll,

und ja,

ich, wie habe ich es gelernt, also

ich hatte halt das Glück, dass

ich da neben ihm gesessen hatte, der das schon konnte,

und wenn mir das dann gesagt hat,

ja, das war etwas lukriöse,

das war relativ praktisch.

Ja, das kann ich auch tatsächlich auch empfehlen, also versucht nicht nur

im stillen Kämmerlein zu sitzen und euch selber

durch den Kram zu quälen, also es geht bedeutend

schneller, und ihr kommt auch bedeutend schneller weiter, wenn ihr

tatsächlich jemanden habt, der euch so ein bisschen zeigt, wie das

Ganze geht. Danke, Jochen!

Deswegen sitze ich ja hier und stelle dir die ganzen

doofen Fragen.

Ja, also genau, man könnte auch

zu Meetups durchaus

gehen, sich da mit Leuten austauschen, hilft es.

Die tägliche

Arbeit muss man natürlich dann trotzdem machen,

aber ich glaube, mittlerweile kommt man da ganz gut

angeleitet auch in die ersten eigenen Projekte so rein.

Ja.

Wie funktioniert Python eigentlich?

Was ist das Ding?

Wo kann man das machen? Also ich habe jetzt hier zum Beispiel

auf meinem großen Zettel stehen,

Simple Prototyping kann man machen,

und recht umfangreiche Bibliotheken.

Ja, also

Python selbst ist halt eine...

Einfach? Ja. Ist das einfach?

Es ist ziemlich, ja,

es verbinden halt zwei Dinge, die sich eigentlich ein bisschen widersprechen.

Es ist halt sehr einfach, und es ist halt

trotzdem sehr mächtig,

das macht es halt sehr schön. Auf der anderen Seite

bedeutet das halt, dass es nicht so einfach ist, das irgendwie

in Binärcode zu kompilieren oder so.

Das ist halt mit einer Sprache, die halt

wesentlich einfacher sozusagen ist,

ist das halt simpler. Also wenn man

C nimmt, C kann man, so ein mehr oder weniger

Macro-Assembler, da kann man das dafür in den Compiler zuschreiben.

Warum muss man denn überhaupt etwas in Binärcode kompilieren?

Ja, wenn es

ein Computer direkt ausführen können soll,

dann muss das irgendwie Maschinencode sein.

Ah, Binärcode, Nullen und Einsen.

Genau, genau, genau.

Wenn das so

etwas ist, dann kann es halt direkt

ausgeführt werden. Also die meisten Programme,

die man so kennt, sind das halt auch.

So wie früher, wenn ich mir das so vorstelle, da hat man diese ganzen

großen Rechner gehabt, die Lochkarten gelesen

haben für Nullen und Einsen. Das braucht der Computer

auch heute noch, damit er versteht, was er da überhaupt machen muss.

Ja, genau. Und dann läuft halt

dieses Programm direkt irgendwie

auf dem Prozessor und

ja, aber das geht halt,

das ist halt etwas, was dann nicht mehr geht mit Python,

weil für Python Compiler zu schreiben

ist halt dann nicht mehr so einfach.

Oder eigentlich immer so ziemlich unmöglich,

weil das ist halt alles dynamisch und zur Laufzeit

kann sich eine Menge ändern. Das geht halt nicht

so richtig. Das ist halt in der

Preis, die man zahlt, dass man es nicht mehr kompilieren kann.

Es wird dann halt interpretiert.

Also es wird schon so ein bisschen

verändert. Es wird in einen Bytecode

verwandelt und der Bytecode wird dann interpretiert

von einer virtuellen Maschine. Das sind dann die

PyC-Dateien, die man findet, nachdem man irgendwas

gelaufen hat. Genau, genau.

Also C ist das, was dann das Ganze

benutzt, um das dann für die Maschine

schreiblesbar zu machen?

Ja, aber für die Maschine ist das nicht lesbar.

Man braucht immer noch den Python-Interpreter,

der das dann ausführen kann.

Also, ja, genau.

Der Python-Interpreter ist halt genau diese virtuelle Maschine

und der kann das dann halt ausführen.

Und

ja, das hat dann auch so einige andere Nachteile.

Das macht es halt auch schwer, Sachen zu installieren

oder so, weil man kann

jetzt nicht einfach irgendwo

ein Binary runterladen.

Ich glaube, es gibt da PIP.

Ja, genau. Dann muss man eben zu so

Paketmanagern greifen, die

das hat, mit denen man irgendwelche Dinge installieren kann.

Aber man kann halt jetzt nicht irgendwie auf dem USB-Stick

jemandem irgendwie

Python-Programm geben und der

startet das dann halt. Das geht halt.

Wenn ich das richtig verstanden habe, PIP ist dann dieser Paketmanager, der

über die Seite PyPy oder wie es ist, über den

Server von dem läuft und dann da

Pakete installiert, die andere dort bereitgestellt

haben, die schon damit veröffentlicht

sind. Das heißt, wenn ihr eure eigenen Pakete

baut, müsst ihr die entweder so veröffentlichen

oder tatsächlich

exzellente Bibliotheken nehmen, um einen Installer zu bauen

oder sowas. Genau, das gibt es auch.

Es gibt diverse Geschichten, die das

dann halt versuchen, irgendwie in Bein und Riech zu packen.

Und das funktioniert auch manchmal.

Kannst du kurz zwei, drei Installer

nennen, die man versucht für verschiedene Systeme? Einmal

vielleicht für Linux, für OS oder für Windows oder so?

Ich benutze das selber nie.

Py2Exe für Windows

gibt es da irgendwie. Bei Linux braucht man das, glaube ich,

nicht groß.

Baust du ein Paket, machst du ein Shell-Install-Setup?

Unterlegung gibt es auch in so einem Ding, was

quasi den

Interpreter mit reinpackt in Binary.

Kann sein, dass es

ein Installer ist.

Wenn man da so ein bisschen

aufpasst, dann kriegt man

den Interpreter relativ klein.

Also wenn man es einfach naiv macht, dann

kann es sein, dass es so 15 MB

sind oder 10.

Man kriegt es auf zwei, drei runter,

wenn man sich da ein bisschen Mühe gibt.

Und dann ist es eigentlich, ich meine, heutzutage ist das

sowieso alles nicht mehr so wild.

Es gibt natürlich Leute, die sagen würden,

wenn ich das mit C mache und dann gut

und nicht gegen die

Libc-Linke oder gegen die

G-Libc, sondern halt irgendwie

so eine Diät-Libc oder irgendwas

anderes kleines.

Das sind die Standard-Bibliotheken, die C so

bereitstellt für die Befehle, die dann das Ganze

größer machen, wenn man das kompiliert, oder?

Genau, da ist ein bisschen Standard-Bibliothek dabei, aber eigentlich,

wofür die da sind, ist die Kommunikation mit dem

Kernel, mit dem Betriebssystem.

Und das kann man natürlich auch

beliebig komplex gestalten, aber wenn man halt

nur die ganz simpelsten Dinge haben

will,

dann muss das nicht so groß sein, weil das Problem ist,

es muss halt irgendwie dagegen gelinkt sein,

damit irgendwie der Prozess überhaupt

irgendwas machen kann, wie Eingabe, Ausgabe und so.

Aber wenn man das

schlau macht, dann kriegt man das halt auf, weiß ich nicht,

ein paar hundert Byte oder so runter.

Und das ist natürlich was ganz anderes, als wenn ich jetzt irgendwie

megabyteweise Zeugs...

Das könnte auch Mikrocontroller packen. Ich glaube, man kriegt das sogar in so einen Bootsektor rein.

Wie viel hat so ein Bootsektor? 512 Bytes?

Keine Ahnung, ja.

Also natürlich

ist es nicht so klein, wie es gehen

könnte, wenn man das wirklich

drauf anlegt.

Und das wird auch nie gehen

mit Python so richtig, aber

also heutzutage sind ja auch ein paar Megabyte

eigentlich nicht mehr wirklich

viel.

Früher war das auch sehr schlimm,

heute...

Genau, und

daher ist das eigentlich auch alles nicht mehr so wild. Aber man muss auch

sagen, dass dieses Thema so ein bisschen vernachlässigt wurde,

gerade auf Windows und so,

da kann man ja auch nicht davon ausgehen,

also bei den meisten Linux-Systemen wird halt einfach ein Python-Interpreter

vorinstalliert sein, vielleicht ein uralter, aber

immerhin.

Aber bei Windows ist halt Python nicht

vorinstalliert und wenn man irgendjemandem

ein Python-Script schickt oder so, kann der halt

nichts damit anfangen. Das ist ein bisschen

ein Problem. Das ist halt auch ein bisschen ein Preis,

den man dann halt zahlt, dafür, dass es

halt einfach ist, aber trotzdem

sehr mächtig.

Und ja, also...

Die Beine richtig kriegt ihr natürlich trotzdem

auf der Python-Home-Stage direkt,

für die jeweiligen Systeme und wenn das...

Der Python-Interpreter selber ist natürlich wieder

quasi so ein... Also einige Leute

empfehlen auch Anaconda, das ist irgendwie so ein Paket, womit man ganz viel

tolle Datensachen machen kann, wo es

vorinstalliert ist. Also ich persönlich hatte da

nicht so die besten Erfahrungen mit, das war einmal sehr

verwurschtelt mit den Paketen, dann lief

immer was nicht, wenn es irgendwie ein Update gab von der

neuesten Python-Version. Die haben auch einen eigenen

Paketmanager, Anaconda irgendwie und deswegen

würde ich das für Anfänger jetzt nicht unbedingt sofort empfehlen,

obwohl viele das machen, aber das könnt ihr

ja selber schauen. Ja, Anaconda ist ein bisschen

verwirrend, weil also eben

es ist eben kein Paketmanager und auch

nicht... Also Anaconda ist eine Distribution

sozusagen von Paketen,

aber

...

Anaconda ist der Paketmanager und es gibt

auch noch ganz viele andere Pakete,

die jetzt nicht in der Anaconda-Distribution

drin sind. Und

das ist so ein bisschen... Eigentlich ist das

alles ein bisschen furchtbar. Man muss sagen, dass

schön wäre ja, sozusagen in einer idealen

Welt hätte man das ja gerne, dass man

sozusagen einen Paketmanager für alles verwendet.

Also es gibt auch so ein bisschen die

Utopie, wird so ein bisschen

gelebt bei

NixOS.

Versuchen Leute das tatsächlich noch umzusetzen

oder eigentlich waren auch die Linux-Distributionen mal so

quasi gedacht, dass man halt

hat einen Paketmanager, mit dem installiert man halt

irgendwie alles, was man irgendwie haben möchte.

Und

das geht ja auch jetzt noch, wenn man jetzt

einen Debian hat beispielsweise, dann kann man auch

einen NumPy oder so, was ja

quasi ein Modul ist

für Scientific Computing, ein Modul für

Python, kann man durchaus per

Debian-Paket installieren, also über die Distribution.

Es ist halt nur so, dass man das nicht tun

sollte, weil dann bekommt man eine Version, die nicht optimiert ist,

wo der Maintainer... Also ich meine, vielleicht

ist es auch gut, ich weiß keine Ahnung,

aber die Wahrscheinlichkeit ist hoch,

dass es eben dann nicht schnell ist.

Weil es ist halt nicht gegen MKL

diese Mathe-Bibliothek von Intel

gelingt beim Kompilieren.

Also es ist halt tricky, das zu kompilieren,

da ist viel Core-Transworks dabei.

Das ist alles nicht so einfach und

überfordert möglicherweise

halt den Debian-Maintainer auch so ein bisschen.

Also du würdest auch immer

alle Pakete über PIP installieren?

Naja, nee, ich würde sagen, es kommt drauf an.

Leider haben wir nicht...

Am schönsten wäre es, wir hätten einen Paketmanager für alles,

also zum Beispiel PIP oder deinen

Distributionsmanager.

Oder weiß nicht, was es dabei

bei YAMM für

Red Hat gibt oder was da noch war.

DNF ist mittlerweile, glaube ich, auch bei Red Hat, also zumindest bei Fedora.

Ja.

Ich bin da auch gar nicht mehr so am Laufen, aber

genau.

Wenn man einen Paketmanager hätte, mit dem man alles installiert

und dann sich relativ sicher

sein könnte, dass das halt irgendwie funktioniert, das wäre

schön. Aber

es hat sich jetzt aber eher so entwickelt, dass

jede Programmiersprache so ein bisschen,

ihren eigenen Paketmanager mitbringt.

Also bei Python ist es halt

erst mal PIP.

So wie bei Ruby ist das dann halt...

sind das diese Ruby-Gems.

Bei Perl ist es Cpan bzw.

ich weiß gar nicht, was jetzt das

Ding ist, mit dem man die Dinger installiert.

Dann bei, weiß ich nicht,

JavaScript ist es halt NPM oder YAM

oder was auch immer man da gerade verwendet.

Und

das ist dann natürlich nicht mehr so toll, weil das

Problem ist, dass wenn man die jetzt benutzt, die Sachen

wenn man die jetzt quasi einfach so

ins Notfallsystem installiert, dann überschreiben

die natürlich Sachen, die die Disponition da reingeschreibt hat.

Die überschreiben sich doch auch gegenseitig in verschiedenen...

Die überschreiben sich gegenseitig. Alles nicht so schön.

Da hat niemand drauf aufgepasst, dass die Sachen auch alle miteinander

klarkommen. Das heißt, es können die komischsten Dinge passieren.

Das ist halt nicht so toll.

Was macht man denn da? Dafür gibt's ja eine Lösung.

Ja, dafür versucht man das dann irgendwie zu isolieren und installiert halt Dinge nur in Environments.

Also in virtuellen Entwicklungen.

In virtuellen Umgebungen, genau.

Oder für seinen einen User. Also zum Beispiel "pip install paketname --user"

Ja.

Würde halt das für den aktuellen Nutzer nur installieren.

Genau, das kann man auch machen.

Und das sind halt so bisschen krütige Lösungen für dieses Problem.

Aber leider ist es sogar noch schlimmer.

Es ist jetzt nicht nur so, dass jeder Programmiersparer einen eigenen

Paketmanager hat, sondern es sieht so ein bisschen, also jedenfalls bei Python

ist es leider so, dass auch jede Community hat sozusagen ihren eigenen Paketmanager nochmal.

Die ganze Web-Community verwendet eigentlich überwiegend pip, während die ganze Data-Science-Community

überwiegend conda verwendet. Und wenn man sagen muss, conda ist ein bisschen mächtiger als pip.

Man kann damit nicht nur Python-Pakete installieren, sondern halt auch diverse andere Binär-Pakete.

Und manchmal muss man das halt dummerweise auch, weil viele der Sachen, die man da verwendet, sind halt

Fortran-Bibliotheken oder irgendwelche C-Bibliotheken oder C++.

Warum verwendet man denn Fortran oder C- oder C++-Bibliotheken in Python?

Ja, genau. Das ist halt auch, weil wenn man jetzt zum Beispiel Matrizen miteinander multiplizieren will oder so,

dann könnte man das natürlich auch in Python machen, indem man einfach For-Loops ineinander schachtelt.

Also man speichert die Dinger einfach quasi als zweiendimensionale Listen oder so.

Man hat einfach eine Liste von Listen und dann quasi eine Liste von Spalten oder Zeilen.

Moment, NumPy, glaube ich. Geht das so?

Ja, ja, genau. Also man könnte es direkt in Python machen. Dann macht man halt irgendwie so eine Liste von Spalten oder Zeilen.

Ja, ja, genau. Also man könnte es direkt in Python machen. Dann macht man halt irgendwie so eine Liste von Spalten oder Zeilen.

Ja, ja, genau. Also man könnte es direkt in Python machen. Dann macht man halt irgendwie so eine Liste von Spalten oder Zeilen.

Ja, ja, genau. Also man könnte es direkt in Python machen. Dann macht man halt irgendwie so eine dreifach verschachtelte For-Loop und iteriert über die Dinger und rechnet das dann halt aus.

Das kann man machen. Das ist halt dann sehr, sehr langsam.

Wenn man jetzt so eine Bibliothek benutzt wie NumPy oder so, die haben dann halt einen speziellen Array-Type sozusagen.

Und wenn man da jetzt sagt, multiplizieren wir mal A und B,

dann nutzt man dann halt einen speziellen Array-Type sozusagen. Und wenn man da jetzt sagt, multiplizieren wir mal A und B,

dann nutzt man dann halt einen speziellen Array-Type sozusagen. Und wenn man da jetzt sagt, multiplizieren wir mal A und B,

dann nutzt man dann halt einen speziellen Array-Type sozusagen. Und wenn man da jetzt sagt, multiplizieren wir mal A und B,

Und Nampai unten drunter halt quasi, weiß ich jetzt gar nicht, was man da möchte.

Ich würde mir jetzt gerade so auszumalen, wie das dann so aussieht in dem Schaubild, um mir das irgendwie so ein bisschen vorzustellen, warum das jetzt schneller geht.

Also die benutzen drunter einen neuen Motor.

Benutzen drunter optimierte Fortran-Bibliotheken.

Oder ist es, ich weiß gar nicht mal, ob es Fortran ist unbedingt.

Also es ist halt irgendwie, die haben halt damals angefangen mit Blas Lafac Atlas.

Das sind so die Dinger, die da unten drunter liegen.

Und es gibt, glaube ich, irgendwie so eine definierte Schnittstelle für solche, für diese ganzen Operationen.

Und dann sind das irgendwie Implementationen davon.

Und ja.

Nennen wir es Magic.

Genau, Magie.

Also Fortran ist halt irgendwie, als Sprache ist es immer noch deswegen so wichtig, weil da Sachen sich quasi mehr oder weniger automatisch vektorisieren lassen.

Das bedeutet, dass man nicht loopt über Sachen, sondern dass der Prozessor das quasi übernimmt.

Also das ist, also wenn man das einfach an C kommt, dann sollte ich auch eine Loop hinschreiben.

Wäre schon viel schneller als ein Python.

Wahrscheinlich so tausendmal schneller oder so.

Aber selbst das wäre deutlich langsamer als das, was quasi die Bibliotheken, die unter einem Namenpeil liegen, halt machen.

Nee, stimmt.

Genau.

Hat so ein bisschen den Nachteil, dass man halt den Code anders strukturieren muss.

Man kann eben dann keine Vorschleife mehr verwenden, sondern man macht eher solche Sachen, wie man auf den Objekten, die man erzeugt hat,

wie zum Beispiel irgendwelche Arrays oder so, ruft man dann halt irgendwie eine Funktion auf und übergibt denen ein Callback oder so.

Weil Vorschleifen gehen halt nicht mehr.

Das ist ein bisschen komisch, aber ist halt dafür schnell.

Wie ist da so ein Trade-Off?

Kann man sich überlegen, ob man sich das angewöhnt hat, dass man das gerne macht oder ob man sagt, hey, wir nehmen jetzt das ein bisschen in Kauf.

Python ist ja immer als langsam verschrien.

Aber wenn wir die auch schnell bekommen, ja okay, dann machen wir vielleicht mal einen kleinen Umweg.

Genau, genau.

Ja, kommen wir vielleicht noch zu, wenn es um die Mythen geht.

Aber man kann damit auch sehr schnell Dinge tun.

Und dafür muss es halt auch Bibliotheken basieren, die das halt auch schnell machen können.

Und für Scientific Computing und Zeugs ist es halt vortragen oft.

Ja, genau.

Ja, vielleicht nochmal genau zu diesen ganzen Bibliotheken, die man machen kann.

Du hast gesagt, glaube ich, Data Science kann man ganz viel machen und Web kann man ganz viel machen.

Und für diesen Glue, also den Klebstoff zwischen einzelnen Modulen, kann man ganz viel machen.

Und so zum Skripten.

Fällt dir noch irgendwas ein?

Oh, ja, ja, ja.

Was ich ein bisschen vernachlässige.

Genau, auch ein Bereich, der momentan sehr interessant wird.

So Home Automation Zeugs, Smart Home.

Raspberry Pi, der macht ja ganz...

Ja, genau.

Raspberry Pi wird da oft verwendet.

Und überhaupt Raspberry Pi und Python haben viele schöne Anwendungen.

Da kann man viel drauf machen.

Home Automation, du hast hier, glaube ich, ganz viele schöne Sachen mit.

Ja, ich habe auch einen Raspberry Pi irgendwo im Schrank stehen, der zum Beispiel Temperaturen ausliest.

Ich habe so ein DVB-T-Modul da dran gesteckt.

Die gibt es jetzt irgendwie günstig, weil es keinen DVB-T-Modul gibt.

Ich wollte gerade sagen, also das ist doch gerade abgeschaltet worden.

Richtig.

Jetzt kommen wir in die Dongle, kriegt man relativ billig.

Und da ist so eine Sache.

Und da ist so eine Antenne dran und dann habe ich hier irgendwie so Sensoren und die funken halt auf den Frequenzen.

Ihre Werte halt so alle paar Sekunden oder so.

Und dann muss man die eigentlich dann nur einsammeln und dann an ein Software, das nennt sich Home Assistant, schicken.

Also das ist ein bisschen komplizierter.

Ja, da macht man auch noch eine eigene Folge für sich.

Genau.

Aber solche Sachen.

Also wenn man zum Beispiel...

Also ich sehe jetzt aber zum Beispiel keine Schläuche in den Pflanzen, die du hier in deinem schönen Wintergarten stehen hast.

Das heißt, das musst du noch selber gießen.

Genau.

Ja, furchtbar.

Da musst du unbedingt automatisiert werden.

Ich weiß noch nicht, wie ich den Wassertransport automatisieren soll.

Das ist ein bisschen gefährlich.

Eine Pumpe irgendwie und ein Eimer einfach.

Ohne Haftpflichtversicherung.

Ja, wäre eine Idee tatsächlich vielleicht.

Ja, genau.

Ja, aber in dem Bereich ist Python halt auch, glaube ich, sehr, sehr stark unterwegs.

Und da gerade, wenn man jetzt...

Also einmal auf der Serverseite sozusagen.

Also das Ding, was diese ganzen smarten, mehr oder weniger smarten Geräte halt sozusagen managt.

Und mit denen da irgendwas macht, irgendwelche Sensordaten ausliest.

Die Seite ist Python.

Aber halt auch die Sensoren selber.

Also man kann zum Beispiel...

Es gibt da so kleine Boards.

Kosten ein paar Dollar.

Und da ist ein Chip drauf mit ein wenig...

Ist nicht so schnell und hat auch wenig Speicher.

Aber da läuft Micro-Python zum Beispiel drauf, sodass man da halt...

Nächste Folge.

Ja, genau.

Das heißt, man kann auch da Python drauflaufen lassen.

Und dann irgendwie Sensordaten.

Damit schon irgendwas machen.

Da muss man erst mal wieder aufpassen, dass wir die Module so nehmen, dass sie möglichst klein werden.

Genau.

Da muss man wieder ein bisschen aufpassen und so.

Aber ja, also in dem Bereich ist Python halt auch sehr, sehr stark vertreten.

Ja, ich glaube, was noch dazukommt vielleicht ist Rapid Prototyping.

Jetzt nochmal als Buzzword reingeschmissen.

Man kann relativ schnell irgendwelche Prototypen bauen von Dingen, die man benutzt.

Sei es jetzt im Web oder bei Daten, die dann auch funktionieren, die kurz sind.

Wenn man jetzt zum Beispiel die Sprachvergleiche...

Ist ja auch sehr einfach.

Deswegen eignet sich das besonders gut.

Ist vielleicht am nächsten am Pseudocode dran, so von dem, was ich so gesehen habe.

Das heißt, man kann relativ einfach die Syntax formulieren und hat direkt ein glaubfähiges Programm,

was wenigstens so grob das tut, was es sollte später.

Ja.

Dazu sozusagen ist noch so einer große Vorteil der Sprache, wo man jetzt von außen draufguckt.

Für den Anfängern oder so.

Ja, vielleicht wäre es ganz interessant, das mal so ein bisschen zu differenzieren gegenüber den anderen Sprachen,

die es halt in den ganzen Bereichen auch gibt.

Ja.

Wo man auch diese ganzen Dinge tun kann.

Also Python ist halt, würde ich sagen, gehört zur Familie der Skript-Sprachen irgendwie.

Also man könnte sagen, es ist sowas ähnliches wie Ruby oder wie Perl oder auch ein bisschen wie JavaScript.

Aber unterscheidet sich halt...

Oder PHP unterscheidet sich von denen aber.

Also wie zum Beispiel JavaScript und PHP, die sind halt dynamisch getypt sozusagen und schwach getypt.

Das heißt, Dinge können ihren Typ ändern oder man weiß nicht, was sie sind sozusagen von Anfang an.

Ja, also Python auch so.

Ist in Python auch so.

Ja.

Aber in Python ist halt streng getypt auch.

Das heißt, es ist dynamisch und streng.

Das heißt, wenn ich jetzt sage, irgendwie eine Zahl plus irgendwie ein String oder so,

dann kriege ich bei Python halt einen Type Error, also...

Einen Typenfehler.

Einen Typenfehler.

Ja, also ich versuche eine Zahl mit einem Wort zu verrechnen.

Genau.

Da haut mir Python halt auf die Finger, während in PHP oder in JavaScript passiert dann halt irgendwas.

Und was passiert denn da?

Ist das Magie?

Oder ist das keine dunkle Magie wahrscheinlich?

Es ist eher dunkel.

Also man weiß nicht so genau, was dann passiert.

Es kommen die komischsten Sachen.

Aber es gibt einen schönen Vortrag für JavaScript.

Das ist mal jemand...

Es ist ein bisschen veraltet, aber hat das mal jemand aufgeschrieben.

Ich glaube, wenn man danach sucht.

So JavaScript Talk und dann Watt, W-A-T, dann findet man das.

Und dann, wo er dann so eben solche Dinge macht wie irgendeine Zahl plus leer Stringen.

Und dann kommen halt die seltsamsten Dinge dabei raus.

Oder selber hüpft und blinkt und...

Ja, am Schluss kommen irgendwelche Zeichenkanten dabei raus und Batman erscheint.

Also es ist halt wirklich...

Man muss aufpassen, dass man da tut.

Ansonsten passieren ganz, ganz furchtbare Dinge.

Klingt so, als könnte man das gut ausnutzen.

Ja.

Und es passieren halt auch regelmäßig wirklich, wirklich schlimme Sachen.

Die Welt geht unter.

Ja, ja.

So ungefähr.

Und das kann bei einem Python halt nicht so leicht passieren.

Das ist schon mal ganz schön.

Also insofern ist es halt in der Welt...

Es ist halt ein schöner...

Also ich finde, was man über Python sagen kann, ist, es macht halt die richtigen Tradeoffs.

Also es ist halt immer...

Es ist halt so eine Sache.

Das hat natürlich auch Vorteile. Man kann Dinge vielleicht abkürzen oder so, wenn man das schwach getypt will, wenn man das nicht so streng überprüft. Man kann das teilweise ausnutzen, um Sachen eleganter zu machen, aber man zahlt halt einen Preis dafür. Und Python hat so die Tendenz, immer diese richtigen Trade-offs zu machen.

In der neuen Version, ich weiß jetzt gar nicht, ob das bei 3.7 kam oder bei irgendeiner 3.6 Version, dann kann man diese Typen jetzt so schön annotieren noch für Funktionen oder für Variablen direkt und sieht dann, dass direkt das beispielsweise in seinem Glinter oder sowas, also das, was den Code unterstreicht, wenn ein Fehler da ist, dass der Typ falsch ist. Also wenn man jetzt Standardtypen eher haben möchte oder feste Typen und keine dynamischen, dass man zumindest weiß, was da stehen sollte, obwohl das Python immer noch versucht zu sprechen.

Ja, aber das Schöne ist halt, das ist halt optional. Man kann das da ranschreiben.

Also klar.

Ja, natürlich. Das ist auch einer der Vorteile, die in so einer Sprache wie Java oder so, die ist halt statisch getypt, also nicht dynamisch. Da kann man hinterher, wenn ich einen Variabler habe, die ändert sich nicht einfach so in einen anderen Typ. Das geht da halt gar nicht.

Und das kann auch nicht sein, dass halt hinterher der Typ erst festgelegt wird zur Laufzeit, sondern das muss halt zur Compile-Zeit sozusagen, wo der Source-Code in Bytecode verwandelt wird, muss das halt feststehen. Eine schöne Geschichte, die man dann halt bauen kann, ist halt Unterstützung in den IDEs.

Also wenn ich halt weiß, sozusagen, dass diese Variable halt den Typ hat, dann kann die IDE mir schon auf die Finger hauen, wenn ich versuche, damit etwas zu machen, was halt nicht geht.

Also das klingt auf jeden Fall nach einem interessanten Trade-off, weil als Anfänger würde ich mir jetzt erstmal so denken, dynamisch klingt ja voll cool, kann das immer was Verschiedenes sein und dann kann ich ganz tolle Sachen mitmachen. Und du sagst jetzt gerade, der Start ist natürlich auch voll toll, weil man kann das irgendwie nicht verwechseln und man bekommt keine Fehler.

Naja, der Nachteil dabei ist halt, da muss man viel mehr schreiben. Was auch nicht so ein Problem ist, wenn man eine IDE verwendet, weil die schreibt das dann für einen so ein bisschen.

Aber man braucht dann halt eine komplizierte IDE, die irgendwie Dinge tut und dann auch nicht mehr so schnell sein kann.

Also man kann damit auch programmieren, so schlimm ist es nicht, aber es ist halt so ein bisschen, ich mag es nicht so, ich mag lieber, man schreibt wenig und schreibt das dann halt aber selber und das Tool, was man dafür verwendet, ist halt schnell, als die IDE schreibt das, aber die ist so ein bisschen laggy und man muss ein bisschen auf die warten.

Ja gut, aber das geht auch. In Python hat man das jetzt halt so nicht, das ist alles dynamisch.

Man kann aber auch Typ-Annotationen jetzt, das ist auch eine sehr neue Geschichte, kann man halt halt dazuschreiben und dann könnte einem die IDE, oder vielleicht PyCharm und so können das möglicherweise auch schon, die kann einem dann dabei helfen und dann auch sagen, wenn irgendwas nicht geht.

Also zum Beispiel in Listen kann man auch verschiedene Datentypen benutzen, es sei denn, man benutzt ja Slump-Arrays, wo das dann auch hier fest ist, aber ja, das ist glaube ich auch ganz interessant, weil wie das halt sein kann, wenn man durch so eine Liste iteriert und man macht irgendeine Multiplikation oder sowas, dann fliegt einem das um die Ohren, weil das der falsche Datentyp ist.

Das ist genau eine dieser Geschichten, wo halt statisch getypte Sprachen große Schwierigkeiten mit haben oder es einem als Programmierer das Leben halt schwer machen, so diese ganzen Containerdatentypen, die sind da halt knifflig oder man kann halt im Grunde immer nur Container haben, die halt dann irgendwie Dinge von einem Typ enthalten, weil man muss ja irgendwie sagen, welchen Typ die Variable hat, die man da reintut und das ist halt, also gut, geht mittlerweile auch, es gibt Generics und sind inzwischen auch in Java angekommen.

Man kann da auch so Sachen machen, aber das ist alles dann nicht mehr so richtig einfach und ein Ding, was man dann halt oft sieht, was Leute dann machen, ist, sie haben halt, naja, also um diese Unzulänglichkeiten, sag ich mal, so könnte man das sehen in der Sprache, zu kompensieren, überlegen sie sich dann halt irgendwie Patterns, wie man bestimmte Probleme, auf die man dann stößt, wenn man nicht mehr einfach quasi beliebige Dinge irgendwie in ein Ding, was halt über Sachen iteriert, packen kann, ja, weil so ein Python-Iterator ist halt, der iteriert halt über Sachen und da kann halt beliebiges Zeug dran sein.

Aber, wenn das halt nicht geht, dann, ja, macht man halt, dann muss man sich halt so Patterns überlegen, wie man Dinge tun kann, ne, und für viele Situationen ist es dann halt, kann man das halt nicht einfach so hinschreiben, was man machen möchte, sondern dann muss man halt, dann gibt's ein ganzes, gibt's ein Gang of Four-Buch, irgendwie, das ist ein ganz bekanntes Buch von, na, wie heißt das, das wird immer ein Gang of Four-Buch genannt.

Ja, das musst du unbedingt auch in die Show noch packen.

Ja, ich glaub, das Ding heißt auch immer Design-Patterns oder so, und das sind halt, ich weiß nicht, wie viele, das sind hundert oder irgendwas in den Dreh, typische Design-Patterns, die man halt jetzt in so statisch getübten Programmi-Sprachen vor allen Dingen verwenden kann, wenn einem solche Probleme halt plagen, wie man damit umgeht, und die das dann halt hübsch lösen, sozusagen.

Und wenn man dieses Buch durchgeht und sich dann überlegt, wie würde ich das in Python machen, dann stellt man halt oft fest, ich brauch da gar kein Pattern, in Python kann ich das einfach so hinschreiben, ja, da muss ich mir kein,

komplizierte, komplizierte Dinge ausdenken, mit denen ich halt irgendwie da jetzt Architektur-Dinge, mit denen ich da mit diesem Problem fertig werde, weil ich hab das Problem gar nicht.

Und das ist halt schon sehr nett, dass man halt quasi eine große Klasse von Problemen, die halt, ja, also auch das, dieses Buch wurde halt gefeiert als, wie man, das kann man irgendwie so programmieren, in die Hand geben, und dann kriegen sie das halt alles hin, wo sie sich vorher einen abgebrochen haben.

So in Python hat man einen Großteil dieser Probleme, hat man einfach nicht.

So loslegen, machen.

Ja.

Ja.

Und das ist halt schon sehr schön, das ist ein großer Vorteil.

Ähm, ja, also da würde ich, würde ich, würde ich sagen, ist halt auch eine, eine der Stärken von Python, dass, dass man halt quasi irgendwie einen Großteil der komplizierteren Programmier-Patterns nicht braucht, weil man kann es einfach so hinschreiben.

Ich meine, klar, natürlich auch in Python gibt es Sachen, die kompliziert sind, und nicht alle Patterns sind überflüssig, deswegen, also es gibt durchaus Sachen, die man da auch brauchen kann, aber es, es macht das Leben schon irgendwie leichter.

Ähm, ja, das, das ist, äh, das wäre so der Unterschied statisch getypt, äh, dynamisch, äh, dynamisch getypt.

Genau.

Ähm, den strengen Sprach hatten wir jetzt auch schon, im Vergleich zu den anderen Programmiersprachen, was wir auch noch, äh, haben, ist quasi, ja, eben binär, äh, kompiliert, das hatten wir aber auch eben schon ein bisschen abgelandet.

Ähm, na ja, dann gibt es natürlich Sprachen, in denen man, äh, quasi das Memory-Management selber macht, so C zum Beispiel, ähm.

Und da muss man immer so einen Zeiger durch den Speicher schicken, der genau sagt, wo man gerade ist.

Ja, also, genau, also, äh.

Hier ist halt irgendwie Speicher, und dann kriegt man einen Zeiger drauf, zurück, und dann macht man damit irgendwas, und muss halt hinterher dran denken, dass man diese Strukturen wieder freigibt, wenn man sie nicht mehr braucht.

Äh, oder, ja, wenn man Dinge freigibt, die man, äh, die, die eigentlich man noch braucht, und es passieren schreckliche Dinge.

Also, das ist, äh, kann man...

Und wie löst man das in Python?

In Python hat man damit nichts zu tun, das ist, äh, äh, sozusagen, äh, äh, da, das macht Python für einen selbst, es sei denn, man schreibt wieder so Low-Level-C-Module oder so, die irgendwelche Dinge tun, dann muss man das auch wieder selber machen.

Äh, aber, ähm, wenn man einfach sich in Python bewegt, dann hat man damit eigentlich nichts zu tun, weil das, das passiert dann automatisch, also, Python verwendet da ein System, nennt sich Reference-Counting, äh, also, es gibt da auch wieder einen Unterschied, also, in einer Sprache wie Java ist es ja auch so, da muss man sich auch eigentlich nicht drum kümmern, das macht halt auch der Interpreter, und dann gibt es halt noch Sprachen, die machen Garbage, äh, äh, äh, haben einen Garbage-Collector.

Wie Python?

Nee, ja, also, Python hat auch einen Garbage-Collector.

Garbage-Collector, aber, äh, ja, das ist ein bisschen kompliziert, leider, äh, aber hauptsächlich ist es ein Python, äh, Reference-Counting, sozusagen, äh, sodass man...

Das heißt, es zählt, wie oft ist irgendwas irgendwo da, und wenn es nicht mehr da ist, dann zahlt es weg.

Genau, wenn, wenn irgendwo eine neue Reference entsteht, dann wird das halt hoch, wird der Reference-Counter hochgezählt, und, äh, irgendwie ansonsten, wenn, wenn eine Reference, äh, verschwindet, gelöscht wird, dann, dann wird es runtergezählt, und wenn es bei Null ankommen wird, wird das, äh, Objekt abgeräumt, ähm, und, äh, das hat den, das hat den großen Vorteil,

äh, es ist ziemlich schnell zur Laufzeit, und, äh, es ist, äh, sozusagen auch sehr einfach, ja, also kann nicht viel schiefgehen, äh, es sorgt für vorhersagbare Latenzen, äh, äh, es hat aber auch einen großen Nachteil.

Okay.

Der große Nachteil ist, äh, ja, man kann dann nicht mehr Parallel-Dinge machen.

Oh Gott, oh Gott, oh Gott.

Also auf unterschiedlichen Prozessoren. Das geht im Grunde nicht mehr.

Also das kann, könnte man tun, da muss man halt, äh, wenn man es naiv machen wollte, müsste man dann für jede Operation, die jetzt irgendwie so ein Ref, äh, Reference-Counter hoch- oder runterzählt, da müsste man irgendwie so ein, so ein Lock draufmachen und sagen, so, jetzt mal alle stopp, äh, wir, wir erhöhen jetzt diesen, diesen, diesen Reference-Counter, und dann können alle wieder weitermachen.

Wenn man das tut, wird alles ungefähr 40 Mal so langsam.

Und das geht alles einfach nicht mehr.

So, äh, ich glaube, ähm, Leute haben irgendwie lange dran gefeilt, sind jetzt auf Faktor 20 oder so runter, wo man gar nicht gedacht hätte, dass es überhaupt möglich ist.

Aber, äh, das heißt, du brauchst 20 Kerne, damit du dann den einen Kern, die Performance von einem Kern hinkriegst, genau.

Äh, das ist natürlich irgendwie nicht so richtig effizient.

Also, äh, das ist natürlich ein großer Nachteil.

Und dafür gibt's halt bei, bei Python auch den, den, den Global Interpreter-Lock.

Den, den bitte was?

Ja, GIL oder Global Interpreter-Lock, das ist sozusagen, äh, ein Ding, was dafür sorgt, dass, äh, quasi, äh, ein Python-Prozess nur auf einer CPU läuft.

Und nicht, äh, ein, ein Python-Prozess auf mehreren CPUs laufen kann.

Ja.

Ähm, das ist halt so.

Also, das ist auch der Grund, warum Java das nicht macht.

Java, äh, macht, äh, einen Garbage-Collector und hat dann dieses Problem nicht.

Ja, das kann dann halt auf mehreren Prozessoren laufen, problemlos.

Oder, naja, problemlos, aber geht.

Und, äh, sozusagen, muss dann halt ab und zu mal aufräumen.

Dafür ist eben dieser Garbage-Collector.

Das heißt, auf einmal gibt's eine Pause.

Nee, der Müllteil ist voll.

Jetzt muss der Müll aus, muss erstmal alles einsammeln.

Und wegfahren.

Genau.

Das, das Problem ist, man weiß halt nie genau, wann der zuschlägt.

Und dann, das bedeutet halt, dass man, wenn man einen Server laufen hat, dann kann das

halt sein, dass man irgendwie plötzlich, es sind halt alle Requests super schnell und

dann plötzlich einer dauert halt lang.

Also jetzt, um da bei dem Müllauto-Beispiel zu bleiben, kann man nicht einfach messen,

also wie voll der Müllcontainer ist und, äh, dann irgendwie den Müllwagen so gut fahren

lassen, dass der ein Routenmanagement macht und da richtig vorbeifährt und die Sachen

rechtzeitig lädt, bevor die vollgelaufen sind?

Ja, aber das Problem ist halt, du musst irgendwann halt alle...

Weiß nicht, wie viele Leute die Müll essen und wie viel Müll die wegschmeißen immer,

oder?

Ja, ja, ja, also da wird auch eine ganze Menge gemacht und es funktioniert auch alles

irgendwie so ganz okay, aber das Problem wirst du im Grunde nicht los.

Du hast immer das Problem, dass wenn, wenn der Müll weggebracht werden muss, musst du

allen sagen, so jetzt mal stopp, jetzt muss erstmal der Müll weggebracht werden.

Aber die schmeißen alles in dieselbe Mülltonne.

Ja, und, äh, dann, ja, selbst wenn das sehr schnell ist, kann es halt sein, dass es, weiß

ich nicht, 200 Millisekunden dauert oder sowas.

Könnte man nicht einfach eine kleinere Mülltonne machen?

Also für jeden so eine kleinere Mülltonne, als wenn man so eine große hat?

Ja, ich weiß es nicht.

Aber dieses Problem ist...

Aber dieses Problem ist nach wie vor da, also nach wie vor kämpfen da Leute mit.

Sagen wir mal, das ist halt einer der Trade-offs.

Wenn du halt einen Garbage Collector hast, dann hast du halt, dann kannst du halt irgendwie

Sachen auf mehrere Prozessoren verteilen, aber du hast halt den Nachteil, dass deine

Latenz so ein bisschen unvorhersagbar wird.

Ähm, ja, das ist halt blöd.

Und, ähm, ja, das, äh, das sind halt, man kann sich halt überlegen, was man irgendwie

lieber mag, äh, sozusagen.

Und auch da, äh, finde ich, dass Python da eine ganz gute, äh, ganz gute, äh,

gute Wahl getroffen hat mit dem Reference Counting.

Und auch da gibt es halt den Garbage Collector, den gibt es halt vor allen Dingen

dafür, dass, wenn jetzt so zirkuläre, äh, Referenzen irgendwie, äh, so wenn das

ein Objekt hat, das auf ein anderes verweist, das auf ein anderes verweist, das

eine Referenz auf ein drittes hat und das wieder auf das erste oder so, dann...

Die Katze beißt dich in den Schwanz.

Ja, dann werden die durch Reference Counting nicht weggeräumt, dann muss man

auch, muss auch Python ab und zu mal einen Garbage Collector anschmeißen, um

solche Sachen zu finden und dann rauszuwerfen.

Aber...

Aber einen Garbage Collector kriegt man bei Python mit sowas wie Import DC dann, oder?

Ja, genau, genau.

Äh, und der macht manchmal auch blöde Sachen und auch da hat man dann halt

manchmal so die Probleme, die man von anderen Programmiersprachen kennt.

Also wenn man zum Beispiel, ich weiß nicht, ob das heute noch so ist, aber

früher war das immer so, wenn man größere Datenmengen irgendwie importiert

hat per CSV oder weiß ich nicht.

Also ich habe früher irgendwie viel so, äh, Import-Export-Skripte auch

geschrieben und, ähm, da war also einmal einer der Tricks halt, dass man, äh,

quasi bevor man halt so ein paar Millionen, äh, Zeilen irgendwie gelesen

hat und die irgendwo reingeschrieben hat in irgendeine Daten, Hauptspeicher

Datenstruktur, ist halt, äh, einmal den, den Garbage Collector, äh,

ausgeschaltet hat.

Dann hat man den ganzen Scheiß importiert und dann hat man ihn wieder

angeschaltet.

Und, äh, weil ansonsten schlägt er halt alle paar tausend Zeilen oder so

zu und, äh, blockiert alles.

Und das macht es halt dann irgendwie direkt ein paar Faktoren schneller oder

so, ne?

Das, äh, heute kann sein, dass heute alles nicht mehr nötig ist und es

besser geworden ist, aber, ja, also da...

Ich bin echt neugierig, müssen wir vielleicht auch mal, äh, rausfinden,

ob das wirklich noch so ist.

Ja.

Wenn man das wirklich immer machen muss, dass man im Müllwagen sagen muss,

nee, heute nicht.

Ja, genau.

Und dann...

Also wenn man weiß, was passiert, wenn man sagt, ich, so, ich hau jetzt eine

Zeug, einen Hauptspeicher, ich weiß, dass es so ist und es ist richtig

so, da muss nicht geguckt werden, ob das irgendwie jetzt, ob davon was

weg kann, weil davon kann noch nichts weg, weil ich hab noch nichts

anderes gemacht, dann kann ich halt sagen, okay, ja, da soll jetzt momentan

nicht, äh, muss der Müllwagen nicht rumfahren, ne?

Das ist, äh, eher sein Nachreden, ja.

Aber ist natürlich schon hässlich, denn mit solchen Dingen will man sich

eigentlich als, als, als Entwickler ja gar nicht so beschäftigen müssen,

weil das ist natürlich irgendwie, ja, für die meisten Leute alles, äh...

Ja, also ich glaube auch, unsere Anfänger haben wir gerade vielleicht

wieder ein bisschen abgehängt.

Ich hoffe, wir holen die noch wieder ein bisschen ein.

Ich hoffe, wir...

Ich finde das alles so interessant wie, äh, ich.

Ähm, vielleicht kommen wir dann noch ein bisschen wieder zurück zu dem,

äh, was wir jetzt durch hatten.

Ich glaube, wir haben jetzt so ein bisschen erklärt, wie

Python jetzt funktioniert.

Ich weiß nicht, ob wir dazu noch ein bisschen was sagen möchten.

Lass mich mal gerade überlegen.

Also, äh, ja, äh, ne, ich glaube, äh, ja, nö, also im Grunde, im Grunde

sind das so die wesentlichen Unterschiede zu anderen Programmiersprachen, ja.

Ja, ja, okay.

Das heißt, die Unterschiede haben wir jetzt so ein bisschen erklärt,

was man damit also machen kann.

Äh, vielleicht wollen wir ein bisschen noch drauf eingehen,

was so die Mythen dieser Sprache sind.

Also, ja, das ist total einfach.

Ja.

Ne, das ist immer so einer der Sachen, fand ich jetzt tatsächlich auch,

also von der Syntax her.

Ja.

Da darf ich gut lasen, ja, dass du nicht irgendwie da standest und

hast irgendwie wie ein C, so ein Hello World, wo es dann irgendwie über

mehrere Teilen geht oder wie in Java, wo dann erst mal gucken muss,

ah, wo geht denn jetzt diese Funktion hin?

Steht da Print Hello World fertig?

Genau, genau, ja, weil bei Java, da muss man dann erst irgendwie

komische, so erst eine Klasse definieren und dann irgendwie, äh,

Public, Static, Void, Main oder sowas hinschreiben, wo es dann

Static, Void, Main ist halt so, irgendwie so magische Worte,

damit irgendwas passiert, so, aber ein Python-Stamm einfach

printen, wenn man printen möchte, das ist schon sehr nett, ja.

Ähm, ja, äh.

Also bleibt Python denn so einfach, wenn man das macht?

Ja, ja, nein.

Also, äh, ja, man kann auch.

Kommt davon, was man damit machen will.

Ja, ja, ja, man kann da auch.

Man kann auch Netzwerkkram damit machen, das hatten wir noch.

Ja, und, äh, ja, genau, und asynchrones Dinge und überhaupt,

ja, da, da kann es auch dann relativ,

fies werden.

Das Dumme ist nur, das ist halt dann,

wenn man fiese Probleme hat, dann, dann

kann man da nicht viel dran tun, dann, äh,

muss man leider, äh, leider manchmal

den sauberen Apfel beißen, aber ich, ich meine,

äh, es ist ja auch schön, wenn, wenn

quasi, äh, schwierige

Probleme möglich, äh, äh,

schwierige Sachen möglich sind.

Das macht einen mächtigen Tauberstab, ja, also noch mehr Magie, ja.

Aber es gibt tatsächlich auch Situationen,

wo man dann halt auch, äh,

komplizierte Dinge tun, tun kann,

beziehungsweise muss, und, ähm,

ähm, ja, wo es manchmal auch nicht so richtig offensichtlich

ist, was Python da, da tut.

Ja, und es gibt halt

auch so Ecken, die halt einfach nicht schön sind, das,

das muss man natürlich auch sagen.

Ich sag mal, wenn ihr jetzt einfach irgendwelche Daten von irgendwelchen Sensoren packen

wollt in eine Datenbank, das ist ja dann relativ, äh,

ja, für die meisten Sachen geht das, äh,

ähm, genau, ja, also

es ist einfach so,

es ist, es ist, würde ich sagen, tatsächlich sehr, sehr

einfach, es ist, es ist schön, wenn man irgendwie

auf Stack Overflow schaut oder einfach googelt nach

irgendwelchen, wie mache ich denn jetzt dies oder jenes,

dann ist es toll, weil, äh,

ja, das funktioniert halt meistens immer noch,

selbst wenn der, wenn die Antwort, die irgendjemand gegeben hat,

15 Jahre alt ist oder so. Es gibt tatsächlich auch

relativ viele Antworten mittlerweile, das ist, äh,

auch sehr angenehm, weil fast

für alles, für jedes einzelne

Problem, das man irgendwo hat, irgendjemand das schon mal

hatte und irgendwie so eine Musterlösung findet oder

auch das Problem dann von mehreren Seiten angucken

kann und, ja.

Aber, ja, genau, also das ist, äh,

das Python einfach ist, würde ich sagen, ist ein

Mythos, der durchaus irgendwie

mehr Wahrheit als, äh, Mythos ist.

Ähm, ja, ein

andere Geschichte wäre halt irgendwie, oh,

dieses Significant Widespace, das ist ja

total furchtbar, das kann da, ich, da,

ich kann so nicht arbeiten.

Significant Widespace, für alle Leute, die

jetzt gerade zum ersten Mal in der Sprache zuhören,

ähm, bedeutet, dass tatsächlich, ähm,

man darauf achten muss, wo was

in dem Code steht von Python.

Ja, dass man halt nicht, äh, quasi

den Code beliebig formatieren kann, sondern, dass

halt Widespace halt auch zur Syntax gehört.

Also, dass, wenn ich jetzt, äh,

ja, also, wenn ich eine

Zeile, die im gleichen Block ist,

äh, anders einrücke als die andere, dann

geht das halt schief. Also, das, was, äh, ich sag mal,

ein guter Programmierer von vornherein

formatieren sollte in seinem Code, das, äh, sagt Python,

wenn du es nicht machst, dann, äh, stürzt es ab und sagt,

nee, nee, nee, du, aber nicht. Ja, genau.

Ähm, ja.

Und es ist natürlich doof,

wenn man sich so ein anderes Schema angewohnt hat, irgendwann mal.

Genau, äh, und man kann das halt nicht beliebig

einstellen, ne, oder wenn man jetzt Tabs

und Spaces mixt oder so,

überhaupt, man kann Tabs auch verwenden zum Einrücken,

aber das, äh, sollte man nicht tun, das ist böse.

Immer schön Spaces verwenden.

Leerzeichen pro Ebene.

Und die meisten IDEs hier bauen

das auch irgendwann um, das heißt, ihr könnt das so bauen, dass ihr dann

vier Spaces pro Tab

bekommt, da könnt ihr wieder im Tab arbeiten, aber

es wird umgewandelt und ansonsten habt ihr tatsächlich manchmal Probleme,

wenn ihr irgendwelchen Code Freunden schickt

oder Code von Freunden bekommt, die haben Tabs benutzt

und ihr leerzeichnet, dann funktioniert das nicht mehr und ihr

seht nicht genau, warum, weil irgendwo

irgendwelche Leerzeichen dazu führen, dass, äh,

ja, da unterschiedlich interpretiert

wird und dann stürzt das ganze Programm ab. Hässlich.

Gerade für Anfänger manchmal, stehen

davor und denken, was, warum, geht nicht.

Ja.

Also, ich würde sagen, so ein bisschen

was ist ja da ja drin, also ich dachte

auch am Anfang, also ich kam ja dann

zu der Zeit, wo ich mich

angefangen habe zu beschäftigen, auch von

Perl her, wo man das halt nicht hat, wo man

das kommentieren kann, wie man will und so, und ich dachte auch so,

oh, das ist aber blöd, dass man da jetzt irgendwie, dass

man darauf achten muss, aber das waren

halt ein paar Tage und danach war's

super und ich fand

das nie wieder problematisch.

Ähm,

aber ich kann

so ein bisschen verstehen, dass es,

äh, blöd ist, wenn man das selber dafür sorgen muss, dass

die, äh, äh, quasi,

äh, dass die Formatierung

so ist, dass die Syntax stimmt, äh,

würde aber auch sagen, dass man

das heute eigentlich nicht mehr macht. Also andere

Sprachen machen ganz viele Klammern oder Semikolon

oder sowas. Ja, das ist halt der, der, der Preis,

den man dann zahlen muss, wenn man halt quasi eben nicht

die Formatierung, äh, äh, Teil

der Syntax, äh, als Teil der Syntax

hat, sondern sagt, okay, du kannst formatieren,

wie du willst, dann muss man halt irgendwie anders signalisieren,

wo ein Blockanfängten aufhört. Und dann,

dafür benutzt man halt typischerweise Klammern.

Und das heißt,

man hat halt sehr viele Klammern. Was halt,

kann ich dir mal erzählen, fünf Klammern auf, sechs Klammern zu.

Genau, genau. Und das ist halt auch

nicht so richtig schön, ne. So ein Python ist

diese Frage halt nie so, muss ich da jetzt noch eine Klammer,

also, man hat sie auch an anderer

Stelle, aber bei, jedenfalls nicht beim

Schließen von Blöcken, so, muss ich da jetzt noch eine Klammer zumachen

oder nicht, sondern, ne, wenn ich den jetzt da eingerückt

habe und aufhöre, dann ist dieser Block vorbei.

Das ist halt, äh, viel einfacher.

Ähm, ja.

Und, äh, genau, heutzutage

auch schon gar nicht mehr so ein Problem,

weil heute, würde ich sagen,

sollte man Code eigentlich gar nicht mehr unbedingt

selber formatieren, sondern man schreibt es halt

irgendwie hin, dass man, man denkt, dass es halbwegs passt.

Äh, und dann nimmt man

halt sowas wie Black. Das ist jetzt so ein

Ding, was halt... Black.

Ja. Schwarz. Genau. Ja.

Das ist so ein, äh,

Kommandozeilen-Utility, äh, man kann

das, äh, Wim-Plugin für den Editor

oder so, und dem sagt man einfach nur,

okay, reformatiere alles so, dass es

irgendwie läuft, dem Standard entspricht

und dann formatiert das den Code halt um.

Aha. Und dann muss man da selber

nichts mehr machen. Muss man das importieren, oder ist das

ein Kommandozeilen-Tool? Das ist, das ist ein Kommandozeilen-Tool,

aber, wie gesagt, es gibt für die meisten

Editoren Plugins, die das dann halt aufmarschen.

Diesen würde ich mir direkt mal aufschreiben, hier. Wieder was gelernt.

Genau.

Äh...

Ja, also, ich würde sagen, heute,

heutzutage sollte man eigentlich nicht mehr von Hand

formatieren müssen, das ist, äh, macht man einfach nicht mehr.

Ähm,

genau, damit ist das im Grunde

alles kein, kein Problem mehr, weil,

äh, ja, man hat ja

als Mensch gar nicht mehr damit zu tun, man muss

sich gar nicht genau mehr drum machen.

Man kann den Code in eine Zeile schreiben, das funktioniert weiterhin wunderbar.

Ja, man kann tatsächlich

relativ viel in eine Zeile schreiben, aber dann,

Python muss man das dann auch signalisieren, dann schreibt man ein

Semicolon, wenn man Statements voneinander erfahren möchte.

Ja, das Semicolon gibt's auch in Python.

Man muss es normalerweise nicht hinschreiben, weil der Zeilenumbruch

das ist halt quasi gleiche...

Aber wenn man es hinschreibt, tut's nichts.

Wenn man es hinschreibt, da kann man auch alles in eine Zeile schreiben, ja, das geht.

Nicht, dass man das wirklich tun sollte, aber...

Das sieht ziemlich arg wie aus.

Ja, äh, genau.

Ja, also, das ist, ähm,

das ist eine Geschichte,

die halt immer wieder als, oh, das ist ja total schrecklich

angebracht wird, aber ich würde sagen,

einmal, sie ist nicht so schrecklich, und zum zweiten,

heutzutage nicht mehr, kein Problem mehr eigentlich.

Hier ist gerade der Piep, muss man eine Pflanze gießen jetzt, oder?

Nee, meine, ich hab vergessen,

meine Uhr zu sagen,

dass sie nicht stören, dass sie nicht rumlaufen soll.

Bei der Pieps-Goal, ja.

Ja, und deswegen piepst es bei mir.

Ich mach das gerade nicht auf lautlos.

So, äh, und, ähm,

eine andere Geschichte ist,

ja, genau, Python ist langsam.

Das ist auch immer etwas, was man halt hört.

Äh, oh mein Gott, nein!

Was tue ich jetzt?

Ich bin viel schneller mit, äh,

Ja, man muss irgendwie das in Go neu schreiben,

oder in, keine Ahnung, oder in C,

oder C++, viel besser, weil viel schneller.

Und, ist es langsam?

Äh, ja und nein.

Also, es kommt halt tatsächlich,

also man kann, solche pauschalen,

äh, äh, Urteile sind halt

immer falsch eigentlich,

deswegen, weil man das,

ja, man muss halt immer, äh,

quasi konkret sagen, was man damit meint,

wenn man, äh,

wenn man jetzt sagt, dass es schnell oder langsam,

und halt in einem bestimmten Kontext,

in einem bestimmten Kontext geben,

und dann kann man das halt sagen.

Also, ich könnte zum Beispiel sagen,

also, wenn ich, wenn ich Methoden aufrufe

in Python, dann dauert das,

ist das halt deutlich langsamer als jetzt

in C++ zum Beispiel.

Das ist tatsächlich so.

Oder wenn ich eine Funktion aufrufe in C,

ist es viel schneller als, als in Python.

Ähm, also wenn ich halt eine Vorschleife mache

und dann tausendmal eine Methode aufrufe

auf einer Klasse oder so,

dann ist das in Python viel, viel langsamer

als in C oder in C++.

Insofern, äh,

in diesem Kontext wäre Python tatsächlich sehr langsam.

Aber die Frage ist halt,

was man, was ein Programm so tut.

Und wenn ich jetzt zum Beispiel irgendwie

große Matrizen mit dem Alter multipliziere, ja,

und ich mach das halt irgendwie mit zwei NumPy-Arrays

in Python, ja,

wo die Syntax sehr schick ist,

und ich das in einer Zeile tue,

und ich, äh, äh, jemand anders überlegt sich,

hat gehört, Python ist langsam,

und macht das halt in C,

mit so einer dreifach verschachtelten For-Loop

über halt, äh, irgendwelche Datenstrukturen,

weiß ich nicht, irgendwie so ein Type-Memory-View,

oder wo, wo auch immer man das in C,

wie man das in C hält.

Das ist ja ziemlich viele Zeilen lang, ja.

Äh, dann wird die C-Implementation

deutlich lang, wird halt deutlich langsamer sein

als die Matrizen-Multiplikation

in, in Python, die halt

man in eine Zeile schreiben kann, wo man einfach nur schreibt

A mal B, ja.

Also C gleich A mal B, ja.

Und das könnte jetzt für manche Leute

überraschend sein, weil

wenn, wenn quasi sich jemand

die Mühe gemacht hat, irgendein Problem,

äh, also wirklich da so das letzte Kränzchen

Performance rauszuoptimieren,

und es eine Bibliothek gibt, die halt

dieses Verfahren dann benutzt,

sozusagen in Python, und man das in Python

benutzen kann, dann ist das halt auch in Python sehr schnell.

Und, äh, grad diese ganzen Berechnungsgeschichten,

Certific Computing-Zeugs,

das ist halt alles sehr schnell

in Python.

Wie heißt das, C-Types, oder?

Nein, nee, C-Types ist nochmal

eine andere...

Entschuldigt, bitte.

Es ist auch so, dass man quasi relativ einfach,

äh, nein, also

eine Geschichte, mit der man dann halt

gut optimieren kann, ist auch

sowas wie CYTON zum Beispiel. Also C-Types ist nochmal

eher zum Anbieten von irgendwelchen

C-Bibliotheken, aber

äh, äh, es gibt sowas

wie, das hatten wir, das haben wir vergessen.

Das müssen wir vielleicht gleich nochmal, äh,

es gibt nicht nur den Python, äh, den

C-Python-Interpreter,

es gibt auch andere Python-Interpreter, und es gibt

halt auch so Dinge wie CYTON, die

Python, beziehungsweise Python-ähnlichen

Code nehmen und den

in C verwandeln.

Ja, also das haben wir ja gar nicht vergessen.

Wir erklären das doch einfach jetzt. Genau, genau.

Äh, wenn ich, wenn ich jetzt irgendwas schneller machen

möchte, dann gibt's halt die Möglichkeit, okay, ich schreibe

das jetzt einfach in C und, äh,

muss mich da an ein paar Konventionen halten,

dann kompiliere ich das und dann, äh,

quasi importiere ich, kann ich das

halt in Python auch wieder importieren,

als wäre es ein Python-Modul oder so, und dann halt verwenden.

Aber ich schreibe einfach C-Code und

dann wird dann Python geladen, ich benutze die Python-Syntax

und bin schnell dabei, oder? Ja, ja, ja,

so ungefähr, das ist halt ein bisschen Arbeit,

aber das geht. Ähm,

äh, und

das ist vor allen Dingen halt auch so ein bisschen, man muss sich da einlesen,

wie man das, wie man so ein, so ein C-Modul schreibt

und so, ähm,

aber was man auch machen kann,

ist, man schreibt halt ein, äh,

das, was man, was auch immer man machen möchte,

äh, in einem Python-ähnlichen

Dialekt, äh,

wo man halt auch,

man kann einfach so Python hinschreiben.

Python-ähnlicher Direkt, das haben wir ja schon ganz viel

Programmiersprache, es gibt ja nur noch Dialekte, also wird ja immer besser.

Äh, man kann, also der wesentliche Unterschied ist,

dass man dazu schreiben kann, was die Typen sind, dass man

zum Beispiel schreibt, also dies ist jetzt ein Integer,

oder das hier ist ein Float,

und so. Ja, also man schreibt halt quasi noch

Typen mit zu

den Variablen. Wie wir das eben schon hatten, also

das mit der neuen Version jetzt schon so drin ist,

genau, so kann man das auch machen. Es gibt Type-Annotationen, aber die sind halt leider noch mal was anderes,

das funktioniert nicht mit Type-Annotationen.

Okay, das heißt, nochmal ein bisschen umdrehen. Ja, könnte man

vielleicht irgendwann auch machen, das gibt's aber noch nicht.

Äh, jedenfalls, wenn man das,

wenn man das jetzt so hingeschrieben hat,

äh, in diesem Dialekt, der sehr einfach ist

und aussieht wie Python

quasi, äh, mit, mit Typen

dran, äh, dann kann man das

in C kompilieren, und zwar

in, in C, dass halt man dann hinterher

wieder so kompilieren kann, dass es ein

C-Modul ist, das man dann wieder importieren kann.

Ja, so dass man halt das eigentliche C nie

muss eigentlich nur Python, kleiner Gelekt schreiben

und schon ist es C und dann

wird es schnell, so schnell wie C

und ist dann so schnell wie C

Problem gelöst, würde ich sagen

genau, und das ist halt schon sehr cool, das kann man sogar

in Jupyter Notebooks, kann man das als

Cell Magic, kann man das schreibt man einfach Prozent

Prozent Zeiten, schreibt dann halt irgendwie

die Funktionen rein mit

Annotationen, das ist der Typen und dann hat man etwas, was

halt so schnell wie C ist, halt direkt

so ohne, dass man das irgendwie neu starten muss oder so

einfach so da, das ist halt schon

sehr, das sind

ja, also ich meine

wenn man solche Sachen Leuten zeigt, die sagen Python ist langsam

dann, oh

genau, also

man kann, wenn man es drauf anlegt, kann man

sehr schnell werden, auch in diesen

Geschichten kann man halt auch diesen Global

Interpreter Log deaktivieren, dann

kann man halt sagen, so okay, ich weiß ja genau, was ich tue, ich

deaktiviere das Ding

also da ist das alles nicht mehr so

relevant

also da kann ich dann auch mit mehreren Kernen rechnen

genau, da kann ich dann auch quasi

das, was ich tun möchte, auf mehrere Prozessoren

verteilen, passiert auch

also wenn ich jetzt irgendwie, keine Ahnung, eben eine Matrizen

Multiplikation, jetzt weiß ich gar nicht, ob das meine

wenn ich irgendwelche Dinge auf NumPy Arrays mache

oder in Pandas mache, manchmal

ja, nicht immer, verteilt es dann halt

den Kram automatisch halt auf

alle Prozessoren, die ich da habe

ja, ansonsten gibt es

auch jede Menge schöne Bibliotheken, die man da benutzen

kann für Data Science

Geschichten, ist da halt zum Beispiel

Dask sehr zu empfehlen, kann man sagen

Dask, ja, heißt so

Data Ask, Dask, ich weiß, ich weiß

gar nicht genau, wofür das steht

Dask, nur D

Da ist ein Dask

Ja, genau

und

ja, es gibt auch so, da gibt es noch diverse andere

Geschichten, es gibt zum Beispiel Number

das ist halt ein Dekorator, den schreibt man

drüber und dann macht das halt so

Just-in-Time-Kompilierung, wie man das halt auch

von Java vielleicht kennt

das kann Dinge auch total

beschleunigen, da muss man gar nichts ändern, also

auch da kann man dann wieder Typen dazuschreiben oder so

aber auch da, oft ist es so, man

schreibt das einfach drüber und die Funktion wird viel, viel schneller

und

PyPy oder sowas habe ich noch

genau, das ist ein anderer Interpreter, den man verwenden kann

der hat dann diverse Probleme, nicht halt

der macht auch so

Just-in-Time-Kompilierungsgeschichten

und so, und ist dadurch

viel schneller, PyPy ist ein bisschen problematisch

das hat irgendwie

ist nicht mehr so auf der aktuellsten Version

von Python und

ist so ein bisschen leidet darunter, dass da nicht so genug Leute

dabei sind

es gibt auch

Stackless-Python

also es gibt noch diverse andere Interpreter

es gibt nicht nur den C-Python-Interpreter

aber man muss schon sagen, der C-Python-Interpreter

ist natürlich eigentlich derjenige, den

die Leute so verwenden und den man halt kennt

und auch die Referenz-Implementation

aber wenn man jetzt

in einem bestimmten Szenario mehr Performance braucht, dann kann es

durchaus sinnvoll sein, da halt sowas wie PyPy zu sein

also trau niemals den Benchmark, so wie ich

selbst gefälscht habe

ja, genau

ja, genau

ja, das ist auch so einer der Mythen

irgendwie Python ist langsam, was haben wir denn noch so

ja

also wir wissen, dass

Python jetzt einfach ist, wir wissen, dass

Python nicht langsam ist

oder nicht langsam sein muss

wir wissen, dass man für Python ja trotzdem ganz viele

mächtige Werkzeuge benutzen kann, wenn man dann

irgendwann mal gelernt hat, wie

ja

fällt dir noch was ein?

nö, zu hart

warum hat Python so lange gebraucht, bis es sich so

durchsetzte, was glaubst du?

das ist eine gute Frage, also ich hätte damit auch gar nicht

gerechnet, dass es jetzt passiert, also wenn mich jemand

quasi am Anfang

meiner Python-Begeisterung gefragt hätte, ob ich glaube

dass sich das mal so durchsetzt, dann hätte ich gesagt

ja, auf jeden Fall, und ich hätte wahrscheinlich

geschätzt, dass es viel weniger lang

dauert

und jetzt da angekommen ist, sagst du, es gibt auch gar keine Alternative

also auch Go, sagst du, das war ganz fancy stuff

aber

nein, das ist auch alles schön, also ich meine

ich finde Go auch toll, ich finde auch Rust toll

das hat alles schon so auch

vor allen Dingen andere Trade-offs

und ich meine, gut, das sind auch alles manchmal so sehr viel

modernere, also ich würde sagen, Go ist stark

die Go-Syntax ist sehr stark inspiriert

von Python

die also

ja, sind teilweise

sehr, sehr viel, also sowohl

Go wie auch Rust sind halt sehr viel jünger als

Python, insofern

ist das halt auch vielleicht nicht unbedingt direkt

miteinander vergleichbar, aber

Go ist halt einen schmaleren

Einsatzzweck, würde ich jetzt mal so

denken

vielleicht erinnert sich das auch noch irgendwann

und zwar, also wofür würdest du jetzt Go benutzen?

naja, Systemprogrammierung und halt Sachen, wo man

quasi

viel I.O. hat und

viel CPU braucht

das ist

also wenn man jetzt zum Beispiel sowas wie einen Datenbank-Server schreiben will

oder so, wobei ich nicht weiß, ob Go da wirklich

also ich weiß auch nicht, ob das jemand schon mal gemacht hat, aber das könnte man

eventuell tun

also

viel Sachen machen muss, heißt tatsächlich

Input-Output die ganze Zeit

Input-Output plus irgendwie viel CPU braucht

also wenn man nur Input-Output machen muss

und I.O. multiplexen, das geht in Python auch total super

dann nimmt man Async.io oder

die neuen Frameworks, die es da gibt

weiß ich nicht, Trio da

oder

was auch immer

Trio von David Beasley

von der Europython, das war auch sehr toll, aber ich glaube

das ist nur ein Dialekt von Async.io

Ja,

genau, die sind auch relativ

kompatibel irgendwie zueinander

das ist

genau, damit geht das auch alles total super

dafür brauche ich jetzt nicht

da

ist der

GIL nicht unbedingt ein Problem

der Global Interpreter-Log

ich kann auch mehrere Prozesse starten oder so

aber wenn ich jetzt sowas habe wie eine Datenbank

oder so, dann ist das mit mehreren Prozessen unter Umständen

blöd, wenn ich jetzt

also da könnte es sein, dass es sinnvoll ist

also, dass ich halt

ein Prozess starte und dann

einen Prozess habe, der halt auf vielen

Prozessoren läuft und dann auch

I.O. mäßig irgendwie ganz viel nach draußen macht

und da wäre Go wahrscheinlich super

ja, oder Rust hat halt auch

schöne Eigenschaften, dass halt da irgendwie

diverse Sachen garantiert sind

zur Compile-Zeit, das ist halt toll

ja, aber

Moment, jetzt musst du nochmal kurz erklären

sind die Sachen garantiert zur Compile-Zeit

da die bei Python nicht sind

da musst du jetzt ganz kurz nochmal versuchen

das so zusammenzufassen, das habe ich jetzt nämlich noch nicht so ganz

durchblickt. Ach, ich weiß nicht, vielleicht würde das auch ein bisschen

zu weit, also bei

Rust ist es halt so, dass man quasi

garantieren kann, dass es keine Speicher-Lags gibt und so

bei Python sollte das jetzt auch nicht passieren

wenn man das schafft, irgendwie

außer dadurch den Speicher wirklich zu

verbrauchen, also wenn man einfach nur irgendwas macht

also irgendwas erzeugt, irgendwas wieder

wegschmeißt und trotzdem

quasi der Prozess

der Speicher des Prozesses, den man da halt gestartet hat

immer größer wird, dann hat man halt einen Bug

gefunden, also gibt es natürlich auch

immer wieder, sollte

aber auch nicht passieren in Python

aber es gibt da nicht so harte Garantien

also das ist, und man kann es

auch kaputt machen, wenn man

irgendwelchen Unsinn anstellen, einen Gabel-Projektor importieren

dann drauf referenzieren auf die Objekte, die man da findet

ja, man kann da beliebig

kaputte Sachen natürlich machen

genau

ja

aber diesen Anwendungsfall

dass man viel I.O. und viel Prozessor

gleichzeitig braucht, den haben glaube ich

gar nicht so viele Leute, insofern ist es halt auch so

dass ich finde, dass der richtige

Schritt sozusagen, oder das, ich finde

das ist ein sehr netter Punkt

quasi, man hat, wenn man jetzt Reference-Counting

in Python hat

man hat halt gute

Single-Thread-Performance, man hat sehr gutartiges

Latenzverhalten, das alles

verhält sich alles sehr schön

gut verlierbar

damit dann auch, genau, opfert damit

halt sozusagen, dass es auf mehreren Prozessoren

laufen kann, aber

den Fall, dass man jetzt Software hat, die

tatsächlich auf vielen Prozessoren laufen muss

den haben die meisten Programmierer

gar nicht, ja, denn dieser Anwendungsfall

trifft ja nur einen kleinen Teil

Spieleprogrammierer

Spieleprogrammierer und unter Umständen ja, Leute, die

einen Datenbank-Server schreiben oder irgendwie einen Web-Server

ja, einen Web-Server nicht mal

oder ich weiß es gar nicht

mir fällt es sogar tatsächlich schwer

mir da

Anwendungsfälle zu bauen, die das

irgendwie erfordern

insofern ist halt diese Beschränkung

ist halt nicht so schlimm, wie sie aussieht

und in Java, das sieht total toll aus

auf dem Papier, irgendwie kann auf vielen Prozessoren

laufen

in der Praxis ist es aber blöd, das Single Thread Performance

ist nicht gut und

also das, was halt die meisten Leute interessiert, wenn sie

jetzt irgendwie irgendwas starten, ein Programm starten

und das tut dann irgendwas, dann ist es halt

das ist halt langsamer, ja, das ist halt

genau der Grund, warum, wenn ich jetzt in so einer

IntelliJ IDE auf den Kopf drücke

dann, dass es halt irgendwie sich alles so zäh anfühlt, weil

ja, Single Thread Performance ist nicht so toll

und

das ist, und Latenz

nicht vorhersagbar, klingt nicht so schlimm, ist

aber in der Praxis doof, weil manchmal

äh

zur falschen Zeit irgendwie, wenn was

mehr Latenz braucht, kann halt sein, dass es halt unter Umständen sehr teuer wird

äh, je nachdem, was man

da für Services betreibt und

ja, das sind eigentlich

das sind Dinge, die hören sich harmlos an, sind aber ziemlich schlimm

während in Python, das hört sich ziemlich schlimm an

ist aber gar nicht so furchtbar

und wenn man dann tatsächlich so eins von diesen Problemen hat, dann kann man halt

da drum herum arbeiten, oft, indem man

dann halt viele Prozesse startet

gut, dann muss man irgendwie dazwischen

kommunizieren, muss irgendwie vielleicht Chat Memory haben

oder solche Sachen, aber

aber

es geht

selbst wenn man jetzt in einer Sprache ist, wo es theoretisch möglich ist

das alles in einem Prozess zu machen, ist es auch oft

nicht so eine gute Idee, weil

äh, das dann oft sehr kompliziert

wird, äh, und man halt auch

ordentlich locken muss und

ja, wirklich sich

vorzustellen, was passiert, äh, wenn

ein Prozess auf mehreren CPU

parallel unterschiedliche Dinge tut

äh

das ist, das ist einfach für auch

die allermeisten Programmierer überfordert das total

also mich überfordert das total, also

äh,

du kannst nicht einfach multidimensionale Matrizen

in deinem Kopf schungieren, also

ja, also, ähm, das ist

so, und wenn man jetzt sozusagen

etwas, was zu schwierig für die meisten Leute ist

und selten gebraucht wird, halt, äh

sagt, das ist etwas, auf das optimieren

wir hin, dann ist das irgendwie einfach

naja, ich weiß nicht, ob das so sinnvoll ist, aber

ja. Wenn ihr anderer Meinung seid,

schreibt eine E-Mail, ne, an handels-

handels-podcast.de

Ja, also, ich meine, das ist jetzt nicht die

reine Wahrheit, sozusagen

sondern es ist natürlich sehr gefärbt

äh, ich mag halt Python, aber

ja

ich finde, die haben da einfach einen sehr schönen

Sweet-Spot, äh, quasi

Klingt, als ist das eine Sprache,

die auch zukunftsträchtig durchaus ist, ja

Achso, hatten wir das, hatten wir eigentlich das

äh, Send auf Python schon?

Nein, das haben wir noch nicht, äh, gemacht

das wäre jetzt tatsächlich am Ende der Mythen noch der Punkt

Vielleicht sollten wir das nochmal kurz, äh, äh

Send auf Python, das hört sich ja sehr philosophisch an, so ein bisschen

nach, äh, fernöstlicher

Philosophie

Wir rufen es gerade auf und, äh, möchtest

du es tatsächlich zitieren, oder?

Ich, ich, ich denke schon, tatsächlich, also man kann sich das

auch selber angucken, wenn man einfach so einen, so

Python startet, also einfach Python eingibt

und dann sagt import this, dann

äh, äh, erscheint

erscheint das und das, äh,

bringt halt so ein bisschen zum Ausdruck, was so

äh, Python

besonders macht oder, äh, wie man Dinge

in Python tut und wie sie vielleicht ein bisschen anders

sind, als man das normalerweise vielleicht gewohnt ist

und, äh,

ähm, ja, da sind halt eben solche

solche Dinge drin,

ich weiß nicht, ne, stimmt, also die alle durchgehen, muss man

vielleicht nicht, das ist halt

Ja, das ist

ja, kann man, kann man

Ja, ich glaube, das steht auch am Anfang von, von der

Pep, äh, Version, kann das

auch sein, also von dem Style Guide, den es

für Python auf der offiziellen

Seite gibt? Ja

Ich weiß nicht so genau, aber kann so, kann gut sein

Ich, äh, ja, dann halt

solche Sachen wie explizit ist besser als

implizit, ja, das ist halt auch, so man, man

merkt auch dem Ding an, dass es so ein bisschen sich halt

in, in, in viele, viele Punkte, äh,

sind so abgrenzend Richtung Pearl, glaube ich

Ja

Also, äh,

ja, das, äh,

einfach ist besser als komplex, ja, komplex

ist besser als kompliziert

Ja, äh, flach ist

besser als, äh, verschachtelt

Äh, ja,

äh, ja, sparse, weil ich das gar nicht

in diesem Kontext übersetzen soll, aber es ist halt

sozusagen, ähm,

ja, sparse ist better

äh, than dense, äh,

sozusagen, lieber übersichtlich

als, äh, also nicht alles in eine Zeile packen

Genau, genau, sozusagen, äh, ja

Lesbarkeit zählt

Also zwischendurch mal leerzeilen lassen, äh,

höre die Lesbarkeit ungemein

Ja, das ist überhaupt eines der Designziele bei Python gewesen, dass man

das halt, äh, weil

Code einfach viel öfter gelesen als geschrieben

wird, das vielleicht Sinn macht, das

darauf zu optimieren, dass man das gut lesen kann

Also wenn euer Nachbar den ja abends aus dem Bett klingelt, dann noch lesen kann, was

er da für ein Paar geschrieben hat, dann seid ihr vielleicht bei Python

besser aufgehoben als bei anderen

Sprachen, ja

Ja, ähm,

ähm, genau, ja, äh,

Spezialfälle sind nicht

speziell genug, um, äh, die Regeln

zu brechen, aber

Pragmatismus besser oder Practicality

äh, ist besser als, als, als die reine

Lehre als Purity

Wie lange schreibst du deine Zeilen?

Äh, ich hab das letztens

erst geändert, glaube ich, auf

130, ich glaube, ich glaube,

79, 130, 150, irgendwie so

Ja, ja, ich hatte das ganz lange, also bis vor kurzem

hab ich tatsächlich auch, äh, 79

verwendet. Also das für die Leute, die

alte Monitore verwenden, die konnten auch nicht mehr lesen

oder die halt gescherte Terminals verwenden mit mehreren Seiten

Ja, Terminals sind vor allen Dingen, genau

äh, ja, äh, dann

ist halt bei 80 Zeichen

Schluss und, äh, genau

das wäre natürlich, deswegen hab ich das auch ganz lange gemacht

aber tatsächlich ist es so, dass heutzutage

hat man diese Anwendungsfälle

fast nicht mehr und, äh

die Monitore kann man meistens besser

coden, oder? Also es sieht besser aus auf einem eigenen

Monitor, oder? Ja, es ist

vor allen Dingen auch, äh, es gibt halt viele Fälle, wo es

halt schwierig wird, wenn man dann immer quasi nach

der, nach der Anzahl Zeilen umbrechen

äh, Zeichen umbrechen muss

dann muss man halt komisch rumformatieren

äh, und dann lieber

schön, und dann lieber schön, ja, und das

bricht halt dann diese, diese Begrenzung

so gerade bei Tests, finde ich, ist es sehr schwer, das

einzuhalten, weil oft muss man halt lange

Testnamen haben

oder, wenn das irgendwie sprechend sein soll

und gut lesbar sein soll, dann, äh

im gleichen Namen noch umgebrochen, uh, ja

ja, genau, dann kann, kann man eigentlich

nicht mehr umbrechen und dann wird's halt einfach lang

also, daher bin ich jetzt, ich, ich

weiß nicht, ich glaub, 130, äh, ich weiß nicht

noch, wie die, wie die konkrete Zahl ist

äh, vielleicht rede ich auch Unsinn, ich benutze das halt

ich formatiere meinen Code auch mit Black, also

ich nehme das, was Black sagt

und kümmere mich nicht mehr drum, ich hoffe, die haben das

irgendwie gut überlegt und, ja

ähm

genau, was haben wir noch, äh

ja, genau, Fehler sollten nicht einfach

so, äh, still, äh

weggeworfen werden, sondern sollten immer

sichtbar sein. Also wir haben ja auch

ein Python Assertion oder sowas, ich weiß nicht, ist das

ein besonderes Feature oder gibt's das bei Ansprachen auch

alles? Assert, das ist ein, ja, das ist

ein, also, gut, das ist ein Keyword der Sprache, das, äh

mit dem man halt, äh, überprüfen

kann, ob irgendeine Bedingung oder

irgendwas wahr ist, was sein soll, und wenn's halt

nicht so ist, dann, äh, wirft

das halt einen Fehler, ja

kann man, kann man einen guten Test schreiben

ja

äh

genau, ja

Fehler sollten irgendwie nie still weggeworfen

werden, außer man bringt sie zum Schweigen

irgendwie explizit

äh, ja, wenn man, wenn

man irgendwie, äh, mehrere Dinge zur Auswahl

hat, ja, äh

sollte man irgendwie der Versuchung

widerstehen, irgendwie einfach zu raten

äh, es sollte nur ein und, äh

möglichst nur

einen, einen einzigen, äh

äh, offensichtlichen Weg geben

wie man Dinge, äh, tun, äh

tun sollte, und das ist natürlich ganz, ganz klar

irgendwie ein Ding gegen Perl, weil Perl ist halt

das Gegenteil davon, es gibt irgendwie

Perl ist auch, ich weiß nicht, da gibt's auch einen, einen

ja, du kannst es halt irgendwie

so machen, es gibt viele Wege zum

Ziel, ne, du kannst es halt so machen, wie es dir am besten

gefällt, was halt dann in der Praxis dummerweise

dazu führt, dass es jeder irgendwie anders macht, und

äh, das, äh, die Lesbarkeit

natürlich extrem, weil, weil jeder schreibt

dann halt sozusagen sein, sein Perl-Idiom

und, ähm, man kann halt nicht mehr

so gut, also bei, bei manchen Leuten war es

so, wenn man das nicht angeguckt hat, dann

äh, äh

was, was, was ist das überhaupt, es gibt

ich meine, teilweise ist es sehr schön, ich hab auch mal

ich hab das mal, äh, äh

ein Buch gelesen von, von, äh

äh, Damien Conway, ich weiß nicht genau, Higher Order

Perl oder sowas, äh, auch ganz

viele verrückte Sachen gemacht, also was hab ich denn mit Begeisterung

verwendet, und fand das total toll, was man alles

für komplexe Geschichten irgendwie da in wenig

äh, Zeichen irgendwie unterbringen kann

aber ich glaub, äh, ich würd das heute

wahrscheinlich nicht mehr lesen können, und meine Kollegen damals

oder kurz danach konnten das wahrscheinlich auch nicht mehr

lesen. Oder du selber, ich weiß nicht, zwei Stunden

später. Ja, ja, zwei Stunden später ist halt dann vorbei

und das ist, das ist nicht ganz so, es ist nicht

optimal, das ist irgendwie, da ist, da kann man noch was

verbessern. Zu lange danach gearbeitet, dann steht man morgens wieder

auf und dann so, oh, was hab ich jetzt mal da gemacht, ähm

äh, ähm

ja, also, das, äh

ähm, ja, heutzutage

Also dokumentiert immer schön euren Code, in Python könnt ihr

damit sogar Doctests machen, ne, das heißt, ihr testet

dann selber auch das, was ihr dokumentiert

Ja, weiß ich aber nicht, ob das so ein schlauer, also

ob das so eine gute Idee ist, kann man machen

Nein, macht man nicht. Ja, ich

würde eher explizite Tests

schreiben, so, und ich würde auch PyTest nehmen

es gibt halt auch das eingebaute

Test-Framework, äh, von, von

Python, das sich stark an

äh, JUnit, äh, glaub ich

einem Unit-Testing von, von Java irgendwie orientiert

hat, äh, ich weiß gar nicht, wie das heißt

und, äh,

das ist komisch, weil es ist halt nicht so richtig

Pythonisch, weil

es ist halt halt so, die Dinge wie, äh,

Konventionen, per Konvention sind

halt die Methodennamen CamelCase

und nicht mit Underscore, normalerweise

Underscore, und da ist aber CamelCase

so wie in Java, und das ist halt, sieht

komisch aus, äh,

und diverse andere Dinge sind auch eigenartig

das fühlt sich oft eher an, als würde man

Java schreiben als Python, und das ist halt eigentlich nicht schön

und deswegen würde ich eben nicht das

eingebaute Ding nehmen, nicht das eingebaute Unit-Test-Framework

sondern, wobei, wobei von den Features her

die können quasi das gleiche

Aber die Dock-Tests ist ja jetzt nicht, äh, oder, oder?

Dock-Tests weiß ich gar nicht

Weil die Dock-Tests ja einfach in den Dokumentationen dann irgendwie die Funktionen testen

Ich, ich weiß, äh, weiß gar nicht

ob das, ähm

wie die ausgeführt werden, oder welche Testrunner

die dann halt, äh, äh, ausführt

Wenn das, wenn man den einstellen kann oder so, das kann

auch alles gut, aber

äh, ich, ich würde halt

eher als Testrunner eigentlich immer eher PyTest verwenden

Ja, ja, ich glaube PyTest

nimmt auch die Dock-Tester mit an, oder so

Das, das kann gut sein, das, ich hab das, ich hab noch nie

Dock-Test, äh, aber das ist auch alles nur geraten, ähm

Keine Ahnung, muss man sich mal, muss man sich mal angucken

Vielleicht ist auch alles gut

Aber ich würde auf jeden Fall, wenn man, das ist halt auch so

eine unoffensichtliche Geschichte, ne, wenn man vielleicht anfängt

dann denkt man sich so, ach, ich nehme jetzt das eingebaute Unit-Test

Framework

Implementation ist hard to explain

It's a bad idea, deswegen

send off, also, ihr seht schon

Wenn wir jetzt irgendwie anfangen rumzustammeln, dann ist das alles

totale Grütze, was sie da gebaut haben, natürlich, ähm

Äh, ja

Ja, now is better than

never, ja

Ja, also das Do-It, ne, so ein bisschen das Nike-Prinzip

Also einfach anfangen, machen, Prototyping

Ob schon

Niemals

Vielleicht, äh, oft besser

sein könnte als genau jetzt

Ja, man weiß

Wenn man das so genau

Wenn die Implementation schlecht zu erklären ist

Äh, es ist eine schlechte Idee

Wenn die Implementation leicht zu erklären

ist, könnte es sein, das ist eine gute Idee

Ist, aber

Ja

Ja, Namespace ist eine total tolle Idee

Sollte man irgendwie mehr von machen, ja

Ja, das ist

Was ist das an Namespace? Vielleicht musst du das nochmal kurz sagen

Ähm

Sozusagen

ein, ein, ein, ja, wie kann man das generell

Also, äh

Korrekt übersetzen wir ja, der Namentraum, also wenn man

sein, äh, Variable genauso

nennt wie die Nachbarvariable, dann ist es relativ

schwierig, die dann irgendwann auseinander zu halten, weil

wenn man das eine Kind rufkommt, entweder beide oder

nur eins von beiden, oder gar nichts mehr, oder

Und dann kann man das mit einem Namensraum-Präfixen

sozusagen, in dem dann halt ein Name eindeutig ist

Was so ein bisschen, ich weiß nicht, ob da ist

eine leichte Ironie, fürchte ich, drin, weil

bei beiden ist das halt nicht so schön getrennt, und wenn man jetzt

zum Beispiel vom irgendein

Modul-Importstern sagt, dann

überschreibt einem das gnadenlos halt

irgendwie Dinge, die man

selber definiert hat vielleicht, oder aus

anderen Modulen oder so, die halt in dem

Man kann auch übrigens die ganze Standardbibliothek überschreiben, wenn man

einfach viel Namen verwendet. Ja, ja, kann man

alles machen, es gibt auch Leute, die dann, um das zu

gehen, sagen, die dann irgendwie import dieses

vom das

als irgendwie was ganz anderes,

damit sie auf keinen Fall irgendwie sich Dinge

überschreiben und so

Ja, das ist alles so ein bisschen

Aber

im Grunde gibt es natürlich schon

Namensräume in Python, und

ja, das funktioniert

eigentlich auch ganz gut

Ja

Wir sehen, auf Python

haben wir jetzt schon ein bisschen den Zuhörern

auch noch nähergebracht, also was man darunter so ein bisschen

versteht, wie man, ich sag mal, ganz

besonders entspannenden Python-Code

schreiben, wie man da richtig rangeht, also

tatsächlich müsst ihr es nicht zu komplex machen, ich glaube, wenn man

die einfache Lösung ist besser, keep it

short and simple, das ist

glaube ich immer eine gute Idee, auch

unabhängig vom Python, aber

dadurch wird es halt sehr lesbar und sehr

korrigierbar, ihr könnt auch sehr gut damit kooperativ

arbeiten mit anderen, weil ihr, glaube ich, relativ

schnell verstehen werdet, was sie da denn so getan

haben, ich meine, auch da gibt es Ausnahmen, aber

das kann auch sein, dass das die

äh

ich weiß nicht, ob es immer gut ist, wenn man schnell versteht, was andere da getan haben

das könnte auch so, äh

ja

wie das bei Douglas Adams oder so

irgendwie, als der Babelfisch eingeführt wurde

und alle sich plötzlich verstanden haben, dass es gab den

schlimmsten Krieg ever, oder

keine Ahnung, irgendwie so

Ja, das ist immer jetzt hier, das ist ein paar lustige Sachen, die ich letztens gesehen habe

irgendwie mit Lesen von Gesichtsmuskulatur

und sowas, dann die Worte deines

inneren Gedankens aufschreiben kann und so, das ist

ja

Naja

Ja

Alter Ego heißt das Ding

Ach, okay, ja, da wird auch noch eine Menge

interessante, werden noch eine Menge interessante

Dinge passieren, glaube ich

Ja, aber ansonsten, ich weiß nicht genau, sind wir

so ein bisschen durch, ne, mit der Einführung

Ja, ich würde das tatsächlich sagen, wir sind langsam am Ende der ersten

Folge angekommen, also wir haben es

quasi fast geschafft, also was haben wir jetzt gerade schon gemacht

wir haben uns dann auf Python kennengelernt, haben uns

ein bisschen an die Einführungstools gegeben

so ein bisschen die Features der Sprache uns

angeschaut, irgendwie

Ja, ja, wie kann man einen Einstieg

finden, wofür wird das eingesetzt

Also falls ihr Fragen habt, wie gesagt

schreibt uns gerne an unsere E-Mail-Adresse

da kriegt ihr alles nochmal

erklärt, ihr filmt mit Sicherheit auch ganz viel im Internet

in Tutorials, es gibt ja unzählige

schöne, spannende Seiten

die Suchbegriffe werdet ihr bestimmt schon finden dafür

Ja, genau, dann

würde ich sagen, in den

nächsten Episoden gehen wir dann halt mal so

oder da machen wir halt so irgendwie ein Thema

pro Episode und gucken einfach mal, dass wir

das ein bisschen näher beleuchten. Genau, nicht so der ganz allgemeine

Schwank, sondern vielleicht tatsächlich irgendwie

was Spezielles, irgendwie eine Modul-Juridik

oder eine Technik oder

irgendwie eins der Topics, die noch spannend sind

Wenn ihr Vorschläge habt, wenn ihr irgendwas Besonderes hören wollt

kommt gerne, sagt da von Voss

der, ja, Jochen wird euch bestimmt

was dazu erzählen können

und ich stelle Ihnen blöde Fragen, also so ist das

Ja, und vielleicht beschließen wir noch

ein bisschen mit Veranstaltungshinweisen, wir sind ja hier

Wir sind ja jetzt in Düsseldorf, also

wenn ihr selber Veranstaltungshinweise habt

dann sagt doch bitte gerne Bescheid

dann können wir auch eure Veranstaltungen jetzt im

deutschsprachigen Raum gerne promoten und hier vorstehen

Bei uns ist nächste Woche

nächstes Wochenende jetzt hier Python Sprint

Das ist immer eine tolle Gelegenheit, so ein bisschen

Leute kennenzulernen, ich glaube, der ist diesmal schon voll

und auch die Wartezeit ist schon voll, aber er ist glaube ich zweimal im Jahr

gibt es bei Meetup oder

bei PyDDF, also die Düsseldorfer

PyDDF.de, super tolle Leute, immer ganz

viele entspannende Vorträge

Schaut euch das auch einfach mal an und

ja, tatsächlich

zweimal im Jahr, also schaut einfach

mal vorbei. Ja, also wenn ihr

die Events in eurer Nähe promotet, schickt ihr auch

eine E-Mail einfach an hallo.pythonpodcast.de

Ja

Ansonsten, genau, was faszinierend ist, es gibt einmal

die Python User Group

Düsseldorf, PyDDF, die halt auch diese

Sprints organisiert. Es gibt

einen Python-Foo, das ist

im lokalen Düsseldorf

Microspace in Chaosdorf, das ist einmal

wöchentlich, ist deutlich kleiner

Es sind mehr so

immer die gleichen Leute, die da hingehen

Die ersten zwei Mal im Monat ist glaube ich

für Anfänger und die letzten zwei Mal ist

Ja

Aber ich finde, es ist auch ganz toll,

irgendwie sollte man

sich nicht von abschränken lassen,

das ist halt so ein bisschen, dass man so reinkommt und denkt so

Ist die Veranstaltung jetzt

oder ist

es gerade irgendwas anderes?

Naja, das sind alles sehr nette Leute

Dann, aber genau, vielleicht

wenn man gerade mit Leuten mal persönlich irgendwie ein bisschen mehr

reden will, ist das vielleicht ein bisschen besser, weil

PyDDF ist eher vortragsorientiert

und immer ein bisschen etwas größerer Rahmen

Dann gibt es

das Data Science Meetup in Düsseldorf

das ist auch mal sehr gut besucht

wo es häufig um Python-Themen

auch geht

QuantFinance bei Jesus Statistik

für fortgeschrittene Themen auch

Genau, und dann gibt es

die Python User Group Köln

einmal im Monat

gibt es da ein Treffen, das ist auch

das ist auch immer meistens so 20-30

Leute und

es gibt immer interessante Vorträge, danach geht man

irgendwo essen

Ach, das ist bei PyDDF auch so

Hm

Hm

Hm

Ja, es ist also mehr im Umfeld, wie gesagt, wenn ihr

irgendwo aus, weiß ich nicht, schieß mich tot, Wien

München, von der Ostsee

in der Uckermark, irgendwas findet, dann sagt Bescheid

Ja

Da stehen wir hier gerne auch vor

Ja, ich kann nur sagen, Jochen, vielen Dank

Ja, danke Dominik

Ein bisschen schlauer geworden

Tja, kann's gehen

Ich hoffe, die Hörer haben auch ein bisschen Spaß gehabt

Ja, dann bis zur nächsten Folge

Bis zum nächsten Mal

Tschö