Transkript: PP01 - Die erste Sendung

· Zurück zur Episode

Vollständiges Transkript der Episode. Zeitstempel beziehen sich auf die Audiowiedergabe.

Dominik

Ja, hallo liebe Hörerinnen und Hörer.

Dominik

Willkommen beim Python Podcast.

Dominik

Allererste Folge, allererste Episode.

Dominik

Wir wollen euch heute ein bisschen führen und folgende Fragen beantworten.

Dominik

Was machen wir eigentlich und warum?

Dominik

Wie finde ich einen Einstieg in Python?

Dominik

Also, wenn ich Anfänger bin, wie kann ich damit anfangen?

Dominik

Und geben ein paar Anfänger-Tipps.

Dominik

Und dann wollen wir noch ein bisschen erklären, wie Python funktioniert, ein paar Mythen über Python klären und so weiter.

Dominik

Wenn ihr Fragen, Anmerkungen zu dem Podcast habt, Kommentare, alles was Gutes, was Schlechtes, dann sendet doch einfach eine E-Mail an hallo.pythonpodcast.de.

Dominik

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

Dominik

Ja, was machen wir eigentlich?

Dominik

Kleine Einführung.

Jochen

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

Jochen

Ja, also wir

Dominik

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

Dominik

Wer sind wir denn?

Hallo Jochen.

Jochen

Hallo Dominik, genau.

Jochen

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

Jochen

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.

Jochen

Aber jetzt so deutschsprachige gab es immer mal wieder Versuche, aber letztlich momentan, soweit ich weiß, jedenfalls keinen, der kontinuierlich aktualisiert wird.

Jochen

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

Jochen

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

Jochen

Und ja, so sind wir dann zusammengekommen.

Jochen

Und ja.

Dominik

Wie kamst du zu Python?

Jochen

Ja, das ist jetzt auch schon eine Weile her.

Jochen

Irgendwann so 2000, Anfang der Nullerjahre sozusagen.

Jochen

Ich war ursprünglich da eher so auf der auf der Pearl-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, auch ein paar Dinge, die ich da gemacht habe, irgendwie doch eher in Python zu machen als in Pearl.

Jochen

Und dann habe ich das erst so ein bisschen gedacht, ja, naja gut, ob ich das wirklich toll finde, aber habe ich relativ schnell, war ich da ziemlich begeistert von Python und mache seitdem eigentlich nur noch Python und kein Pearl mehr.

Dominik

Ich bin ja schon ein ziemlich alter Hase, wenn ich das so sage.

Jochen

Ja, alter Sack, ja.

Jochen

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

Jochen

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

Dominik

Bist du da Jochen, also ich gehe davon aus, dass du mir alles erklären kannst, was ich an tollen Fragen habe.

Dominik

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

Jochen

Genau, und wie bist du zu Python gekommen?

Dominik

Ja, ich bin ein Zümmchen Rucki noch.

Dominik

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

Dominik

Ich habe zwar auch schon damals in der Schule angefangen mit ein bisschen programmieren und war seit 1996 in der Internet AG.

Dominik

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

Dominik

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

Dominik

Ein Umdrehen von vorne beginnen.

Dominik

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

Dominik

Eigentlich wollte ich nur ein paar Daten analysieren und bin dann über ein Python-Tutorial gestolpert.

Dominik

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.

Dominik

Und so bin ich bei Python gelandet.

Jochen

Ja, von einfach mal nur ein paar Daten analysieren zu neuberuflicher quasi.

Jochen

Oh, da klopft jemand an die Tür.

Dominik

Es hat ein Spielzeug in der Hand.

Jochen

Nun gut, ich hoffe, das stirbt nicht so weiter.

Jochen

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

Jochen

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

Dominik

Das war wirklich so.

Dominik

Ich kam da rein, hab den ersten Code geschrieben, habe gedacht, ja genau, das wollte man sagen, das wollen wir machen.

Jochen

Das stimmt.

Hammer.

Dominik

Also liegt bestimmt auch vielleicht an der Einfachheit der Sprache, aber da kommen wir vielleicht ein bisschen später zu, was für Features Python alle hat.

Dominik

Ja, vielleicht fangen wir nochmal an, warum machen wir das eigentlich?

Dominik

Für wen ist denn dieser Podcast genau?

Dominik

Was guckst du?

Dominik

Für eigentlich jede, der sich für Python interessiert?

Jochen

Ja, ich denke schon.

Jochen

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

Jochen

Also ich meine, das hat es schon immer getan.

Jochen

Also es war schon immer recht populär, aber in letzter Zeit, gerade eben über Data Science und verwandte Themen, Machine Learning, Deep Learning, Dinge, die halt auch sonst sehr stark gehypt werden, ist Python sehr, sehr groß geworden.

Jochen

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.

Jochen

Und aber wenig Angebote sozusagen, die diese ganzen Leute irgendwie abzuholen.

Jochen

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

Jochen

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.

Jochen

Wir hatten uns ja auch schon so ein bisschen Gedanken zu gemacht, was man da alles mal, worüber man, über welche Dinge man mal so eine Sendung machen könnte.

Jochen

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.

Dominik

Ja, genau.

Dominik

Also ich glaube, bevor wir euch erzählen, was wir heute denn genauso machen, wir haben ja einen kleinen Einschild schon gegeben, gibt es tatsächlich diese ganzen vielfältigen Python.

Dominik

Und wir wollen uns tatsächlich in mehreren Episoden das ganz interessante mal so ein bisschen berichten.

Dominik

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

Dominik

Es gibt ziemlich einiges, was wir jetzt hier auf dem Titel haben.

Dominik

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

Dominik

Ja, was machen wir heute?

Dominik

Das ist der Einstieg in Python.

Jochen

Genau, einfach mal so eine Übersicht.

Dominik

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

Dominik

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

Dominik

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

Dominik

Und zwar aus Amsterdam das heraus entwickelt.

Dominik

Ja, also ist schon gute, wie lange?

Dominik

Fast 30 Jahre alt, so tatsächlich.

Dominik

Würde man gar nicht denken.

Dominik

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

Dominik

Und falls irgendwelche Nafragen kommen, ja, wir verwenden nur noch Python 3.

Dominik

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

Dominik

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

Dominik

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

Dominik

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

Dominik

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

Jochen

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

Jochen

Also ich meine, das ist halt auch möglicherweise einer der Unterschiede zu Sprachen wie, jetzt sehen wir mal, JavaScript oder so, wo sich halt in letzter Zeit sehr viel getan hat.

Jochen

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 machen, so wie iteriert man denn jetzt nochmal über irgendwie quasi die Keys und die Values irgendwie in einem Hash oder so.

Jochen

Wenn man danach guckt, dann findet man halt zu jedem Jahr quasi und zu jeder neuen ECMA-Skript-Version eine andere Art, wie man das am besten jetzt tun sollte.

Jochen

Und da ist Python eigentlich sehr, sehr stabil geblieben.

Jochen

Das ist heute noch, ja gut, da haben sich auch an der Stelle hat sich auch tatsächlich was geändert, aber sehr moderat und mehr oder weniger so Vorschleifen.

Jochen

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

Jochen

Also 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, dann hat es quasi gefragt.

Dominik

Das ist ja auch ein paar implementiert.

Jochen

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.

Jochen

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

Jochen

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.

Jochen

Das muss irgendwann Ende der 90er gewesen sein.

Jochen

Habe ich aber kaum mit Python, also da habe ich nicht wirklich Python gemacht, um Python zu programmieren, sondern ich habe es halt verwendet in irgendwelchen Skripten und so.

Jochen

Oder irgendwelche Skripte angepasst und dann später so wirklich angefangen, damit größere Dinge zu programmieren.

Jochen

Habe ich glaube mit Python 2.1 oder so.

Jochen

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

Dominik

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

Dominik

Der Umfang der Standardbibliothek?

Jochen

Ja, nee, ja, natürlich.

Jochen

Also da ist einiges dazugekommen, aber das ist gar nicht so.

Jochen

Also was halt, ja, so diverse Sprachfeatures, also Generatoren, ich glaube, die kamen irgendwie mit 2.2 oder so.

Jochen

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

Jochen

Überhaupt, ja, diverse Keywords Yield, aber ja, das stimmt, aber das ist auch schon relativ lange da.

Jochen

Also ich weiß nicht, wann 2.2 rauskam, müsste irgendwann 2002-3 irgendwann gewesen sein oder so.

Jochen

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

Und wann kann das anfangen?

Dominik

Version 3 erst?

Jochen

Nein, das

Jochen

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

Jochen

Und es hat sich auch nochmal was zu 3.6 geändert.

Dominik

Gab es da vorher ein externes Modul für?

Jochen

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.

Jochen

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.

Jochen

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

Jochen

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.

Jochen

Und das war kein so wirklich schöner Zustand.

Jochen

Es war auch nicht total furchtbar, das ging alles.

Jochen

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

Jochen

Irgendwie so I.O.

Jochen

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

Jochen

Aber so wirklich schön war das alles nie.

Jochen

Und jetzt inzwischen ist es aber, gibt es da halt eine nette Syntax für und das ist eigentlich ganz toll und das machen ganz viele und genau, das war damals alles noch ganz weit entfernt.

Jochen

Ja.

Jochen

Dann, achso, auch damals, was dazu gekommen ist, New-Style Classes, das?

Jochen

New Style Classes.

New Style Classes.

Jochen

Die Klassen waren etwas anders davor und ja genau, wenn ich jetzt müsste ich nachlesen, was da genau die Unterschiede waren.

Jochen

Ich glaube, also eigentlich weiß ich nur, dass man halt quasi dann immer nicht Doppelpunkt, also Leerzeichen, Klassenname, Doppelpunkt geschrieben hat, sondern irgendwie eine ganze Zeit lang hat man immer Klammer auf Object geschrieben, damit es halt von Object erbt und man Newsile-Classes automatisch verwendet, was man jetzt halt auch schon eine ganze Zeit lang nicht mehr tun muss.

Dominik

Ich habe jede Klasse automatisch von Object dann, oder?

Jochen

Ja, genau.

Jochen

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

Jochen

Ich weiß gar nicht, wann die dazugekommen sind.

Jochen

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

Jochen

Ja, dann, achso, auch eine neue Syntax, die sehr praktisch ist.

Jochen

Es ist halt so, sind so so, also es gibt List-Comprehensions, glaube ich.

Dominik

Die gab es auch nicht.

Dominik

Seit wann?

Jochen

Die gab es zwei 1,5 noch nicht.

Jochen

Gab es zwar zwei, einzeln die, glaube ich, dazugekommen.

Jochen

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

Jochen

Dann kam, glaube ich, mit, dann weiß ich ja nicht, wann die Generator-Expressions dazu kamen, wo man halt nicht eine List-Comprehension hat, sondern dann quasi runde Klammern schreibt und dann das Ganze ein Generator ist.

Jochen

Das könnte sein, dass das erstmal zwei, vier war oder so.

Jochen

Und jetzt gibt es auch irgendwie so Syntax für diktmäßige Objekte.

Jochen

Also man kann halt auch geschweifte Klammer auf und dann V Doppelpunkt K vor K, V in Diktpunkt-Items sagen.

Und dann würde sich das.

Dominik

Also kann man sich seine Diktioners generieren

Jochen

umdrehen, ja, genau.

Jochen

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

Jochen

Ja, das ist jetzt, das ist aber dann relativ spät dazugekommen.

Jochen

Ich glaube, das ist erst mit Python 2.3 oder äh, Python 3 dazugekommen jetzt.

Dominik

Wofür nutzt man denn jetzt eigentlich Python heute?

Dominik

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

Jochen

Genau, also am Anfang war es vor allen Dingen eine Skriptsprache zum Verbinden von irgendwelchen Systemen.

Jochen

Man hat das halt so, ja, man nannte 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 zu verbinden.

Dominik

Hast du halt verschiedene Servermodule mit Python-Kleister zugeklebt?

Jochen

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

Jochen

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

Jochen

Solche Sachen hat man ja halt in Python vor allen Dingen gemacht.

Jochen

Okay, das ist ja auch nicht.

Dominik

Und man hat einmal eine E-Mail in der Hand und Python gibt dann ein Kleber, dass man ein E-Mail mit Bild.

Jochen

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

Jochen

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

Jochen

Also für sowas hat man es vor allen Dingen verwendet, aber auch für Webentwicklung von Anfang an eigentlich schon, soweit ich weiß.

Dominik

Welche Frameworks haben wir der groß?

Dominik

Also ich kenne ja zum Beispiel Flask, habe ich in einem Tutorial gedacht und natürlich Django.

Jochen

Ja, die kamen allerdings noch?

Jochen

Die kamen alle sehr viel später.

Jochen

Also, sag mal so, es wurde zwar, also es wurde halt auch als CGI verwendet.

Jochen

Es gab ganz früher.

Jochen

Das ist schon fast ein bisschen Opa als hält vom Krieg-Sektionen.

Ja, bitte, deswegen sind wir hier.

Jochen

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 Webserver irgendwie eine Datei ausgeliefert hat.

HTML-Pur.

Jochen

Ja.

Jochen

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.

Jochen

Da musste man das haben, muss man irgendwie einen Counter haben, der irgendwie.

Dominik

Man hatte sein Gästebuch, wo man reingebließt.

Dominik

Ich war bei dir im Internet.

Genau.

Dominik

Ich habe da was reingeschrieben, ich habe es benutzt.

Jochen

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

Jochen

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 da in dieses Feld geschrieben wurde, irgendwie durch ein Skript durch und das musst du es irgendwo hinschreiben.

Jochen

Und damit solche dynamischen Sachen gehen, gibt es halt dieses, damit quasi irgendwie der Webserver mit einem Skript kommunizieren kann, dass dann halt irgendwie diesen Kram liest und wegschreibt, gibt es halt das Common Gateway-Interface und das hat das dann so gemacht, hat dann halt das Skript geschartet, also weggeforgt und dann irgendwie da per Umgebungsvariablen irgendwie die Daten übertragen.

Jochen

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

Jochen

Aber so war das damals.

Jochen

Und da, ich erinnere mich auch, dass man dadurcha Python-Skripte, also meistens hat man Perl verwendet, aber das ging auch mit Python schon.

Jochen

Hatte halt so ein bisschen das Problem, dass die meisten Hoster irgendwie kein Python installiert hatten und deswegen man keine Python-Skripte als CGI-Skripte irgendwie da angeben konnte.

Aber musste man selber hosten, wenn man Python hatte.

Jochen

Ja, ja, genau, genau.

Jochen

Insofern war das halt nicht so populär.

Jochen

Ja, die ganzen anderen Geschichten, es kam alles viel schön.

Dominik

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

Jochen

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

Jochen

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

Jochen

Also da gab es Mod PHP für ein Apache.

Jochen

Es gab auch ein Mod Python, aber das war ziemlich furchtbar.

Jochen

Das habe ich mal versucht zu verwenden.

Jochen

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

Jochen

Hatte Memory Leaks, war alles irgendwie ätzend, dauern so komische Sachen passiert.

Dominik

Also Memory Leak heißt dann der Server shut up, wenn die Leute benutzen, einfach wenn Leute auf dem

Server sind.

Jochen

Man weiß nicht genau warum und irgendwann ist er halt weg und dann muss man halt nachgucken, was da schief gelaufen ist.

Jochen

Alles nicht so schön.

Jochen

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

Und ja, das war so die, auch am Anfang der Nula ja war so die große Zeit des sogenannten Lamp-Stacks, so Linux, Apache, MySQL PHP.

Jochen

PHP, genau.

Jochen

Und das hat so halbwegs funktioniert.

Jochen

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

Jochen

Also ich glaube, das hat doch jetzt.

Jochen

Das erste, was Leute tatsächlich da in Python gebaut haben, war Soap.

Jochen

Soap.

Jochen

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

Jochen

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

Jochen

Und da gab es dann auch so ein Content Management System oder irgendwie so ein Ding, was drauf aufgesetzt hat, das nannte sich Plone.

Jochen

Also daran erinnere ich mich auch.

Jochen

Das muss irgendwie 2004 gewesen sein, dass ich das zum ersten Mal ausprobiert habe.

Jochen

Das war alles sehr nett.

Jochen

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

Jochen

Und ich glaube, das waren so die ersten, die so irgendwie komplexere Webanwendungen in Python möglich gemacht haben.

Jochen

Wie gesagt, manche Leute benutzen das bis heute.

Jochen

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

Jochen

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

Jochen

Und ja, jetzt am 1.

Jochen

Januar 2020 läuft ja irgendwie der Support für Python 2 aus.

Jochen

Ja, das ist nicht mehr so wirklich viel Zeit.

Und keine Ahnung.

Jochen

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.

Jochen

Ja, aber das waren so die ersten, genau.

Jochen

Und dann kamen halt mehr dazu, als es eine standardisierte, schöne Schnittstelle gab.

Jochen

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

Fast CGI?

Ja, genau.

Dominik

Das war dann schneller.

Jochen

Das war schneller, da musste der Server das Skript nicht forken, sondern da waren da schon so ein paar Skripte gepreforked.

Jochen

Dann konnte man das irgendwie, dann wurden die Daten da halt irgendwie per Interprozesskommunikation irgendwie hingeschoben und das war alles deutlich besser.

Jochen

Das ging halt dann relativ schnell.

Jochen

Aber es war auch alles noch ziemlich hässlich.

Jochen

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

Jochen

Seitdem gibt es irgendwie Mod, gibt es halt Whisky sozusagen als Schnittstelle zwischen Webserver und Applikation.

Jochen

Also sich das so halbwegs standardisiert hat.

Dominik

Hört sich nach etwas ziemlich holzigem zu trinken an.

Jochen

Ja, also wird aber BSGI geschrieben.

Jochen

Es wird nur lecker ausgesprochen.

Jochen

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

Jochen

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

Jochen

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

Jochen

Beziehungsweise man trennt dann eigentlich zwischen Applikationsservern und irgendwie den Servern, die halt statisch Files nach außen ausliefern oder die so ein bisschen Reverse-Proxy halt vor den Applikationsservern sind.

Jochen

Da nimmt man meistens auch nicht Apache, sondern dann sowas wie Nginx oder am Anfang gab es dann Light HTTPD und so.

Jochen

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

Jochen

CADI.

Jochen

Ein Go geschriebener Web-Server, der sich schön auch mit Let's Encrypt irgendwie verbindet.

Jochen

Und dann hat man halt irgendwie ordentliches SSL nach draußen, irgendwie automatisch, muss er nicht irgendwie, also bei Nginx, also ich habe mich ja beschäftigt, Nginx so weit zu kriegen, dass es halt irgendwie beim Test von SSL-Labs irgendwie überall grün und okay ist.

Jochen

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

Jochen

Und bei Caddy geht das einfach so.

Jochen

Muss man.

Jochen

Okay, das ist schon super.

Jochen

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

Jochen

Applikationsserver sind sowas wie GUnicorn, den verwende ich meistens, oder Mü VSGI oder UBSGI heißt ein anderer.

Jochen

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

Jochen

Und die sind sozusagen dafür zuständig, dass halt die Applikation läuft und die Requests, die halt sozusagen nur von der Applikation beantwortet werden können.

Jochen

Die gehen halt dann an dieses Server und die rufen dann halt eben quasi die Applikation mit dem entsprechenden API auf.

Dominik

Also ich wollte jetzt gar nichts unterbrechen.

Dominik

Ich finde das finde ich auch super interessant.

Dominik

Ich glaube, wir machen vielleicht sogar eine eigene Web-Folge.

Dominik

Wir sind ja heute, das wollte ich nicht vergessen, ich hoffe, die Anfänger sind jetzt nicht alle schon ausgestiegen, in der Anfängerfolge.

Dominik

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

Dominik

Also wir haben jetzt vielleicht einen kleinen Anstieg schon mal euch gegeben, was es so an coolen Möglichkeiten heute so gibt mit Python und Web-Frameworks.

Dominik

Was machen wir noch?

Jochen

Genau, das ist heute auch ein, ja genau, WebWeb ist ein wichtiger Teil.

Jochen

Blue ist auch noch immer ein wichtiger Teil.

Jochen

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.

Jochen

Doch ja, Talk Python to me.

Jochen

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

Jochen

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.

Jochen

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.

Dominik

Also auch YouTube ist ein Python oder so.

Jochen

Ja, genau, YouTube ist ein bekannter.

Dominik

NASA macht viele Sachen mit Python

habe ich.

Jochen

NASA, ja.

Dominik

Walt Disney zum Filme produzieren und.

Jochen

Ja.

Jochen

Pinterest auch ist, glaube ich, weiß nicht genau, ob die, die waren sogar Django irgendwie.

Jochen

Aber auch halt Python hauptsächlich.

Jochen

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

Jochen

Also ja, das gibt auch durchaus im Frontend einige, die da Python verwenden, aber es ist halt im Grunde überall.

Jochen

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

Jochen

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

Jochen

Das ist halt so ganze Data Science, Machine Learning Gebiet.

Dominik

Daten Sensor, Datenerfassung.

Jochen

Scientific Computing, dieser ganze Bereich.

Jochen

Also das, was früher, was man früher mit MATLAB gemacht hat, würde ich sagen.

Jochen

Ja, oder Mathematiker auch, Mathematiker hat ja dieses schöne Konzept entwickelt von diesen Notebooks.

Jochen

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

Jochen

Es gibt so Labortagebücher oder so, man aufschreibt, was man irgendwie tut und so.

Dominik

Python die Jupyter-Notebooks, die es gibt.

Jochen

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, weil wie man zu einem bestimmten Ergebnis gekommen ist.

Jochen

Sehr, sehr gute Idee halt.

Jochen

Hat sich nie so richtig durchgesetzt, weil Mathematiker ist halt proprietär und teuer und ist auch eine sehr exklusive Community irgendwie und hat die 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 ein Interpreter oder man nennt das irgendwie so REPL, weiß gar nicht wofür diese Abkürzung, also diese Shell, die man bekommt, wenn man jetzt Python eingibt.

Jochen

Ja, ja, die haben halt sozusagen das da mit reingebaut und das nannte sich dann iPython Notebook.

Jochen

Also iPython hatte schon einen ganzen Teil der Funktionen, die man dafür braucht, wenn man sowas implementieren will.

Jochen

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

Jochen

Und ja, das war ein toller Erfolg.

Jochen

Man hat das dann auch für andere Sprachen gemacht, für R und für Jupyter, äh, für Julia.

Jochen

Und dann war irgendwie klar, dass es halt iPython Notebook ein blöder Name dafür ist, weil wenn es halt nicht mehr Python ist, sondern auch andere sehen, dann wurde das halt unbedingt in Jupyter, wobei das halt nicht Jupiter 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 verwenden.

Dominik

Das sieht ja ganz schick aus, habe ich tatsächlich auch schon ein paar Mal gesehen.

Dominik

Das kann man tolle Sachen mitmachen und auch live den Code direkt testen, aushören, was man damit macht.

Jochen

Genau, genau.

Das ist halt super praktisch.

Jochen

Das ist natürlich jetzt schwer, so das zu umschreiben, jemanden, der das nicht kennt, quasi warum das toll ist.

Jochen

Es ist halt nur so, dass wir gerade bei so Spaß.

Dominik

Na, ihr 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 und was ihr programmiert habt, der Algorithmus, um das darzustellen, könnt ihr direkt live sehen, was da passiert.

Jochen

Ja, das ist eine der schönen Geschichten, aber was für mich vor allen Dingen, also ich mache auch viele Data Science-Geschichten, dass das für mich sozusagen das Top-Feature ist, ist halt irgendwie so viele der Schritte brauchen eine Menge Zeit.

Jochen

Also wenn man große Datenmengen hat oder so, kann es sein, dass manchmal, wenn man irgendwas macht, dauert das halt eine Stunde.

Jochen

Sozusagen, und dann hat man das Ergebnis, irgendeine Berechnung, genau, die man macht.

Jochen

Man trainiert irgendein Modell oder so und das rechnet dann halt irgendwie so mal eine Stunde vor sich hin.

Jochen

Und wenn man das jetzt alles in einem Skript hat, so wie man das normalerweise hat, jemand erzeugt dieses Modell, dann macht man da irgendwelche Evaluationen drauf, dann visualisiert man das Ganze, dann macht man da irgendwelche Tests oder macht man möglichen.

Dominik

Man kann erstmal die ganze Arbeitsschrittkette durchgehen, bis man wieder an dem Punkt ist, den man gerade geändert hat.

Jochen

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

Jochen

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 Remap die Arrays, die dabei entstehen, halt wieder zurück.

Jochen

Aber das ist halt alles nicht so.

Jochen

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.

Jochen

Und jetzt möchte man halt am Schluss dieser Kette, die halt irgendwas erzeugt, eine Funktion schreiben, die irgendwas mit den Daten macht.

Jochen

Und jetzt baut man da irgendeinen blöden Fehler rein oder so.

Jochen

Und das passiert einem tatsächlich, 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 es irgendwas schief geht.

Jochen

Man sieht einen Trace weg und denkt sich schon so, oh nein, was für ein blöder Fehler.

Jochen

Und das Ergebnis von irgendwie einer Stunde Berechnung oder so ist weg und man muss halt im Grunde nochmal eine Stunde warten.

Jochen

Aber selbst wenn man nur ein paar Minuten warten muss, ist es halt voll blöd.

Jochen

Man ändert irgendwas, probiert es aus.

Jochen

Zyklus halt, wenn da viel Latenze drin ist, dann wird man sehr langsam.

Jochen

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.

Jochen

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.

Jochen

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

Jochen

Und das Ergebnis ist halt nicht weg.

Jochen

Und das ist halt so.

Ja, das ist halt gut.

Dominik

Gerade wenn man sowas arbeiten möchte, ist das, glaube ich.

Jochen

Genau, und das macht einen halt viel, viel schneller und das ist das ist halt total toll.

Dominik

Also ist das auch für Anfänger sehr gut geeignet, musst du sagen, auch zum Lernen der Sprache, ja.

Jochen

Ja, ja, weil es halt so schön interaktiv ist.

Jochen

Man kann einfach eine ganze Menge ausprobieren, ohne dass man jetzt irgendwie Editor lernen muss und ohne dass man irgendwie quasi wissen muss.

Jochen

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.

Dominik

Ja, das bringt es, glaube ich, direkt zu unseren Anfänger-Tipps.

Dominik

Ich glaube, das ist ja gar nicht so schlecht.

Dominik

Also wenn ihr Fragen habt, natürlich direkt irgendwie an hallo.pythonpodcast.de einfach stellen.

Dominik

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

Dominik

Gleich mit ein paar Tipps anfangen.

Dominik

Ich glaube, also ganz wichtig ist natürlich die offizielle Dokumentation.

Dominik

Aussage des Tools zum Lesen.

Dominik

Ich glaube, da findet man so die meisten Erklärungen für die Standardbibliothek, wie das alles so funktioniert, außerhalb von den Tutorials, die es jetzt gibt.

Dominik

Ich habe zum Beispiel mit Python the Hardway angefangen und das Buch von Seltor gelesen.

Dominik

War ein ganz guter Einstieg.

Dominik

Wenn man sich da so durcharbeitet, kommt man relativ tief in die Materie rein.

Dominik

Es gibt noch Automated Boarding Stuff with Python.

Dominik

Geht es auch auf Deutsch ein Buchtuch, das kostet dann leider Geld, ansonsten ist das ein kostenlos Tutorial.

Dominik

Ja, die ganzen Tutorials gibt es sonst, weiß ich nicht, auf Datacam, Udemy, Udacity, unzählige Kostenlose.

Dominik

Ja, du hast ja gerade gesagt, anfangen vielleicht mit Jupyter Notebook oder auch einem einfachen Text-Editor.

Dominik

Also ich kann jetzt nicht empfehlen, direkt mit einer großen Entwicklungsumgebung zu starten.

Dominik

Das hält dann erstmal so ein bisschen auf.

Dominik

Gibt ja dann irgendwann später ganz viele tolle Editoren.

Dominik

PyCharm, Idle, Pause Code, VI, Atom, MX.

Was benutzt du?

Jochen

VI.

Jochen

Ja, das ist, ich benutze aber auch PyCharm zum Beispiel mittlerweile, weil ich mich nervt, dass das halt doch relativ langsam ist.

Jochen

Und ja, das ist halt, das ist mal über diesen, also 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.

Jochen

Also es ist immer, wenn man irgendwo drauf drückt oder so, dann muss man erstmal zu langsam.

Jochen

Es ist einfach zu langsam.

Jochen

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, die, weiß ich nicht, also ich meine, gut, das ist ein böser Vergleich, aber wenn so ein Fahrkartenautomat bei der Bahn steht und drückt er drauf.

Ich kann nicht gegentreten, bevor da irgendwas kommt.

Jochen

Und dann passiert einfach nichts und dann drückt man nochmal drauf, aber dann macht es irgendwie so.

Dominik

Hättet ihr, wenn ihr euch ja gerade so neuen Schokoriegel aus dem Automaten ziehen wollt und dann bleibt er irgendwo da oben hängen.

Jochen

Ja, und das ist halt, das ist halt schon sehr so ein bisschen nervtötend und deswegen benutze ich das eigentlich nicht so gern.

Jochen

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 der.

Jochen

Also ich wim, da hat sich ja auch einiges getan.

Dominik

Wie hast du denn Python gelernt?

Dominik

Hast du da irgendwie Tutorials gemacht oder war es da direkt dran?

Dominik

War das so basics, dass man selber beigen musste?

Jochen

Nee, ja, aber damals gab nicht so viele Bücher damals.

Jochen

Es gab ein paar.

Jochen

Die waren aber auch alle nicht so wirklich hilfreich.

Jochen

Also das ist auch doch, es gab ein Buch, das war hilfreich.

Jochen

Ich weiß aber nicht, ob das immer noch eine gute Empfehlung ist, das war das Python Cookbook.

Jochen

Das war ganz gut.

Jochen

Ansonsten waren die meisten Bücher nicht so toll.

Jochen

Und ja, wie habe ich es gelernt?

Jochen

Also ich hatte halt das Glück, dass ich da neben jemandem gesessen hatte, der das schon konnte.

Jochen

Und der mir das dann gesagt hat.

Jochen

Ja, das war etwas Luxuriöses.

Jochen

Das war relativ praktisch.

Dominik

Ja, da kann ich euch tatsächlich auch empfehlen.

Dominik

Also versucht nicht mit einem stillen Kämmerlein zu sitzen und euch selber durch den Kram zu quälen.

Dominik

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.

Dominik

Danke noch.

Dominik

Deswegen sitze ich hier und stelle dir die ganzen doofen Fragen.

Jochen

Ja, also genau, man könnte auch zu Meetups durchaus gehen, sich da mit Leuten austauschen hilft.

Dominik

Die tägliche Arbeit musste man natürlich dann trotzdem machen, aber ich glaube, mittlerweile kommt man da ganz gut angeleitet auch in die Essen-eigenen Projekte so rein.

Dominik

Ja, wie funktioniert Python eigentlich?

Dominik

Also was ist das Ding?

Dominik

Also wo kann man das machen?

Dominik

Also ich habe jetzt hier zum Beispiel auf meinem großen Zettel stehen, simple Prototyping kann man machen und recht umfangreiche Bibliotheken und

Jochen

ja, also bei Python selbst ist halt eine.

Jochen

Einfach.

Jochen

Ja, ist das einfach?

Jochen

Es ist es, es ist ziemlich, es ist, ja, es verbindet halt zwei Dinge, die eigentlich ein bisschen widersprechen.

Jochen

Es ist halt sehr einfach und es ist halt trotzdem sehr mächtig.

Jochen

Das macht es halt sehr schön.

Jochen

Auf der anderen Seite bedeutet das halt, dass es nicht so einfach ist, das irgendwie in Binärcode zu kompilieren oder so.

Jochen

Also das ist halt mit einer Sprache, die halt wesentlich einfacher sozusagen ist, ist das halt simpler.

Jochen

Also wenn man C nimmt, C kann man, also mehr oder weniger Makro-Assembler, da kann man das dafür einen Compiler zu sprechen.

Dominik

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

Dominik

Also fragen wir.

Jochen

Wenn es ein Computer direkt ausführen können soll, dann muss das irgendwie Maschinencode sein.

Jochen

Nullen und Einsen.

Jochen

Genau.

Jochen

Genau, genau.

Jochen

Wenn das so etwas ist, dann kann es halt direkt ausgeführt werden.

Jochen

Also die meisten Programme, die man so kennt, sind das halt auch.

Dominik

Also so wie früher, wenn ich mir das so vorstelle, da hat man ja die ganzen großen Rechner gehabt, die Lochkarten gelesen haben für Nullen und Einsen.

Dominik

Das braucht der Computer heute noch, damit er versteht, was er da überhaupt machen muss.

Jochen

Ja, genau.

Jochen

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.

Jochen

Oder eigentlich immer so ziemlich unmöglich, weil es halt alles dynamisch und zur Laufzeit kann sich eine Menge ändern.

Jochen

Das geht halt nicht so richtig.

Jochen

Das ist halt dann der Preis, den man zahlt, dass man es nicht mehr kompilieren kann.

Jochen

Es wird dann halt interpretiert.

Jochen

Also es wird schon so ein bisschen verändert.

Jochen

Es wird in einen Bytecode verwandelt und der Bytecode wird dann interpretiert von einer virtuellen Maschine.

Dominik

Das sind dann die Py-C-Dateien, die man findet, nachdem man irgendwas gelaufen kann.

Genau, genau.

Dominik

Also C ist das, was dann denen das Ganze benutzt, um das dann für die Maschine schreibt, lesbar zu machen.

Jochen

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

Jochen

Also man braucht immer noch den Python-Interpreter, der das dann ausführen kann.

Jochen

Also, ja, genau.

Jochen

Also der Python-Interpreter ist halt genau diese bestimmte Maschine und genau, der kann das dann halt ausführen.

Jochen

Und ja, das hat dann auch so einige andere Nachteile.

Jochen

Also das macht es halt auch schwer, Sachen zu installieren oder so, weil man kann jetzt nicht einfach irgendwo ein Binary runterladen oder schon.

Jochen

Ich glaube, wieso?

Dominik

Es gibt auch PIP.

Jochen

Ja, genau.

Jochen

Dann muss man eben zu so Paketmanagern greifen, mit denen man irgendwelche Dinge installieren kann.

Jochen

Aber man kann halt jetzt nicht irgendwie auf dem USB-Stick jemandem irgendwie Python-Programm geben und der startet das dann halt.

Dominik

Wenn ich das richtig verstanden habe, PIP ist halt dieser Paketmanager, der über die Seite PyPy oder wie ist das, über den Serverprogramm läuft und dann da Pakete installiert, die andere dort bereitgestellt haben, die schon damit veröffentlicht sind.

Dominik

Das heißt, wenn ihr eure eigenen Pakete baut, müsst ihr die entweder so veröffentlichen oder tatsächlich ex in der Bibliotheken nehmen, um Installar zu bauen oder sowas.

Jochen

Genau, also gibt es auch, es gibt Pi-Installer, es gibt diverse Geschichten, die das dann halt versuchen, irgendwie in Binary zu packen.

Jochen

Und das funktioniert auch manchmal.

Dominik

Du kannst 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?

Jochen

Das ist die Nachbarung, ich benutze das selber nie, daher.

Dominik

Pi2X für Windows gibt es da irgendwie was?

Dominik

Bei Linux braucht man es, glaube ich, nicht groß.

Jochen

Nee, da gibt es glaube ich, ich weiß nicht,

Dominik

baust du ein Paket, machst du Shell-Install-Setup, Pi, was?

Jochen

Nee, aber da gibt es auch, also unter Linux gibt es auch so ein Ding, was halt quasi den Interpreter mit reinpackt in Binary.

Jochen

Kann sein, dass es Pi Installer ist.

Jochen

Und das, wenn man so ein bisschen aufpasst, dann geht das sogar relativ, kriegt man den Interpreter relativ klein.

Jochen

Also wenn man es einfach naiv macht, dann kann es sein, dass das irgendwie so 15 MB sind oder 10, ich weiß nicht genau.

Jochen

Aber man kriegt auf irgendwie zwei, drei runter, wenn man das irgendwie, wenn man sich da ein bisschen Mühe gibt.

Jochen

Und dann ist es eigentlich, ich meine, heutzutage ist das eigentlich sowieso alles nicht mehr so wild.

Jochen

Dann ist es halt so, es gibt natürlich Leute, die sagen würden, wenn ich das mit C mache und dann gut, und nicht gegen die Lip C-Linke oder gegen die G-Lip C, sondern halt irgendwie so eine Diätlip C oder irgendwas anderes kleines.

Dominik

Es hört mir gerade kurz wieder, Lib C-Lib Cleines, irgendwie, das sind die Standardbibliotheken und die C so bereitstellt für die viele, die dann das Ganze größer machen, wenn man das kompiliert.

Jochen

Genau, da ist noch ein bisschen Standardbibliothek dabei, aber eigentlich wofür die da sind, ist die Kommunikation mit dem Kernel, mit dem Betriebssystem.

Jochen

Und das kann man natürlich auch beliebig komplex gestalten, aber wenn man halt nur die ganz simplsten Dinge haben will, dann muss das nicht so groß sein, weil das Problem ist, es muss halt irgendwie dagegen gelingt sein, damit irgendwie der Prozess überhaupt irgendwas machen kann, wie Eingabe, Ausgabe und so.

Jochen

Aber wenn man das schlau macht, dann kriegt man das halt auf, weiß ich nicht, ein paar hundert Byte oder so runter.

Jochen

Und das ist natürlich was ganz anderes, als wenn ich jetzt irgendwie megabyte-weise Zeugs.

Das könnte auf

Mikrocontroller packen.

Dominik

Ich glaube, man kriegt das sogar in so einen Bootsektor rein.

Dominik

Wie ich habe so einen Bootsektor 512 Bytes oder sowas.

Jochen

Also natürlich ist es nicht so klein, wie es gehen könnte, wenn man das wirklich drauf anlegt.

Jochen

Und das wird auch nie gehen mit Python so richtig, aber heutzutage sind ja auch ein paar Megabyte eigentlich nicht mehr wirklich viel.

Luxus.

Jochen

Früher war das schlimm heute Hand

Dominik

zurückspulen oder sowas, ja.

Jochen

Genau, und daher ist das eigentlich auch alles nicht mehr so wild.

Jochen

Aber man muss auch sagen, dass dieses Thema so ein bisschen vernachlässigt wurde.

Jochen

Ich habe gerade auf Windows und so, wo kann man ja auch nicht davon ausgehen.

Jochen

Also bei den meisten Linux-Systemen wird halt einfach ein Python-Interpreter vorinstalliert sein.

Jochen

Vielleicht ein Uralter, aber immerhin.

Jochen

Aber bei Windows ist halt Python nicht vorinstalliert und dann, wenn man irgendjemanden ein Python-Skript schickt oder so, kann der halt nichts damit anfangen.

Jochen

Das ist ein bisschen ein Problem.

Jochen

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.

Jochen

Und ja, also

Dominik

die Binaries kriegt ihr natürlich trotzdem auf der Python rumschläge, direkt für die jeweiligen Systeme und wenn das.

Jochen

Der Python-Interpreter selber ist natürlich wieder quasi so ein Binary.

Dominik

Also einige Leute empfehlen auch Anaconda, das ist irgendwie so ein Paket, womit man ganz viel tolle Datensachen machen kann, wo es vorinstaliert ist.

Dominik

Also ich persönlich hatte da nicht so die beste Erfahrungen mit.

Dominik

Das war immer sehr verwurschtelt mit den Paketen, an die Firma was nicht, wenn es irgendwie ein Update gab und du hast eine Python-Version.

Dominik

Die haben auch einen eigenen Paketmanager, dann Conda irgendwie.

Dominik

Und deswegen würde ich das für Anfängen jetzt nicht unbedingt sofort empfehlen, obwohl viele das machen.

Dominik

Aber das könnt ihr ja selber schauen.

Jochen

Ja, 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.

Jochen

Aber Conda ist der Paketmanager und es gibt auch noch ganz viele andere Pakete, die jetzt nicht in der Anaconda-Distribution drin sind.

Jochen

Und das ist so ein bisschen, alles, eigentlich ist das alles ein bisschen furchtbar.

Jochen

Man muss sagen, das schön wäre ja, sozusagen in der idealen Welt hätte man das ja gerne, dass man sozusagen einen Paketmanager für alles verwendet, ja, sozusagen.

Jochen

Also es gibt auch so ein bisschen die Utopie wird so ein bisschen gelebt bei NixOS, versuchen Leute, das tatsächlich noch umzusetzen.

Jochen

Oder eigentlich waren auch die Linux-Distributionen mal so quasi gedacht, dass man halt, man hat einen Paketmanager, mit dem installiert man halt irgendwie alles, was man irgendwie haben möchte.

Jochen

Und ja, also das geht ja auch jetzt noch, wenn man jetzt ein Debian hat beispielsweise, dann kann man auch ein NumPy oder so, was ja quasi ein Modul ist für Scientific Computing-Modul für Python, kann man durchaus per Debian-Paket installieren, also über die Distribution.

Jochen

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.

Jochen

Weil es ist halt nicht gegen MKL, diese Mathe-Bibliothek von Intel gelingt beim Kompilieren.

Jochen

Also man muss, es ist halt tricky, das zu kompilieren, da ist viel Core-Tranzeugs dabei.

Jochen

Das ist alles nicht so einfach und ja, überfordert möglicherweise halt ein Debian Methana auch so ein bisschen.

Dominik

Also du würdest auch immer alle Pakete über Pip installieren?

Jochen

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

Jochen

Also leider haben wir nicht, also am schönsten wäre es, wir hätten einen Paketmanager für alles.

Dominik

Hat zum Beispiel Pip oder dein Distributionsmanager.

Jochen

So ist wie Apt oder genau oder weiß ich nicht, was es da bei Yam für Red Hat gibt oder was noch.

Dominik

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

Jochen

Ja, ich bin da auch gar nicht mehr so auf dem Laufen.

Jochen

Aber genau.

Jochen

Wenn man einen Paketmanager hätte, mit dem man alles installiert und dann sich relativ sicher sein könnte, dass das halt irgendwie funktioniert.

Jochen

Das wäre schön.

Jochen

Aber es hat sich jetzt aber eher so entwickelt, dass jede Programmiersprache so ein bisschen ihren eigenen Paketmanager mitbringt.

Jochen

Also bei Python ist es halt erstmal Pip.

Jochen

So wie bei Ruby sind das dann halt diese Ruby Gams, bei Perl ist es Cepan bzw.

Jochen

ich weiß gar nicht, was jetzt das Ding ist, mit dem man die Dinger installiert.

Jochen

Dann bei JavaScript ist es halt NPM oder JAN oder was auch immer man da gerade verwendet.

Jochen

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 Root-File-System installiert, dann überschreiben die natürlich Sachen, die die Distributionen dafür machen.

Dominik

Dann schreiben sie doch gegenseitig, wenn man verschiedene.

Jochen

Überschreiben sich gegenseitig.

Jochen

Alles nicht so schön.

Jochen

Da hat niemand darauf aufgepasst, dass die Sachen auch alle miteinander klarkommen.

Jochen

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

Jochen

Das ist halt nicht so toll.

Dominik

Was macht man denn da?

Dominik

Dafür gibt es ja eine.

Jochen

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

Dominik

Also in virtuellen,

Jochen

virtuelle Umgebungen, genau.

Dominik

Oder für seinen einen User, also zum Beispiel Pip Install, Paketname, minus, minus User, wird halt das für den aktuellen Nutzer nur installieren.

Jochen

Genau, das kann man auch machen.

Jochen

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

Jochen

Aber es ist leider sogar noch schlimmer.

Jochen

Es ist jetzt nicht nur so, dass jeder Programmiersprache einen eigenen Paketmanager hat, sondern es sieht so ein bisschen aus, also jedenfalls bei Python ist es halt leider so, dass da auch jede Community sozusagen ihren eigenen Paketmanager nochmal.

Jochen

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

Jochen

Wo man sagen muss, Conda ist ein bisschen mächtiger als Pip.

Jochen

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

Jochen

Manchmal muss man das halt dummerweise auch, weil viele der Sachen, die man da verwendet, sind halt Fortran-Bibliotheken oder irgendwelche C-Bibliotheken oder CPA.

Dominik

Warum verwendet man denn Fortran oder C oder C<unk>-Bibliotheken in Python?

Jochen

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 Vorloops ineinander schachtelt.

Jochen

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

Jochen

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

Dominik

Oder mit

Dominik

NumPy, glaube ich,

genau so.

Jochen

Ja, ja, genau.

Jochen

Aber man könnte es direkt in Python machen, dann macht man halt irgendwie so eine dreifach verschachtelte Vorloop und iteriert über die Dinger und rechnet das dann halt aus.

Jochen

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

Jochen

Wenn man jetzt so eine Bibliothek benutzt wie NumPy oder so, dann haben dann halt einen speziellen Array-Type sozusagen und wenn man da jetzt sagt, multipliziere mal A und B, dann nutzt NumPy unten drunter halt quasi, weiß ich jetzt gar nicht, was man in der Modul zu tun hat.

Dominik

Das muss man jetzt gerade so auszumalen, wie das dann so aussieht in einem Schaubild, um mir das irgendwie so ein bisschen vorzustellen, warum das jetzt schneller geht.

Also wir benutzen drunter einen

Jochen

optimierte Fortran-Bibliotheken, die genau.

Jochen

Also, oder es ist, ich weiß gar nicht mal, ob es fortran ist unbedingt.

Jochen

Also es ist halt irgendwie, die haben halt damals angefangen mit Blas, La Pak, Atlas, das sind so die Dinger, die da unten drunter liegen.

Jochen

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

Und dann sind das irgendwie Implementationen davon und ja, Magic.

Genau, Magie, ja.

Jochen

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

Jochen

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

Jochen

Also das ist, also wenn man das einfach in C, könnte man dann natürlich auch eine Loop hinschreiben, wäre schon viel schneller als in Python, wahrscheinlich so tausendmal schneller oder so.

Jochen

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

Imagine.

Genau.

Jochen

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

Jochen

Man kann eben dann keine Vorschleife mehr verwenden, sondern man macht eher solche Sachen wie man auf den Objekten, die man als erzeugt hat, wie zum Beispiel irgendwelche Arrays oder so, ruft man dann halt irgendwie eine Funktion auf und übergibt dir ein Callback oder so.

Jochen

Weil Vorschleifen gehen halt nicht mehr.

Jochen

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

Dominik

Mir ist halt so ein Trade-off, kann man sich überlegen, ob man sich das angewöhnt hat, dass man es gerne macht oder ob man sagt, hey, wir nehmen jetzt das ein bisschen kaufen.

Dominik

Python ist ja immer erst langsam verschrien, aber wenn wir die auch schnell bekommen, ja, okay, dann machen wir vielleicht mal einen kleinen Umweg.

Jochen

Genau, genau.

Jochen

Ja, kommen wir vielleicht gleich noch zu, wenn es um die Mythen geht, aber das ist, man kann damit auch sehr schnell Dinge tun.

Jochen

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

Jochen

Und für Scientific Computing-Zeugs ist es halt fortan oft.

Jochen

Ja, genau.

Dominik

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

Dominik

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

Dominik

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

Dominik

Fällt dir noch irgendwas ein, so einer der USB?

Jochen

Ja, ja, ja, was ich, was ich ein bisschen vernachlässige, genau, auch ein Bereich, der momentan sehr interessant wird.

Jochen

So Home Automation Zeug, Smart Home.

Dominik

Ich glaube, der hat der Raspberry Pi, der macht ja ganz, ganz viel.

Jochen

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.

Dominik

Home-Automet, du hast hier, glaube ich, ganz viele schöne Sachen.

Jochen

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

Jochen

Also ich habe so ein DVB-T-Modul daran gesteckt, die gibt es jetzt irgendwie günstig, weil es gibt keinen DVBT-Markt.

Dominik

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

Jochen

Richtig, jetzt kann man die Dongel kriegt man relativ willig.

Jochen

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.

Jochen

Und dann muss man die eigentlich dann nur einsammeln und dann an.

Jochen

Es gibt eine Software, die nennt sich Home Assistant schicken.

Jochen

Also das ist ein bisschen komplizierter.

Dominik

Ja, dann machen wir auch noch eine eigene Folge von der Frage.

Jochen

Ja, genau.

Aber solche Sachen.

Jochen

Also man zum Beispiel.

Dominik

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

Dominik

Also das heißt, das musst du auch selber geben.

Jochen

Genau, ja, furchtbar.

Jochen

Da muss unbedingt automatisiert werden.

Jochen

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

Jochen

Das ist ein bisschen gefährlich.

Dominik

Eine Pumpe irgendwie und dann einmal einfach.

Jochen

Und eine Anpflichtversicherung.

Dominik

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

Jochen

Genau.

Jochen

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

Jochen

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.

Jochen

Also man kann zum Beispiel, es gibt da so kleine Boards, kosten ein paar Dollar und da ist ein Chip drauf mit ein wenig, ja, kann ist nicht so schnell und hat auch wenig Speicher, aber da läuft MikroPython zum Beispiel drauf, sodass man da halt.

Dominik

Nächste Folge?

Jochen

Ja, genau.

Jochen

Das heißt, man kann auch da Python drauf laufen lassen und dann irgendwie Sensordaten damit schon irgendwas machen oder die umgekehrt.

Dominik

Da müssen wir wieder aufpassen, dass wir die Module so nehmen, dass sie möglichst klein werden.

Jochen

Genau, da muss man wieder ein bisschen aufpassen und so.

Jochen

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

Dominik

Ja, ich glaube, also was noch dazu kommt, vielleicht ist so Rapid Prototyping jetzt mal nochmal als Baswirt reingeschmissen.

Dominik

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.

Dominik

Wenn man jetzt zum Beispiel die Sprache vergleicht, ist ja auch sehr einfach, deswegen eignet sich das besonders gut.

Dominik

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

Dominik

Das heißt, man kann relativ einfach die Syntax formulieren und hat direkt ein lauffähes Programm, was wenigstens so grob das tut, was es sollte, später.

Jochen

Ja.

Dominik

Das ist noch so einer großen Vorteil der Sprache, wo man jetzt von außen drauf guckt.

Jochen

Ja, vielleicht wäre es ganz interessant, das mal so ein bisschen zu differenzieren gegenüber den anderen Sprachen, die es halt in diesen Bereichen auch gibt.

Jochen

Mit denen man auch diese ganzen Dinge tun kann.

Jochen

Also Python ist halt, würde ich sagen, gehört so zur Familie der Skriptsprachen irgendwie.

Jochen

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

Jochen

Aber unterscheidet sich halt, oder PHP unterscheidet sich von denen aber.

Jochen

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

Jochen

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

Python auch so?

Jochen

Ist in Python auch so.

Jochen

Aber in Python, Python ist halt streng getypt auch.

Jochen

Es ist dynamisch unstreng.

Jochen

Das heißt, wenn ich jetzt sage, irgendwie eine Zahl plus irgendwie einen String oder so, dann kriege ich bei Python kriege ich dann halt ein Type-Error, also ein Typ ein Fehler.

Jochen

Also ein Typ.

Jochen

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

Dominik

Was passiert denn da?

Dominik

Das ist eine Magite.

Dominik

Oder ist das keine dunkle Magite wahrscheinlich?

Jochen

Es ist eher dunkel und man weiß nicht so genau, was dann passiert.

Jochen

Es kommen die komischen Sachen, aber es gibt einen schönen Vortrag für JavaScript, da ist mal jemand, es ist ein bisschen veraltet, aber hat das mal jemand aufgeschrieben.

Jochen

Ich glaube, wenn man danach sucht JavaScript-Talk und dann Watt, WRT, dann findet man das und dann, wo er dann so eben solche Dinge macht wie irgendeine Zahl plus Leerstringen und dann kommen halt die seltsamsten Dinge dabei raus.

Der Server hüpft und blinkt und.

Jochen

Ja, am Schluss kommen irgendwie Zeichenketten dabei raus und Batman erscheint.

Jochen

Also es ist halt wirklich, man muss aufpassen, was man da tut, ansonsten passieren ganz, ganz furchtbare Dinge.

Dominik

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

Jochen

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

Dominik

Die Welt geht unter.

Jochen

Ja, ja, so ungefähr.

Jochen

Und das kann aber Python halt nicht so weit passieren.

Jochen

Das ist schon mal ganz schön.

Jochen

Also insofern ist es halt in der Welt, also es ist halt ein schöner, also ich finde, was man über Python sagen kann, ist, es macht halt die richtigen Trade-offs.

Jochen

Also es ist halt immer, es ist halt so eine Sache.

Jochen

Möchte man jetzt, es hat ja natürlich auch Vorteile.

Jochen

Man kann Dinge vielleicht abkürzen oder so, wenn man das schwach getypt wird, wenn man das nicht so streng überprüft.

Jochen

Man kann das teilweise ausnutzen, um Sachen eleganter zu machen, aber man zahlt halt einen Preis dafür.

Jochen

Und Python hat so die Tendenz, immer diese richtigen Trade-offs zu machen.

Dominik

In der neuen Version, ich weiß jetzt nicht gar nicht, was bei 3.7 kam oder bei irgendeiner 3.6-Version, dann kann man diese Typen jetzt so schön annotieren noch.

Dominik

Kann man für Funktionen oder für Variablen direkt und sieht dann das direkt, dass beispielsweise in seinem Linter oder sowas, also das, was den Code unterstreicht, wenn ein Fehler da ist, dass der Typ falsch ist.

Dominik

Also wenn man jetzt, ich sag mal, Standard-Typen R haben möchte oder feste Typen und keine dynamischen.

Dominik

Dass man zumindest weiß, was halt stehen sollte, obwohl das Python immer noch versucht zu sprechen.

Jochen

Ja, also, aber das Schöne ist halt, dass es halt optional, man kann das daran schreiben.

Also klar, natürlich.

Jochen

Das ist auch einer der Vorteile, die in so einer Sprache wie Java oder so, die ist halt statisch getypt, also nicht dynamisch.

Jochen

Da kann man hinterher, wenn ich eine Variable habe, dann die ändert sich nicht einfach so in was einen anderen Typ.

Jochen

Das geht da halt gar nicht.

Jochen

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.

Jochen

Eine schöne Geschichte, die man dann halt bauen kann, ist halt Unterstützung in den IDEs dafür.

Jochen

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

Dominik

Also das bringt 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, dann kann das immer was Verschiedenes sein und dann kann ich ganz tolle Sachen mitmachen.

Dominik

Und du sagtest gerade, der Starter ist natürlich auch voll toll, weil man kann das irgendwie nicht verwechseln und man kommt keine unbekannten Fehler.

Jochen

Naja, der Nachteil dabei ist halt, dann muss man viel mehr schreiben.

Jochen

Was auch nicht so ein Problem ist, wenn man eine Idee verwendet, weil die schreibt das dann für einen so ein bisschen.

Jochen

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

Jochen

Also ja, das ja, also man kann damit auch programmieren, so schlimm ist es nicht, aber es ist halt so ein bisschen, ich mag es nicht so.

Jochen

Ich mag lieber, man schreibt wenig und schreibt das dann halt aber selber und das Tool, was man da verwendet, ist halt schnell.

Jochen

Als die Idee schreibt das, aber die ist so ein bisschen laggy und man muss ein bisschen auf die warten.

Jochen

Ja, gut, aber das geht auch.

Jochen

In Python hat man das jetzt halt so nicht, das ist alles dynamisch.

Jochen

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

Dominik

Ich glaube, also zum Beispiel in Listen kann man auch verschiedene Datentypen benutzen.

Dominik

Seider, man benutzt jetzt LumPy Arrays, wo das dann auch wieder fällt.

Ja, genau.

Dominik

Aber ja, das ist glaube ich auch ganz interessant, weil es halt sein kann, wenn man durch nur eine Liste iteriert und man macht irgendeine Multiplikation oder sowas, dann fliegt einem was um die Ohren, weil das der falsche Datentyp ist.

Jochen

Das ist halt, das ist genau einer dieser Geschichten, wo halt statisch getypte Sprachen große Schwierigkeiten mit haben.

Jochen

Oder als Programmierer das Leben halt schwer machen.

Jochen

So diese ganzen Containerdatentypen, die sind da halt knifflig.

Jochen

Oder man kann halt im Grunde immer nur Container haben, die halt dann irgendwie Dinge von einem Typ enthalten.

Jochen

Weil man muss ja irgendwie sagen, welchen Typ der ID Variable hat, die man da reintut.

Jochen

Und das ist halt, also gut, geht mittlerweile auch.

Jochen

Es gibt Generics und sind inzwischen auch in Java angekommen.

Jochen

Man kann da auch so Sachen machen, aber das ist alles dann nicht mehr so richtig einfach.

Jochen

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.

Jochen

Wenn man nicht mehr einfach quasi beliebige Dinge irgendwie in ein Ding, was halt über Sachen iteriert packen kann.

Jochen

Also so ein Python-Iterator ist halt, der iteriert halt über Sachen und da kann halt beliebiges Zeug drin sein.

Jochen

Wenn das halt nicht geht, dann macht man halt dann muss man sich halt so Patterns überlegen, wie man Dinge tun kann.

Jochen

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 es ein ganze Gang-of-Four-Buch, irgendwie.

Jochen

Bitte was?

Jochen

Das ist ein ganz bekanntes Buch von, wie heißt das, das wird immer ein Gang-of-Four-Buch genannt.

Dominik

Ja, das musst du unbedingt auch nicht shown auspacken.

Jochen

Ja, ich glaube, das Ding heißt auch immer Design Patterns oder so.

Jochen

Und da sind halt, ich weiß nicht, wie viele, das sind 100 oder irgendwas in den Dreh.

Jochen

Typische Designpatterns, die man halt jetzt so statisch getypenprogrammiersprachen 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.

Jochen

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 brauche da gar kein Pattern, ich kann in Python kann ich das einfach so hinschreiben.

Jochen

Da muss ich mir kein kompliziertes Ding ausdenken, mit dem ich halt irgendwie da jetzt Architekturdingen, mit dem ich da mit diesem Problem fertig werde, weil ich habe das Problem gar nicht.

Jochen

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

Jochen

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

Dominik

Also loslegen machen.

Ja.

Jochen

Und das ist halt schon sehr schön.

Jochen

Das ist ein großer Vorteil.

Jochen

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

Jochen

Ich meine, klar, natürlich auch in Python gibt es Sachen, die kompliziert sind und nicht alle Patterns sind überflüssig, deswegen.

Jochen

Also es gibt durchaus Sachen, die man da auch brauchen kann.

Jochen

Aber es macht das Leben schon irgendwie leichter.

Jochen

Ja, das wäre so der Unterschied statisch getypt, äh, dynamisch getypt.

Jochen

Genau.

Jochen

Den strengen Schwach hatten wir jetzt auch schon im Vergleich zu den anderen Programmiersprachen.

Jochen

Was wir auch noch haben, ist quasi binär kompiliert, das hatten wir aber auch eben schon ein bisschen abgehangelt.

Jochen

Ah ja, dann gibt es natürlich Sprachen, in denen man quasi das Memory Management selber macht, so C zum Beispiel.

Dominik

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

Jochen

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

Jochen

Oder ja, wenn man Dinge freigibt, die man, die eigentlich mal noch brauchen, so passieren schrecklich Dinge.

Jochen

Also das ist.

Dominik

Wie muss man das in Python?

Jochen

Hat man damit nichts zu tun?

Jochen

Das ist sozusagen, das macht Python für einen selbst.

Jochen

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.

Jochen

Aber wenn man einfach sich in Python bewegt, dann hat man damit eigentlich nichts zu tun, weil das passiert dann automatisch.

Jochen

Also Python verwendet da ein System, nennt sich Reference Counting.

Jochen

Also es gibt da auch dann 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.

Jochen

Und dann gibt es halt noch Sprachen, die machen einen Garbage Collector.

Wie Python?

Jochen

Nee, ja, also Python hat auch einen Garbage Collector, aber ja, es ist ein bisschen kompliziert, leider.

Jochen

Aber hauptsächlich ist es ein Python Reference Counting, sozusagen.

Dominik

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

Jochen

Genau, wenn irgendwo eine neue Referenz entsteht, dann wird das halt hoch, wird der Reference-Counter hochgezählt und irgendwie ansonsten, wenn eine Referenz verschwindet, gelöscht wird, dann wird es runtergezählt und wenn es bei null angekommen wird, wird das Objekt abgeräumt.

Jochen

Und das hat den großen Vorteil.

Jochen

Es ist ziemlich schnell zur Laufzeit.

Jochen

Und es ist sozusagen auch sehr einfach.

Jochen

Also kann nicht viel schief gehen.

Jochen

Es sorgt für vorhersagbare Latenzen.

Jochen

Es hat aber auch einen großen Nachteil.

Jochen

Okay.

Jochen

Der große Nachteil ist, man kann dann nicht mehr parallel Dinge machen.

Jochen

Oh Gott, oh Gott.

Jochen

Also auf unterschiedlichen Prozessoren.

Jochen

Das geht im Grunde nicht mehr.

Jochen

Also das könnte man tun, dann muss man halt, wenn man es naiv machen wollte, müsste man dann für jede Operation, die jetzt irgendwie so einen Reference-Counter hoch oder runter zählt, dann müsste man irgendwie so einen Lock drauf machen und sagen, so jetzt mal alle, stopp.

Jochen

Wir erhöhen jetzt diesen Reference-Counter und dann können alle wieder weitermachen.

Jochen

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

Jochen

Und das geht alles einfach nicht mehr.

Jochen

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

Dominik

Das heißt, du brauchst 20 Kerne, damit du dann den einen Kern.

Jochen

Die Performance von einem Kern hinfickst, genau.

Jochen

Das ist natürlich irgendwie nicht so richtig effizient.

Jochen

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

Jochen

Und dafür gibt es halt bei Python auch den Global Interpreter Log.

Dominik

Den Mitte was?

Jochen

Ja, Gil oder Global Interpreter Lock, das ist sozusagen ein Ding, was dafür sorgt, dass quasi ein Python-Prozess nur auf einer CPU läuft und nicht ein Python-Prozess auf mehreren CPUs laufen kann.

Das ist halt so.

Jochen

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

Jochen

Java hat einen Garbage Collector und hat dann dieses Problem nicht.

Jochen

Das kann dann halt auf mehreren Prozessoren laufen, problemlos.

Jochen

Oder naja, problemlos, aber geht.

Jochen

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

Jochen

Dafür ist dann dieser Garbage Collector.

Dominik

Das heißt, auf einmal gibt es eine Pause, nee, der Müll ist voll, jetzt muss er ein Müllauto, muss erstmal alles einsammeln und wegfahren.

Jochen

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

Jochen

Und das bedeutet halt, dass man, wenn man einen Server laufen hat, dann kann es halt sein, dass man irgendwie plötzlich, es ist halt alle Requests sind super schnell und dann plötzlich einer dauert lang.

Dominik

Also jetzt um bei dem Mülllautobeispiel zu bleiben, kann man nicht einfach messen, also wie voll der Müllcontainer ist und dann irgendwie den Müllwagen so gut fahren lassen, dass der ein Routenmanagement macht und da richtig vorbeifällt und die Sachen rechtzeitig lädt, bevor die voll gelaufen sind?

Jochen

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

Dominik

Du weißt ja halt, wie Leute die Müll essen und wie viel Müll die wegschmeißen immer, oder?

Jochen

Ja, ja, ja.

Jochen

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.

Jochen

Du hast immer das Problem, dass wenn der Müll weggebracht werden muss, musst du allen sagen, so jetzt mal Stopp.

Jochen

Jetzt muss erstmal eine Müll weggebracht werden.

Dominik

Die schmeißen alles in dieselben Mülltonne.

Jochen

Ja, und dann, ja, selbst wenn das sehr schnell ist, kann es halt sein, dass es, weiß ich nicht, 200 Millisekunden dauert oder sowas.

Dominik

Könnte man ja mal kleinere Mülltonne machen, also für jeden so eine kleinere Mülltonne, als wenn man seine große hat.

Ich weiß es nicht.

Jochen

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

Jochen

Sag 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.

Jochen

Ja, das ist halt blöd.

Jochen

Und ja, das sind halt, man kann sich halt überlegen, was man irgendwie lieber mag, sozusagen.

Jochen

Und auch da finde ich, dass Python dann eine ganz gute Wahl getroffen hat mit dem Reference-Counting.

Jochen

Und auch da gibt es halt den Garbage Collecting, gibt es halt vor allen Dingen dafür, dass wenn jetzt so zirkuläre Referenzen irgendwie, also wenn das ein Objekt hat, das auf ein anderes verweist ist, auf ein anderes verweis ist eine Referenz auf ein drittes hat und das wieder auf das erste oder so.

Jochen

Ja, dann werden die durch Reference-Counting nicht weggeräumt und dann muss man auch Python ab und zu mal einen Garbage Collector anschmeißen, um solche Sachen zu finden und dann rauszuwerfen.

Dominik

Aber den Garbage Collector kriegt man bei Python mit sowas wie Import-GC dann oder so?

Jochen

Ja, genau.

Jochen

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, dass man zum Beispiel, ich weiß nicht, ob das heute noch so ist, aber früher war das immer so, wenn man größere Datenmengen importiert hat, per CSV oder weiß ich nicht.

Jochen

Also ich habe früher irgendwie viel so Import-Export-Skripte auch geschrieben und da war halt so einmal einer der Tricks, dass man quasi bevor man halt so ein paar Millionen Zeilen irgendwie lesen hat und die irgendwo reingeschrieben hat in der Speicherdatenstruktur, einmal den Garbage Collector ausgeschaltet hat, dann hat man den ganzen Scheiß importiert und dann hat man ihn wieder angeschaltet.

Jochen

Weil ansonsten schlägt er halt alle paar tausend Zeilen oder so zu und blockiert alles.

Jochen

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

Jochen

Aber heute kann sein, dass heute alles nicht mehr nötig ist und es besser geworden ist.

Dominik

Ich müsste mir vielleicht auch mal rausfinden, ob das wirklich noch so ist.

Dominik

Wenn man das wirklich immer machen muss, dass man einen Müllwagen sagen muss, nee, heute nicht.

Ja, genau.

Jochen

Also wenn man weiß, was passiert, wenn man sagt, so, ich hole jetzt die ganze Zeit 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 habe noch nichts anderes gemacht, dann kann ich halt sagen, okay, da soll jetzt momentan nicht, muss der Müllwagen nicht rumfahren.

Jochen

Das ist erst danach.

Jochen

Aber es ist natürlich schon hässlich.

Jochen

Mit solchen Dingen will man sich eigentlich als Entwickler ja gar nicht so beschäftigen müssen, weil das ist natürlich irgendwie für die meisten Leute alles.

Jochen

Ja, ich

Dominik

glaube auch, unsere Anfänger haben wir gerade vielleicht wieder ein bisschen abgehängt.

Dominik

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

Dominik

Ich hoffe, ihr findet das alles so interessant wie ich.

Dominik

Vielleicht kommen wir dann noch ein bisschen wieder zurück zu dem, was wir jetzt durch hatten.

Dominik

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

Dominik

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

Jochen

Lass uns gerade überlegen.

Jochen

Ja.

Jochen

Nö, also im Grunde sind das so die wesentlichen Unterschiede zu anderen Programmiersprachen.

Dominik

Ja, ja, okay.

Dominik

Also das heißt, die Unterschiede haben wir jetzt so ein bisschen erklärt, was man also machen kann.

Dominik

Vielleicht müssen wir auch noch drauf eingehen, was so die Mythen dieser Sprache sind.

Also ich habe jetzt total einfach.

Dominik

Das ist immer so einer der Sachen.

Dominik

Fand ich jetzt tatsächlich auch, also von der Syntax her, dass es sich gut las, dass du nicht irgendwie da standst und hat es irgendwie wie ein C, so ein Hello World, wo es dann irgendwie über mehrere Zeilen geht oder wen Java, wo dann erstmal gucken muss, wo geht denn jetzt diese Funktion hin, steht ja Print Hello World fertig.

Jochen

Genau, genau.

Jochen

Bei Java muss man dann erst irgendwie komische, erst eine Klasse definieren und dann irgendwie Public Setting Void Main oder sowas hinschreiben, wo es halt so irgendwie so magische Worte, damit irgendwas passiert.

Jochen

Aber in Python schreibt man einfach Print hin.

Jochen

Wenn man printen möchte, das ist schon ein Zenet.

Jochen

Ja.

Dominik

Also bleibt Python denn so einfach, wenn man das.

Jochen

Ja, ja.

Also, was man damit machen will.

Jochen

Ja, ja, ja, man kann da auch

Dominik

Netzwerkkram damit machen, das fanden wir noch.

Jochen

Und ja, genau, und asynchrone Dinge und überhaupt, ja, da kann es auch dann relativ fies werden.

Jochen

Das Dumme ist nur, dass es halt dann, wenn man fiese Probleme hat, dann kann man da nicht viel dran tun.

Jochen

Dann muss man leider manchmal den sauren Apfen beißen.

Jochen

Aber ich meine, es ist ja auch schön, wenn quasi schwierige Probleme möglich, äh, schwierige Sachen möglich sind.

Dominik

Einfach einen bemächtigen Tauberstab, ja, also noch mehr Magie, ja.

Jochen

Aber es gibt tatsächlich auch Situationen, wo man dann halt auch komplizierte Dinge tun kann, beziehungsweise muss.

Jochen

Und ja, wo es manchmal auch nicht so richtig offensichtlich ist, was Python da tut.

Jochen

Ja, und es gibt halt auch so Ecken, die halt einfach nicht schön sind.

Jochen

Das muss man natürlich auch sagen.

Dominik

Wenn ihr jetzt einfach irgendwelche Daten von irgendwelchen Sensoren packen wollt in eine Datenbank, was ihr dann relativ macht.

Jochen

Ja, für die meisten Sachen geht das.

Dominik

Handson und genau.

Jochen

Genau, ja, also mit Mythos ist es einfach so, es ist, es ist, würde ich sagen, tatsächlich sehr, sehr einfach.

Jochen

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 das funktioniert halt meistens immer noch, selbst wenn die Antwort, die irgendjemand gegeben hat, 15 Jahre alt ist oder so.

Dominik

Es gibt tatsächlich auch relativ viele Antworten mittlerweile für Python, das ist auch sehr angenehm, weil fast für alles, für jedes einzelne Problem, was 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.

Jochen

Ja, aber ja genau, also das ist das Python einfach ist, würde ich sagen, ist so ein Mythos, der durchaus irgendwie mehr Wahrheit als Mythos ist.

Jochen

Ja, eine andere Geschichte wäre halt irgendwie, oh, dieses Significant Whitespace, das ist ja total furchtbar, das kann da, ich kann so nicht arbeiten.

Dominik

Significant White Space, und für alle Leute, die das jetzt gerade zum ersten Mal in der Sprache zuhören, bedeutet das tatsächlich, man darauf achten muss, wo was in dem Code steht von Python.

Jochen

Ja, dass man halt nicht quasi den Code beliebig formatieren kann, sondern dass halt Whitespace halt auch zur Syntax gehört.

Jochen

Also das, wenn ich jetzt.

Jochen

Ja, also wenn ich eine Zeile, die im gleichen Block ist, anders einrücke als die andere, dann geht das halt schief.

Dominik

Also das, was ein guter Programmierer von vornherein formatieren sollte in seinem Code, das sagt Python, wenn du es nicht machst, dann stürzt du ab und sagt, nee, nee, nee, du aber nicht.

Jochen

Ja, genau.

Jochen

Ja.

Dominik

Das ist natürlich doof, wenn man sich so ein anderes Schema angewohnt hat, irgendwann mal gemacht.

Jochen

Genau, und man kann das halt nicht beliebig einstellen.

Jochen

Oder wenn man jetzt Tabs und Spaces mixt oder so, überhaupt, man kann Tabs auch verwenden zum Einrücken, aber das sollte man nicht tun, das ist böse.

Jochen

Immer schön Spaces verwenden lassen.

Dominik

Vier Leerzeichen pro Ebene.

Dominik

Und die meisten IDEs hier bauen die das auch irgendwann um.

Dominik

Das heißt, ihr könnt das so bauen, dass ihr dann vier Spaces pro Tab bekommt.

Dominik

Da könnt ihr wieder im Tab arbeiten, aber es wird umgewandelt und ansonsten habt ihr tatsächlich manchmal Probleme.

Dominik

Wenn ihr irgendwelchen Code Freunden schickt oder Code von Freunden bekommt, die haben Tabs benutzt und ihr Leerzeichen, dann funktioniert das nicht mehr und ihr seht nicht genau warum, weil irgendwo irgendwelche Leerzeichen dazu führen, dass da unterschiedlich interpretiert wird und dann stürzt das ganze Programm ab.

Dominik

Hässlich.

Dominik

Gerade für Anfänger manchmal stehen davor und denken sich so, was?

Dominik

Warum?

Geht nicht.

Ja.

Jochen

Also ich würde sagen, so ein bisschen was ist ja da ja drin.

Jochen

Also ich dachte auch am Anfang, also ich kam ja dann zu der Zeit, wo ich mich mit Python angefangen habe zu beschäftigen, auch von Pearl her, wo man das halt nicht hat, wo man das kommentieren kann, wie man will und so.

Jochen

Und ich dachte auch so, oh, das ist aber blöd, dass man da jetzt irgendwie das darauf achten muss.

Jochen

Aber das waren halt ein paar Tage und danach war es super und fand das nie wieder problematisch.

Jochen

Aber ich kann so ein bisschen verstehen, dass es blöd ist, wenn man das selber dafür sorgen muss, dass die quasi Formatierung so ist, dass die Syntax stimmt.

Jochen

Ich würde aber auch sagen, dass man das heute eigentlich nicht mehr macht.

Dominik

Also andere Sprachen machen ganz viele Klammern oder Semikolon oder sowas.

Jochen

Das ist halt der Preis, den man dann zahlen muss, wenn man halt quasi eben nicht die Formatierung Teil der Syntax als Teil der Syntax hat, sondern sagt, okay, du kannst formatieren, wie du willst, dann muss man halt irgendwie anders signalisieren, wo einen Block anfängt und aufhört.

Jochen

Und dafür benutzt man halt typischerweise Klammern.

Jochen

Und das heißt, man hat halt sehr viele Klammern.

Kannst du mal zählen, fünf Klammern auch, sechs haben wir zu

Jochen

halt auch nicht so richtig schön.

Jochen

Python ist diese Frage halt nie so, muss ich da jetzt noch eine Klammer zu?

Jochen

Doch, man hat sie auch an anderer Stelle, aber jedenfalls nicht beim Schließen von Blöcken, so muss ich da jetzt noch eine Klammer zu machen oder nicht, sondern nee, wenn ich den jetzt eingerückt habe und aufhöre, dann ist dieser Block vorbei.

Jochen

Das ist halt viel einfacher.

Jochen

Ja.

Jochen

Und 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 denkt, dass es halbwegs passt.

Jochen

Und dann nimmt man halt sowas wie Black.

Das ist jetzt ein Ding, was halt Black Schwarz.

Genau.

Jochen

Das ist so ein Kommandozeilen-Utility, man kann das, das gibt es aber auch SWIM-Plugin für einen Editor oder so.

Jochen

Und in dem sagt man einfach nur, okay, reformatiere alle so, dass es irgendwie dem Standard entspricht und dann formatiert das den Code halt um.

Jochen

Aha.

Jochen

Und dann muss man da selber nichts mehr machen.

Dominik

Muss man das importieren oder ist das ein Kommandozeilento-Tool?

Jochen

Das ist ein Kommandozeilentool, aber wie gesagt, es gibt für die meisten Editoren Plugins, die das dann halt automatisch haben.

Dominik

Diese muss ich mir direkt mal aufschreiben, ja, wieder was zu lernen.

Jochen

Genau.

Jochen

Ja, also ich würde sagen, heutzutage sollte man eigentlich nicht mehr von Hand formatieren müssen, das macht man einfach nicht mehr.

Jochen

Genau, damit ist das im Grunde alles kein Problem mehr, weil man hat ja als Mensch gar nicht mehr damit zu tun, man muss sich keinen Gedanken mehr drücken.

Dominik

Man muss einen Code in eine Zeile schreiben, es funktioniert weiterhin wunderbar.

Jochen

Man kann tatsächlich relativ viel in eine Zeile schreiben, aber dann in Python muss man das dann auch signalisieren, dann schreibt man ein Semikolon, wenn man Statements voneinander dran möchte.

Jochen

Ja, das Semikolon gibt es auch in Python.

Jochen

Man muss es normalerlich nicht hinschreiben, weil der Zeilenumbruch das ist halt quasi gleiche.

Wenn man es hinschreibt, tut man.

Jochen

Aber wenn man es hinschreibt, dann kann man auch alles in eine Zeile schreiben, ja, das geht.

Jochen

Nicht, dass man das wirklich tun sollte, aber.

Das sieht ziemlich argie aus.

Dominik

Aber für so ein Telepromp oder so.

Jochen

Ja, genau.

Jochen

Ja, also 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.

Ich hätte gerade

Dominik

gepiept, muss man eine Pflanze gießen jetzt?

Jochen

Nee, meine, ich habe vergessen, meine Uhr zu sagen, dass das gerade nicht, dass sie nicht stören, dass sie nicht rumhaften sollen.

Jochen

Ja, und deswegen piept es bei mir.

Jochen

Ich mache das gerade nicht auf Lot los.

Jochen

So.

Jochen

Und eine andere Geschichte ist, ja, genau, Python ist langsam.

Jochen

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

Dominik

Oh mein Gott, nein!

Was tue ich jetzt?

Ja.

Dominik

Ich bin viel schneller mit in der hier.

Jochen

Ja, man muss irgendwann das in Go neu schreiben oder in, keine Ahnung, oder in C oder C<unk>, viel besser, weil viel schneller.

Dominik

Und ist es langsam?

Jochen

Ja und nein.

Jochen

Also es kommt halt tatsächlich, also man kann, solche pauschalen Urteile sind halt immer falsch eigentlich deswegen, weil man das, ja, man muss halt immer quasi konkret sagen, was man damit meint, wenn man jetzt sagt, es ist schneller oder langsam und halt einen bestimmten Kontext geben und dann kann man das halt sagen.

Jochen

Also ich könnte zum Beispiel sagen, also wenn ich Methoden aufrufe in Python, dann ist das halt deutlich langsamer als jetzt in C<unk> zum Beispiel.

Jochen

Das ist tatsächlich so, oder wenn ich eine Funktion aufrufe in C, ist es viel schneller als in Python.

Jochen

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<unk>.

Jochen

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

Jochen

Aber die Frage ist halt, was ein Programm so tut.

Jochen

Und wenn ich jetzt zum Beispiel irgendwie große Matrizen miteinander multipliziere und ich mache das halt irgendwie mit zwei NumPy-Arrays in Python, wo die Syntax sehr schick ist und ich das in einer Zeile tue, and 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 irgendwelche Datenstrukturen, weil ich nicht irgendwie so ein Type Memory View oder what Cannes.

Jochen

And that könnte jetzt für manche Leute überraschend sein, weil wenn quasi sich jemand die Mühe gemacht hat, irgendein Problem, also wirklich da so das letzte Quäntchen, 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.

Jochen

Und gerade diese ganzen Berechnungsgeschichten, Scientific Computing-Zeugs, das ist halt alles sehr schnell in Python.

Dominik

Ja, das C-Types, oder?

Nein, nein, nein, nein.

Das ist doch nicht anderes halt.

Jochen

C-Types ist nochmal eine andere.

Dominik

Da habe ich irgendwas durcheinander geworfen.

Entschuldigt bitte.

Jochen

Es ist auch so, dass man, dass man quasi relativ einfach eine Geschichte, mit der man dann halt gut optimieren kann, ist auch sowas wie Seiten zum Beispiel.

Jochen

Also C-Types ist nochmal eher zum Anbinden von irgendwelchen C-Bibliotheken, aber es gibt sowas wie, ach das hatten wir, das haben wir vergessen.

Jochen

Das müssen wir vielleicht gleich nochmal, es gibt nicht nur den Python, den C Python-Interpreter, es gibt nur andere Python-Interpreter.

Jochen

Und es gibt halt auch so Dinge wie Seiten, die Python bzw.

Jochen

Python-ähnlichen Code nehmen und den in C verwandeln.

Dominik

Ja, also das haben wir ja gar nicht vergessen, dann erklären das doch einfach jetzt.

Jochen

Genau, genau.

Jochen

Wenn ich jetzt irgendwas schnell machen möchte, dann gibt es halt die Möglichkeit, okay, ich schreibe das halt einfach in C und muss mich da ein paar Konventionen halten, dann kompiriere ich das und dann 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.

Dominik

Aber ich schreibe einfach C-Code und dann wird das in Python geladen, ich benutze die Python-Syntax und bin schnell dabei.

Jochen

Ja, ja, ja, so ungefähr.

Jochen

Das ist halt ein bisschen Arbeit, aber das geht.

Jochen

Und das ist vor allen Dingen halt auch so ein bisschen, man muss sich wieder einlesen, wie man das, wie man so ein C-Modul schreibt und so.

Jochen

Aber was man auch machen kann, ist, man schreibt halt das, was man, was man auch nochmal machen möchte, in einem Python-ähnlichen Dialekt, wo man halt auch, man kann einfach so Python hinschreiben.

Dominik

Python-ähnlicher Dialekt, jetzt haben wir ja schon ganz viel Programmiersprache, es gibt sogar noch Dialekte, das wird ja immer besser.

Jochen

Man kann da zum Beispiel, 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.

Jochen

Also man schreibt halt quasi noch Typen mit zu den Variablen.

Dominik

Wie wir das eben schon hatten, also dass mit der neuen Version jetzt schon so drin ist, genau.

Jochen

Type-Anotation, aber die sind halt leider nochmal was anderes.

Jochen

Das funktioniert nicht mit Type-Annotation.

Dominik

Okay, das heißt nochmal ein bisschen umwendig.

Jochen

Könnte man vielleicht irgendwann auch machen, das gibt es aber noch nicht.

Jochen

Jedenfalls, wenn man das jetzt so hingeschrieben hat, in diesem Dialekt, der sehr einfach ist und aussieht wie Python quasi, mit Typen dran, dann kann man das in C kompilieren und zwar in C, dass halt man dann hinterher wieder so kompilieren kann, dass es ein C-Modul ist, das man dann wieder importieren kann.

Jochen

So dass man halt das eigentliche C nie sieht.

Dominik

Man muss eigentlich nur Python ein kleiner Dialekt schreiben und schon ist es C und dann wird es schnell.

Jochen

Genau, genau, genau.

So schnell wie C.

Jochen

Und ist dann so schnell wie C.

Problem gelöst, würde ich sagen.

Jochen

Genau, und das ist halt schon sehr cool.

Jochen

Das kann man sogar in Jupyter-Notebooks als Cell-Magic schreibt einfach Prozent-Prozent-Seiten, schreibt dann halt irgendwie die Funktion rein mit Annotation 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, wusch.

Jochen

Einfach so da.

Jochen

Und das ist halt schon sehr, das ist ein, ja, also ich meine, wenn man solche Sachen zeigt, wie sagen Python ist langsam, dann kann, wenn man es drauf anlegt, kann man sehr schnell werden.

Jochen

Auch in diesen Geschichten kann man halt auch diesen Global Interpreter-Log deaktivieren.

Jochen

Dann kann man halt sagen, so, okay, ich weiß hier genau, was ich tue, ich deaktiviere das Ding.

Jochen

Also da ist das alles nicht mehr so relevant.

Dominik

Also da kann ich dann auch mit mehreren Kernen rechnen.

Jochen

Genau, da kann ich dann auch quasi das, was ich tun möchte, auf mehrere Prozessoren verteilen.

Jochen

Passiert auch.

Jochen

Also wenn ich jetzt irgendwie, keine Ahnung, eben eine Matrizenmultiplikation, das weiß ich gar nicht, ob das mit einem, aber wenn ich irgendwelche Dinge auf Lumpe-Arrays mache oder in Pantas mache, manchmal, ja nicht immer, verteilt es dann halt den Kram automatisch halt auf alle Prozessoren, die ich da habe.

Jochen

Ja, ansonsten gibt es auch jede Menge schöne Bibliotheken, die man da benutzen kann.

Jochen

Für Data Science-Geschichten ist da halt zum Beispiel Dask sehr zu empfehlen.

Jochen

Dask.

Dominik

Data Ask.

Jochen

Ich weiß gar nicht genau, wofür das steht.

Jochen

Task, nur D, ja.

Dominik

Da ist ein Task.

Ja, ein Task überst du.

Jochen

Ja, genau.

Jochen

Und ja, es gibt auch so, da gibt es noch diverse andere Geschichten.

Jochen

Es gibt zum Beispiel Number.

Jochen

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.

Jochen

Das kann Dinge auch total beschleunigen.

Jochen

Da muss man gar nichts ändern.

Jochen

Also auch da kann man dann natürlich Typen dazu schreiben oder so.

Jochen

Aber auch da oft ist es so, man schreibt es einfach drüber und die Funktion wird viel, viel schneller.

Jochen

PiPy oder sowas habe ich noch.

Jochen

PyPy, genau, das ist dann ein anderer Interpreter, den man verwenden kann.

Jochen

Der hat dann diverse Probleme nicht hat, der hat dann macht auch so Just-in-Time-Kompilierungsgeschichten und so.

Jochen

Und ist dadurch schnell.

Jochen

PyPy ist ein bisschen problematisch.

Jochen

Das hat irgendwie immer so auf der aktuellsten Version von Python.

Jochen

Und das ist so ein bisschen leidet darunter, dass da nicht so genug Leute dabei sind.

Jochen

Es gibt auch Stackless-Python, also es gibt noch diverse andere Interpreter.

Jochen

Es gibt nicht nur den C-Python-Interpreter.

Jochen

Aber man muss schon sagen, der C-Python-Interpreter ist natürlich eigentlich derjenige, den die Leute so verwenden und den man halt kennt.

Jochen

Und auch halt auch die Referenzimplementation.

Jochen

Aber wenn man jetzt in einem bestimmten Szenario mehr Performance braucht, dann kann es durchaus sinnvoll sein, da halt sowas wie PyPy zu verwenden oder so.

Dominik

Ich traue niemals dem Mensch magst, die dich selbst gefällt hast.

Jochen

Ja, genau.

Jochen

Ja, das ist auch so einer der Mythen.

Jochen

Irgendwie Python ist langsam.

Jochen

Was haben wir denn noch so?

Ja.

Dominik

Also wir wissen, dass Python einfach ist, wir wissen, dass Python nicht langsam ist.

Dominik

Nicht langsam sein muss.

Dominik

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.

Dominik

Fällt dir noch was ein?

Jochen

Nö, dazu gerade gucken.

Dominik

Warum hat Python so lange gebraucht, bis es sich so durchsetzte?

Dominik

Was glaubst du?

Das ist eine gute Frage.

Jochen

Also ich hätte damit auch gar nicht gerechnet, dass es jetzt passiert.

Jochen

Also wenn ich 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.

Jochen

Und ich hätte wahrscheinlich geschätzt, dass es viel weniger lang dauert.

Dominik

Und jetzt angekommen ist, sagst du, es gibt auch gar keine Alternative.

Dominik

Also auch Go sagst du, das ist ja zwar ganz fancy Stuff, aber.

Jochen

Nein, das ist auch alles schön.

Jochen

Also ich meine, ich finde Go auch toll, ich finde auch Rust toll.

Jochen

Das hat alles schon so auch, das sind halt vor allen Dingen andere Trade-offs und ich meine, gut, das sind auch alles manchmal so sehr viel modernere.

Jochen

Also ich würde sagen, Go ist stark, auf der Go-Syntax ist sehr stark inspiriert von Python.

Jochen

Die, die also, ja, sind teilweise sehr, sehr viel, also sowohl Go wie auch Rust sind halt sehr viel jünger als als Python, insofern ist es halt auch vielleicht nicht unbedingt direkt miteinander vergleichbar.

Jochen

Aber Go ist halt halt ein schmaleren Einsatzzweck, würde ich jetzt mal so denken.

Jochen

Vielleicht ändert sich das auch noch irgendwann an.

Und wahr?

Dominik

Also wofür würdest du jetzt Go benutzen?

Jochen

Naja, Systemprogrammierung und halt Sachen, wo man quasi viel I.O.

Jochen

hat und viel CPU braucht.

Jochen

Das ist, also wenn man jetzt zum Beispiel sowas wie ein Datenbankserver schreiben will oder so.

Jochen

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.

Dominik

Also viel Sachen machen muss, heißt tatsächlich Input-Output die ganze Zeit.

Jochen

Input-Output plus irgendwie viel CPU braucht.

Jochen

Also wenn nur Input-Output machen muss und I.O.-Multiplexen, das geht in Python auch total super.

Jochen

Nennt man Async IO oder die neuen Frameworks, die es da gibt, weiß ich nicht, Trio da oder was auch immer.

Dominik

Trio von David Beasley, Bürgerschef in der EuroPython, das war auch sehr toll.

Dominik

Aber ich glaube, das ist nur ein Dialekt von Async.

Jochen

Ja, genau, das ist ein bisschen, die sind auch relativ kompatibel irgendwie zueinander.

Jochen

Das ist, genau, damit geht das auch alles total super.

Jochen

Dafür brauche ich jetzt nicht, da ist der Gill nicht unbedingt ein Problem.

Dominik

Der Gribble Interpreter-Log, ja.

Jochen

Genau, genau.

Jochen

Ich kann auch mehrere Prozesse starten oder so.

Jochen

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.

Jochen

Also da könnte es sein, dass es sinnvoll ist, ja.

Jochen

Also dass ich halt einen Prozess habe, der halt auf vielen Prozessoren läuft und dann auch IO-mäßig irgendwie ganz viel nach draußen macht.

Jochen

Und da wäre Go wahrscheinlich super.

Jochen

Ja, oder Rust hat halt auch schöne Eigenschaften, dass halt da irgendwie diverse Sachen garantiert sind zur Compile-Zeit.

Jochen

Das ist halt toll.

Jochen

Ja.

Aber Moment, jetzt musst du nochmal kurz erklären, es sind bestimmte Sachen garantiert zur Compile-Zeit, da die bei Python nicht sind.

Dominik

Da musst du jetzt ganz kurz nochmal versuchen, das so zusammenzufassen.

Dominik

Das habe ich jetzt nämlich noch nicht so ganz durchblickt.

Ach, ich weiß nicht.

Jochen

Vielleicht führt das auch ein bisschen zu weit, also weil bei Rust ist es halt so, dass man quasi garantieren kann, dass es keine Speicherelecks gibt und so.

Jochen

Bei Python sollte das jetzt auch nicht passieren, wenn man das schafft, außer dadurch den Speicher wirklich zu verbrauchen, also wenn man einfach nur irgendwas macht und irgendwas erzeugt, irgendwas wieder wegschmeißt und trotzdem quasi der Prozess, der Speicher des Prozesses, den man da halt geschaltet hat, immer größer wird, dann hat man halt einen Bug gefunden.

Jochen

Also gibt es natürlich auch immer wieder.

Jochen

Sollte aber auch nicht passieren in Python.

Jochen

Aber es gibt da nicht so harte Garantien.

Jochen

Und man kann es auch kaputt machen, wenn man das darauf anlegt.

Dominik

Irgendwelchen Unsinn anstellen.

Dominik

Gabisch-Pollektor importieren, dann drauf referenzieren, auf die Objekte, die man da findet.

Jochen

Ja, man kann da beliebig kaputte Sachen natürlich machen.

Jochen

Genau.

Jochen

Ja, aber diesen Anwendungsfall, dass man viel IO und viel Prozessor gleichzeitig braucht, den haben, glaube ich, glaube ich, gar nicht so viele Leute.

Jochen

Insofern ist es halt auch so, dass ich finde, das ist der richtige Schritt sozusagen.

Jochen

Oder ich finde, das ist ein sehr netter Punkt quasi.

Jochen

Wenn man jetzt Reference Counting in Python hat, man hat halt gute Single-Thread-Performance, man hat sehr gutartiges Latenzverhalten, das ist alles, verhält sich alles sehr schön.

Gut optierbar damit dann auch

Jochen

damit halt, dass es auf mehreren Prozessoren laufen kann.

Jochen

Aber den Fall, dass man jetzt Software hat, die tatsächlich auf vielen Prozessoren laufen muss, den haben die meisten Programmierer gar nicht.

Jochen

Denn dieser Anwendungsfall trifft ja nur einen kleinen Teil.

Dominik

Spieleprogrammierer.

Jochen

Spieleprogrammierer und Unterbeständen, ja, Leute, die Datenbank-Server schreiben oder irgendwie einen Web-Server nicht mal.

Jochen

Oder ich weiß es gar nicht, mir fällt es sogar tatsächlich schwer, mir dazu zu bauen, die das irgendwie erfordern.

Jochen

Insofern ist halt diese Beschränkung halt nicht so schlimm, wie sie aussieht.

Jochen

Und in Java, das sieht total toll aus, auf dem Papier.

Jochen

Kann auf vielen Prozessoren laufen.

Jochen

In der Praxis ist es aber blöd.

Jochen

Die Single-Shread-Performance ist nicht gut.

Jochen

Und also das, was halt die meisten Leute interessiert, wenn sie jetzt irgendwie irgendwas starten, ein Programm starten und das tut dann irgendwas, wenn es halt, das ist halt langsamer.

Jochen

Das ist halt genau der Grund, warum, wenn ich jetzt in so einer IntelliJ-Idee auf den Kopf drücke, dass es sich halt irgendwie sich alles so zäh anfühlt, weil ja Single-Shread-Performance nicht so toll ist.

Jochen

Das ist und Latenz nicht vorhersagbar, klingt nicht so schlimm, ist aber in der Praxis doof, weil manchmal zur falschen Zeit irgendwie, wenn was mehr Latenz braucht, kann halt sein, dass es halt unter Umständen sehr teuer wird.

Jochen

Je nachdem, was man da für Services betreibt.

Jochen

Und ja, das ist eigentlich, das sind Dinge, die hören sich harmlos an, sind aber ziemlich schlimm.

Jochen

Während in Python, das hört sich ziemlich schlimm an, ist aber gar nicht so furchtbar.

Jochen

Und wenn man dann tatsächlich so eins von diesen Problemen hat, dann kann man halt da drumherum arbeiten, oft, indem man dann halt viele Prozesse startet.

Jochen

Gut, dann muss man irgendwie dazwischen kommunizieren, muss irgendwie vielleicht Chat Memory haben oder solche Sachen, aber es geht.

Jochen

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.

Jochen

Weil das dann oft sehr kompliziert wird und man halt auch ordentlich locken muss und ja, wirklich sich vorzustellen, was passiert, wenn ein Prozess auf mehreren CPU parallel unterschiedliche Dinge tut, das ist einfach für auch ein Programm, ich würde sagen, die allermeisten Programmierer überfordert das total, zu mich überfordert das total.

Dominik

Du kannst nicht einfach multidimensionale Matrizen in deinem Kopf schummieren.

Jochen

Ja, also das ist so, und wenn man jetzt sozusagen etwas, was zu schwierig für die meisten Leute ist und selten gebraucht wird, halt 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.

Dominik

Wenn ihr anderer Meinung seid, schreibt eine E-Mail an Handwagen.

Dominik

Wahrscheinlich www.de.

Jochen

Ja, also ich finde das jetzt nicht die reine Wahrheit sozusagen, sondern es ist natürlich sehr gefärbt.

Jochen

Ich mag halt Python, aber ja, ich finde, die haben da einfach einen sehr schönen Sweetspot quasi.

Dominik

Klingt, dass das eine Sprache, die auch zukunftsträchtig durchgeht.

Jochen

Genau ist, ja.

Jochen

Achso, hatten wir das, hatten wir eigentlich das Zen auf Python schon?

Dominik

Nein, das haben wir noch nicht gemacht.

Dominik

Das wäre jetzt tatsächlich am Ende der Mythen noch

der Punkt.

Jochen

Vielleicht sollten wir das nochmal kurz.

Dominik

Senden auf Python.

Dominik

Das hört sich ja sehr philosophisch an, so ein bisschen nach fernöstlicher Philosophie.

Dominik

Ihr rufen es gerade auf und möchtest du es tatsächlich zitieren?

Jochen

Ich denke schon, tatsächlich.

Jochen

Also man kann sich das auch selber angucken, wenn man einfach so Pythet, einfach Python eingibt und dann sagt Import this, dann erscheint das und es bringt halt so ein bisschen zum Ausdruck, was so Python besonders macht oder wie man Dinge in Python tut und wie sie vielleicht ein bisschen anders sind, als man das normalerweise vielleicht gewohnt ist.

Jochen

Und ja, da sind halt eben solche Dinge drin.

Jochen

Ich weiß nicht, nee, stimmt, also die alle durchgehen muss man einem vielleicht nicht.

Das ist halt hübsch besser ist.

Dominik

Ja, ich glaube, da steht auch am Anfang von der PEP-Version, kann das auch sein, also von dem Style-Guide, den es für Python auf der offiziellen Seite gibt.

Jochen

Ja, ich weiß nicht, so kann gut sein.

Jochen

Ja, dann halt solche Sachen wie explizit ist besser als implizit, ja.

Jochen

Das ist halt auch, also man merkt auch dem Ding an, dass es so ein bisschen sich halt in viele Punkte sind, so eine Abgrenzung Richtung Pearl, glaube ich.

Jochen

Also, einfach ist besser als komplex, ja.

Jochen

Komplex ist besser als kompliziert.

Jochen

Ja, flach ist besser als verschachtelt.

Jochen

Ja, Spaß, was ich jetzt gar nicht jedes im Kontext übersetzen soll, aber es ist halt sozusagen Spaß ist better than dance.

Jochen

Sozusagen lieber übersichtlich als.

Dominik

Also nicht alles in eine Teile backen.

Jochen

Genau, genau, sozusagen.

Jochen

Ja, Lesbarkeit zählt.

Dominik

Also zwischendurch mal leer zahlen lassen, gut, Lesbarkeit ungemein.

Jochen

Ja, das ist überhaupt eines der Designziele bei Python gewesen, dass man das halt, weil Code einfach viel öfter gelesen als geschrieben wird, dass es vielleicht Sinn macht, das darauf zu optimieren, dass man das gut lesen kann.

Dominik

Also wenn euer Nachbarn in den Abend aus dem Weg klingelt, dann noch lesen kann, was er da von Wahl geschrieben hat, dann seid ihr vielleicht bei Python besser aufgehoben als bei anderen Sprachen, ja?

Jochen

Ja.

Jochen

Genau, ja.

Jochen

Spezialfälle sind nicht speziell genug, um die Regeln zu brechen, aber Pragmatismus besser oder Practicality ist besser als die reine Lehre als Purity.

Dominik

Wie lange schreibst du deine Teil?

Jochen

Ich habe das letztens erst geändert, glaube ich, auf 130.

Dominik

Ich glaube, ich glaube 79, 130, 150 irgendwie.

Jochen

Ich hatte es ganz lange, also bis vor kurzem habe ich tatsächlich auch 79 verwendet.

Dominik

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, dass da 79 Jahren.

Jochen

Ja, Terminals sind vor allen Dingen, genau.

Jochen

Dann ist halt bei 80 Zeichen Schluss und genau, das wäre natürlich, deswegen habe ich das auch ganz lange gemacht, aber tatsächlich ist es so, dass heutzutage hat man diese Anwendungsfälle fast nicht mehr und die Monitoren.

Dominik

Also sieht besser aus auf dem eigenen Monitor, oder?

Jochen

Ja, es ist vor allen Dingen auch, es gibt halt viele Fälle, wo es halt schwierig wird, wenn man dann immer quasi nach der Anzahl Zeilen umbrechen, Zeichen umbrechen muss, dann muss man halt komisch rumformatieren.

Und dann lieber schön.

Jochen

Und dann lieber schön und das bricht halt dann diese Begrenzung.

Jochen

So gerade bei Tests finde ich, es ist 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.

Dominik

Im gleichen Namen noch umgebrochen.

Oh, ja.

Jochen

Ja, genau, dann kann man eigentlich nicht mehr umrechnen, dann wird es halt einfach lang.

Jochen

Also daher bin ich jetzt, ich weiß nicht, glaube ich 130, wie die konkrete Zahl ist.

Jochen

Vielleicht rede ich auch Unsinn.

Jochen

Ich benutze das halt, ich formatiere meinen Code auch mit Black, also ich nehme das, was Black sagt.

Jochen

So und kümmere mich nicht mehr drum.

Jochen

Ich hoffe, die haben das sich irgendwie gut überlegt und ja.

Jochen

Genau, was haben wir noch?

Jochen

Ja, genau, Fehler sollten nicht einfach so still weggeworfen werden, sondern sollten immer sichtbar sein.

Dominik

Also wir haben ja auch ein Python Assertion oder sowas.

Dominik

Ich weiß nicht, ist das ein besonderes Feature oder gibt es das von anderen Spatten auch alles?

Jochen

Assert, das ist ein, ja, das ist ein Keyword-Sprache, mit der man halt überprüfen kann, ob irgendeine Bedingung oder irgendwas wahr ist, was sein sollte.

Jochen

Und wenn es halt nicht so ist, dann wirft das halt ein Fehler.

Kann man ganz gut testen.

Jochen

Kann man einen Tests schreiben.

Jochen

Genau.

Jochen

Ja, Fehler sollten irgendwie nie schnell weggeworfen werden, außer man bringt sie zum Schweigen irgendwie explizit.

Jochen

Ja, wenn man irgendwie mehrere Dinge zur Auswahl hat, sollte man irgendwie der Versuchen widerstehen, irgendwie einfach zu raten.

Jochen

Es sollte nur einen und möglichst nur einen einzigen offensichtlichen Weg geben, wie man Dinge tun sollte.

Jochen

Und das ist natürlich ganz klar, irgendwie ein Ding gegen Pearl, weil Pearl ist halt das Gegenteil davon.

Jochen

Es gibt irgendwie Pearl ist auch, ich weiß, da gibt es auch irgendeinen, ja, du kannst es halt irgendwie so machen, es gibt viele Wege zum Ziel.

Jochen

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.

Jochen

Und dass die Lesbarkeit natürlich extrem, weil jeder schreibt dann halt sozusagen sein Pearl-Idiom.

Jochen

Und man kann halt nicht mehr so gut, also weil bei manchen Leuten war es so, wenn man das sich angeguckt hat, dann was ist das überhaupt?

Jochen

Ich meine, teilweise ist das sehr schön.

Jochen

Ich habe auch mal, ich habe das mal ein Buch gelesen von Damien Conway, ich weiß nicht genau, Higher Order Pearl oder sowas.

Jochen

Auch ganz viele verrückte Sachen gemacht.

Jochen

Und sowas habe ich dann mit Begeisterung verwendet und fand das total toll, was man alles für komplexe Geschichten irgendwie da in wenig Zeichen irgendwie unterbringen kann.

Jochen

Aber ich glaube, ich würde das heute wahrscheinlich nicht mehr lesen können und meine Kollegen damals oder kurz danach konnten das wahrscheinlich auch nicht mehr lesen.

Dominik

Oder du selber so zwei Stunden später.

Jochen

Naja, zwei Stunden später ist halt dann vorbei.

Jochen

Und das ist nicht ganz so gut, also es ist nicht optimal, dass es irgendwie da ist.

Da kann man noch was verbessern.

Dominik

Solange ihr nachgearbeitet, dann steht man morgens wieder auf und dann so, oh, was habt ihr gestern da gemacht?

Jochen

Ja, also das heutzutage.

Dominik

Also dokumentiert immer schön euren Code, an Python könnt ihr damit sogar Doc-Tests machen, ne?

Dominik

Das heißt, er testet dann selber auch das, was er dokumentiert.

Jochen

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

Jochen

Also ob das so eine gute Idee ist, kann man machen, aber.

Jochen

Ja, ich würde eher explizite Tests schreiben.

Jochen

Und ich würde auch Py-Tests nehmen.

Jochen

Es gibt halt auch das eingebaute Test-Framework von Python, das sich stark an J-Unit, glaube ich, einem Unit-Test Ding von Java irgendwie orientiert hat.

Jochen

Ich weiß gar nicht, wie das heißt.

Jochen

Und das ist komisch, weil es ist halt nicht so richtig pythonisch, weil es sind halt halt so die Dinge wie Konventionen, per Konvention sind halt die Methodennamen Camel-Case und nicht mit Underscore.

Jochen

Normalerweise Underscore und da ist aber Camel-Case so mit Java und das ist halt, sieht komisch aus.

Jochen

Und diverse andere Dinge sind auch eigenartig.

Jochen

Das fühlt sich oft eher an, als würde man Java schreiben als Python und das ist halt eigentlich nicht schön.

Jochen

Und deswegen würde ich eben nicht das eingebaute Ding nehmen, nicht das eingebaute Unitest-Framework, sondern wobei von den Features her, die können quasi das gleiche.

Dominik

Du Doc-Testest ja jetzt nicht, oder?

Dominik

Weil die DocTests ja einfach in den Dokumentationen dann irgendwie Funktionen testen.

Jochen

Ich weiß gar nicht, ob das wie die ausgeführt werden oder welche Testrunner die dann halt ausführt.

Jochen

Wenn man denen einstellen kann oder so, das kann auch alles gut.

Jochen

Aber ich würde halt eher als Testrunner eigentlich mal eher Py-Tests verwenden.

Dominik

Ja, ja, ich glaube, Py-Test nimmt auch die Doc-Tests damit an oder so.

Jochen

Das kann gut sein.

Jochen

Ich habe noch nie Doc-Tests gemacht.

Dominik

Aber das ist auch alles nur geraten.

Jochen

Keine Ahnung, muss man sich mal angucken.

Jochen

Vielleicht ist es auch alles gut.

Jochen

Aber ich würde auf jeden Fall, wenn man, das ist halt auch so eine unaufensichtliche Geschichte, wenn man vielleicht anfängt, dann denkt man sich so, ach, ich nehme mich ja das eingebaute Unitest-Framework.

Dominik

It's a bad idea.

Dominik

Deswegen werden wir send-off.

Dominik

Also ihr seht schon.

Dominik

Wenn wir jetzt irgendwie anfangen rumzustammen, dann ist das alles totale Grütze, was sie da gebaut haben, natürlich.

Jochen

Ja.

Jochen

Ja, now is better than never.

Dominik

Ja, also das Do it, ne?

Dominik

So ein bisschen das Nike-Prinzip, also einfach anfangen, machen, Prototyping.

Jochen

Ob schon, niemals vielleicht oft besser sein könnte als genau jetzt.

Jochen

Wenn die Implementation schwer zu erklären ist, ist es eine schlechte Idee.

Jochen

Wenn die Implementation leicht zu erklären ist, könnte es sein, dass es eine gute Idee ist.

Jochen

Ja, Namespace ist eine total tolle Idee.

Jochen

Sollte man irgendwie mehr von machen.

Was ist an Namespace?

Dominik

Vielleicht müssen wir es nochmal kurz sagen.

Jochen

Sozusagen ein, ja, wie kann man das generell, also

Dominik

korrekte Übersetzung, der Namensraum, also wenn man seine Variable genauso nennt wie die Nachbarvariable, dann ist es relativ schwierig, die dann irgendwann auseinanderzuhalten, weil wenn man das eine Kind ruft, kommen entweder beide oder nur eins von beiden oder gar nichts mehr.

Jochen

Und dann kann man das mit einem Namensraum prefixen, sozusagen, in dem dann halt ein Name eindeutig ist.

Jochen

Was so ein bisschen, ich weiß nicht, ob da ist eine gleiche Ironie, fürchte ich drin, weil bei Beheiten ist es halt nicht so schön getrennt.

Jochen

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.

Jochen

Oder aus anderen Modulen oder so.

Dominik

Man kann auch übrigens die ganze Standardbibliothek überschreiben, wenn man einfach die Namen verwendet.

Jochen

Ja, ja, kann man alles machen.

Jochen

Es gibt auch Leute, die dann, um das zu umgehen, sagen, die dann irgendwie Import dieses, vom das als irgendwie was ganz anderes, damit sie sich auf keinen Fall irgendwie sich Dinge überschreiben und so.

Jochen

Ja, das ist alles so ein bisschen.

Jochen

Aber im Grunde gibt es natürlich schon Namensräume in Python und das funktioniert eigentlich auch ganz gut.

Jochen

Ja.

Dominik

Wir sehen, auf Python haben wir jetzt so ein bisschen den Toolrennen auch noch näher gebracht.

Dominik

Also was man darunter so ein bisschen versteht, wie man, ich sag mal, ganz besonders entspannen Python-Code schreibt und wie man da richtig rangeht.

Dominik

Also tatsächlich müsst ihr es nicht zu komplex machen.

Dominik

Ich glaube, wenn man die einfache Lösung ist besser.

Dominik

Keep it short and simple.

Dominik

Das ist, glaube ich, immer eine gute Idee.

Dominik

Auch unabhängig von Python.

Dominik

Aber dadurch wird es halt sehr lesbar und sehr korrigierbar.

Dominik

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.

Dominik

Ich meine auch da gibt es Ausnahmen, aber

Jochen

das kann auch sein, dass das die immer gut ist, wenn man schnell versteht, was andere da getan haben.

Jochen

Das könnte auch so, 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.

Dominik

Ja, der Metier hat das verlustige Sachen eingeführt, 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.

Jochen

Aber, naja.

Ja, alter Ego heißt das Ding.

Ach, okay.

Jochen

Ja, da wird auch noch eine Menge interessante, werden noch eine Menge interessante Dinge passieren, glaube ich.

Jochen

Jo, aber ansonsten, ich weiß nicht genau, sind wir so ein bisschen durch, ne, mit der Einführung, glaube ich.

Dominik

Ja, ich würde tatsächlich sagen, wir sind langsam am Ende der ersten Folge angekommen.

Dominik

Wir haben es quasi fast geschafft.

Dominik

Also was haben wir jetzt gerade schon gemacht?

Dominik

Wir haben das dann auf Python kennengelernt, kleines bisschen an die Einführungstools gegeben, so ein bisschen die Features der Sprache angeschaut.

Dominik

Irgendwie, ja.

Jochen

Ja, wie kann man einen Einstieg finden?

Jochen

Wofür wird das eingesetzt?

Dominik

Also falls ihr Fragen habt, wie gesagt, schreibt uns gerne an unsere E-Mail-Adresse.

Dominik

Da kriegt ihr alles nochmal erklärt.

Dominik

Ihr findet mit Sicherheit auch ganz viele im Internet, in Tutorials.

Dominik

Es gibt ja unzählige schöne, spannende Seiten.

Dominik

Die Suchbegriffe werdet ihr bestimmt schon finden dafür.

Jochen

Ja.

Jochen

Und 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.

Dominik

Genau, nicht so der ganz allgemeine Schwank, sondern vielleicht tatsächlich irgendwie was Spezielles, irgendwie eine Module-Libliothek oder eine Technik oder irgendwie eins der Topics, die noch spannend sind.

Dominik

Wenn ihr Vorschläge habt, wenn ihr irgendwas Besonderes hören wollt, kommt gerne.

Dominik

Sagt davon was.

Dominik

Der Jochen wird euch bestimmt was dazu erzählen können.

Dominik

Und ich stelle Ihnen blöde Fragen.

Dominik

Also so ist das.

Dominik

Ja, und vielleicht schließen wir noch ein bisschen mit Veranstaltungshinweisen, Motornie.

Dominik

Wir sind jetzt in Düsseldorf, also wenn ihr selber Veranstaltungshinweise habt, dann sagt doch bitte gerne Bescheid.

Dominik

Dann können wir auch eure Veranstaltungen jetzt im deutschsprachigen Raum gerne promoten und hier vorstellen.

Dominik

Bei uns ist nächste Woche, nächstes Wochenende jetzt hier Python Sprint.

Dominik

Das ist immer eine tolle Gelegenheit, so ein bisschen Leute kennenzulernen.

Dominik

Ich glaube, der ist diesmal schon voll und auch die Warteliste schon voll.

Dominik

Aber er ist, glaube ich, zweimal im Jahr.

Dominik

Gibt es bei Meetup oder bei Pi.df, also die Düsseldorf PiDF.

Dominik

Super tolle Leute, immer ganz viele spannende Vorträge.

Dominik

Schaut euch das auch einfach mal an und ja, tatsächlich zweimal im Jahr.

Dominik

Also schaut einfach mal vorbei.

Dominik

Ja, also wenn ihr die Events in eurer Nähe promotet, schickt ihr auch per E-Mail einfach an, hallo.pythonpodcast.de.

Jochen

Ansonsten genau, was faszinierend geht, es gibt einmal die Python-User Group Düsseldorf PyDDF, die halt auch diese Sprints organisiert.

Jochen

Es gibt einen Python-Fuh, das ist im lokalen Düsseldorf-Rikerspace im Karlsdorf.

Jochen

Das ist einmal wöchentlich, das ist deutlich kleiner.

Jochen

Es sind mehr so immer die gleichen Leute, die da hingehen.

Dominik

Genau.

Jochen

Aber ich finde, ist auch ganz toll.

Jochen

Irgendwie sollte man sich nicht von abschränken lassen, dass es halt so ein bisschen, dass man so reinkommt und denkt, düster jetzt irgendwie oder ist es oder ist gerade irgendwas anderes.

Jochen

Das sind alles sehr nette Leute.

Jochen

Dann, aber genau, vielleicht wenn man gerade mit Leuten mal persönlich irgendwie ein bisschen mehr reden will, das ist vielleicht ein bisschen besser, weil so PyDDF ist eher vortragsorientiert und immer ein bisschen etwas größer haben.

Jochen

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.

Dominik

Quantfinance bei Jesen Statistics, ja.

Dominik

Schön fortgeschrittene Themen auch, ja.

Jochen

Genau, und dann gibt es die Python-User Group Köln, apikeologen.

Jochen

Einmal im Monat gibt es da ein Treffen, das ist auch immer meistens so 20, 30 Leute und gibt immer interessante Vorträge, danach geht man irgendwo Essen.

Jochen

Ja, ach, bei PyDDF ist es auch so.

Dominik

Also mehr im Umfeld, wie gesagt, wenn er irgendwo aus, weiß ich nicht, schieß mich tot, Wien, München, von der Ostsee, an der Bürgermark, irgendwas finde, dann sagt Bescheid.

Dominik

Stelle mich hier gerne auch vor.

Ja.

Dominik

Ich kann nur sagen, Jochen vielen Dank.

Dominik

Ja, danke doch.

Dominik

Ein bisschen schlau geworden.

Jochen

Tja.

Und euch.

Dominik

Ich hoffe, die Hörer haben auch ein bisschen Spaß gehabt.

Dominik

Dann bis zur nächsten Folge.

Bis zum nächsten Mal.

Tschö.