WEBVTT

00:00:00.000 --> 00:00:07.200
Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python Podcast, allererste Folge, allererste Episode.

00:00:08.120 --> 00:00:11.240
Wir wollen euch heute ein bisschen fügen und folgende Fragen beantworten.

00:00:11.540 --> 00:00:12.660
Was machen wir eigentlich und warum?

00:00:13.840 --> 00:00:15.160
Wie finde ich einen Einstieg in Python?

00:00:15.460 --> 00:00:17.900
Also, wenn ich Anfänger bin, wie kann ich damit anfangen?

00:00:18.160 --> 00:00:19.700
Und geben ein paar Anfängertipps.

00:00:20.500 --> 00:00:25.120
Und dann wollen wir noch ein bisschen erklären, wie Python funktioniert, ein paar Mythen über Python klären und so weiter.

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

00:00:36.220 --> 00:00:40.680
Und ja, Links und zusätzliche Shownotes zur Sendung findet ihr natürlich in den Shownotes.

00:00:41.960 --> 00:00:43.920
Ja, was machen wir eigentlich? Kleine Einführung?

00:00:44.620 --> 00:00:47.680
Ja genau, vielleicht können wir uns einfach kurz vorstellen oder so.

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

00:00:51.960 --> 00:00:52.140
Ja.

00:00:52.400 --> 00:00:53.400
Wer sind wir denn? Hallo Jochen.

00:00:53.980 --> 00:00:57.480
Hallo Dominik, genau, also ja, mein Name ist Jochen,

00:00:59.120 --> 00:01:03.820
die wirklich wunderschöne Anmoderation gerade kam von Dominik.

00:01:04.980 --> 00:01:11.900
Und genau, ja, wir benutzen beide Python und ich höre auch sehr viele Podcasts

00:01:11.900 --> 00:01:16.820
und im englischsprachigen Raum gibt es halt durchaus einige ganz gute Podcasts,

00:01:17.440 --> 00:01:20.800
die man da hören kann, aber ja, zur deutschsprachigen gab es immer mal wieder Versuche,

00:01:20.940 --> 00:01:27.660
Aber letztlich momentan, soweit ich weiß, jedenfalls kein, der kontinuierlich aktualisiert wird.

00:01:28.020 --> 00:01:32.500
Und ja, da dachte ich, na gut, wenn es niemand macht, dann kann man das ja vielleicht einfach selbst mal probieren.

00:01:34.920 --> 00:01:39.120
Und ja, dann habe ich mich so ein bisschen herumgefragt, ob es Leute gibt, die das vielleicht auch gerne machen würden.

00:01:39.120 --> 00:01:41.620
Und ja, so sind wir dann zusammengekommen.

00:01:44.880 --> 00:01:46.100
Wie kamst du zu Python, Junge?

00:01:46.320 --> 00:01:48.440
Ja, das ist jetzt auch schon eine Weile her.

00:01:49.940 --> 00:01:55.720
irgendwann so 2000, Anfang der Nullerjahre sozusagen.

00:01:56.760 --> 00:01:59.480
Ich war ursprünglich da eher so auf der Perl-Seite

00:01:59.480 --> 00:02:03.240
und dann war aber die, ich habe damals bei Web.de gearbeitet

00:02:03.240 --> 00:02:06.220
und die Firmensprache da war dann halt aber Python

00:02:06.220 --> 00:02:07.940
und dann wurde mir nahegelegt,

00:02:08.040 --> 00:02:09.200
auch ein paar der Dinge, die ich da gemacht habe,

00:02:09.280 --> 00:02:10.800
irgendwie doch eher in Python zu machen als in Perl

00:02:10.800 --> 00:02:13.420
und dann habe ich das erst so ein bisschen gedacht,

00:02:13.420 --> 00:02:15.720
na gut, ob ich das wirklich toll finde,

00:02:15.940 --> 00:02:20.880
aber relativ schnell war ich da ziemlich begeistert von Python

00:02:20.880 --> 00:02:23.840
und mache seitdem eigentlich nur noch Python und kein Pal mehr.

00:02:24.340 --> 00:02:26.180
Du bist schon ein ziemlich alter Hase, wenn ich das so sage.

00:02:26.440 --> 00:02:29.320
Ja, alter Sack, ja.

00:02:31.040 --> 00:02:33.260
Genau, und in unterschiedlichen Bereichen

00:02:33.260 --> 00:02:34.460
habe ich das jetzt schon so verwendet.

00:02:34.460 --> 00:02:38.460
Und daher, ja, denke ich, ist es vielleicht auch ganz...

00:02:39.060 --> 00:02:40.680
Kann ich da auch so ein bisschen was zu erzählen,

00:02:40.740 --> 00:02:42.060
was da so ein Python alles machen kann.

00:02:42.480 --> 00:02:43.740
Ja, deswegen bist du da.

00:02:43.960 --> 00:02:47.240
Also ich gehe davon aus, dass du mir alles erklären kannst, was ich an tollen Fragen habe.

00:02:47.800 --> 00:02:48.840
Ich möchte nämlich noch jede Menge wissen.

00:02:49.740 --> 00:02:52.460
Genau, und wie bist du zu Falken gekommen?

00:02:52.580 --> 00:02:53.960
Ja, ich bin ein ziemlicher Rookie noch.

00:02:54.300 --> 00:02:57.920
Ich bin jetzt insgesamt anderthalb Jahre irgendwie bei Python dabei.

00:02:58.480 --> 00:03:03.260
Und interessiere mich vor allem für, ach, vielleicht ein paar Buzzwords, Data Science und Digitalisierung.

00:03:03.660 --> 00:03:04.780
Was man damit so machen kann.

00:03:05.760 --> 00:03:10.600
Ich habe zwar auch schon damals in der Schule angefangen mit ein bisschen Programmieren und war seit 96 in der Internet-AG.

00:03:11.220 --> 00:03:15.120
Das war damals ganz besonders fancy und habe Webseiten da gebastelt und so ein Krams.

00:03:15.720 --> 00:03:18.860
Habe dann aber einen ziemlich längeren Umweg gemacht über die Volkswirtschaftslehre,

00:03:19.280 --> 00:03:21.860
bis ich dann tatsächlich vor anderthalb Jahren mich dazu entschlossen habe,

00:03:21.960 --> 00:03:23.280
irgendwie nochmal einen ganz neuen Weg zu gehen.

00:03:23.960 --> 00:03:28.780
Ein Umdrehen von vorne beginnen und das zu tun, was mir wirklich am Herzen liegt.

00:03:29.700 --> 00:03:33.280
Eigentlich wollte ich nur ein paar Daten analysieren und bin dann über ein Python-Tutorial gestolpert.

00:03:34.680 --> 00:03:37.720
Nach ungefähr 20 Minuten hat es mich dann irgendwie ziemlich vom Hocker gehauen und erwischt

00:03:37.720 --> 00:03:40.280
und ich wusste, dass es genau das ist, was ich in Zukunft machen will.

00:03:40.780 --> 00:03:41.900
Und so bin ich bei Python gelandet.

00:03:42.980 --> 00:03:45.100
Ja, von einfach mal nur ein paar Daten analysieren

00:03:45.100 --> 00:03:53.600
zu, ja, neue berufliche quasi Herausforderungen.

00:03:54.180 --> 00:03:55.820
Oh, da klopft jemand an die Tür.

00:03:57.740 --> 00:03:59.060
Das hat ein Spielzeug in der Hand.

00:03:59.300 --> 00:03:59.540
Mhm.

00:04:00.940 --> 00:04:02.080
Nun gut, ich hoffe, das stört nicht so weiter.

00:04:03.140 --> 00:04:07.780
Ja, das ist auf jeden Fall ein schneller Einstieg gewesen,

00:04:08.180 --> 00:04:09.720
wenn das nach 20 Minuten schon geschnackelt hat.

00:04:09.960 --> 00:04:11.080
Wäre jetzt ein bisschen länger gedauert, aber

00:04:11.080 --> 00:04:13.320
ja, das ist auf jeden Fall

00:04:13.320 --> 00:04:15.340
eine gute Sache, glaube ich. Das war wirklich so. Ich kam

00:04:15.340 --> 00:04:17.200
da rein, hab den ersten Code geschrieben und hab gedacht,

00:04:17.520 --> 00:04:19.460
ja, genau, das wollte ich dann machen.

00:04:20.540 --> 00:04:21.640
Stimmt. Hammer. Also

00:04:21.640 --> 00:04:23.440
liegt bestimmt auch vielleicht an der Einfachheit der Sprache, aber

00:04:23.440 --> 00:04:25.480
da kommen wir vielleicht ein bisschen später zu, was für

00:04:25.480 --> 00:04:26.480
Features Python alle hat.

00:04:28.000 --> 00:04:29.540
Ja, vielleicht fangen wir noch mal an.

00:04:29.620 --> 00:04:31.680
Warum machen wir das eigentlich? Für wen ist denn dieser Podcast

00:04:31.680 --> 00:04:33.620
genau? Was glaubst du? Für eigentlich jede, die sich

00:04:33.620 --> 00:04:34.440
für Python interessiert?

00:04:35.400 --> 00:04:36.680
Ja, ich denke schon.

00:04:38.620 --> 00:04:39.500
Das ist halt auch so

00:04:39.500 --> 00:04:41.240
so ein Ding, dass Python momentan halt

00:04:41.240 --> 00:04:43.460
sehr viel an Popularität gewinnt.

00:04:43.560 --> 00:04:45.540
Also ich meine, das hat es schon immer getan, also es war

00:04:45.540 --> 00:04:47.520
schon immer recht populär,

00:04:47.700 --> 00:04:49.560
aber in letzter Zeit, gerade

00:04:49.560 --> 00:04:51.540
eben über Data Science

00:04:51.540 --> 00:04:53.440
und verwandte

00:04:53.440 --> 00:04:55.080
Themen, Machine Learning, Deep Learning,

00:04:56.140 --> 00:04:57.520
Dinge, die halt auch sonst sehr stark gehypt

00:04:57.520 --> 00:04:58.780
werden, ist Python halt sehr, sehr

00:04:58.780 --> 00:05:01.360
groß geworden und mittlerweile hat es

00:05:01.360 --> 00:05:03.200
halt irgendwie Ausmaße

00:05:03.200 --> 00:05:04.160
angenommen, die

00:05:04.160 --> 00:05:07.340
dazu führen,

00:05:07.340 --> 00:05:09.220
dass es jetzt eine ganze Menge Leute gibt, die das gerne

00:05:09.220 --> 00:05:10.720
lernen würden oder sich dafür interessieren

00:05:10.720 --> 00:05:12.580
und aber wenig

00:05:12.580 --> 00:05:14.260
Angebote sozusagen

00:05:14.260 --> 00:05:17.160
diese ganzen Leute irgendwie abzuholen

00:05:17.160 --> 00:05:19.300
und ich denke, da können wir auf jeden Fall

00:05:19.300 --> 00:05:20.800
eine Menge

00:05:20.800 --> 00:05:22.620
Hörer ansprechen

00:05:22.620 --> 00:05:24.320
sozusagen

00:05:24.320 --> 00:05:27.080
aber ich würde das nicht

00:05:27.080 --> 00:05:29.020
unbedingt auf Anfänger beschränken, sondern einfach mal

00:05:29.020 --> 00:05:30.200
so quer durch alle

00:05:30.200 --> 00:05:32.520
größeren Themen oder so, die es gibt

00:05:32.520 --> 00:05:35.140
wir hatten uns ja auch schon so ein bisschen Gedanken zu gemacht, was man da alles mal

00:05:35.140 --> 00:05:36.880
worüber man, über welche Dinge man mal

00:05:36.880 --> 00:05:38.720
so eine Sendung machen könnte und da haben wir

00:05:38.720 --> 00:05:41.920
auf jeden Fall genug Stoff zu senden und da können wir auch gerne mal so richtig fies

00:05:41.920 --> 00:05:42.740
ins Detail gehen.

00:05:43.020 --> 00:05:43.400
Ja, genau.

00:05:43.540 --> 00:05:46.260
Also ich glaube, bevor wir euch erzählen, was wir heute denn genau so machen, wir haben

00:05:46.260 --> 00:05:49.140
ja einen kleinen Einstieg schon gegeben, gibt es tatsächlich diese ganzen vielfältigen

00:05:49.140 --> 00:05:53.040
Themen in Python und wir wollen uns tatsächlich in mehreren Episoden euch das ganz Interessante

00:05:53.040 --> 00:05:57.160
mal so ein bisschen berichten über Django, über Datenbanken, über Python Performance,

00:05:57.540 --> 00:06:00.660
über Machine Learning und ein bisschen Data Science, MicroPython.

00:06:00.740 --> 00:06:02.680
Es gibt ziemlich einiges, was wir jetzt hier auf dem Zettel haben.

00:06:03.440 --> 00:06:05.340
Ihr könnt also auch ein bisschen gespannt sein, was wir jetzt auch so machen.

00:06:06.260 --> 00:06:06.920
Ja, was machen wir heute?

00:06:07.360 --> 00:06:08.400
Das ist der Einstieg in Python.

00:06:08.720 --> 00:06:10.300
Genau, einfach mal so eine Übersicht.

00:06:10.680 --> 00:06:13.620
Genau, und dazu haben wir vielleicht erst mal ein paar kleine Fakten über die Geschichte.

00:06:14.360 --> 00:06:16.560
Dann kann Jochen bestimmt noch viel mehr zu erzählen als ich.

00:06:17.160 --> 00:06:21.020
Aber soweit ich weiß, hat Guido van Rossum die Sprache entwickelt in den frühen 90ern.

00:06:21.660 --> 00:06:24.060
Und zwar aus Amsterdam das herausentwickelt.

00:06:24.980 --> 00:06:27.480
Ja, also das ist schon gute, wie lange?

00:06:27.940 --> 00:06:29.760
Fast 30 Jahre alt tatsächlich.

00:06:30.380 --> 00:06:31.140
Würde man gar nicht denken.

00:06:31.860 --> 00:06:34.180
Python 3, das wir alle nutzen, ist seit 2008.

00:06:35.040 --> 00:06:37.820
Und falls irgendwelche Nachfragen kommen, ja, wir finden nur noch Python 3.

00:06:37.820 --> 00:06:40.940
Ich glaube, das hat sich mittlerweile so eingebürgert.

00:06:41.140 --> 00:06:44.060
Die neueste Version ist jetzt erst im Oktober erschienen, 3.7.1.

00:06:44.840 --> 00:06:47.700
Und für nächsten Herbst ist, glaube ich, 3.8. geplant.

00:06:47.820 --> 00:06:50.400
Also wir sind im Jahr 2018 für alle Menschen, die das irgendwann sparen.

00:06:51.140 --> 00:06:53.740
Ja, also Jochen, im Laufe der Jahre hat sich ziemlich viel getan in der Sprache, oder?

00:06:54.920 --> 00:06:58.720
Ja, wobei erstaunlich viele Dinge auch recht ähnlich geblieben sind.

00:06:58.900 --> 00:07:02.320
Also ich meine, das ist halt auch möglicherweise einer der Unterschiede zu Sprachen wie,

00:07:02.680 --> 00:07:05.520
jetzt nehmen wir mal so JavaScript oder so, wo sich halt in letzter Zeit sehr viel getan hat.

00:07:05.740 --> 00:07:30.900
Und man dann immer, also ich mache in letzter Zeit auch irgendwie ganz schön viel JavaScript und oft muss ich dann, wenn ich jetzt irgendwas mache, so wie iteriert man denn jetzt nochmal über irgendwie quasi die Keys und die Values irgendwie in einem Hash oder so, dann, wenn man danach guckt, dann findet man halt zu jedem Jahr quasi und zu jeder neuen ECMAScript-Version eine andere Art, wie man das am besten jetzt tun sollte.

00:07:31.840 --> 00:07:34.320
Und da ist Python eigentlich sehr, sehr stabil geblieben.

00:07:34.460 --> 00:07:37.320
Das ist heute noch, ja gut, da haben sich auch an der Stelle

00:07:37.320 --> 00:07:39.580
hat sich auch tatsächlich was geändert, aber sehr moderat

00:07:39.580 --> 00:07:41.100
und mehr oder weniger so vorschleifend.

00:07:41.180 --> 00:07:46.660
Das ist halt von Anfang an so, wie es jetzt heute auch noch ist.

00:07:46.880 --> 00:07:50.140
Also es hat sich seit 30 Jahren im Grunde nicht großartig geändert,

00:07:50.320 --> 00:07:52.600
wobei es da auch nicht so wirklich Bedarf gibt für eine Änderung,

00:07:52.700 --> 00:07:55.220
weil es war einfach von Anfang an, hat es quasi gepasst.

00:07:55.240 --> 00:07:55.960
Aber Antupa implementiert.

00:07:57.260 --> 00:08:06.860
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.

00:08:07.060 --> 00:08:09.780
Das habe ich auch alles nicht so richtig auf dem Schirm, was da passiert ist.

00:08:09.780 --> 00:08:16.380
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.

00:08:16.480 --> 00:08:18.040
Das muss irgendwann Ende der 90er gewesen sein.

00:08:18.320 --> 00:08:25.680
Da 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.

00:08:26.220 --> 00:08:32.480
oder irgendwelche Skripte angepasst und dann später so wirklich angefangen,

00:08:32.480 --> 00:08:36.100
damit größere Dinge zu programmieren, habe ich dann mit Python 2.1 oder so.

00:08:36.100 --> 00:08:40.140
Das war so die Version, in der ich die erste größere Geschichte geschrieben habe.

00:08:40.140 --> 00:08:42.140
Was würdest du sagen, war so der größte Unterschied zu heute?

00:08:45.020 --> 00:08:47.180
Der Umfang der Standard-Bibliothek oder?

00:08:47.180 --> 00:08:50.540
Ja, natürlich, also da ist einiges dazugekommen.

00:08:50.540 --> 00:08:54.140
Aber das ist gar nicht so...

00:08:54.140 --> 00:08:58.740
Ja, so diverse Sprachfeatures, also Generatoren,

00:08:58.860 --> 00:09:01.120
ich glaube, die kamen irgendwie mit 2.2 oder so.

00:09:03.920 --> 00:09:06.340
Das ist heute doch etwas, was man viel mehr benutzt,

00:09:06.400 --> 00:09:07.660
als man es damals getan hat.

00:09:09.240 --> 00:09:11.540
Überhaupt diverse Keywords yield.

00:09:11.960 --> 00:09:13.960
Ja, das stimmt, aber das ist auch schon relativ lange da.

00:09:14.080 --> 00:09:15.640
Ich weiß nicht, wann 2.2 rauskam.

00:09:16.560 --> 00:09:20.400
Müsste irgendwann 2002, 2003 gewesen sein oder so.

00:09:20.540 --> 00:09:24.400
was heute eine große Rolle spielt.

00:09:24.500 --> 00:09:25.980
Und damals war das halt alles noch gar nicht da.

00:09:26.300 --> 00:09:31.280
Es ist alles, was irgendwie mit Async.io oder irgendwie, ja.

00:09:31.820 --> 00:09:33.940
Wann kam das anfangen? Version 3 erst oder schon 2?

00:09:33.940 --> 00:09:40.140
Nee, die Syntax dafür, also das ist jetzt erst in 3.5, glaube ich, mit dazugekommen.

00:09:41.700 --> 00:09:43.560
Und es hat sich auch noch was zu 3.6 geändert.

00:09:44.580 --> 00:09:45.880
Gab es da vorher ein externes Modul für?

00:09:46.020 --> 00:09:49.240
Ja, es gab schon immer irgendwie externe Module,

00:09:49.360 --> 00:09:50.480
mit denen man solche Dinge machen konnte.

00:09:50.540 --> 00:09:52.420
sowas wie Twisted oder G-Event

00:09:52.420 --> 00:09:54.460
habe ich auch eine ganze Zeit lang

00:09:54.460 --> 00:09:56.240
verwendet, ist auch toll, aber das Problem ist,

00:09:56.860 --> 00:09:58.400
dass man ja quasi,

00:09:58.500 --> 00:10:00.320
wenn man dann auf eine dieser Bibliotheken aufsetzt,

00:10:00.440 --> 00:10:02.360
halt in seiner eigenen Welt mehr oder weniger

00:10:02.360 --> 00:10:04.340
gefangen ist und wenn jetzt jemand anders

00:10:04.340 --> 00:10:05.800
was geschrieben hat, das auf

00:10:05.800 --> 00:10:08.640
Twisted, ganz viele Leute haben Twisted halt als Basisbibliothek

00:10:08.640 --> 00:10:09.600
für ihren Netzwerkrahmen benutzt,

00:10:10.200 --> 00:10:12.240
aber man kann das dann halt nicht einfach so verwenden,

00:10:12.540 --> 00:10:14.200
weil wenn man jetzt selber

00:10:14.200 --> 00:10:16.260
auf was anderem aufsetzt, dann geht

00:10:16.260 --> 00:10:18.100
das halt alles nicht und das war kein so

00:10:18.100 --> 00:10:19.200
wirklich schöner Zustand.

00:10:20.540 --> 00:10:21.720
Es war auch nicht total furchtbar,

00:10:21.780 --> 00:10:23.160
das ging alles und man konnte irgendwie mit

00:10:23.160 --> 00:10:25.300
Threads konnte man auch eigentlich quasi das schon

00:10:25.300 --> 00:10:27.060
immer machen, irgendwie so IO-Multiplexen,

00:10:27.140 --> 00:10:29.180
das ist halt das, was man vor allen Dingen macht, wenn man

00:10:29.180 --> 00:10:31.400
jetzt irgendwie quasi

00:10:31.400 --> 00:10:32.800
so asynchron

00:10:32.800 --> 00:10:34.620
Dinge tun will.

00:10:35.220 --> 00:10:36.860
Aber so wirklich schön war das alles nie und

00:10:36.860 --> 00:10:38.540
jetzt inzwischen ist es aber,

00:10:39.220 --> 00:10:41.300
gibt es da halt eine nette Syntax

00:10:41.300 --> 00:10:43.140
für und das ist eigentlich ganz toll und das machen

00:10:43.140 --> 00:10:45.300
ganz viele und genau,

00:10:45.460 --> 00:10:47.160
das war damals alles noch

00:10:47.160 --> 00:10:48.120
ganz weit entfernt.

00:10:50.300 --> 00:10:57.180
Ja, dann, ach so, auch damals, was dazugekommen ist, Newstyle-Classes, das...

00:10:57.180 --> 00:10:57.480
Was?

00:10:58.360 --> 00:10:59.400
Newstyle-Classes.

00:10:59.520 --> 00:11:00.280
Newstyle-Classes.

00:11:00.280 --> 00:11:08.680
Genau, die Klassen waren etwas anders davor und ja, genau, jetzt müsste ich noch nachlesen, was da genau die Unterschiede waren.

00:11:08.780 --> 00:11:16.920
Ich glaube, also eigentlich weiß ich nur, dass man halt quasi dann immer nicht Doppelpunkt,

00:11:17.060 --> 00:11:20.540
also Leerzeichen, Class, Name, Doppelpunkt geschrieben hat,

00:11:20.580 --> 00:11:23.760
sondern irgendwie die ganze Zeit lang hat man immer auf Object geschrieben,

00:11:23.760 --> 00:11:27.400
damit es halt von Object erbt und man New Style Classes automatisch verwendet,

00:11:27.720 --> 00:11:29.480
was man jetzt halt auch schon eine ganze Zeit lang nicht mehr tun muss.

00:11:29.680 --> 00:11:31.860
Also jede Klasse automatisch von Object dann, oder?

00:11:32.040 --> 00:11:33.620
Ja, genau.

00:11:33.920 --> 00:11:35.820
Und dann gibt es natürlich noch diverse

00:11:35.820 --> 00:11:37.720
Meta...

00:11:37.720 --> 00:11:40.080
Programmierungsgeschichten, Meta-Classes

00:11:40.080 --> 00:11:41.700
und so. Ich weiß gar nicht, wann die dazugekommen sind.

00:11:42.220 --> 00:11:43.520
Das gab es, glaube ich, am Anfang auch nicht.

00:11:44.160 --> 00:11:44.280
Okay.

00:11:45.920 --> 00:11:47.340
Ja, dann... Ach so.

00:11:48.420 --> 00:11:49.780
Auch eine neue Syntax, die

00:11:49.780 --> 00:11:50.520
sehr praktisch ist.

00:11:50.520 --> 00:11:52.160
Das ist halt so...

00:11:52.160 --> 00:11:54.620
Also es gibt List Comprehensions,

00:11:54.720 --> 00:11:55.780
glaube ich. Die gab es auch nicht, aber dann?

00:11:56.340 --> 00:11:57.720
Die gab es bei 1.5 noch nicht.

00:11:57.960 --> 00:11:59.380
Es gab es bei 2.1, sind die, glaube ich, dazugekommen.

00:12:00.380 --> 00:12:01.700
Also jedenfalls, als ich angefangen habe,

00:12:01.780 --> 00:12:03.380
war das so, das war so eine neue

00:12:03.380 --> 00:12:05.880
Geschichte, die dazugekommen ist. Dann kam, glaube ich,

00:12:06.560 --> 00:12:07.640
dann weiß ich ja nicht, wann

00:12:07.640 --> 00:12:09.840
die Generator-Expressions dazukamen, wo man

00:12:09.840 --> 00:12:11.760
halt nicht eine List-Comprehension hat,

00:12:11.820 --> 00:12:13.580
sondern dann quasi runde Klammern schreibt und dann

00:12:13.580 --> 00:12:15.800
das Ganze ein Generator ist. Das könnte sein,

00:12:15.860 --> 00:12:16.960
dass das erstmal zwei, vier war oder so.

00:12:18.780 --> 00:12:19.880
Und jetzt gibt's

00:12:19.880 --> 00:12:20.820
auch irgendwie so

00:12:20.820 --> 00:12:23.680
Syntax für Dict-mäßige

00:12:23.680 --> 00:12:25.580
Objekte. Also man kann halt auch geschweifte Klammer auf

00:12:25.580 --> 00:12:26.440
und dann

00:12:26.440 --> 00:12:29.800
V-Doppelpunkt

00:12:29.800 --> 00:12:31.720
K-Komma

00:12:31.720 --> 00:12:34.060
v in irgendein Addict.items

00:12:34.060 --> 00:12:35.620
sagen und dann würde sich

00:12:35.620 --> 00:12:37.080
Also kann man sich sein Addiction erst generieren.

00:12:37.240 --> 00:12:39.560
Ja, genau. Und muss dafür

00:12:39.560 --> 00:12:40.520
nicht extra irgendwie

00:12:40.520 --> 00:12:43.160
nochmal Addict aufrufen oder so.

00:12:44.160 --> 00:12:45.420
Ja, das ist jetzt, das ist aber dann

00:12:45.420 --> 00:12:47.420
relativ spät dazu gekommen. Ich glaube, das ist erst

00:12:47.420 --> 00:12:49.480
mit Python 2.3 oder Python 3

00:12:49.480 --> 00:12:49.860
dazu

00:12:49.860 --> 00:12:53.340
gekommen jetzt. Wofür

00:12:53.340 --> 00:12:54.820
nutzt man denn jetzt eigentlich Python heute?

00:12:55.360 --> 00:12:57.360
Ja. Insgesamt, vielleicht machen wir das

00:12:57.360 --> 00:12:58.700
nochmal als Frage für unsere Hörer,

00:12:59.380 --> 00:13:01.360
die das so genau wissen wollen. Genau,

00:13:01.560 --> 00:13:06.880
Also am Anfang war es vor allen Dingen eine Skriptsprache zum Verbinden von irgendwelchen Systemen.

00:13:06.880 --> 00:13:21.980
Man nannte die Dinge auch Glue Languages und so, weil es schön einfach ist, diverse andere in anderen Sprachen programmierte Libraries anzubinden und die dann halt irgendwie miteinander zu verbinden.

00:13:22.080 --> 00:13:25.280
Hast du verschiedene Server-Module mit Python-Kleister dazu geklebt?

00:13:25.840 --> 00:13:37.240
Ja, irgendwie sowas wie man hat Image Magic oder so eine Bibliothek, die jetzt auf Bildern irgendwas macht und hat dann halt irgendwelche Bindings, die das in Python verfügbar machen.

00:13:37.400 --> 00:13:53.240
Und dann hat man irgendwie eine Bibliothek, die irgendwie Mails macht oder dann kann man irgendwie E-Mails mit Bildern oder so dann irgendwie verknusteln und dann E-Mails mit Bildern drin verschicken oder sowas.

00:13:53.640 --> 00:13:55.500
Solche Sachen hat man halt in Python vor allen Dingen gemacht.

00:13:55.840 --> 00:13:57.440
Weil man hat einmal das Bild in der Hand

00:13:57.440 --> 00:13:59.820
und man hat einmal eine E-Mail in der Hand

00:13:59.820 --> 00:14:02.160
und Python gibt dann den Kleber, dass man eine E-Mail mitbildet.

00:14:02.220 --> 00:14:04.240
Genau, ansonsten, wenn man jetzt, keine Ahnung,

00:14:04.320 --> 00:14:06.920
irgendeine Bibliothek hat, die in Zyklospos geschrieben ist oder so,

00:14:07.020 --> 00:14:09.460
wenn man da jetzt irgendwie E-Mail-Support einbauen will

00:14:09.460 --> 00:14:11.040
oder irgendwie eine andere Bibliothek,

00:14:11.080 --> 00:14:12.940
die mal was anderes geschrieben ist, die einbinden will,

00:14:12.960 --> 00:14:14.360
das ist halt sehr schwierig.

00:14:15.060 --> 00:14:17.320
Und mit Python kann man das alles sehr schön integrieren.

00:14:17.780 --> 00:14:18.980
Also für sowas hat man es vor allen Dingen verwendet,

00:14:19.040 --> 00:14:20.860
aber auch für Web-Entwicklung von Anfang an

00:14:20.860 --> 00:14:23.020
eigentlich schon, soweit ich weiß.

00:14:23.620 --> 00:14:24.800
Welche Frameworks haben wir da groß?

00:14:24.940 --> 00:14:27.180
Also ich kenne zum Beispiel Flask, habe ich in einem Tutorial

00:14:27.180 --> 00:14:28.340
gelernt, und natürlich Django.

00:14:28.820 --> 00:14:30.020
Ja, die kamen allerdings alle

00:14:30.020 --> 00:14:32.360
sehr viel später.

00:14:32.860 --> 00:14:34.320
Also, sagen wir mal so, es wurde

00:14:34.320 --> 00:14:37.320
halt auch als CGI verwendet.

00:14:37.780 --> 00:14:38.060
Als was?

00:14:39.320 --> 00:14:40.940
Es gab es ganz früher.

00:14:42.180 --> 00:14:43.200
Das ist schon fast ein bisschen

00:14:43.200 --> 00:14:44.320
Opa als Held vom Krieg

00:14:44.320 --> 00:14:46.700
Sektion. Ja, bitte, deswegen sind wir hier.

00:14:48.320 --> 00:14:49.020
Es gab das

00:14:49.020 --> 00:14:51.260
Common Gateway Interface. Das war halt eine

00:14:51.260 --> 00:14:53.240
Methode, wie Web-Server

00:14:53.240 --> 00:14:55.120
sozusagen Skripte aufrufen konnten,

00:14:55.400 --> 00:14:56.720
die dann irgendwie, also

00:14:56.720 --> 00:14:59.160
am Anfang gab es nur, am Anfang waren statische

00:14:59.160 --> 00:15:01.360
Seiten, wo halt ein Webserver irgendwie eine Datei ausgeliefert hat.

00:15:01.900 --> 00:15:02.960
HTML pur. Ja.

00:15:03.740 --> 00:15:04.020
Und

00:15:04.020 --> 00:15:07.260
das ist aber ein bisschen wenig,

00:15:07.360 --> 00:15:08.900
wenn man jetzt also sowas hat wie eine Webseite mit

00:15:08.900 --> 00:15:11.120
einem Gästebuch, sowas gibt es heute auch alles nicht mehr,

00:15:11.200 --> 00:15:12.620
aber damals war das halt so, da musste man das haben.

00:15:12.620 --> 00:15:14.480
Da musste man irgendwie einen Encounter haben.

00:15:14.840 --> 00:15:16.820
Da hat er sein Gästebuch rum und rein. Ich war bei dir

00:15:16.820 --> 00:15:19.040
im Internet. Genau. Ich habe da was

00:15:19.040 --> 00:15:20.640
reingeschrieben, ich habe es benutzt.

00:15:20.640 --> 00:15:22.700
Ja, und das geht natürlich mit statischen

00:15:22.700 --> 00:15:24.760
Seiten irgendwie nicht. Also wenn

00:15:24.760 --> 00:15:26.660
ich jetzt so ein Gästebuch habe und ich habe da ein

00:15:26.660 --> 00:15:28.680
Feld, wo ich irgendwas eingeben kann und dann soll das

00:15:28.680 --> 00:15:30.620
halt irgendwo gespeichert werden, dann muss

00:15:30.620 --> 00:15:32.600
sozusagen der Text, der

00:15:32.600 --> 00:15:34.340
in dieses Feld geschrieben wurde, irgendwie

00:15:34.340 --> 00:15:36.460
durch ein Skript durch und das muss das irgendwo

00:15:36.460 --> 00:15:38.020
hinschreiben. Und

00:15:38.020 --> 00:15:40.600
damit solche dynamischen Sachen gehen,

00:15:40.980 --> 00:15:41.920
gibt es halt dieses, damit

00:15:41.920 --> 00:15:44.680
quasi irgendwie der Webserver mit

00:15:44.680 --> 00:15:45.960
einem

00:15:45.960 --> 00:15:48.660
Skript kommunizieren kann,

00:15:48.660 --> 00:15:50.520
dass man halt irgendwie diesen Kram

00:15:50.520 --> 00:15:52.640
liest und wegschreibt, gibt es

00:15:52.640 --> 00:15:54.740
das Common-Gateway-Interface und das hat das

00:15:54.740 --> 00:15:56.480
dann so gemacht, es hat dann halt das Skript gestartet,

00:15:56.860 --> 00:15:58.620
also weggeforkt und dann irgendwie da

00:15:58.620 --> 00:16:00.580
per Umgebungsvariablen irgendwie die Daten

00:16:00.580 --> 00:16:02.700
übertragen. Das geht, aber

00:16:02.700 --> 00:16:04.720
es ist halt furchtbar langsam und

00:16:04.720 --> 00:16:05.800
alles nicht so richtig schön.

00:16:07.360 --> 00:16:08.620
Aber so war das damals und da

00:16:08.620 --> 00:16:10.580
ich erinnere mich auch, dass man

00:16:10.580 --> 00:16:12.680
da durchaus Python-Skripte, also meistens hat man

00:16:12.680 --> 00:16:14.660
Perl verwendet, aber das

00:16:14.660 --> 00:16:16.580
ging auch mit Python schon.

00:16:17.640 --> 00:16:18.700
Hatte halt so ein bisschen das Problem,

00:16:18.820 --> 00:16:20.700
dass die meisten Hoster irgendwie kein Python installiert

00:16:20.700 --> 00:16:22.920
hatten und deswegen man keine Python-Skripte

00:16:22.920 --> 00:16:24.600
als CGI-Skripte irgendwie da

00:16:24.600 --> 00:16:26.580
angeben konnte, aber

00:16:26.580 --> 00:16:28.700
Musste man selber

00:16:28.700 --> 00:16:30.660
hosten, wenn man Python-Skripte hatte. Ja, genau. Insofern war das

00:16:30.660 --> 00:16:31.360
halt nicht so populär.

00:16:33.240 --> 00:16:34.400
Ja, die ganzen

00:16:34.400 --> 00:16:36.400
anderen Geschichten, das kam alles viel,

00:16:36.400 --> 00:16:38.560
viel, viel später. Was war denn so das erste

00:16:38.560 --> 00:16:40.540
Framework, was so mit hochkam, wo man die ersten

00:16:40.540 --> 00:16:42.600
Seiten vernünftig mit... Das gab es für Python

00:16:42.600 --> 00:16:44.320
gab es da eigentlich fast nix.

00:16:44.780 --> 00:16:46.120
Also es gab

00:16:46.120 --> 00:16:48.580
also das ist halt auch, da gab es

00:16:48.580 --> 00:16:50.720
eigentlich nur PHP. Also da gab es Mod-PHP

00:16:50.720 --> 00:16:51.260
für den Apache.

00:16:52.420 --> 00:16:54.560
Es gab auch einen Mod-Python, aber das war ziemlich

00:16:54.560 --> 00:16:56.200
furchtbar. Das habe ich mal versucht zu verwenden.

00:16:56.360 --> 00:16:58.440
Ich habe es sogar eine ganze Zeit lang verwendet, aber das war alles

00:16:58.440 --> 00:16:59.220
ziemlich scheußlich.

00:17:00.640 --> 00:17:02.300
Hatte Memory Leaks, war alles irgendwie

00:17:02.300 --> 00:17:04.400
ätzend, dauernd so komische Sachen passiert.

00:17:05.900 --> 00:17:06.640
Also Memory Leak heißt

00:17:06.640 --> 00:17:08.240
dann, der Server stellt ab, wenn den Leute benutzen.

00:17:08.620 --> 00:17:10.640
Ja, man braucht immer mehr Speicher, man weiß

00:17:10.640 --> 00:17:12.560
nicht genau warum und dann irgendwann ist er halt weg

00:17:12.560 --> 00:17:14.420
und dann muss man halt nachgucken, was da schiefgelaufen ist.

00:17:14.600 --> 00:17:16.600
Das ist nicht so schön. Das Mod-PHP war auch

00:17:16.600 --> 00:17:18.560
nicht so toll, aber das hat halt so schon irgendwie ganz gut

00:17:18.560 --> 00:17:19.920
funktioniert und

00:17:19.920 --> 00:17:22.440
das war so die, auch die Anfang der Nullerjahre war so die

00:17:22.440 --> 00:17:23.720
große Zeit des sogenannten

00:17:23.720 --> 00:17:26.280
LAMP-Stacks, so Linux,

00:17:26.420 --> 00:17:27.460
Apache, MySQL.

00:17:30.020 --> 00:17:30.380
PHP?

00:17:30.480 --> 00:17:31.520
PHP, genau.

00:17:33.580 --> 00:17:33.960
Und

00:17:33.960 --> 00:17:35.800
das hat so halbwegs funktioniert

00:17:35.800 --> 00:17:40.460
und ja, Python

00:17:40.460 --> 00:17:41.740
haben zwar Leute auch

00:17:41.740 --> 00:17:44.520
quasi als Web-Anwendung verwendet, aber dann immer

00:17:44.520 --> 00:17:46.620
ach doch, jetzt war es das erste,

00:17:47.060 --> 00:17:48.440
was Leute tatsächlich da

00:17:48.440 --> 00:17:50.800
in Python gebaut haben, war

00:17:50.800 --> 00:17:51.220
Soap.

00:17:52.400 --> 00:17:54.480
Ja, oder Soapy, ich weiß gar nicht genau, wie man das ausspricht.

00:17:54.620 --> 00:17:56.280
Das gibt es bis heute

00:17:56.280 --> 00:17:57.540
und das ist bis heute

00:17:57.540 --> 00:18:00.580
irgendwie eine ganz tolle Community

00:18:00.580 --> 00:18:01.380
irgendwie.

00:18:04.800 --> 00:18:06.660
Und da gab es dann auch

00:18:06.660 --> 00:18:08.500
so ein Content-Management-System oder irgendwie so ein Ding, was drauf

00:18:08.500 --> 00:18:10.840
aufgesetzt hat, das nannte sich Plone. Also daran erinnere ich mich auch.

00:18:10.840 --> 00:18:12.760
Und das muss irgendwie 2004 gewesen sein, als ich es zum ersten Mal

00:18:12.760 --> 00:18:14.940
ausprobiert habe. Das war alles sehr nett.

00:18:15.820 --> 00:18:16.860
Es war nur furchtbar langsam,

00:18:17.080 --> 00:18:19.080
Aber ansonsten war es alles sehr schick.

00:18:20.680 --> 00:18:22.240
Und ich glaube, das waren so die ersten,

00:18:22.660 --> 00:18:25.080
die so irgendwie komplexere Web-Anwendungen

00:18:25.080 --> 00:18:26.260
in Python möglich gemacht haben.

00:18:28.000 --> 00:18:29.720
Wie gesagt, manche Leute benutzen das bis heute.

00:18:30.900 --> 00:18:32.160
Dieses Projekt hat ein großes Problem

00:18:32.160 --> 00:18:34.560
mit dem Umstieg von Python 2 auf Python 3.

00:18:34.560 --> 00:18:39.060
Ich glaube, da ist noch eine ganze Menge Code nicht umgestellt.

00:18:39.440 --> 00:18:43.640
Und ja, jetzt am 1. Januar 2020 läuft ja irgendwie

00:18:43.640 --> 00:18:46.340
der Support

00:18:46.340 --> 00:18:47.100
für Python 2.0.

00:18:48.220 --> 00:18:49.700
Das ist nicht mehr so wirklich viel Zeit.

00:18:50.740 --> 00:18:51.660
Und keine Ahnung, also vielleicht

00:18:51.660 --> 00:18:53.860
haben sie das auch mittlerweile geschafft, dass sie da umgestiegen

00:18:53.860 --> 00:18:54.340
sind, aber

00:18:54.340 --> 00:18:57.740
das ist ein bisschen blöd für dieses Projekt.

00:19:00.200 --> 00:19:01.620
Ja, aber das waren so die ersten, genau.

00:19:02.080 --> 00:19:03.540
Und dann kam halt

00:19:03.540 --> 00:19:05.500
mehr dazu,

00:19:06.200 --> 00:19:07.520
als es eine standardisierte,

00:19:07.780 --> 00:19:09.780
schöne Schnittstelle gab. Also es gab dann diverse Schnittstellen,

00:19:09.780 --> 00:19:11.580
die auch besser funktioniert haben als CGI.

00:19:11.760 --> 00:19:12.600
Es gab fast CGI.

00:19:13.640 --> 00:19:15.980
fast CGI? Ja, genau.

00:19:16.160 --> 00:19:17.640
Das war schneller. Das war schneller, da

00:19:17.640 --> 00:19:19.840
musste der Server das Skript nicht forken, sondern

00:19:19.840 --> 00:19:21.980
da waren da schon so ein paar Skripte

00:19:21.980 --> 00:19:23.720
gepreforkt und dann konnte man das irgendwie, dann wurde

00:19:23.720 --> 00:19:25.460
und die Daten da halt irgendwie

00:19:25.460 --> 00:19:27.800
in der Prozesskommunikation irgendwie hingeschoben

00:19:27.800 --> 00:19:29.840
und das war alles deutlich besser, das ging halt dann

00:19:29.840 --> 00:19:31.860
relativ schnell. Aber es war

00:19:31.860 --> 00:19:33.360
auch alles noch ziemlich hässlich und

00:19:33.360 --> 00:19:35.820
es gibt dann, ich weiß nicht, wann das passiert ist,

00:19:35.960 --> 00:19:37.900
müsste dann so Mitte der Jahre gewesen sein,

00:19:38.300 --> 00:19:39.680
da gibt es dann halt, seitdem gibt es irgendwie

00:19:39.680 --> 00:19:41.360
Mod, gibt es halt Whiskey

00:19:41.360 --> 00:19:43.740
sozusagen als Schnittstelle zwischen Web-Server und

00:19:43.740 --> 00:19:45.300
Applikation. Also

00:19:45.300 --> 00:19:47.200
sich das so halbwegs standardisiert hat.

00:19:47.380 --> 00:19:49.860
Hört sich nach etwas ziemlich Holzigen zu trinken

00:19:49.860 --> 00:19:50.080
an.

00:19:51.380 --> 00:19:52.920
Ja, also wird aber

00:19:52.920 --> 00:19:54.660
WSGI geschrieben.

00:19:56.620 --> 00:19:57.900
Es wird nur lecker ausgesprochen.

00:19:59.280 --> 00:19:59.920
Es ist

00:19:59.920 --> 00:20:00.760
nicht so lecker, wenn man es

00:20:00.760 --> 00:20:02.960
sich dann tatsächlich anguckt, aber

00:20:02.960 --> 00:20:05.580
genau. Und damit ist dann eigentlich auch schon

00:20:05.580 --> 00:20:07.320
die große Zeit von Apache als

00:20:07.320 --> 00:20:09.160
Web-Server irgendwie so ein bisschen vorbei.

00:20:10.040 --> 00:20:12.460
Da tauchen dann plötzlich so andere Server auf,

00:20:12.500 --> 00:20:14.820
die man halt als Applikationsserver häufig verwendet.

00:20:15.160 --> 00:20:17.760
Beziehungsweise man trennt dann eigentlich zwischen Applikationsservern

00:20:17.760 --> 00:20:23.560
und irgendwie den Servern, die halt statische Verhalte nach außen ausliefern

00:20:23.560 --> 00:20:26.360
oder die so ein bisschen Reverse-Proxy halt vor den Applikationsservern sind.

00:20:26.760 --> 00:20:29.680
Da nimmt man meistens auch nicht Apache, sondern dann sowas wie Nginx

00:20:29.680 --> 00:20:32.820
oder am Anfang gab es dann Lite, HTTPD und so.

00:20:34.400 --> 00:20:36.940
Und heute vielleicht, heute nimmt man dann irgendwie sowas wie,

00:20:37.060 --> 00:20:37.900
na, wie heißt der noch?

00:20:39.020 --> 00:20:41.340
Caddy. Ein Google-geschriebener

00:20:41.340 --> 00:20:43.140
Webserver, der sich schön

00:20:43.140 --> 00:20:44.840
auch mit Let's Encrypt irgendwie

00:20:44.840 --> 00:20:46.800
verbindet und dann hat man halt irgendwie

00:20:46.800 --> 00:20:48.520
ordentliches SSL nach draußen,

00:20:48.740 --> 00:20:50.520
irgendwie automatisch, muss da nicht irgendwie...

00:20:50.520 --> 00:20:52.860
Also bei Nginx, also ich habe mich

00:20:52.860 --> 00:20:54.960
beschäftigt, Nginx so weit zu kriegen,

00:20:55.080 --> 00:20:56.680
dass es halt irgendwie beim Test von

00:20:56.680 --> 00:20:58.920
SSL-Labs irgendwie überall grün und okay ist.

00:20:59.320 --> 00:21:00.700
Das hat mich irgendwie so zwei Tage gekostet

00:21:00.700 --> 00:21:02.200
und war irgendwie echt aufwendig.

00:21:03.860 --> 00:21:04.960
Und bei Caddy

00:21:04.960 --> 00:21:06.180
geht das einfach so, muss man

00:21:06.180 --> 00:21:27.760
Das ist schon super. Also den verwende ich jetzt mittlerweile auch meistens vor den Applikationsservern. Applikationsserver sind sowas wie Junicorn, den verwende ich meistens, oder Mew, wie ist GI, oder U, wie ist GI, heißt ein anderer, oder Werkzeug, oder da gibt es einige, die man halt verwenden kann.

00:21:28.360 --> 00:21:46.320
Und die sind sozusagen dafür zuständig quasi, dass da drin die Applikation läuft und die Requests, die halt sozusagen nur von der Applikation beantwortet werden können, die gehen halt dann an diese Server und die rufen dann halt eben quasi die Applikation mit der entsprechenden API auf.

00:21:46.540 --> 00:21:47.940
Also ich wollte jetzt gar nicht unterbrechen,

00:21:48.120 --> 00:21:49.040
ich fand es nämlich auch super interessant.

00:21:49.180 --> 00:21:51.160
Ich glaube, wir machen vielleicht sogar noch eine eigene Web-Folge.

00:21:51.700 --> 00:21:53.920
Wir sind ja heute, das wollte ich nicht vergessen,

00:21:53.980 --> 00:21:55.780
ich hoffe, die Anfänger sind jetzt nicht alle schon ausgestiegen,

00:21:56.120 --> 00:21:57.000
in der Anfänger-Folge.

00:21:57.540 --> 00:22:00.100
Deswegen müssen wir noch ein bisschen mehr eingehen darauf,

00:22:00.160 --> 00:22:02.380
welche Funktionen man mit Python vielleicht noch machen kann.

00:22:02.640 --> 00:22:04.640
Also wir haben jetzt vielleicht einen kleinen Einstieg

00:22:04.640 --> 00:22:06.660
schon mal euch gegeben, was es so an coolen Möglichkeiten

00:22:06.660 --> 00:22:09.500
heute so gibt mit Python und Web-Frameworks.

00:22:09.900 --> 00:22:10.380
Was machen wir noch?

00:22:11.340 --> 00:22:16.460
Genau, das ist heute auch ein wichtiger Teil,

00:22:16.540 --> 00:22:17.740
Glue ist auch noch immer ein wichtiger Teil.

00:22:18.120 --> 00:22:21.620
Ich habe jetzt letztens, also um vielleicht kurz Werbung zu machen

00:22:21.620 --> 00:22:24.160
für einen englischsprachigen Python-Podcast,

00:22:25.280 --> 00:22:27.860
das war Talk Python to Me, glaube ich.

00:22:28.520 --> 00:22:29.800
Doch, ja, Talk Python to Me.

00:22:30.660 --> 00:22:34.040
In der letzten Folge, da ging es um Python 3 bei Facebook.

00:22:35.160 --> 00:22:39.240
Und da erzählte jemand, der halt Python bei Facebook irgendwie macht,

00:22:39.240 --> 00:22:44.380
dass die ganzen Backend-Systeme, die halt irgendwelche Services machen

00:22:44.380 --> 00:22:46.220
oder irgendwie Sachen hoch runterfahren,

00:22:46.340 --> 00:22:48.100
Sachen deployen, das

00:22:48.100 --> 00:22:50.600
ganze quasi Facebook-Management

00:22:50.600 --> 00:22:52.040
Zeugs, das ist halt alles

00:22:52.040 --> 00:22:54.000
Python. Also Frontend ist

00:22:54.000 --> 00:22:56.200
zwar PHP, aber alles, was sozusagen

00:22:56.200 --> 00:22:58.540
Services

00:22:58.540 --> 00:22:59.900
miteinander verbindet oder halt

00:22:59.900 --> 00:23:02.040
irgendwie interne Geschichten macht, das ist halt bei

00:23:02.040 --> 00:23:03.280
Facebook alles in Python.

00:23:03.680 --> 00:23:05.560
Also auch YouTube ist in Python.

00:23:05.780 --> 00:23:07.180
Ja, genau, YouTube ist so ein bekannter

00:23:07.180 --> 00:23:09.360
NASA, macht viele Sachen mit Python.

00:23:09.780 --> 00:23:11.960
Ja, bei Disney zum Filme

00:23:11.960 --> 00:23:13.000
produzieren und

00:23:13.000 --> 00:23:35.580
Ja, Pinterest auch. Ich weiß nicht genau, die waren sogar Django irgendwie. Aber auch Python hauptsächlich. Instagram ist komplett Python eigentlich von der Web-Applikation her. Also ja, es gibt auch durchaus im Frontend einige, die da Python verwenden. Aber es ist halt im Grunde überall.

00:23:38.800 --> 00:23:52.800
Ja, also dieses Glue-Ding ist auch immer noch eine sehr, sehr wichtige Geschichte. Aber dann gibt es halt einen neuen Bereich seit einigen Jahren, der halt auch sehr, sehr populär geworden ist. Das ist halt so ganze Data Science, Machine Learning-Gebiet.

00:23:54.780 --> 00:23:56.360
Diese Sensor-Daten-Erfassung.

00:23:56.440 --> 00:23:59.980
Ja, Scientific Computing, dieser ganze Bereich.

00:24:00.480 --> 00:24:04.040
Also das, was man früher in so einem Matlab gemacht hat, würde ich sagen.

00:24:05.340 --> 00:24:08.040
Ja, oder Mathematiker auch.

00:24:08.720 --> 00:24:15.880
Mathematiker hat ja dieses schöne Konzept entwickelt von diesen Notebooks.

00:24:16.260 --> 00:24:19.660
Also das kennt man vielleicht, wenn man jetzt im wissenschaftlichen Bereich ein bisschen unterwegs war.

00:24:20.060 --> 00:24:23.160
Es gibt so Labortagebücher oder so, wo man aufschreibt, was man irgendwie tut und so.

00:24:24.080 --> 00:24:26.140
Python, die Jupyter-Notebooks, die es jetzt gibt.

00:24:26.140 --> 00:24:27.740
Genau, die gibt es in Python und

00:24:27.740 --> 00:24:30.020
bei

00:24:30.020 --> 00:24:31.840
Mathematik hatte das tatsächlich zuerst

00:24:31.840 --> 00:24:34.260
sozusagen dieses Feature, dass man halt

00:24:34.260 --> 00:24:36.260
solche Notebooks halt dann

00:24:36.260 --> 00:24:38.220
ausführen kann und dann halt nachvollziehen kann, was da

00:24:38.220 --> 00:24:40.140
passiert ist oder wie man zu einem bestimmten Ergebnis gekommen ist.

00:24:40.740 --> 00:24:42.040
Sehr, sehr gute Idee halt.

00:24:43.200 --> 00:24:44.260
Hat sich nie so richtig

00:24:44.260 --> 00:24:46.140
durchgesetzt, weil Mathematik ist halt proprietär

00:24:46.140 --> 00:24:48.120
und teuer und

00:24:48.120 --> 00:24:50.180
ist auch eine sehr exklusive

00:24:50.180 --> 00:24:51.680
Community irgendwie und

00:24:51.680 --> 00:24:54.180
hat irgendwie nie so richtig abgehoben, obwohl es

00:24:54.180 --> 00:24:56.060
eigentlich schon eine sehr schicke Idee war. Und dann wurde

00:24:56.060 --> 00:24:57.220
die halt aufgegriffen von

00:24:57.220 --> 00:25:03.880
den Leuten, die irgendwie so einen

00:25:03.880 --> 00:25:06.120
Interpreter oder man nennt das

00:25:06.120 --> 00:25:08.140
irgendwie so Ripple, weiß gar nicht

00:25:08.140 --> 00:25:09.620
wofür diese Abkürzung, also diese

00:25:09.620 --> 00:25:12.060
Shell, die man bekommt,

00:25:12.140 --> 00:25:13.060
wenn man jetzt Python eingibt.

00:25:13.060 --> 00:25:15.180
Was sie IPython jetzt in dem

00:25:15.180 --> 00:25:16.880
Falle tatsächlich. Ja, die haben

00:25:16.880 --> 00:25:18.960
die haben halt sozusagen das damit

00:25:18.960 --> 00:25:21.060
reingebaut und das nannte sich dann IPython Notebook.

00:25:21.680 --> 00:25:26.140
Also IPython hatte schon den ganzen Teil der Funktion, die man dafür braucht, wenn man sowas implementieren will.

00:25:26.520 --> 00:25:32.820
Und IPython-Notebook hat dann halt quasi sozusagen die Ideen von diesen Mathematica-Notebooks irgendwie aufgegriffen.

00:25:33.140 --> 00:25:36.940
Und ja, das war ein toller Erfolg.

00:25:37.040 --> 00:25:41.140
Man hat das dann auch für andere Sprachen gemacht, für R und für Julia.

00:25:41.660 --> 00:25:44.920
Und dann war irgendwie klar, dass IPython-Notebook ein blöder Name dafür ist,

00:25:45.000 --> 00:25:47.320
weil wenn es halt nicht mehr Python ist, sondern auch andere sehen,

00:25:47.320 --> 00:25:51.880
Dann wurde das halt umbenannt in Jupiter, wobei das halt nicht

00:25:51.880 --> 00:25:53.720
Jupiter wie der Planet geschrieben wird, sondern mit

00:25:53.720 --> 00:25:55.900
P-Y, halt wie für Python, weil

00:25:55.900 --> 00:25:58.120
es dann Julia, Python, R

00:25:58.120 --> 00:25:59.920
quasi, also die

00:25:59.920 --> 00:26:02.060
drei Sprachen, die da halt hauptsächlich irgendwie

00:26:02.060 --> 00:26:03.980
verwendet werden. Das sieht ja ganz schick aus,

00:26:04.020 --> 00:26:05.760
habe ich tatsächlich auch schon ein paar Mal gesehen, das kann man

00:26:05.760 --> 00:26:07.980
tolle Sachen mitmachen und auch live den Code direkt testen,

00:26:08.080 --> 00:26:09.880
ausführen, was man damit macht. Genau, genau, das ist

00:26:09.880 --> 00:26:11.560
halt super praktisch, das ist natürlich jetzt schwer, so

00:26:11.560 --> 00:26:13.900
das zu umschreiben, jemanden,

00:26:13.960 --> 00:26:15.640
der das nicht kennt, quasi

00:26:15.640 --> 00:26:17.900
warum das toll ist,

00:26:18.640 --> 00:26:19.640
ist es halt nur so,

00:26:19.720 --> 00:26:21.700
gerade bei so... Naja, stellt euch vor, ihr könnt

00:26:21.700 --> 00:26:23.500
ein Buch lesen und habt ja irgendeine statistische

00:26:23.500 --> 00:26:25.580
Tabelle, die ihr anguckt und ihr könnt

00:26:25.580 --> 00:26:27.720
live da die Daten eintragen, ändern und auch

00:26:27.720 --> 00:26:29.740
im Schaubild verändert sich direkt mit

00:26:29.740 --> 00:26:31.320
den neuen Datensätzen das, was ihr da

00:26:31.320 --> 00:26:33.660
braucht, was ihr programmiert habt, der Algorithmus,

00:26:33.760 --> 00:26:35.780
um das darzustellen, könnt ihr direkt live sehen,

00:26:35.860 --> 00:26:37.680
was da passiert. Ja, das ist

00:26:37.680 --> 00:26:39.580
eine der schönen Geschichten, aber was für mich vor allen Dingen,

00:26:39.720 --> 00:26:41.760
also ich mache auch viel

00:26:41.760 --> 00:26:43.260
Data Science-Geschichten,

00:26:43.820 --> 00:26:45.520
dass das für mich sozusagen das

00:26:45.520 --> 00:26:47.000
Top

00:26:47.000 --> 00:26:49.760
Feature ist, ist halt

00:26:49.760 --> 00:26:52.040
Und viele der Schritte brauchen eine Menge Zeit.

00:26:52.160 --> 00:26:53.300
Also wenn man große Datenmengen hat oder so,

00:26:53.560 --> 00:26:55.100
kann es sein, dass manchmal, wenn man irgendwas macht,

00:26:55.380 --> 00:26:56.160
dauert das halt eine Stunde.

00:26:58.520 --> 00:26:59.360
Und dann hat man das Ergebnis.

00:26:59.820 --> 00:27:01.160
Irgendeine Berechnung, genau, die man macht.

00:27:02.420 --> 00:27:03.860
Irgendwann trainiert man irgendein Modell oder so.

00:27:03.860 --> 00:27:05.980
Und das rechnet dann halt irgendwie so eine Stunde vor sich hin.

00:27:06.460 --> 00:27:07.860
Und wenn man das jetzt alles in einem Skript hat,

00:27:07.920 --> 00:27:08.720
so wie man das normalerweise hat,

00:27:08.840 --> 00:27:10.860
dann erzeugt man dieses Modell,

00:27:11.040 --> 00:27:12.940
dann macht man da irgendwelche Evaluationen drauf,

00:27:13.060 --> 00:27:14.340
dann visualisiert man das Ganze,

00:27:14.720 --> 00:27:15.940
dann macht man da irgendwelche Tests.

00:27:17.240 --> 00:27:19.820
Da muss man erstmal die ganze Arbeitsschrittkette durchgehen,

00:27:19.860 --> 00:27:21.520
bis man wieder an dem Punkt ist, den man gerade geändert hat.

00:27:21.580 --> 00:27:23.700
Genau. Man kann das natürlich dann irgendwie schlau cachen.

00:27:23.920 --> 00:27:25.000
Das habe ich früher dann so gemacht.

00:27:25.380 --> 00:27:27.300
Da habe ich dann irgendwie Dekoratoren benutzt,

00:27:27.400 --> 00:27:30.340
die dann halt den Kram immer irgendwo hingeschrieben haben

00:27:30.340 --> 00:27:31.120
in ein Verzeichnis.

00:27:31.600 --> 00:27:33.700
Und dann sozusagen immer wieder nur

00:27:33.700 --> 00:27:37.220
die Arrays, die dabei entstehen,

00:27:37.300 --> 00:27:37.720
halt wieder zurück.

00:27:37.780 --> 00:27:39.400
Aber das ist halt alles nicht so...

00:27:39.400 --> 00:27:41.460
Also das kann man machen, aber diesen Aufwand treibt man auch nur dann,

00:27:41.500 --> 00:27:43.600
wenn man sich sicher ist, dass man das wirklich braucht

00:27:43.600 --> 00:27:44.280
und dann verändern will.

00:27:44.600 --> 00:27:46.140
Und jetzt möchte man halt am Schluss dieser Kette,

00:27:46.420 --> 00:27:48.580
die halt irgendwas erzeugt, irgendwie eine Funktion schreiben,

00:27:48.640 --> 00:27:49.760
die irgendwas mit den Daten macht.

00:27:50.160 --> 00:27:52.400
Und jetzt baut man da einen blöden Fehler rein oder so.

00:27:53.320 --> 00:27:54.400
Und das passiert einem tatsächlich,

00:27:54.940 --> 00:27:58.200
wenn man das jetzt so, wie ich das auch früher gemacht habe,

00:27:58.760 --> 00:28:00.020
passiert einem das relativ häufig,

00:28:00.220 --> 00:28:02.940
dass man dann halt den Fall hat, dass irgendwie es geht irgendwas schief.

00:28:02.980 --> 00:28:04.500
Man sieht einen Trace weg und denkt sich schon so,

00:28:04.560 --> 00:28:06.260
oh nein, was für ein blöder Fehler.

00:28:07.100 --> 00:28:09.380
Und das Ergebnis von irgendwie einer Stunde Berechnung oder so ist weg

00:28:09.380 --> 00:28:10.940
und man muss halt im Grunde nochmal eine Stunde warten.

00:28:11.360 --> 00:28:12.820
Aber selbst wenn man nur ein paar Minuten warten muss,

00:28:12.860 --> 00:28:15.900
ist es halt voll blöd, weil man ändert irgendwas,

00:28:16.140 --> 00:28:17.860
probiert es aus, Zyklus halt,

00:28:18.780 --> 00:28:20.120
wenn da viel Latenz

00:28:20.120 --> 00:28:21.360
drin ist, dann wird man sehr langsam

00:28:21.360 --> 00:28:24.020
und dieses Problem

00:28:24.020 --> 00:28:25.960
löst Jupyter eigentlich, lösen die Jupyter

00:28:25.960 --> 00:28:28.040
Notebooks komplett, weil da ist es halt

00:28:28.040 --> 00:28:29.840
so, dass man jede Zelle getrennt

00:28:29.840 --> 00:28:31.780
ausführen kann und wenn man jetzt eine Funktion geschrieben hat, die

00:28:31.780 --> 00:28:33.900
einen Fehler enthält und führt die halt aus

00:28:33.900 --> 00:28:35.920
auf den Daten, die man jetzt da

00:28:35.920 --> 00:28:37.940
irgendwie eine Stunde lang berechnet hat und es geht schief,

00:28:38.380 --> 00:28:39.800
dann ändert man die Funktion, führt sie nochmal

00:28:39.800 --> 00:28:41.860
aus und alles ist gut und das Ergebnis

00:28:41.860 --> 00:28:43.760
ist halt nicht weg und das ist halt super.

00:28:44.000 --> 00:28:45.740
Wenn man sowas arbeiten möchte, ist das glaube ich...

00:28:45.740 --> 00:28:47.740
Genau, und das macht einen halt viel, viel schneller.

00:28:48.020 --> 00:28:49.620
Und das ist halt total toll.

00:28:49.980 --> 00:28:51.800
Ist das auch für Anfänger sehr gut geeignet, würdest du sagen?

00:28:51.900 --> 00:28:52.780
Auch zum Lernen der Sprache?

00:28:53.000 --> 00:28:55.080
Ja, weil es halt so schön interaktiv ist.

00:28:55.460 --> 00:28:56.880
Man kann einfach eine ganze Menge ausprobieren,

00:28:57.080 --> 00:28:59.000
ohne dass man jetzt irgendwie

00:28:59.000 --> 00:29:01.600
Editor lernen muss und ohne dass man

00:29:01.600 --> 00:29:03.400
irgendwie quasi wissen muss.

00:29:04.260 --> 00:29:04.940
Also das, ja,

00:29:05.500 --> 00:29:07.460
man kann halt einfach direkt was ausprobieren. Wenn es halt schief geht,

00:29:07.520 --> 00:29:09.920
dann ändert man die Zelle und führt sie nochmal aus und dann ist es okay.

00:29:09.920 --> 00:29:11.980
Ja, das bringt uns, glaube ich, direkt zu unseren Anfängertipps.

00:29:12.020 --> 00:29:13.100
Ich glaube, das wäre gar nicht so schlecht.

00:29:13.500 --> 00:29:15.200
Also wenn ihr Fragen habt, natürlich direkt irgendwie

00:29:15.200 --> 00:29:16.700
an hallo.pythonpodcast.de

00:29:16.700 --> 00:29:19.180
einfach stellen. Dann erklären wir euch

00:29:19.180 --> 00:29:21.120
auch alles, was ihr gerade vielleicht noch nicht verstanden habt oder was

00:29:21.120 --> 00:29:21.960
euch ein bisschen zu schnell ging.

00:29:23.760 --> 00:29:25.160
Gleich mit ein paar Tipps anfangen.

00:29:25.260 --> 00:29:27.020
Ich glaube, ganz wichtig ist natürlich die offizielle

00:29:27.020 --> 00:29:29.180
Dokumentation. Aussage des Tools zum

00:29:29.180 --> 00:29:30.700
Lesen. Ich glaube, da findet man so die meisten

00:29:30.700 --> 00:29:33.140
Erklärungen für die Standardbibliothek, wie das alles

00:29:33.140 --> 00:29:35.060
so funktioniert. Außerhalb von den

00:29:35.060 --> 00:29:37.180
Tutorials, die es jetzt gibt. Ich habe zum Beispiel

00:29:37.180 --> 00:29:39.140
mit Python the Hard Way angefangen und das

00:29:39.140 --> 00:29:41.220
Buch von Seth Torr gelesen. War ein ganz guter

00:29:41.220 --> 00:29:41.640
Einstieg.

00:29:42.940 --> 00:29:45.120
wenn man sich da so durcharbeitet, kommt man relativ tief

00:29:45.120 --> 00:29:46.960
in die Materie rein. Es gibt noch

00:29:46.960 --> 00:29:49.300
Automated Boarding Stuff mit Python.

00:29:49.760 --> 00:29:51.240
Geht auch auf deutschem Buch zu. Das kostet

00:29:51.240 --> 00:29:53.160
leider Geld, ansonsten ist das ein kostenloses Tutorial.

00:29:53.760 --> 00:29:55.060
Ja, die ganzen Tutorials gibt es sonst

00:29:55.060 --> 00:29:57.160
nicht auf Datacamp, Udemy, Udacity,

00:29:57.540 --> 00:29:58.540
unzählige kostenlose.

00:29:59.540 --> 00:30:00.900
Ja, du hast ja gerade gesagt,

00:30:00.980 --> 00:30:02.820
anfangen vielleicht mit Jupyter Notebook oder

00:30:02.820 --> 00:30:05.060
einem einfachen Text-Titel. Also ich kann jetzt

00:30:05.060 --> 00:30:07.000
nicht empfehlen, direkt mit einer großen Entwicklungsumgebung

00:30:07.000 --> 00:30:08.940
zu starten. Das hält dann erst mal

00:30:08.940 --> 00:30:10.900
so ein bisschen auf. Gibt ja dann

00:30:10.900 --> 00:30:13.140
irgendwann später ganz viele tolle Editoren,

00:30:13.340 --> 00:30:14.840
PyCharm, Idle, VS Code,

00:30:14.940 --> 00:30:16.100
VEye, Atom, MX.

00:30:16.900 --> 00:30:17.700
Was benutzt du?

00:30:19.100 --> 00:30:19.620
VEye.

00:30:21.960 --> 00:30:24.780
Ich benutze aber auch PyCharm

00:30:24.780 --> 00:30:26.760
zum Beispiel mittlerweile, weil mich nervt, dass es halt

00:30:26.760 --> 00:30:28.300
doch relativ langsam ist.

00:30:33.040 --> 00:30:34.520
Eigentlich ist das schön, also diese ganzen

00:30:34.520 --> 00:30:36.620
IntelliJ-EDEs,

00:30:36.620 --> 00:30:38.600
das ist alles schon sehr nett gemacht,

00:30:38.700 --> 00:30:40.640
die können auch sehr viel, aber

00:30:40.640 --> 00:30:43.080
die reagieren nicht so instantan.

00:30:43.200 --> 00:30:44.900
Also es ist immer, wenn man irgendwo drauf drückt oder so, dann

00:30:44.900 --> 00:30:47.040
muss man erst mal, es ist so...

00:30:47.040 --> 00:30:48.720
Zu langsam. Es ist einfach zu langsam.

00:30:48.960 --> 00:30:50.500
Es ist nicht so,

00:30:50.840 --> 00:30:52.120
es fühlt sich halt nicht so

00:30:52.120 --> 00:30:55.060
snappy irgendwie ordentlich

00:30:55.060 --> 00:30:56.960
an, wie sich halt so ein Profi-Werkzeug anfühlen

00:30:56.960 --> 00:30:59.060
sollte, sondern es fühlt sich halt immer so an

00:30:59.060 --> 00:31:00.880
wie, keine Ahnung,

00:31:01.120 --> 00:31:02.620
wie diese, weiß ich nicht,

00:31:02.900 --> 00:31:04.800
also ich meine, gut, das ist ein böser Vergleich, aber wenn man

00:31:04.800 --> 00:31:06.800
so einen Fahrkartenautomat bei der Bahn steht und

00:31:06.800 --> 00:31:09.040
drückt er drauf, und dann

00:31:09.040 --> 00:31:11.060
passiert einfach nichts und dann drückt man nochmal

00:31:11.060 --> 00:31:12.640
drauf und dann macht es irgendwie so

00:31:12.640 --> 00:31:15.320
Kennt ihr das, wenn ihr euch gerade so einen Schokoriegel

00:31:15.320 --> 00:31:17.120
aus dem Automaten ziehen wollt und dann bleibt der irgendwo da oben

00:31:17.120 --> 00:31:18.960
hängen? Ja, und das ist halt

00:31:18.960 --> 00:31:20.120
schon sehr

00:31:20.120 --> 00:31:23.040
so ein bisschen nervtötend und deswegen benutze ich das

00:31:23.040 --> 00:31:25.080
eigentlich nicht so gern, obwohl manche Features halt

00:31:25.080 --> 00:31:27.020
durchaus so nett sind, dass ich es halt auch

00:31:27.020 --> 00:31:28.020
immer wieder verwende, aber

00:31:28.020 --> 00:31:31.100
wenn ich BI verwenden

00:31:31.100 --> 00:31:32.500
kann, dann verwende ich eigentlich, also

00:31:32.500 --> 00:31:34.880
WIM, da hat sich auch einiges getan.

00:31:35.440 --> 00:31:36.740
Wie hast du denn Python gelernt?

00:31:37.160 --> 00:31:39.100
hast du da irgendwie Tutorials

00:31:39.100 --> 00:31:40.980
gemacht oder warst da direkt drin? War das so

00:31:40.980 --> 00:31:42.560
Basics, dass man alles selber beibringen musste?

00:31:42.920 --> 00:31:45.120
Ja, aber es gab nicht so viele

00:31:45.120 --> 00:31:46.980
Bücher damals.

00:31:47.340 --> 00:31:49.120
Es gab ein paar, die waren

00:31:49.120 --> 00:31:51.100
aber auch alle nicht so wirklich hilfreich. Also doch, es gab

00:31:51.100 --> 00:31:53.040
ein Buch, das war hilfreich. Ich weiß aber nicht, ob

00:31:53.040 --> 00:31:55.140
das immer noch eine gute Empfehlung

00:31:55.140 --> 00:31:56.380
ist. Es war das Python Cookbook.

00:31:57.280 --> 00:31:58.200
Das war ganz gut.

00:32:00.040 --> 00:32:01.120
Ansonsten waren die meisten

00:32:01.120 --> 00:32:01.960
Bücher nicht so toll.

00:32:03.980 --> 00:32:04.600
Und ja,

00:32:04.900 --> 00:32:06.220
wie habe ich es gelernt?

00:32:07.040 --> 00:32:09.520
Ich hatte das Glück, dass ich da neben jemandem gesessen hatte,

00:32:09.560 --> 00:32:10.080
der das schon konnte.

00:32:10.880 --> 00:32:11.820
Und wenn er mir das dann gesagt hat,

00:32:12.400 --> 00:32:14.580
das war etwas lukriöse.

00:32:16.480 --> 00:32:17.960
Das war relativ praktisch.

00:32:18.080 --> 00:32:19.380
Das kann ich auch tatsächlich empfehlen.

00:32:19.500 --> 00:32:21.200
Versucht nicht nur im stillen Kämmerlein zu sitzen

00:32:21.200 --> 00:32:23.380
und euch selber durch den Kram zu quälen.

00:32:23.560 --> 00:32:25.560
Es geht bedeutend schneller und ihr kommt auch bedeutend schneller weiter,

00:32:25.660 --> 00:32:27.080
wenn ihr tatsächlich jemanden habt,

00:32:27.180 --> 00:32:28.460
der euch so ein bisschen zeigt, wie das Ganze geht.

00:32:28.760 --> 00:32:29.200
Danke, Jochen.

00:32:30.500 --> 00:32:32.520
Deswegen sitze ich ja hier und stelle dir die ganzen doofen Fragen.

00:32:34.380 --> 00:32:36.560
Man könnte auch zu Meetups

00:32:36.560 --> 00:32:38.960
durchaus gehen, sich da mit Leuten

00:32:38.960 --> 00:32:39.660
austauschen hilft.

00:32:41.060 --> 00:32:42.940
Die tägliche Arbeit muss man

00:32:42.940 --> 00:32:44.840
natürlich dann trotzdem machen, aber ich glaube, mittlerweile

00:32:44.840 --> 00:32:46.840
kommt man da ganz gut angeleitet auch

00:32:46.840 --> 00:32:48.180
in die ersten eigenen Projekte so rein.

00:32:49.540 --> 00:32:50.820
Ja, wie funktioniert

00:32:50.820 --> 00:32:51.460
Python eigentlich?

00:32:53.160 --> 00:32:54.860
Was ist das Ding? Wo kann man

00:32:54.860 --> 00:32:56.700
das machen? Also ich habe jetzt hier zum Beispiel auf meinem

00:32:56.700 --> 00:32:59.020
großen Zettel stehen, simple Prototyping

00:32:59.020 --> 00:33:00.780
kann man machen und recht umfangreiche

00:33:00.780 --> 00:33:01.560
Bibliotheken.

00:33:03.000 --> 00:33:05.880
Ja, also Python selbst ist halt eine...

00:33:05.880 --> 00:33:06.220
Einfach.

00:33:06.860 --> 00:33:10.820
Ja, es verbindet halt zwei Dinge,

00:33:10.900 --> 00:33:12.100
die eigentlich sich ein bisschen widersprechen.

00:33:12.200 --> 00:33:12.760
Es ist halt sehr einfach

00:33:12.760 --> 00:33:15.260
und es ist halt trotzdem sehr mächtig.

00:33:15.900 --> 00:33:16.900
Das macht es halt sehr schön.

00:33:17.520 --> 00:33:18.700
Auf der anderen Seite bedeutet das halt,

00:33:18.740 --> 00:33:19.580
dass es nicht so einfach ist,

00:33:19.640 --> 00:33:21.800
das irgendwie in Binärcode zu kompilieren oder so.

00:33:22.120 --> 00:33:23.660
Das ist halt mit einer Sprache,

00:33:23.740 --> 00:33:26.040
die halt wesentlich einfacher sozusagen ist,

00:33:26.040 --> 00:33:27.480
ist das halt simpler.

00:33:27.660 --> 00:33:28.260
Also wenn man C nimmt,

00:33:28.420 --> 00:33:30.360
so ein mehr oder weniger Makro-Assembler,

00:33:30.440 --> 00:33:31.900
da kann man dafür einen Compiler zuschreiben.

00:33:31.900 --> 00:33:33.500
Warum muss man denn überhaupt etwas in Binärcode

00:33:33.500 --> 00:33:33.920
kompilieren?

00:33:35.020 --> 00:33:37.480
Wenn es ein Computer direkt ausführen

00:33:37.480 --> 00:33:39.160
können soll, dann muss das irgendwie

00:33:39.160 --> 00:33:40.060
Maschinencode sein.

00:33:41.180 --> 00:33:42.400
Binärcode, Nullen und Einsen.

00:33:43.360 --> 00:33:43.760
Genau.

00:33:45.220 --> 00:33:47.360
Wenn das so etwas ist, dann kann es

00:33:47.360 --> 00:33:49.260
halt direkt ausgeführt werden. Also die

00:33:49.260 --> 00:33:51.160
meisten Programme, die man so kennt, sind das halt auch.

00:33:51.460 --> 00:33:53.060
So wie früher, wenn ich mir das so vorstelle,

00:33:53.160 --> 00:33:55.120
da hat man ja die ganzen großen Rechner gehabt,

00:33:55.120 --> 00:33:56.940
die Lochkarten gelesen haben für Nullen und Einsen.

00:33:57.340 --> 00:33:59.060
Das braucht der Computer auch heute noch, damit er versteht,

00:33:59.120 --> 00:33:59.860
was er da überhaupt machen muss.

00:34:00.600 --> 00:34:02.500
Ja, genau. Und dann läuft halt dieses Programm

00:34:02.500 --> 00:34:04.860
direkt irgendwie auf dem Prozessor

00:34:04.860 --> 00:34:05.340
und

00:34:05.340 --> 00:34:08.500
ja, aber das geht halt, das ist halt

00:34:08.500 --> 00:34:10.560
etwas, was dann nicht mehr geht mit Python, weil

00:34:10.560 --> 00:34:12.500
für Python Compiler zu schreiben ist halt dann

00:34:12.500 --> 00:34:13.260
nicht mehr so einfach.

00:34:14.300 --> 00:34:16.480
Oder eigentlich mal so ziemlich unmöglich, weil das ist halt alles

00:34:16.480 --> 00:34:18.500
dynamisch und zur Laufzeit kann sich eine Menge ändern.

00:34:18.740 --> 00:34:20.320
Das geht halt nicht so richtig.

00:34:21.100 --> 00:34:22.580
Das ist halt dann der Preis, den man zahlt,

00:34:22.700 --> 00:34:23.880
dass man es nicht mehr kompilieren kann.

00:34:24.520 --> 00:34:26.720
Es wird dann halt interpretiert, also es wird schon so ein bisschen

00:34:26.720 --> 00:34:28.460
verändert. Es wird

00:34:28.460 --> 00:34:30.360
in Bytecode verwandelt

00:34:30.360 --> 00:34:32.640
und der Whitecode wird dann interpretiert von einer virtuellen Maschine.

00:34:33.140 --> 00:34:36.260
Das sind dann die PyC-Dateien, die man findet, nachdem man irgendwas gelaufen hat.

00:34:36.600 --> 00:34:37.260
Genau, genau.

00:34:37.880 --> 00:34:42.860
Also C ist das, was dann das Ganze benutzt, um das dann für die Maschine schreiblesbar zu machen?

00:34:44.140 --> 00:34:46.020
Ja, aber für die Maschine ist das nicht lesbar.

00:34:46.240 --> 00:34:49.860
Man braucht immer noch den Python-Interpreter, der das dann ausführen kann.

00:34:50.660 --> 00:34:53.780
Also der Python-Interpreter ist halt genau diese virtuelle Maschine

00:34:53.780 --> 00:34:56.180
und der kann das dann halt ausführen.

00:34:57.640 --> 00:35:00.000
Und das hat dann auch so einige andere Nachteile.

00:35:00.360 --> 00:35:03.900
das macht es halt auch schwer, Sachen zu installieren

00:35:03.900 --> 00:35:04.880
oder so, weil man

00:35:04.880 --> 00:35:07.440
kann jetzt nicht einfach irgendwo

00:35:07.440 --> 00:35:09.580
ein Binary runterladen

00:35:09.580 --> 00:35:10.800
oder verschicken. Wieso, es gibt doch PIP.

00:35:11.880 --> 00:35:13.540
Ja, genau, dann muss man dann eben zu

00:35:13.540 --> 00:35:15.700
so Paketmanagern greifen,

00:35:15.840 --> 00:35:17.580
mit denen man irgendwelche Dinge installieren kann,

00:35:17.660 --> 00:35:19.720
aber man kann halt jetzt nicht irgendwie auf dem USB-Stick

00:35:19.720 --> 00:35:20.760
jemandem irgendwie

00:35:20.760 --> 00:35:23.480
Python-Programm geben

00:35:23.480 --> 00:35:24.460
und der startet das dann halt.

00:35:24.460 --> 00:35:26.200
Also, wenn ich das richtig verstanden habe, PIP ist dann

00:35:26.200 --> 00:35:28.200
dieser Paketmanager, der über die Seite

00:35:28.200 --> 00:35:30.200
PyPy oder wie es ist, über den Server von dir

00:35:30.200 --> 00:35:32.260
läuft und dann da Pakete

00:35:32.260 --> 00:35:34.100
installiert, die andere dort bereitgestellt haben,

00:35:34.280 --> 00:35:36.100
die schon so mit veröffentlicht sind.

00:35:36.620 --> 00:35:37.900
Das heißt, wenn ihr eure eigenen Pakete baut,

00:35:38.380 --> 00:35:40.240
müsst ihr die entweder so veröffentlichen oder

00:35:40.240 --> 00:35:42.400
tatsächlich externe Bibliotheken

00:35:42.400 --> 00:35:44.060
nehmen, um Installer zu bauen oder sowas.

00:35:44.340 --> 00:35:46.020
Genau, das gibt es auch. Es gibt High-Installer,

00:35:46.200 --> 00:35:48.220
es gibt diverse Geschichten, die das dann halt versuchen

00:35:48.220 --> 00:35:50.220
irgendwie in Binary zu packen. Und das

00:35:50.220 --> 00:35:50.880
funktioniert auch manchmal.

00:35:52.440 --> 00:35:54.220
Kannst du kurz zwei, drei Installer nennen, die man

00:35:54.220 --> 00:35:56.060
versucht für verschiedene Systeme? Einmal vielleicht für Linux,

00:35:56.220 --> 00:35:57.700
für OS oder für Windows oder so?

00:35:57.720 --> 00:35:58.900
Ich benutze das selber nie.

00:36:00.200 --> 00:36:04.020
Bei Linux braucht man es, glaube ich, nicht groß.

00:36:04.560 --> 00:36:07.340
Nee, da gibt es, glaube ich...

00:36:07.340 --> 00:36:09.880
Baust du ein Paket, machst du ein Shell-Install-Setup-Py, was?

00:36:11.040 --> 00:36:13.180
Nee, aber da gibt es auch, also unter Linux gibt es auch so ein Ding,

00:36:13.280 --> 00:36:17.200
was halt quasi den Interpreter mit reinpackt in Binary.

00:36:17.800 --> 00:36:18.080
Pye-Installer?

00:36:18.560 --> 00:36:19.780
Kann sein, dass es Pye-Installer ist.

00:36:20.380 --> 00:36:24.120
Und wenn man da so ein bisschen aufpasst,

00:36:24.120 --> 00:36:27.180
dann kriegt man den Interpreter relativ klein.

00:36:27.720 --> 00:36:29.040
Also wenn man es einfach naiv macht, dann

00:36:29.040 --> 00:36:31.580
kann es sein, dass es irgendwie so 15 MB

00:36:31.580 --> 00:36:33.180
sind oder 10, ich weiß nicht genau.

00:36:33.500 --> 00:36:34.860
Aber man kriegt es auf irgendwie 2, 3 runter,

00:36:35.200 --> 00:36:37.260
wenn man sich da ein bisschen Mühe gibt.

00:36:37.840 --> 00:36:39.400
Und dann ist es eigentlich, ich meine, heutzutage ist das eigentlich

00:36:39.400 --> 00:36:40.500
sowieso alles nicht mehr so wild.

00:36:40.500 --> 00:36:42.360
Dann ist es halt so, es gibt natürlich Leute,

00:36:42.600 --> 00:36:44.420
die sagen würden, wenn ich

00:36:44.420 --> 00:36:45.740
das mit C mache und dann gut

00:36:45.740 --> 00:36:48.600
und nicht gegen die Lip C linke

00:36:48.600 --> 00:36:50.400
oder gegen die G-Lip C, sondern halt irgendwie

00:36:50.400 --> 00:36:52.760
so eine Diät-Lip C

00:36:52.760 --> 00:36:53.900
oder irgendwas anderes, keines.

00:36:54.240 --> 00:36:56.680
Jetzt hören wir gerade kurz wieder. Lip C, G-Lip C,

00:36:57.040 --> 00:36:59.860
das sind die Standardbibliotheken, die CISO bereitstellt

00:36:59.860 --> 00:37:01.720
für die Befehle, die dann das Ganze größer machen,

00:37:01.780 --> 00:37:03.540
wenn man das kompiliert, oder? Genau, da ist ein bisschen

00:37:03.540 --> 00:37:05.780
Standardbibliothek dabei, aber eigentlich, wofür die da sind,

00:37:05.920 --> 00:37:07.540
ist die Kommunikation mit dem Kernel,

00:37:07.760 --> 00:37:09.860
mit dem Betriebssystem, sozusagen.

00:37:10.140 --> 00:37:11.820
Und das kann man natürlich auch beliebig komplex

00:37:11.820 --> 00:37:13.500
gestalten, aber wenn man halt nur die ganz

00:37:13.500 --> 00:37:15.560
simpelsten Dinge haben will,

00:37:16.320 --> 00:37:17.680
dann muss das nicht so groß sein,

00:37:17.760 --> 00:37:19.940
weil das Problem ist, es muss halt irgendwie dagegen gelinkt sein,

00:37:20.460 --> 00:37:21.420
damit

00:37:21.420 --> 00:37:23.440
irgendwie der Prozess überhaupt irgendwas machen kann, wie

00:37:23.440 --> 00:37:24.680
Eingabe, Ausgabe und so.

00:37:26.020 --> 00:37:27.660
Aber wenn man das schlau macht, dann kriegt man das halt

00:37:27.660 --> 00:37:29.700
auf, weiß ich nicht, ein paar hundert Byte oder so runter.

00:37:30.320 --> 00:37:31.760
Und das ist natürlich was ganz anderes, als wenn ich

00:37:31.760 --> 00:37:33.760
jetzt irgendwie megabyteweise Zeugs...

00:37:33.760 --> 00:37:35.780
Das könnte auch ein Mikrocontroller packen. Ich glaube, man kriegt das

00:37:35.780 --> 00:37:37.840
sogar in so einen Bootsektor rein. Wie hat so ein Bootsektor

00:37:37.840 --> 00:37:39.460
512 Bytes oder sowas?

00:37:39.480 --> 00:37:40.120
Keine Ahnung, ja.

00:37:41.960 --> 00:37:43.480
Also natürlich ist es nicht so

00:37:43.480 --> 00:37:45.820
klein, wie es gehen könnte, wenn man das wirklich

00:37:45.820 --> 00:37:46.900
drauf anlegt.

00:37:47.840 --> 00:37:49.880
Und das wird auch nie gehen mit Python so richtig.

00:37:50.280 --> 00:37:51.700
Aber also

00:37:51.700 --> 00:37:53.240
heutzutage sind ja auch ein paar Megabyte eigentlich

00:37:53.240 --> 00:37:55.140
ja, nicht mehr wirklich viel.

00:37:55.560 --> 00:37:56.040
Luxus.

00:37:57.600 --> 00:38:00.020
Früher war das doch sehr schlimm, heute...

00:38:00.020 --> 00:38:01.420
Band zurückspulen oder sowas, ja.

00:38:02.300 --> 00:38:03.400
Genau, und daher ist das

00:38:03.400 --> 00:38:05.140
eigentlich auch alles nicht mehr so wild. Aber man muss auch sagen, dass

00:38:05.140 --> 00:38:06.920
dieses Thema so ein bisschen vernachlässigt wurde,

00:38:07.020 --> 00:38:08.280
gerade auf Windows und so,

00:38:09.380 --> 00:38:11.260
kann man ja auch nicht davon ausgehen, also bei den meisten

00:38:11.260 --> 00:38:13.140
Linux-Systemen wird halt einfach ein Python-Interpreter

00:38:13.140 --> 00:38:15.240
vorinstalliert sein, vielleicht ein uralter, aber immerhin.

00:38:16.000 --> 00:38:17.340
Aber bei Windows ist halt Python

00:38:17.340 --> 00:38:18.980
nicht vorinstalliert und wenn man

00:38:18.980 --> 00:38:21.300
irgendjemandem ein Python-Script schickt oder so, kann der halt

00:38:21.300 --> 00:38:23.300
nichts damit anfangen. Das ist ein bisschen

00:38:23.300 --> 00:38:24.980
ein Problem. Das ist halt auch ein bisschen

00:38:24.980 --> 00:38:27.040
Preis, den man dann halt zahlt, dafür,

00:38:27.180 --> 00:38:28.980
dass es halt einfach ist,

00:38:29.020 --> 00:38:30.080
aber trotzdem sehr mächtig.

00:38:31.620 --> 00:38:32.720
Und ja, also

00:38:32.720 --> 00:38:35.100
Die Beine ruhig, das kriegt ihr natürlich

00:38:35.100 --> 00:38:36.660
trotzdem auf der Python-Room-Stage direkt

00:38:36.660 --> 00:38:39.220
für die jeweiligen Systeme und wenn das

00:38:39.220 --> 00:38:41.120
Der Python-Interpreter selber ist natürlich

00:38:41.120 --> 00:38:42.760
wieder quasi so ein Bein.

00:38:42.840 --> 00:38:44.800
Einige Leute empfehlen auch Anaconda, das ist irgendwie so ein Paket,

00:38:44.880 --> 00:38:46.480
womit man ganz viele tolle Datensachen machen kann,

00:38:47.020 --> 00:38:48.480
wo es vorinstalliert ist. Also ich persönlich

00:38:48.480 --> 00:38:50.900
hatte da nicht so die besten Erfahrungen mit, das war immer

00:38:50.900 --> 00:38:53.000
sehr verwurschtelt mit den Paketen

00:38:53.000 --> 00:38:54.720
und dann lief immer was nicht, wenn es irgendwie ein Update gab

00:38:54.720 --> 00:38:56.580
von den neuesten Python-Versionen, die haben auch einen eigenen

00:38:56.580 --> 00:38:58.500
Paketmanager, einen Conda irgendwie

00:38:58.500 --> 00:39:00.720
und deswegen würde ich das für Anfänger jetzt nicht unbedingt

00:39:00.720 --> 00:39:02.200
sofort empfehlen, obwohl viele das machen,

00:39:02.800 --> 00:39:03.760
aber das könnt ihr ja selber schauen.

00:39:03.780 --> 00:39:06.280
Ja, ja, Anaconda ist ein bisschen verwirrend, weil

00:39:06.280 --> 00:39:08.560
also eben, es ist eben kein Paketmanager

00:39:08.560 --> 00:39:10.460
und auch nicht, also Anaconda

00:39:10.460 --> 00:39:12.140
ist eine Distribution sozusagen von

00:39:12.140 --> 00:39:14.720
Paketen, aber

00:39:14.720 --> 00:39:16.700
Conda ist der Paketmanager

00:39:16.700 --> 00:39:18.480
und es gibt auch noch ganz viele andere

00:39:18.480 --> 00:39:20.500
Pakete, die jetzt nicht in der Anaconda

00:39:20.500 --> 00:39:22.600
Distribution drin sind und

00:39:22.600 --> 00:39:24.520
das ist so ein bisschen alles

00:39:24.520 --> 00:39:25.980
Eigentlich ist das alles ein bisschen furchtbar.

00:39:26.160 --> 00:39:27.800
Man muss sagen, dass es schön wäre,

00:39:28.080 --> 00:39:30.140
in einer idealen Welt hätte man das ja gerne,

00:39:30.240 --> 00:39:32.760
dass man einen Paketmanager für alles verwendet.

00:39:33.820 --> 00:39:36.800
Es gibt auch so ein bisschen die Utopie,

00:39:36.860 --> 00:39:40.080
wird so ein bisschen gelebt bei NixOS.

00:39:41.260 --> 00:39:42.880
Da versuchen Leute, das tatsächlich noch umzusetzen.

00:39:43.340 --> 00:39:44.860
Oder eigentlich waren auch die Linux-Distributionen

00:39:44.860 --> 00:39:46.520
mal so quasi gedacht,

00:39:46.660 --> 00:39:48.540
dass man halt einen Paketmanager hat,

00:39:48.540 --> 00:39:49.920
mit dem installiert man halt irgendwie alles,

00:39:49.920 --> 00:39:51.400
was man irgendwie haben möchte.

00:39:52.840 --> 00:39:56.060
es geht ja auch jetzt noch, wenn man jetzt ein Debian hat

00:39:56.060 --> 00:39:58.020
beispielsweise, dann kann man auch ein NumPy

00:39:58.020 --> 00:39:59.340
oder so, was ja

00:39:59.340 --> 00:40:01.960
quasi ein Modul ist für

00:40:01.960 --> 00:40:04.080
Scientific Computing, ein Modul für Python,

00:40:04.200 --> 00:40:06.020
kann man durchaus per Debian-Paket

00:40:06.020 --> 00:40:07.440
installieren, also über die Distribution.

00:40:08.400 --> 00:40:09.920
Es ist halt nur so, dass man das nicht tun sollte,

00:40:10.000 --> 00:40:11.660
weil dann bekommt man eine Version, die nicht optimiert ist,

00:40:11.940 --> 00:40:14.080
wo der Maintainer, also ich meine, vielleicht ist es auch gut,

00:40:14.080 --> 00:40:15.800
ich weiß keine Ahnung, aber

00:40:15.800 --> 00:40:18.100
die Wahrscheinlichkeit ist hoch, dass es eben

00:40:18.100 --> 00:40:19.940
dann nicht schnell ist, weil

00:40:19.940 --> 00:40:21.880
es ist halt nicht gegen MKL, diese

00:40:21.880 --> 00:40:23.980
Mathe-Bibliothek von Intel gelingt

00:40:23.980 --> 00:40:26.180
beim Kompilieren. Also man muss,

00:40:26.240 --> 00:40:27.880
es ist halt tricky, das zu kompilieren, da ist viel

00:40:27.880 --> 00:40:30.200
Core-Transworks dabei. Das ist alles nicht so

00:40:30.200 --> 00:40:31.060
einfach und

00:40:31.060 --> 00:40:33.860
ja, überfordert möglicherweise halt

00:40:33.860 --> 00:40:34.900
ein Debian-Meter auch so ein bisschen.

00:40:36.400 --> 00:40:37.960
Also du würdest auch immer alle Pakete

00:40:37.960 --> 00:40:39.280
über PIP installieren, oder?

00:40:39.580 --> 00:40:42.100
Naja, nee, ich würde sagen, es kommt drauf an. Also leider

00:40:42.100 --> 00:40:44.100
haben wir nicht, also am schönsten wäre es,

00:40:44.100 --> 00:40:45.420
wir hätten einen Paketmanager für alles.

00:40:45.800 --> 00:40:47.820
Also zum Beispiel PIP oder deinen Distributionsmanager?

00:40:48.020 --> 00:40:49.700
Nee, sowas wie ABT oder genau, oder

00:40:49.700 --> 00:40:50.980
weiß nicht was dabei,

00:40:51.880 --> 00:40:53.880
Yam für Red Hat gibt.

00:40:54.760 --> 00:40:55.840
DNF ist mittlerweile, glaube ich,

00:40:55.880 --> 00:40:57.180
auch bei Red Hat, zumindest bei Fedora.

00:40:57.480 --> 00:40:59.880
Ja, ich bin

00:40:59.880 --> 00:41:01.260
da auch gar nicht mehr so am Laufen, aber

00:41:01.260 --> 00:41:03.580
genau. Wenn man einen

00:41:03.580 --> 00:41:05.340
Paketmanager hätte, mit dem man alles installiert

00:41:05.340 --> 00:41:07.620
und dann sich relativ sicher sein könnte,

00:41:07.700 --> 00:41:09.460
dass das halt irgendwie funktioniert, das wäre schön.

00:41:10.600 --> 00:41:11.680
Aber es hat sich

00:41:11.680 --> 00:41:13.320
jetzt aber eher so entwickelt, dass

00:41:13.320 --> 00:41:15.540
jede Programmiersprache so ein bisschen ihren

00:41:15.540 --> 00:41:17.000
eigenen Paketmanager mitbringt.

00:41:17.500 --> 00:41:18.740
Bei Python ist es halt

00:41:18.740 --> 00:41:21.700
erst mal pip, so wie bei

00:41:21.700 --> 00:41:24.120
Ruby sind das diese Ruby Games,

00:41:24.780 --> 00:41:25.660
bei Perl ist es

00:41:25.660 --> 00:41:27.700
Sepan, beziehungsweise, ich weiß gar nicht,

00:41:27.760 --> 00:41:29.880
was jetzt das Ding ist, mit dem man die Dinger installiert.

00:41:30.820 --> 00:41:31.600
Dann bei,

00:41:31.680 --> 00:41:33.560
weiß ich nicht, JavaScript ist es halt

00:41:33.560 --> 00:41:35.680
npm oder yarn oder was auch immer man da gerade

00:41:35.680 --> 00:41:36.120
verwendet.

00:41:38.320 --> 00:41:38.680
Und

00:41:38.680 --> 00:41:41.480
das ist dann natürlich nicht mehr so toll,

00:41:41.480 --> 00:41:43.400
weil das Problem ist, dass, wenn man

00:41:43.400 --> 00:41:44.760
die jetzt benutzt, die Sachen,

00:41:45.380 --> 00:41:47.480
wenn man die jetzt quasi einfach

00:41:47.480 --> 00:41:49.240
so ins Routefile-System installiert,

00:41:49.920 --> 00:41:51.540
dann überschreiben die natürlich Sachen, die die Disposition

00:41:51.540 --> 00:41:52.640
da reingeschrieben hat.

00:41:52.640 --> 00:41:54.860
Überschreiben sich gegenseitig.

00:41:54.860 --> 00:41:56.340
Alles nicht so schön.

00:41:56.500 --> 00:41:58.460
Niemand hat darauf aufgepasst, dass die Sachen auch alle miteinander

00:41:58.460 --> 00:41:59.820
klarkommen.

00:42:00.480 --> 00:42:02.380
Das heißt, es können die komischsten Dinge passieren.

00:42:03.000 --> 00:42:04.440
Das ist halt nicht so toll.

00:42:05.400 --> 00:42:06.140
Was macht man denn da?

00:42:06.940 --> 00:42:08.760
Dafür versucht man das dann irgendwie

00:42:08.760 --> 00:42:10.340
zu isolieren und installiert

00:42:10.340 --> 00:42:12.640
Dinge nur in Environments.

00:42:12.640 --> 00:42:14.300
Also in virtuellen Entwicklungen.

00:42:14.300 --> 00:42:16.120
Virtuelle Umgebungen, genau.

00:42:16.240 --> 00:42:18.580
Oder für seinen einen User. Also zum Beispiel pip install

00:42:18.580 --> 00:42:20.700
Paketname minus minus User.

00:42:20.940 --> 00:42:23.000
Wird halt das für den aktuellen Nutzer nur installieren?

00:42:24.000 --> 00:42:25.300
Genau, das kann man auch machen.

00:42:27.340 --> 00:42:32.580
Und das sind halt so ein bisschen krückige Lösungen für dieses Problem.

00:42:33.140 --> 00:42:35.400
Aber leider ist es sogar noch schlimmer.

00:42:35.820 --> 00:42:41.460
Es ist jetzt nicht nur so, dass jeder Programmiersprache einen eigenen Paketmanager hat,

00:42:41.460 --> 00:42:44.300
sondern es sieht so ein bisschen, also jedenfalls bei Python ist es leider so,

00:42:44.600 --> 00:42:48.520
dass auch jede Community ihren eigenen Paketmanager nochmal hat.

00:42:48.680 --> 00:42:51.560
Also die ganze Web-Community verwendet eigentlich überwiegend PIP,

00:42:51.860 --> 00:42:55.740
während die ganze Data-Science-Community überwiegend Conda verwendet.

00:42:56.240 --> 00:42:57.900
Und man sagen muss, Conda ist ein bisschen mächtiger als PIP.

00:42:58.580 --> 00:43:00.000
Man kann damit nicht nur Python-Pakete installieren,

00:43:00.100 --> 00:43:01.920
sondern halt auch diverse andere Binär-Pakete.

00:43:02.720 --> 00:43:04.320
Und manchmal muss man das halt dummerweise auch,

00:43:04.400 --> 00:43:06.080
weil viele der Sachen, die man da verwendet,

00:43:06.160 --> 00:43:08.920
sind halt Fortran-Bibliotheken oder irgendwelche C-Bibliotheken.

00:43:09.280 --> 00:43:12.380
Warum verwendet man denn Fortran- oder C- oder C++-Bibliotheken in Python?

00:43:12.920 --> 00:43:13.980
Ja, genau.

00:43:13.980 --> 00:43:20.720
Das ist halt auch, weil, wenn man jetzt zum Beispiel Matrizen miteinander multiplizieren will oder so,

00:43:21.000 --> 00:43:24.880
dann könnte man das natürlich auch in Python machen, indem man einfach For-Loops ineinander schachtelt.

00:43:25.240 --> 00:43:29.940
Also man speichert die Dinger einfach quasi als zweiendimensionale Listen oder so.

00:43:30.220 --> 00:43:36.860
Einfach eine Liste von Listen und dann quasi eine Liste von Spalten oder Zeilen.

00:43:37.020 --> 00:43:37.980
Moment, NumPy, glaube ich.

00:43:38.460 --> 00:43:48.160
Ja, ja, genau, aber man könnte es direkt in Python machen, dann macht man halt irgendwie so eine dreifach verschachtelte For-Loop und iteriert über die Dinger und rechnet das dann halt aus.

00:43:48.760 --> 00:43:50.480
Das kann man machen, ist halt dann sehr, sehr langsam.

00:43:53.460 --> 00:44:02.480
Wenn man jetzt so eine Bibliothek benutzt wie NumPy oder so, die haben dann halt einen speziellen Array-Type sozusagen.

00:44:03.620 --> 00:44:06.760
Und wenn man da jetzt sagt, multiplizieren wir mal A und B,

00:44:06.980 --> 00:44:12.440
dann nutzt NumPy unten drunter halt quasi,

00:44:12.940 --> 00:44:16.200
weiß ich jetzt gar nicht, was man da mal spritzen möchte.

00:44:16.200 --> 00:44:19.120
Ich muss mir jetzt gerade so auszumalen, wie das dann so aussieht in einem Schaubild,

00:44:19.360 --> 00:44:22.180
um mir das irgendwie so ein bisschen vorzustellen, warum das jetzt schneller geht.

00:44:22.860 --> 00:44:25.160
Also die benutzen drunter einen neuen Motor.

00:44:25.160 --> 00:44:27.260
Benutzen drunter optimierte Fortran-Bibliotheken.

00:44:27.880 --> 00:44:30.280
Oder ist es, ich weiß gar nicht mal, ob es Fortran ist unbedingt.

00:44:30.600 --> 00:44:32.480
Also es ist halt irgendwie, die haben halt damals angefangen

00:44:32.480 --> 00:44:34.760
mit Blas, Lapak, Atlas.

00:44:34.940 --> 00:44:36.300
Das sind so die Dinger, die da unten drunter liegen.

00:44:36.980 --> 00:44:38.660
Und es gibt, glaube ich, irgendwie so eine

00:44:38.660 --> 00:44:39.780
definierte Schnittstelle für solche

00:44:39.780 --> 00:44:42.700
für diese ganzen

00:44:42.700 --> 00:44:44.580
Operationen. Und dann

00:44:44.580 --> 00:44:46.300
sind das irgendwie Implementationen davon.

00:44:47.020 --> 00:44:48.040
Und ja.

00:44:50.200 --> 00:44:51.020
Nennen wir es Magic.

00:44:51.320 --> 00:44:52.140
Genau, Magie.

00:44:52.460 --> 00:44:54.680
Fortran ist halt irgendwie, als Sprache ist es immer noch

00:44:54.680 --> 00:44:56.580
deswegen so wichtig, weil da Sachen sich quasi mehr oder weniger

00:44:56.580 --> 00:44:58.560
automatisch vektorisieren lassen. Das bedeutet,

00:44:58.680 --> 00:45:00.580
dass man nicht loopt über Sachen,

00:45:00.720 --> 00:45:02.560
sondern dass

00:45:02.560 --> 00:45:04.560
der Prozessor das

00:45:04.560 --> 00:45:05.760
quasi übernimmt.

00:45:06.920 --> 00:45:08.460
Also wenn man das einfach an C kommt,

00:45:08.500 --> 00:45:10.600
kann man natürlich auch eine Loop hinschreiben. Wäre schon viel schneller als ein Python.

00:45:10.680 --> 00:45:11.980
Wahrscheinlich so tausendmal schneller oder so.

00:45:13.620 --> 00:45:13.980
Aber

00:45:13.980 --> 00:45:16.380
selbst das wäre deutlich langsamer als das, was

00:45:16.380 --> 00:45:17.960
quasi die Bibliotheken, die

00:45:17.960 --> 00:45:19.720
unter dem Nampal liegen, halt machen.

00:45:20.820 --> 00:45:22.520
Genau. Hat so ein bisschen

00:45:22.520 --> 00:45:24.280
den Nachteil, dass man halt den Code anders

00:45:24.280 --> 00:45:26.120
strukturieren muss. Man kann eben dann keine Vorschleife mehr

00:45:26.120 --> 00:45:28.340
verwenden, sondern man macht eher solche Sachen

00:45:28.340 --> 00:45:29.880
wie man

00:45:29.880 --> 00:45:32.420
auf den Objekten, die man erzeugt hat, wie zum Beispiel

00:45:32.420 --> 00:45:34.020
irgendwelche Arrays oder so, ruft man dann halt

00:45:34.020 --> 00:45:36.440
irgendwie eine Funktion auf und übergibt dir einen Callback

00:45:36.440 --> 00:45:38.480
oder so. Weil vor Schleifen gehen halt nicht mehr.

00:45:38.800 --> 00:45:40.620
Das ist ein bisschen komisch,

00:45:40.780 --> 00:45:41.820
aber ist halt dafür schnell.

00:45:43.700 --> 00:45:44.580
Mir ist das so ein Trade-off.

00:45:44.700 --> 00:45:46.280
Kann man sich überlegen, ob man sich das angewöhnt hat, dass man

00:45:46.280 --> 00:45:48.320
das gerne macht oder ob man sagt, hey, wir nehmen jetzt das

00:45:48.320 --> 00:45:50.300
ein bisschen kaufen. Python ist ja immer

00:45:50.300 --> 00:45:52.320
als langsam verschrien, aber wenn wir den auch schnell bekommen,

00:45:52.460 --> 00:45:54.140
ja okay, dann machen wir vielleicht mal einen kleinen Umweg.

00:45:54.880 --> 00:45:56.300
Genau, genau. Ja, kommen wir vielleicht

00:45:56.300 --> 00:45:57.880
gleich noch zu, wenn es um die Mythen geht.

00:45:58.080 --> 00:46:00.140
also das ist, man kann damit

00:46:00.140 --> 00:46:01.640
auch sehr schnell Dinge tun und

00:46:01.640 --> 00:46:03.720
dafür muss es halt auf Bibliotheken

00:46:03.720 --> 00:46:05.820
basieren, die das halt auch schnell machen können und

00:46:05.820 --> 00:46:08.040
für Scientific Computing und Zeugs ist

00:46:08.040 --> 00:46:09.080
es halt vortragend oft.

00:46:09.980 --> 00:46:11.260
Ja, genau.

00:46:11.680 --> 00:46:14.020
Ja, vielleicht nochmal genau zu diesen ganzen Bibliotheken,

00:46:14.100 --> 00:46:16.000
die man machen kann. Du hast gesagt, glaube ich, Data Science

00:46:16.000 --> 00:46:18.140
kann man ganz viel machen und Web kann man ganz viel machen

00:46:18.140 --> 00:46:19.920
und für diesen Glue,

00:46:20.120 --> 00:46:22.040
also den Klebstoff zwischen einzelnen Modulen, kann man

00:46:22.040 --> 00:46:23.560
ganz viel machen und so zum Skripten.

00:46:23.860 --> 00:46:24.880
Fällt dir noch irgendwas ein?

00:46:25.280 --> 00:46:27.620
Ja, was ich ein bisschen vernachlässige,

00:46:27.680 --> 00:46:29.860
Genau, auch ein Bereich, der momentan sehr interessant

00:46:29.860 --> 00:46:31.700
wird, ist so

00:46:31.700 --> 00:46:33.680
Home-Automation-Zeug,

00:46:33.740 --> 00:46:35.760
Smart Home. Ich glaube, der Raspberry Pi, der macht

00:46:35.760 --> 00:46:37.660
ja ganz, ganz viel. Ja, genau, Raspberry Pi wird da

00:46:37.660 --> 00:46:39.620
oft verwendet und überhaupt Raspberry Pi

00:46:39.620 --> 00:46:40.980
und Python haben viel,

00:46:41.100 --> 00:46:43.440
viele schöne Anwendungen,

00:46:43.620 --> 00:46:44.820
da kann man viel drauf machen.

00:46:46.280 --> 00:46:47.680
Home-Automation, du hast ja, glaube ich, ganz viele

00:46:47.680 --> 00:46:49.820
schöne Sachen mit. Ja, ich habe auch einen Raspberry Pi

00:46:49.820 --> 00:46:51.800
irgendwo im Schrank stehen, der zum Beispiel

00:46:51.800 --> 00:46:53.780
Temperaturen ausliest, indem man,

00:46:54.020 --> 00:46:55.720
ich habe so ein DVB-T-Modul da

00:46:55.720 --> 00:46:57.480
reingesteckt, die gibt es jetzt irgendwie günstig, weil es gibt kein

00:46:57.480 --> 00:46:59.880
DVB-Thema. Ich wollte gerade sagen, also das ist doch gerade abgeschaltet worden.

00:47:00.480 --> 00:47:01.600
Richtig, jetzt kann man die Dongle

00:47:01.600 --> 00:47:03.580
kriegt man relativ willig

00:47:03.580 --> 00:47:05.540
und da ist so eine Antenne dran und dann

00:47:05.540 --> 00:47:07.520
habe ich hier irgendwie so Sensoren und die funken

00:47:07.520 --> 00:47:09.460
halt auf den Frequenzen, ihre Werte

00:47:09.460 --> 00:47:11.200
halt so alle paar Sekunden oder so

00:47:11.200 --> 00:47:12.740
und dann muss man die eigentlich dann nur

00:47:12.740 --> 00:47:15.380
einsammeln und dann an

00:47:15.380 --> 00:47:16.960
es gibt ein Software, das nennt sich Home Assistant

00:47:16.960 --> 00:47:19.080
schicken, also das ist ein bisschen komplizierter.

00:47:19.160 --> 00:47:20.440
Ja, da machen wir auch noch eine eigene Folge. Genau.

00:47:21.440 --> 00:47:23.380
Aber solche Sachen, also wenn man

00:47:23.380 --> 00:47:25.300
zum Beispiel... Also ich sehe jetzt aber zum Beispiel keine

00:47:25.300 --> 00:47:27.340
Schläuche in den Pflanzen, die du hier in deinem schönen

00:47:27.340 --> 00:47:29.420
Wintergarten stehen hast. Das heißt, das musst du noch selber gießen.

00:47:30.120 --> 00:47:31.280
Genau, ja, furchtbar.

00:47:31.720 --> 00:47:33.420
Da musst du unbedingt automatisiert

00:47:33.420 --> 00:47:35.400
werden. Ich weiß nur nicht, wie ich den Wassertransport

00:47:35.400 --> 00:47:36.980
automatisieren soll. Das ist ein bisschen gefährlich.

00:47:37.080 --> 00:47:39.100
Eine Pumpe irgendwie und dann einmal einfach

00:47:39.100 --> 00:47:40.220
unabsprichtversichert.

00:47:42.120 --> 00:47:43.260
Ja, wäre eine Idee

00:47:43.260 --> 00:47:43.980
tatsächlich vielleicht.

00:47:46.240 --> 00:47:46.560
Genau.

00:47:47.360 --> 00:47:49.300
Ja, aber in dem Bereich ist Python halt auch,

00:47:49.300 --> 00:47:51.380
glaube ich, sehr stark unterwegs.

00:47:51.740 --> 00:47:53.360
Und da, gerade wenn man jetzt

00:47:53.360 --> 00:47:55.260
also einmal auf der Serverseite sozusagen

00:47:55.260 --> 00:48:24.260
Also das Ding, was diese ganzen smarten, mehr oder weniger smarten Geräte halt sozusagen managt und mit denen da irgendwas macht, irgendwelche Sensordaten ausliest. Die Seite ist Python, aber halt auch die Sensoren selber. Also man kann zum Beispiel, es gibt da so kleine Boards, kosten ein paar Dollar und da ist ein Chip drauf mit ein wenig, ist nicht so schnell und hat auch wenig Speicher, aber da läuft MicroPython zum Beispiel drauf, sodass man da halt...

00:48:24.260 --> 00:48:25.620
Nächste Folge. Ja, genau.

00:48:26.300 --> 00:48:28.400
Das heißt, man kann auch da Python

00:48:28.400 --> 00:48:30.200
drauf laufen lassen und dann

00:48:30.200 --> 00:48:32.180
irgendwie Sensordaten damit schon irgendwas machen.

00:48:32.560 --> 00:48:34.220
Da muss man aber wieder aufpassen, dass wir die Module

00:48:34.220 --> 00:48:36.300
so nehmen, dass sie möglichst klein werden. Genau, da

00:48:36.300 --> 00:48:38.320
muss man wieder ein bisschen aufpassen und so, aber

00:48:38.320 --> 00:48:40.220
ja, also in dem Bereich ist Python

00:48:40.220 --> 00:48:42.260
halt auch sehr, sehr stark

00:48:42.260 --> 00:48:42.740
vertreten.

00:48:44.340 --> 00:48:46.180
Ja, ich glaube, also was noch dazu kommt, vielleicht so Rapid

00:48:46.180 --> 00:48:48.100
Prototyping erstmal nochmal als Basis wird

00:48:48.100 --> 00:48:50.400
reingeschmissen. Man kann relativ schnell irgendwelche

00:48:50.400 --> 00:48:52.220
Prototypen bauen von Dingen, die

00:48:52.220 --> 00:48:54.180
man benutzt, sei es jetzt im Web oder bei Daten, die dann auch

00:48:54.180 --> 00:48:55.640
funktionieren, die kurz sind.

00:48:56.580 --> 00:48:58.240
Wenn man jetzt zum Beispiel die Sprache vergleicht, ist ja auch sehr

00:48:58.240 --> 00:49:00.180
einfach, deswegen eignet sich das besonders gut.

00:49:00.660 --> 00:49:02.160
Ist vielleicht am nächsten am

00:49:02.160 --> 00:49:04.220
Pseudocode dran, so von dem, was ich so gesehen habe.

00:49:05.040 --> 00:49:06.340
Das heißt, man kann relativ einfach

00:49:06.340 --> 00:49:08.180
die Syntax formulieren und hat direkt

00:49:08.180 --> 00:49:10.300
ein lauffähiges Programm,

00:49:10.700 --> 00:49:12.060
was wenigstens so grob das tut,

00:49:12.280 --> 00:49:13.360
was es sollte später.

00:49:15.660 --> 00:49:16.420
Dazu würdest du sagen,

00:49:16.440 --> 00:49:18.520
ist noch so einer der großen Vorteile

00:49:18.520 --> 00:49:20.120
der Sprache, wo man jetzt von außen drauf guckt.

00:49:20.700 --> 00:49:22.360
Wir sind jetzt nicht so für den Anfängern oder so.

00:49:23.000 --> 00:49:25.580
Ja, vielleicht wäre es ganz interessant, das mal so ein bisschen zu differenzieren

00:49:25.580 --> 00:49:27.440
gegenüber den anderen Sprachen, die es halt in den ganzen Bereichen

00:49:27.440 --> 00:49:29.400
auch gibt, mit denen man auch diese ganzen

00:49:29.400 --> 00:49:30.260
Dinge tun kann.

00:49:31.240 --> 00:49:32.640
Also Python ist halt,

00:49:34.420 --> 00:49:35.300
würde ich sagen, gehört so zur

00:49:35.300 --> 00:49:36.200
Familie der

00:49:36.200 --> 00:49:39.240
Script-Sprachen irgendwie. Also man könnte sagen, es ist sowas

00:49:39.240 --> 00:49:41.220
ähnliches wie Ruby oder wie Perl oder

00:49:41.220 --> 00:49:42.340
auch ein bisschen wie JavaScript.

00:49:45.020 --> 00:49:45.420
Aber

00:49:45.420 --> 00:49:46.620
unterscheidet sich halt, oder PHP,

00:49:46.960 --> 00:49:49.140
unterscheidet sich von denen aber. Also wie zum Beispiel

00:49:49.140 --> 00:49:51.260
JavaScript und PHP, die sind halt

00:49:51.260 --> 00:49:54.420
dynamisch getypt

00:49:54.420 --> 00:49:57.160
sozusagen und schwach

00:49:57.160 --> 00:49:58.600
getypt.

00:50:00.040 --> 00:50:00.560
Sozusagen

00:50:00.560 --> 00:50:04.820
Dinge können ihren Typ

00:50:04.820 --> 00:50:06.540
ändern oder man weiß nicht, was sie sind

00:50:06.540 --> 00:50:07.420
sozusagen von Anfang an.

00:50:07.960 --> 00:50:09.940
Das ist in Python auch so.

00:50:10.800 --> 00:50:12.600
Aber in Python ist halt

00:50:12.600 --> 00:50:13.860
streng getypt.

00:50:14.760 --> 00:50:16.440
Auch dynamisch und streng.

00:50:16.900 --> 00:50:17.860
Das heißt, wenn ich jetzt sage,

00:50:17.860 --> 00:50:19.600
irgendwie eine Zahl plus

00:50:19.600 --> 00:50:20.980
irgendwie ein String oder so,

00:50:21.260 --> 00:50:23.880
dann kriege ich bei Python

00:50:23.880 --> 00:50:25.160
dann halt ein Type Error, also

00:50:25.160 --> 00:50:26.800
ein Fehler.

00:50:27.420 --> 00:50:27.860
Also ein Fehler.

00:50:30.460 --> 00:50:32.060
Da haut mir Python halt auf die Finger,

00:50:32.220 --> 00:50:33.660
während in PHP oder in JavaScript

00:50:33.660 --> 00:50:35.320
passiert dann halt irgendwas.

00:50:35.900 --> 00:50:36.680
Was passiert denn da?

00:50:37.880 --> 00:50:39.720
Oder ist das dunkle Magie wahrscheinlich?

00:50:40.060 --> 00:50:41.460
Es ist eher dunkel und

00:50:41.460 --> 00:50:43.260
man weiß nicht so genau, was dann passiert.

00:50:43.440 --> 00:50:45.620
Es kommen die komischsten Sachen, aber es gibt einen schönen

00:50:45.620 --> 00:50:46.200
Vortrag

00:50:46.200 --> 00:50:49.560
für JavaScript,

00:50:49.740 --> 00:50:51.620
das mal jemand, es ist ein bisschen veraltet,

00:50:52.120 --> 00:50:53.360
aber hat das mal jemand

00:50:53.360 --> 00:50:56.040
aufgeschrieben. Ich glaube, wenn man danach sucht

00:50:56.040 --> 00:50:57.520
JavaScript Talk und dann

00:50:57.520 --> 00:50:59.640
Watt, W-A-T, dann

00:50:59.640 --> 00:51:01.440
findet man das. Und dann, wo er dann so

00:51:01.440 --> 00:51:03.000
eben solche Dinge macht, wie

00:51:03.000 --> 00:51:05.540
irgendeine Zahl plus Leer-String

00:51:05.540 --> 00:51:07.660
und dann kommen halt die seltsamsten Dinge dabei raus.

00:51:07.860 --> 00:51:09.160
Oder der Server hüpft und blinkt und

00:51:09.160 --> 00:51:11.520
am Schluss kommen irgendwelche Zeichenkenten dabei raus und

00:51:11.520 --> 00:51:13.160
Batman erscheint. Also es ist wirklich,

00:51:13.760 --> 00:51:15.400
man muss aufpassen, was man da tut, ansonsten passieren

00:51:15.400 --> 00:51:17.540
ganz, ganz furchtbare Dinge. Klingt so, als könnte

00:51:17.540 --> 00:51:18.620
man das gut ausnutzen.

00:51:19.320 --> 00:51:23.920
Ja, und es passieren halt auch regelmäßig wirklich schlimme Sachen.

00:51:26.220 --> 00:51:26.960
Die Welt geht unter.

00:51:27.460 --> 00:51:28.440
Ja, ja, so ungefähr.

00:51:29.100 --> 00:51:31.240
Und das kann bei einem Python halt nicht so leicht passieren.

00:51:31.360 --> 00:51:32.100
Das ist schon mal ganz schön.

00:51:32.180 --> 00:51:35.180
Also insofern ist es halt in der Welt,

00:51:36.220 --> 00:51:39.440
also ich finde, was man über Python sagen kann,

00:51:39.500 --> 00:51:40.920
es macht halt die richtigen Trade-offs.

00:51:41.080 --> 00:51:42.680
Also es ist halt immer, es ist halt so eine Sache.

00:51:43.770 --> 00:51:44.650
möchte man

00:51:44.650 --> 00:51:46.350
jetzt, das hat ja natürlich auch Vorteile,

00:51:46.510 --> 00:51:48.470
man kann Dinge

00:51:48.470 --> 00:51:49.830
vielleicht abkürzen oder so, wenn man das

00:51:49.830 --> 00:51:52.590
schwach getypt, wenn man das nicht so streng überprüft,

00:51:53.170 --> 00:51:54.530
man kann das teilweise ausnutzen, um Sachen

00:51:54.530 --> 00:51:56.070
eleganter zu machen, aber man zahlt halt

00:51:56.070 --> 00:51:58.230
einen Preis dafür und

00:51:58.230 --> 00:52:00.430
Python hat so die Tendenz, immer diese

00:52:00.430 --> 00:52:01.590
richtigen Trade-Offs zu machen.

00:52:01.970 --> 00:52:04.470
In der neuen Version, ich weiß jetzt gar nicht, ob das bei 3.7 kam

00:52:04.470 --> 00:52:06.230
oder bei irgendeiner 3.6 Version, dann kann man diese Typen

00:52:06.230 --> 00:52:07.430
jetzt so schön annotieren noch,

00:52:07.750 --> 00:52:10.170
für Funktionen oder für Variablen direkt und

00:52:10.170 --> 00:52:12.210
sieht dann, dass direkt das beispielsweise

00:52:12.210 --> 00:52:14.410
in seinem Linter oder sowas. Also das, was

00:52:14.410 --> 00:52:16.390
den Code unterstreicht, wenn ein Fehler

00:52:16.390 --> 00:52:18.050
da ist, dass der Typ falsch ist. Also wenn man jetzt

00:52:18.050 --> 00:52:20.370
Standardtypen eher haben möchte

00:52:20.370 --> 00:52:22.490
oder feste Typen und keine dynamischen,

00:52:23.070 --> 00:52:24.310
dass man zumindest weiß, was da

00:52:24.310 --> 00:52:26.210
stehen sollte, obwohl das Python immer noch versucht

00:52:26.210 --> 00:52:28.090
zu sprechen. Ja, also aber

00:52:28.090 --> 00:52:29.950
das Schöne ist halt, das ist halt optional.

00:52:30.110 --> 00:52:31.970
Man kann das da ranschreiben. Also klar,

00:52:32.070 --> 00:52:34.070
natürlich, das ist auch einer der Vorteile, die in so einer

00:52:34.070 --> 00:52:36.170
Sprache wie Java oder so, die ist halt statisch getypt.

00:52:36.310 --> 00:52:38.070
Also nicht dynamisch. Da kann man

00:52:38.070 --> 00:52:39.810
hinterher, wenn ich einen Variabler habe,

00:52:40.090 --> 00:52:41.770
die ändert sich nicht einfach so,

00:52:41.950 --> 00:52:43.770
was einen anderen Typ. Das geht da halt gar nicht.

00:52:46.850 --> 00:52:47.870
Und das kann auch nicht sein, dass

00:52:47.870 --> 00:52:50.070
hinterher der Typ erst festgelegt wird zur Laufzeit,

00:52:50.170 --> 00:52:51.610
sondern das muss halt zur

00:52:51.610 --> 00:52:53.350
Compile-Zeit sozusagen, wo der

00:52:53.350 --> 00:52:55.870
Source-Code in Bytecode verwandelt wird, muss das halt

00:52:55.870 --> 00:52:56.310
feststehen.

00:52:57.690 --> 00:52:59.690
Eine schöne Geschichte, die man dann halt

00:52:59.690 --> 00:53:01.770
bauen kann, ist halt Unterstützung in den IDEs

00:53:01.770 --> 00:53:02.890
dafür. Also wenn ich halt weiß,

00:53:03.670 --> 00:53:05.770
sozusagen, dass diese Variable halt den

00:53:05.770 --> 00:53:07.790
Typ hat, dann kann die IDE mir schon auf die Finger

00:53:07.790 --> 00:53:09.590
hauen, wenn ich versuche, damit etwas zu machen, was halt nicht geht.

00:53:09.730 --> 00:53:10.990
Also das bringt auf jeden Fall

00:53:10.990 --> 00:53:13.830
einen interessanten Trade-Off, weil als Anfänger würde ich

00:53:13.830 --> 00:53:16.010
mir jetzt erstmal so denken, dynamisch

00:53:16.010 --> 00:53:17.850
klingt ja voll cool, da kann das immer was Verschiedenes sein

00:53:17.850 --> 00:53:19.330
und da kann ich ganz tolle Sachen mitmachen und

00:53:19.330 --> 00:53:21.770
du sagst jetzt gerade, der Start ist natürlich auch voll toll, weil man kann

00:53:21.770 --> 00:53:23.310
das irgendwie nicht verwechseln und man bekommt keine

00:53:23.310 --> 00:53:25.750
Fehler. Naja, der Nachteil dabei ist halt,

00:53:25.790 --> 00:53:27.770
da muss man viel mehr schreiben. Was auch nicht

00:53:27.770 --> 00:53:29.630
so ein Problem ist, wenn man eine IDE verwendet, weil die

00:53:29.630 --> 00:53:31.030
schreibt das dann für einen so ein bisschen.

00:53:32.570 --> 00:53:33.830
Aber man braucht

00:53:33.830 --> 00:53:35.630
dann halt eine komplizierte IDE, die irgendwie

00:53:35.630 --> 00:53:37.090
Dinge tut und dann auch nicht mehr so schnell sein kann.

00:53:37.290 --> 00:53:38.430
Also ja, das

00:53:38.430 --> 00:53:40.730
ja, also

00:53:40.730 --> 00:53:42.650
man kann damit auch programmieren, so schlimm ist es nicht,

00:53:42.730 --> 00:53:44.750
aber es ist halt so ein bisschen, ich mag

00:53:44.750 --> 00:53:46.590
es nicht so, ich mag lieber, man schreibt

00:53:46.590 --> 00:53:48.650
wenig und schreibt es dann halt aber selber

00:53:48.650 --> 00:53:49.290
und das

00:53:49.290 --> 00:53:52.610
Tool, was man dafür verwendet, ist halt schnell, als

00:53:52.610 --> 00:53:54.470
die IDE schreibt das, aber die ist so ein bisschen

00:53:54.470 --> 00:53:55.770
laggy und man muss ein bisschen auf die warten.

00:53:57.310 --> 00:53:58.670
Ja gut, aber das geht

00:53:58.670 --> 00:54:00.630
auch, in Python hat man das jetzt

00:54:00.630 --> 00:54:02.670
halt so nicht, das ist alles dynamisch, man kann aber auch

00:54:02.670 --> 00:54:04.610
Typ-Annotationen jetzt, das ist

00:54:04.610 --> 00:54:06.830
auch eine sehr neue Geschichte, kann man halt halt dazuschreiben

00:54:06.830 --> 00:54:08.390
und dann könnte einem die IDE oder

00:54:08.390 --> 00:54:10.530
PyCharm und so können das möglicherweise auch schon.

00:54:11.110 --> 00:54:12.650
Die kann einem dann dabei helfen und dann auch

00:54:12.650 --> 00:54:14.330
sagen, wenn irgendwas nicht geht.

00:54:16.330 --> 00:54:16.990
Ich glaube also zum Beispiel

00:54:16.990 --> 00:54:18.750
in Listen kann man auch verschiedene Datentypen

00:54:18.750 --> 00:54:20.690
benutzen, es sei denn, man benutzt erst NumPyArrays, wo das

00:54:20.690 --> 00:54:22.730
dann auch wieder fest ist. Aber ja, das glaube ich

00:54:22.730 --> 00:54:24.850
auch ganz interessant, weil es halt sein kann,

00:54:24.890 --> 00:54:26.470
wenn man durch so eine Liste iteriert und man macht

00:54:26.470 --> 00:54:28.450
irgendeine Multiplikation oder sowas,

00:54:28.590 --> 00:54:30.510
dann fliegt einem das um die Ohren, weil das der falsche

00:54:30.510 --> 00:54:32.830
Datentyp ist. Das ist genau

00:54:32.830 --> 00:54:34.530
einer dieser Geschichten, wo

00:54:34.530 --> 00:54:36.610
statisch getypte Sprachen

00:54:36.610 --> 00:54:38.150
große Schwierigkeiten mit haben oder

00:54:38.150 --> 00:54:40.850
als Programmierer das Leben halt schwer machen.

00:54:41.250 --> 00:54:42.670
So diese ganzen Containerdatentypen,

00:54:42.750 --> 00:54:44.490
die sind da halt knifflig

00:54:44.490 --> 00:54:46.530
oder man kann halt im Grunde immer nur

00:54:46.530 --> 00:54:48.410
Container haben, die halt dann

00:54:48.410 --> 00:54:50.490
irgendwie Dinge von einem Typ enthalten,

00:54:51.410 --> 00:54:52.730
weil man muss ja

00:54:52.730 --> 00:54:54.850
irgendwie sagen, welchen Typ die Variable

00:54:54.850 --> 00:54:56.830
hat, die man da reintut und das ist halt, also gut,

00:54:56.830 --> 00:54:58.450
geht mittlerweile auch, es gibt Generics und

00:54:58.450 --> 00:55:01.090
ist inzwischen auch in Java angekommen

00:55:01.090 --> 00:55:02.650
und man kann da auch so Sachen machen,

00:55:02.930 --> 00:55:04.710
aber das ist alles dann nicht mehr so richtig

00:55:04.710 --> 00:55:05.990
einfach und ein

00:55:05.990 --> 00:55:08.250
Dingen, was man dann halt oft sieht,

00:55:08.350 --> 00:55:10.350
was Leute dann machen, ist, sie haben

00:55:10.350 --> 00:55:12.470
halt, naja, also um diese

00:55:12.470 --> 00:55:14.410
Unzulänglichkeiten, sag ich mal, so könnte man

00:55:14.410 --> 00:55:16.750
das sehen in der Sprache, zu kompensieren,

00:55:17.030 --> 00:55:18.590
überlegen sie sich dann halt irgendwie Patterns,

00:55:18.690 --> 00:55:20.670
wie man bestimmte Probleme, auf die man dann stößt,

00:55:20.710 --> 00:55:21.390
wenn man nicht mehr einfach

00:55:21.390 --> 00:55:23.890
quasi beliebige Dinge irgendwie

00:55:23.890 --> 00:55:26.490
in ein Ding, was halt über Sachen iteriert, packen kann.

00:55:26.730 --> 00:55:28.250
Ja, weil so ein Python-Iterator ist halt,

00:55:28.250 --> 00:55:30.150
der iteriert halt über Sachen und da kann halt beliebiges

00:55:30.150 --> 00:55:30.690
Zeug drin sein.

00:55:32.890 --> 00:55:34.350
Wenn das halt nicht geht, dann

00:55:34.350 --> 00:55:39.730
dann muss man sich halt so Patterns

00:55:39.730 --> 00:55:40.890
überlegen, wie man Dinge tun kann.

00:55:41.490 --> 00:55:43.670
Für viele Situationen kann man

00:55:43.670 --> 00:55:45.310
das dann halt nicht einfach so hinschreiben, was man machen möchte,

00:55:45.650 --> 00:55:46.990
sondern dann muss man halt, dann gibt es

00:55:46.990 --> 00:55:50.110
ein ganzes Gang-of-Four-Buch

00:55:50.110 --> 00:55:51.350
irgendwie.

00:55:51.990 --> 00:55:53.690
Bitte was? Das ist ein ganz bekanntes Buch

00:55:53.690 --> 00:55:55.010
von, naja, wer ist das?

00:55:56.290 --> 00:55:57.850
Das wird immer Gang-of-Four-Buch

00:55:57.850 --> 00:55:58.170
genannt.

00:56:00.210 --> 00:56:01.710
Ja, das musst du unbedingt auch in die Shownotes packen.

00:56:01.810 --> 00:56:03.610
Ja, ich glaube, das Ding heißt auch immer Design Patterns

00:56:03.610 --> 00:56:05.430
oder so. Und da sind halt

00:56:05.430 --> 00:56:07.610
ich weiß nicht, wie viele

00:56:07.610 --> 00:56:09.430
das sind, hundert oder irgendwas in den Dreh.

00:56:11.370 --> 00:56:11.730
Typische

00:56:11.730 --> 00:56:13.730
Design-Patterns, die man halt jetzt in so statisch getübten

00:56:13.730 --> 00:56:15.410
Programmi-Sprachen vor allen Dingen verwenden kann,

00:56:15.610 --> 00:56:17.210
wenn einem solche Probleme halt plagen,

00:56:17.370 --> 00:56:19.450
wie man damit umgeht. Und die das dann halt

00:56:19.450 --> 00:56:20.490
hübsch lösen, sozusagen.

00:56:22.050 --> 00:56:23.190
Und wenn

00:56:23.190 --> 00:56:24.950
man dieses Buch durchgeht

00:56:24.950 --> 00:56:27.590
und sich dann überlegt, wie würde ich das in Python machen, dann stellt man halt

00:56:27.590 --> 00:56:29.570
oft fest, ich brauche da gar keinen Pattern.

00:56:29.670 --> 00:56:31.050
In Python kann ich das einfach so hinschreiben.

00:56:31.050 --> 00:56:33.050
Da muss ich mir kein kompliziertes

00:56:33.610 --> 00:56:35.690
das Ding ausdenken, mit dem ich halt irgendwie da jetzt

00:56:35.690 --> 00:56:37.870
Architektur-Ding, mit dem ich da mit diesem Problem fertig werde,

00:56:37.930 --> 00:56:38.830
weil ich habe das Problem gar nicht.

00:56:39.410 --> 00:56:41.370
Und das ist halt schon sehr nett, dass man halt

00:56:41.370 --> 00:56:43.610
quasi eine große Klasse von Problemen,

00:56:43.730 --> 00:56:45.510
die halt, ja, also auch

00:56:45.510 --> 00:56:47.210
dieses Buch wurde halt gefeiert als

00:56:47.210 --> 00:56:49.570
das kann man irgendwie so programmieren, in die Hand geben

00:56:49.570 --> 00:56:51.410
und dann kriegen sie das halt alles hin, wo sie

00:56:51.410 --> 00:56:52.590
sich vorher einen abgebrochen haben.

00:56:53.590 --> 00:56:55.490
So in Python hat man einen Großteil dieser

00:56:55.490 --> 00:56:57.490
Probleme hat man einfach nicht. So loslegen, machen.

00:56:57.990 --> 00:56:59.570
Ja. Ja. Und das ist halt

00:56:59.570 --> 00:57:01.150
schon sehr schön. Das ist ein großer Vorteil.

00:57:02.990 --> 00:57:03.570
Ja, also

00:57:03.570 --> 00:57:06.810
Also da würde ich sagen, ist halt auch eine der Stärken von Python,

00:57:07.070 --> 00:57:12.330
dass man halt quasi irgendwie einen Großteil der komplizierteren Programmier-Patterns nicht braucht,

00:57:12.430 --> 00:57:13.550
weil man kann es einfach so hinschreiben.

00:57:14.650 --> 00:57:16.710
Ich meine, klar, natürlich auch in Python gibt es Sachen, die kompliziert sind

00:57:16.710 --> 00:57:18.310
und nicht alle Patterns sind überflüssig.

00:57:18.390 --> 00:57:20.430
Deswegen, also es gibt durchaus Sachen, die man da auch brauchen kann.

00:57:20.850 --> 00:57:24.010
Aber es macht das Leben schon irgendwie leichter.

00:57:25.070 --> 00:57:30.910
Ja, das wäre so der Unterschied statisch getypt, dynamisch getypt.

00:57:31.570 --> 00:57:35.750
Genau, den strengen Sprach hatten wir jetzt auch schon im Vergleich zu den anderen Programmiersprachen.

00:57:35.830 --> 00:57:40.910
Was wir auch noch haben, ist quasi binär kompiliert.

00:57:40.990 --> 00:57:42.670
Das hatten wir aber auch eben schon ein bisschen abgehandelt.

00:57:45.070 --> 00:57:49.810
Dann gibt es natürlich Sprachen, in denen man das Memory Management selber macht.

00:57:49.810 --> 00:57:51.190
So C zum Beispiel.

00:57:52.930 --> 00:57:56.630
Da muss man immer so einen Zeiger durch den Speicher schicken, der genau sagt, wo man gerade ist.

00:57:58.050 --> 00:57:58.770
Ja, also

00:57:58.770 --> 00:58:00.490
genau, also

00:58:00.490 --> 00:58:02.910
man alluziert halt irgendwie Speicher und dann kriegt man

00:58:02.910 --> 00:58:04.770
einen Zeiger drauf zurück und dann macht man damit irgendwas

00:58:04.770 --> 00:58:07.070
und muss halt hinterher dran denken, dass man diese Strukturen

00:58:07.070 --> 00:58:08.310
wieder freigibt, wenn man sie nicht mehr braucht.

00:58:09.930 --> 00:58:10.570
Oder ja,

00:58:10.710 --> 00:58:12.150
wenn man Dinge freigibt, die man

00:58:12.150 --> 00:58:14.570
die eigentlich immer noch brauchen,

00:58:14.670 --> 00:58:15.450
dann passieren schreckliche Dinge.

00:58:17.450 --> 00:58:18.610
Und wie löst man das in Python?

00:58:19.390 --> 00:58:21.190
In Python hat man damit nichts zu tun.

00:58:21.190 --> 00:58:23.450
Das ist sozusagen

00:58:23.450 --> 00:58:26.170
das macht Python

00:58:26.170 --> 00:58:27.070
für einen selbst.

00:58:27.470 --> 00:58:29.510
Es sei denn, man schreibt wieder so Low-Level-C-Module

00:58:29.510 --> 00:58:31.470
oder so, die irgendwelche Dinge tun, dann muss man das auch wieder selber

00:58:31.470 --> 00:58:32.730
machen. Aber

00:58:32.730 --> 00:58:35.570
wenn man einfach sich in Python

00:58:35.570 --> 00:58:37.590
bewegt, dann hat man damit eigentlich nichts zu tun,

00:58:37.670 --> 00:58:38.950
weil das passiert dann automatisch.

00:58:39.770 --> 00:58:41.170
Python verwendet da ein System, das nennt sich

00:58:41.170 --> 00:58:42.070
Reference-Counting.

00:58:44.030 --> 00:58:45.590
Also es gibt da auch wieder einen Unterschied.

00:58:45.750 --> 00:58:47.230
Also in einer Sprache wie Java

00:58:47.230 --> 00:58:49.170
ist es ja auch so, da muss man sich auch eigentlich nicht drum kümmern.

00:58:49.410 --> 00:58:50.530
Das macht halt auch der Interpreter.

00:58:51.390 --> 00:58:52.710
Und dann gibt es halt noch Sprachen,

00:58:53.710 --> 00:58:55.030
die machen Garbage

00:58:55.030 --> 00:58:58.190
haben einen Garbage-Collector.

00:58:58.730 --> 00:58:59.350
Wie Python?

00:58:59.730 --> 00:59:02.030
Ja, also Python hat auch einen Garbage-Collector,

00:59:02.230 --> 00:59:03.910
aber ja,

00:59:04.070 --> 00:59:05.030
es ist ein bisschen kompliziert leider.

00:59:06.350 --> 00:59:07.850
Aber hauptsächlich ist es ein Python

00:59:07.850 --> 00:59:09.850
Reference-Counting, sozusagen.

00:59:10.930 --> 00:59:12.150
Das heißt, es zählt, wie oft ist irgendwas

00:59:12.150 --> 00:59:14.030
irgendwo da und wenn es nicht mehr da ist, dann zahlt es weg.

00:59:14.190 --> 00:59:16.050
Genau, wenn irgendwo eine neue Reference entsteht,

00:59:16.130 --> 00:59:18.010
dann wird der Reference-Counter hochgezählt

00:59:18.010 --> 00:59:19.810
und irgendwie ansonsten,

00:59:19.990 --> 00:59:22.010
wenn eine Reference verschwindet, gelöscht wird,

00:59:22.110 --> 00:59:23.990
dann wird es runtergezählt und wenn es bei 0 ankommen wird,

00:59:24.390 --> 00:59:25.790
wird das Objekt abgeräumt.

00:59:28.390 --> 00:59:28.690
Und

00:59:28.690 --> 00:59:30.330
das hat

00:59:30.330 --> 00:59:31.690
den großen Vorteil,

00:59:32.570 --> 00:59:33.950
es ist ziemlich schnell zur Laufzeit

00:59:33.950 --> 00:59:35.890
und

00:59:35.890 --> 00:59:38.810
es ist

00:59:38.810 --> 00:59:40.270
sozusagen auch

00:59:40.270 --> 00:59:42.250
sehr einfach, also kann nicht viel schief gehen.

00:59:43.430 --> 00:59:44.210
Es sorgt für

00:59:44.210 --> 00:59:45.310
vorhersagbare Latenzen.

00:59:48.230 --> 00:59:49.670
Es hat aber auch einen großen Nachteil.

00:59:50.610 --> 00:59:50.830
Okay.

00:59:51.510 --> 00:59:52.570
Der große Nachteil ist,

00:59:53.410 --> 00:59:55.490
ja, man kann

00:59:55.490 --> 00:59:57.250
dann nicht mehr Paralleldinge machen.

00:59:57.490 --> 00:59:59.510
Oh Gott, oh Gott, oh Gott. Also auf unterschiedlichen Prozessoren.

01:00:00.230 --> 01:00:01.590
Das geht im Grunde nicht mehr.

01:00:01.930 --> 01:00:03.550
Also das könnte man tun, da muss man halt

01:00:03.550 --> 01:00:05.470
wenn man es naiv

01:00:05.470 --> 01:00:07.470
machen wollte, müsste man dann für jede Operation,

01:00:07.630 --> 01:00:09.430
die jetzt irgendwie so ein Reference-Counter

01:00:09.430 --> 01:00:11.250
hoch oder runter zählt, da müsste man irgendwie

01:00:11.250 --> 01:00:13.230
so einen Lock drauf machen und sagen, so,

01:00:13.330 --> 01:00:15.610
jetzt mal alle stopp, wir erhöhen

01:00:15.610 --> 01:00:17.270
jetzt diesen Reference-Counter

01:00:17.270 --> 01:00:19.370
und dann können alle wieder weitermachen. Wenn man das

01:00:19.370 --> 01:00:20.970
tut, wird alles ungefähr 40 Mal so langsam.

01:00:22.050 --> 01:00:23.710
Und das geht alles einfach nicht mehr.

01:00:24.290 --> 01:00:27.110
Ich glaube, Leute haben irgendwie lange daran gefeilt,

01:00:27.190 --> 01:00:29.630
sind jetzt auf Faktor 20 oder so runter,

01:00:30.550 --> 01:00:32.150
wo man gar nicht gedacht hätte, dass es überhaupt möglich wäre.

01:00:32.650 --> 01:00:35.250
Das heißt, du brauchst 20 Kerne, damit du dann den einen Kern...

01:00:35.250 --> 01:00:36.710
Die Performance von einem Kern hinfickst, genau.

01:00:37.230 --> 01:00:38.810
Das ist natürlich irgendwie nicht so richtig effizient.

01:00:38.810 --> 01:00:42.010
Also das ist natürlich ein großer Nachteil.

01:00:42.070 --> 01:00:45.390
Und dafür gibt es halt bei Python auch den Global Interpreter Log.

01:00:46.470 --> 01:00:47.170
Den bitte was?

01:00:48.870 --> 01:00:51.510
Ja, GIL oder Global Interpreter Log.

01:00:51.650 --> 01:00:54.090
Das ist sozusagen ein Ding, was dafür sorgt,

01:00:54.090 --> 01:01:01.790
dass quasi ein Python-Prozess nur auf einer CPU läuft

01:01:01.790 --> 01:01:04.610
und nicht ein Python-Prozess auf mehreren CPUs laufen kann.

01:01:08.950 --> 01:01:09.730
Das ist halt so.

01:01:09.830 --> 01:01:11.390
Also das ist auch der Grund, warum Java das nicht macht.

01:01:11.510 --> 01:01:15.330
Java hat einen Garbage-Collector und hat dann dieses Problem nicht.

01:01:15.510 --> 01:01:17.450
Das kann dann halt auf mehreren Prozessoren laufen, problemlos.

01:01:17.810 --> 01:01:19.790
Oder, naja, problemlos, aber geht.

01:01:20.390 --> 01:01:24.990
Und sozusagen muss dann halt ab und zu mal aufräumen.

01:01:25.250 --> 01:01:26.390
Dafür ist dieser Garbage-Collector.

01:01:26.850 --> 01:01:28.230
Das heißt, auf einmal gibt es eine Pause.

01:01:28.470 --> 01:01:29.570
Nee, der Müllteil ist voll.

01:01:29.710 --> 01:01:32.190
Jetzt muss der Müll aus, muss erstmal alles einsammeln und wegfahren.

01:01:32.350 --> 01:01:34.930
Genau, das Problem ist, man weiß halt nie genau, wann der zuschlägt.

01:01:35.130 --> 01:01:37.350
Und das bedeutet halt, wenn man einen Server laufen hat,

01:01:37.530 --> 01:01:39.210
dann kann es halt sein, dass man irgendwie plötzlich,

01:01:39.410 --> 01:01:41.710
alle Requests sind super schnell und dann plötzlich einer dauert so lange.

01:01:41.770 --> 01:01:43.390
Also jetzt, um bei dem Müllauto Beispiel zu bleiben,

01:01:43.430 --> 01:01:45.690
kann man nicht einfach messen, wie voll der Müllcontainer ist

01:01:45.690 --> 01:01:49.110
und dann irgendwie den Müllwagen so gut fahren lassen,

01:01:49.230 --> 01:01:51.610
dass der ein Routenmanagement macht und da richtig vorbeifährt

01:01:51.610 --> 01:01:53.550
und die Sachen rechtzeitig lädt, bevor die vollgelaufen sind?

01:01:54.730 --> 01:01:57.170
Ja, aber das Problem ist halt, du musst irgendwann...

01:01:57.170 --> 01:01:58.510
Weiß nicht, wie viele Leute die Müll essen

01:01:58.510 --> 01:02:00.110
und wie viel Müll die wegschmeißen immer, oder?

01:02:00.750 --> 01:02:02.590
Ja, ja, ja, also da wird auch eine ganze Menge gemacht

01:02:02.590 --> 01:02:04.630
und es funktioniert auch alles irgendwie so ganz okay,

01:02:04.770 --> 01:02:06.830
aber das Problem wirst du im Grunde nicht los.

01:02:06.930 --> 01:02:10.130
Du hast immer das Problem, dass wenn der Müll weggebracht werden muss,

01:02:10.210 --> 01:02:12.170
musst du allen sagen, so, jetzt mal stopp,

01:02:13.010 --> 01:02:13.870
jetzt muss erst mal der Müll weggebracht werden.

01:02:13.890 --> 01:02:15.230
Aber die schmeißen alles in dieselbe Mülltonne.

01:02:15.850 --> 01:02:16.550
Ja, und

01:02:16.550 --> 01:02:19.150
dann, ja, selbst wenn

01:02:19.150 --> 01:02:21.230
das sehr schnell ist, kann es halt sein, dass es, weiß ich nicht,

01:02:21.310 --> 01:02:22.590
200 Millisekunden dauert oder sowas.

01:02:22.750 --> 01:02:25.030
Könnte man nicht einfach eine kleinere Mülltonne machen? Hatte für jeden so eine kleinere

01:02:25.030 --> 01:02:26.470
Mülltonne, als wenn man so eine große hat?

01:02:27.250 --> 01:02:28.930
Ja, ich weiß es nicht.

01:02:29.490 --> 01:02:31.110
Aber dieses Problem ist nach wie vor

01:02:31.110 --> 01:02:33.070
da, also nach wie vor

01:02:33.070 --> 01:02:34.870
kämpfen da Leute mit. Sagen wir mal, das ist halt

01:02:34.870 --> 01:02:37.050
einer der Trade-offs. Wenn du halt einen Garbage-Collector

01:02:37.050 --> 01:02:38.930
hast, dann kannst du halt

01:02:38.930 --> 01:02:40.910
irgendwie Sachen auf mehrere Prozessoren verteilen, aber du hast halt den

01:02:40.910 --> 01:02:42.810
Nachteil, dass deine Latenz so ein bisschen

01:02:42.810 --> 01:02:43.790
unvorhersagbar wird.

01:02:45.650 --> 01:02:46.870
Ja, das ist halt blöd.

01:02:47.370 --> 01:02:49.050
Und ja, das

01:02:49.050 --> 01:02:51.330
sind halt,

01:02:51.750 --> 01:02:53.190
man kann sich halt überlegen, was man irgendwie

01:02:53.190 --> 01:02:55.190
lieber mag, sozusagen. Und auch

01:02:55.190 --> 01:02:57.270
da finde ich, dass Python dann eine ganz

01:02:57.270 --> 01:02:57.590
gute

01:02:57.590 --> 01:03:01.170
Wahl getroffen hat mit dem Reference-Counting.

01:03:01.310 --> 01:03:03.110
Und auch da gibt es halt den Garbage-Collector, den gibt es halt

01:03:03.110 --> 01:03:05.290
vor allen Dingen dafür, dass, wenn jetzt so zirkuläre

01:03:05.290 --> 01:03:07.170
Referenzen irgendwie, also wenn das

01:03:07.170 --> 01:03:08.950
eine Objekt hat, das auf ein anderes

01:03:08.950 --> 01:03:10.930
verweist, das auf ein anderes verweist, das eine Referenz auf ein

01:03:10.930 --> 01:03:13.010
drittes hat und das wieder auf das erste oder so, dann

01:03:13.010 --> 01:03:14.030
die Katze beißt sich in den Schwanz.

01:03:14.570 --> 01:03:17.030
dann werden die durch Reference-Counting nicht weggeräumt

01:03:17.030 --> 01:03:18.690
und dann muss auch Python ab und zu mal

01:03:18.690 --> 01:03:20.670
einen Garbage-Collector anschmeißen, um solche Sachen zu finden und dann

01:03:20.670 --> 01:03:22.850
rauszuwerfen. Aber den Garbage-Collector kriegt man

01:03:22.850 --> 01:03:24.850
bei Python mit so etwas wie Import-GC dann?

01:03:25.050 --> 01:03:25.530
Ja, genau.

01:03:27.490 --> 01:03:28.910
Und der macht manchmal auch blöde

01:03:28.910 --> 01:03:30.810
Sachen und auch da hat man dann halt manchmal so die Probleme,

01:03:30.870 --> 01:03:32.790
die man von anderen Programmiersprachen kennt. Also wenn man zum Beispiel

01:03:32.790 --> 01:03:34.630
ich weiß nicht, ob das heute noch so ist, aber

01:03:34.630 --> 01:03:36.210
früher war das immer so, wenn man größere

01:03:36.210 --> 01:03:38.630
Datenmengen irgendwie importiert hat per CSV

01:03:38.630 --> 01:03:40.770
oder weiß ich nicht. Also ich habe früher

01:03:40.770 --> 01:03:43.370
irgendwie viel so Import-Export-Skripte

01:03:43.370 --> 01:03:44.630
auch geschrieben und

01:03:44.630 --> 01:03:47.390
da war halt so einer der Tricks halt, dass man

01:03:47.390 --> 01:03:49.350
quasi, bevor man halt

01:03:49.350 --> 01:03:51.170
so ein paar Millionen Zeilen irgendwie gelesen hat

01:03:51.170 --> 01:03:53.690
und die irgendwo reingeschrieben hat in irgendeine Hauptspeicher-Datenstruktur,

01:03:54.090 --> 01:03:55.350
dass man halt einmal den

01:03:55.350 --> 01:03:57.430
Garbage-Collector ausgeschaltet hat,

01:03:57.610 --> 01:03:59.350
dann hat man den ganzen Scheiß importiert und dann hat man

01:03:59.350 --> 01:03:59.950
ihn wieder angeschaltet.

01:04:01.710 --> 01:04:03.330
Weil ansonsten schlägt

01:04:03.330 --> 01:04:05.270
er halt alle paar tausend Zeilen oder so zu

01:04:05.270 --> 01:04:06.930
und blockiert alles

01:04:06.930 --> 01:04:09.210
und das macht es halt dann irgendwie direkt

01:04:09.210 --> 01:04:10.530
ein paar Faktoren schneller oder so.

01:04:11.150 --> 01:04:13.030
Heute kann sein, dass heute alles nicht mehr nötig ist

01:04:13.030 --> 01:04:14.190
und es besser geworden ist.

01:04:15.270 --> 01:04:16.010
Da wäre ich jetzt neugierig,

01:04:16.050 --> 01:04:17.630
müssen wir vielleicht auch mal rausfinden,

01:04:17.810 --> 01:04:18.590
ob das wirklich noch so ist.

01:04:19.050 --> 01:04:20.210
Wenn man das wirklich immer machen muss,

01:04:20.250 --> 01:04:21.190
dass man dem Müllwagen sagen muss,

01:04:21.270 --> 01:04:22.070
nee, heute nicht.

01:04:22.430 --> 01:04:22.770
Ja, genau.

01:04:23.490 --> 01:04:24.750
Also wenn man weiß, was passiert,

01:04:24.870 --> 01:04:26.990
wenn man sagt, ich haue jetzt die ganze Zeit zurück

01:04:26.990 --> 01:04:28.710
in den Hauptspeicher, ich weiß, dass es so ist

01:04:28.710 --> 01:04:30.550
und es ist richtig so, da muss nicht geguckt werden,

01:04:30.670 --> 01:04:33.650
ob davon was weg kann, weil davon kann noch nichts weg,

01:04:33.690 --> 01:04:34.470
weil ich habe noch nichts anderes gemacht,

01:04:35.010 --> 01:04:36.010
dann kann ich halt sagen, okay,

01:04:36.710 --> 01:04:40.290
da muss der Müllwagen nicht rumfahren.

01:04:40.290 --> 01:04:42.210
Das ist der Nachrede.

01:04:43.630 --> 01:04:44.730
Aber ist natürlich schon hässlich.

01:04:44.830 --> 01:04:47.070
Mit solchen Dingen will man sich eigentlich als Entwickler

01:04:47.070 --> 01:04:48.590
ja gar nicht so beschäftigen müssen,

01:04:49.010 --> 01:04:50.070
weil das ist natürlich irgendwie

01:04:50.070 --> 01:04:52.930
für die meisten Leute alles...

01:04:52.930 --> 01:04:54.790
Ja, ich glaube auch. Unsere Anfänger haben wir gerade vielleicht wieder ein bisschen

01:04:54.790 --> 01:04:56.590
abgehängt. Ich hoffe, wir holen die noch wieder ein bisschen ein. Ich hoffe,

01:04:56.650 --> 01:04:58.350
ihr findet das alles so interessant wie ich.

01:04:59.890 --> 01:05:01.050
Vielleicht kommen wir dann noch ein bisschen

01:05:01.050 --> 01:05:02.710
wieder zurück zu dem, was wir

01:05:02.710 --> 01:05:04.810
jetzt durch hatten. Ich glaube, wir haben jetzt

01:05:04.810 --> 01:05:06.570
so ein bisschen erklärt, wie Python jetzt funktioniert.

01:05:07.250 --> 01:05:08.710
Ich weiß nicht, ob wir dazu noch ein bisschen

01:05:08.710 --> 01:05:10.590
was sagen möchten. Lass mich mal gerade überlegen.

01:05:10.950 --> 01:05:11.970
Ja, nee, ich glaube,

01:05:12.950 --> 01:05:18.750
im Grunde sind das so die wesentlichen

01:05:18.750 --> 01:05:20.370
Unterschiede zu anderen Programmiersprachen.

01:05:21.550 --> 01:05:22.230
Ja, ja, okay.

01:05:22.410 --> 01:05:23.890
Das heißt, die Unterschiede haben wir jetzt so ein bisschen erklärt,

01:05:24.310 --> 01:05:25.330
was man damit alles so machen kann.

01:05:26.970 --> 01:05:28.270
Vielleicht wollen wir ein bisschen noch drauf eingehen,

01:05:28.330 --> 01:05:29.710
was so die Mythen dieser Sprache sind.

01:05:29.950 --> 01:05:30.990
Das ist total einfach.

01:05:31.950 --> 01:05:34.330
Das ist immer so einer der Sachen, fand ich jetzt tatsächlich

01:05:34.330 --> 01:05:35.630
auch, also von der Syntax her,

01:05:35.990 --> 01:05:38.150
dass es sich gut las, dass du nicht

01:05:38.150 --> 01:05:39.990
irgendwie da standst und hat es irgendwie wie

01:05:39.990 --> 01:05:41.550
ein C, so ein Hello World, wo es dann irgendwie über

01:05:41.550 --> 01:05:43.710
mehrere Zeilen geht oder wie in Java, wo dann

01:05:43.710 --> 01:05:46.310
erst mal gucken muss, ach, wo geht denn jetzt diese Funktion hin?

01:05:46.610 --> 01:05:47.630
Steht da Print Hello World fertig?

01:05:48.450 --> 01:05:49.850
Genau, genau. Ja, bei Java

01:05:49.850 --> 01:05:51.370
muss man dann erst irgendwie komische,

01:05:51.950 --> 01:05:53.930
erst eine Klasse definieren und dann irgendwie

01:05:53.930 --> 01:05:55.990
Public, Static, Void, Main oder so was

01:05:55.990 --> 01:05:56.390
hinschreiben.

01:05:57.430 --> 01:05:59.830
Das sind halt so magische Worte, damit irgendwas passiert.

01:06:00.150 --> 01:06:01.650
Aber Python, da schreiben wir einfach Print hin.

01:06:02.110 --> 01:06:03.570
Wenn man printen möchte, das ist schon sehr nett.

01:06:05.370 --> 01:06:05.730
Ja.

01:06:07.730 --> 01:06:09.230
Also bleibt Python denn so einfach?

01:06:09.890 --> 01:06:10.810
Ja, nein.

01:06:11.550 --> 01:06:15.090
Also, ja, man kann auch...

01:06:15.090 --> 01:06:16.030
Kommt auch an, was man damit machen will.

01:06:16.130 --> 01:06:17.190
Ja, ja, ja, man kann da auch...

01:06:17.190 --> 01:06:19.310
Man kann auch Netzwerkkram damit machen, das hatten wir noch.

01:06:19.430 --> 01:06:23.910
Ja, und, ja, genau, und asynchrones Dinge und überhaupt,

01:06:24.270 --> 01:06:27.410
ja, da kann es auch dann relativ fies werden.

01:06:28.730 --> 01:06:30.310
Das Dumme ist nur, dass es halt dann,

01:06:30.730 --> 01:06:33.370
wenn man fiese Probleme hat, dann kann man da nicht viel dran tun.

01:06:33.530 --> 01:06:37.250
Dann muss man leider manchmal den sauren Apfel beißen.

01:06:37.250 --> 01:06:45.910
Aber ich meine, es ist ja auch schön, wenn quasi schwierige Probleme möglich, schwierige Sachen möglich sind.

01:06:46.010 --> 01:06:48.810
Das macht einen mächtigen Tauberstab, also mehr Magie.

01:06:49.150 --> 01:06:55.110
Aber es gibt tatsächlich auch Situationen, wo man dann halt auch komplizierte Dinge tun kann bzw. muss.

01:06:56.070 --> 01:07:00.370
Und ja, wo es manchmal auch nicht so richtig offensichtlich ist, was Python da tut.

01:07:01.930 --> 01:07:04.430
Ja, und es gibt halt auch so Ecken, die halt einfach nicht schön sind.

01:07:04.430 --> 01:07:05.690
Das muss man natürlich auch sagen.

01:07:05.930 --> 01:07:12.430
Ich sag mal, wenn ihr jetzt einfach irgendwelche Daten von irgendwelchen Sensoren packen wollt in eine Datenbank, das ist dann relativ hands-on.

01:07:14.430 --> 01:07:18.830
Genau, ja, also Mythos ist einfach so, es ist, würde ich sagen, tatsächlich sehr, sehr einfach.

01:07:18.990 --> 01:07:31.690
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.

01:07:31.950 --> 01:07:35.610
Es gibt tatsächlich auch relativ viele Antworten mittlerweile für Python, das ist auch sehr angenehm.

01:07:35.930 --> 01:07:39.390
weil fast für jedes einzelne Problem, das man irgendwo hat,

01:07:39.870 --> 01:07:42.350
irgendjemand das schon mal hatte und irgendwie so eine Musterlösung findet

01:07:42.350 --> 01:07:44.910
oder auch das Problem dann von mehreren Seiten angucken kann.

01:07:46.010 --> 01:07:47.810
Ja, aber ja, genau.

01:07:47.970 --> 01:07:50.010
Also das ist das Python-Einfaches, würde ich sagen.

01:07:50.130 --> 01:07:54.230
Das ist ein Mythos, der durchaus irgendwie mehr Wahrheit als ein Mythos ist.

01:07:56.070 --> 01:07:58.370
Ja, eine andere Geschichte wäre halt irgendwie,

01:07:58.490 --> 01:08:01.190
oh, dieses Significant White Space, das ist ja total furchtbar.

01:08:01.530 --> 01:08:03.870
Ich kann so nicht arbeiten.

01:08:04.890 --> 01:08:14.210
Für alle Leute, die uns 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.

01:08:15.070 --> 01:08:20.730
Ja, dass man halt nicht quasi den Code beliebig formatieren kann, sondern dass halt Widespace halt auch zur Syntax gehört.

01:08:20.730 --> 01:08:29.350
Also wenn ich eine Zeile, die im gleichen Block ist, anders einrücke als die andere, dann geht das halt schief.

01:08:29.730 --> 01:08:31.770
Also das, was ein guter Programmierer

01:08:31.770 --> 01:08:33.490
von vornherein formatieren sollte in seinem Code,

01:08:33.610 --> 01:08:35.370
das sagt Python, wenn du es nicht machst, dann

01:08:35.370 --> 01:08:37.270
stützt es ab und sagt, nee, nee, nee, du, aber nicht.

01:08:37.570 --> 01:08:38.010
Ja, genau.

01:08:40.570 --> 01:08:40.890
Ja.

01:08:41.890 --> 01:08:43.630
Und es ist natürlich doof, wenn man sich so ein anderes Schema

01:08:43.630 --> 01:08:44.910
angewohnt hat irgendwann mal. Genau.

01:08:45.270 --> 01:08:47.070
Und man kann das halt nicht beliebig einstellen.

01:08:47.370 --> 01:08:49.770
Oder wenn man jetzt Tabs und Spaces mixt oder so.

01:08:50.510 --> 01:08:51.750
Überhaupt, man kann Tabs

01:08:51.750 --> 01:08:53.730
auch verwenden zum Einrücken, aber das sollte man

01:08:53.730 --> 01:08:55.630
nicht tun, das ist böse. Immer schön

01:08:55.630 --> 01:08:57.650
Spaces verwenden. Vier Leerzeichen pro Ebene.

01:08:58.150 --> 01:08:59.450
Und die meisten IDEs,

01:08:59.590 --> 01:09:01.750
bauen die das auch irgendwann um. Das heißt, ihr könnt das so

01:09:01.750 --> 01:09:02.890
bauen, dass ihr dann vier

01:09:02.890 --> 01:09:05.810
Spaces pro Tab bekommt. Da könnt ihr wieder im Tab arbeiten, aber

01:09:05.810 --> 01:09:07.770
es wird umgewandelt. Und ansonsten habt ihr tatsächlich

01:09:07.770 --> 01:09:09.670
manchmal Probleme, wenn ihr irgendwelchen Code

01:09:09.670 --> 01:09:11.510
Freunden schickt oder Code von Freunden bekommt.

01:09:11.610 --> 01:09:13.690
Die haben Tabs benutzt und ihr Leerzeichen, dann funktioniert das

01:09:13.690 --> 01:09:15.390
nicht mehr und ihr seht nicht genau, warum. Weil

01:09:15.390 --> 01:09:17.610
irgendwo irgendwelche Leerzeichen dazu

01:09:17.610 --> 01:09:19.770
führen, dass da unterschiedlich

01:09:19.770 --> 01:09:21.710
interpretiert wird und dann stürzt das ganze Programm ab.

01:09:21.830 --> 01:09:23.430
Hässlich. Gerade für Anfänger manchmal.

01:09:23.730 --> 01:09:25.390
Stehen davor und denken, was?

01:09:25.770 --> 01:09:26.310
Warum? Geht nicht.

01:09:28.950 --> 01:09:31.350
Also, ich würde sagen, so ein bisschen was ist ja da ja drin.

01:09:31.430 --> 01:09:33.090
Also, ich dachte auch am Anfang,

01:09:33.270 --> 01:09:35.890
also ich kam ja dann zu der Zeit,

01:09:35.950 --> 01:09:37.970
wo ich mich angefangen habe zu beschäftigen,

01:09:38.230 --> 01:09:40.290
auch von Perl her, wo man das halt nicht hat,

01:09:40.370 --> 01:09:41.650
wo man das kommentieren kann, wie man will und so.

01:09:42.030 --> 01:09:43.490
Und ich dachte auch so, oh, das ist aber blöd,

01:09:43.570 --> 01:09:45.270
dass man da jetzt irgendwie darauf achten muss.

01:09:45.950 --> 01:09:48.710
Aber das waren halt ein paar Tage und danach war es super

01:09:48.710 --> 01:09:51.950
und ich fand das nie wieder problematisch.

01:09:54.790 --> 01:09:56.110
Aber ich kann so ein bisschen verstehen,

01:09:56.110 --> 01:09:58.230
dass es blöd ist, wenn man das selber dafür sorgen muss,

01:09:58.290 --> 01:10:03.770
dass die Formatierung so ist, dass die Syntax stimmt.

01:10:05.490 --> 01:10:06.330
Ich würde aber auch sagen,

01:10:06.390 --> 01:10:07.710
dass man das heute eigentlich nicht mehr macht.

01:10:07.990 --> 01:10:10.270
Andere Sprachen machen ganz viele Klammern oder Semikolon.

01:10:10.870 --> 01:10:13.170
Das ist halt der Preis, den man dann zahlen muss,

01:10:13.210 --> 01:10:18.670
wenn man eben nicht die Formatierung als Teil der Syntax hat,

01:10:18.670 --> 01:10:20.790
sondern sagt, okay, du kannst formatieren, wie du willst.

01:10:20.870 --> 01:10:22.370
Dann muss man halt irgendwie anders signalisieren,

01:10:22.470 --> 01:10:23.550
wo ein Block anfängt und aufhört.

01:10:24.130 --> 01:10:25.790
Und dafür benutzt man halt typischerweise Klammern.

01:10:26.170 --> 01:10:27.470
Und das heißt, man hat halt sehr viele Klammern.

01:10:27.990 --> 01:10:30.150
Kannst ja mal zählen. Fünf Klammern auf, sechs Klammern zu.

01:10:30.810 --> 01:10:32.310
Genau, genau. Und das ist halt auch

01:10:32.310 --> 01:10:34.190
nicht so richtig schön. So ein Python ist

01:10:34.190 --> 01:10:36.270
diese Frage halt nie so, muss ich da jetzt noch eine Klammer

01:10:36.270 --> 01:10:38.230
zu... Doch, man hat sie auch an anderer

01:10:38.230 --> 01:10:40.250
Stelle, aber jedenfalls nicht beim

01:10:40.250 --> 01:10:42.230
Schließen von Blöcken. So, muss ich da jetzt noch eine Klammer zu

01:10:42.230 --> 01:10:43.790
machen oder nicht? Sondern, nee, wenn ich den jetzt

01:10:43.790 --> 01:10:46.070
eingerückt habe und aufhöre, dann ist dieser Block vorbei.

01:10:46.770 --> 01:10:48.190
Das ist halt viel einfacher.

01:10:49.890 --> 01:10:50.030
Ja.

01:10:51.030 --> 01:10:52.430
Und genau, heutzutage

01:10:52.430 --> 01:10:54.150
auch schon gar nicht mehr so ein

01:10:54.150 --> 01:10:56.290
Problem, weil heute würde ich sagen,

01:10:56.370 --> 01:10:58.210
sollte man Code eigentlich gar nicht mehr unbedingt

01:10:58.210 --> 01:11:00.290
selber formatieren, sondern man schreibt es halt

01:11:00.290 --> 01:11:02.110
irgendwie hin, dass man denkt, dass es halbwegs passt

01:11:02.110 --> 01:11:04.510
und dann nimmt man

01:11:04.510 --> 01:11:06.010
halt sowas wie Black, das ist jetzt

01:11:06.010 --> 01:11:07.830
ein Ding, was halt... Black?

01:11:08.330 --> 01:11:09.910
Ja. Schwarz? Genau.

01:11:10.570 --> 01:11:11.630
Das ist so ein

01:11:11.630 --> 01:11:13.310
Kommandozeilen-Utility,

01:11:14.130 --> 01:11:16.130
das gibt es aber auch als WIM-Plugin für den

01:11:16.130 --> 01:11:18.310
Editor oder so und dem sagt man einfach nur

01:11:18.310 --> 01:11:20.270
okay, reformatiere alles so, dass

01:11:20.270 --> 01:11:22.150
es irgendwie dem Standard

01:11:22.150 --> 01:11:24.370
entspricht und dann formatiert das den Code halt um.

01:11:24.870 --> 01:11:26.190
Aha. Und dann muss man

01:11:26.190 --> 01:11:28.110
da selber nichts mehr machen. Muss man das importieren oder

01:11:28.110 --> 01:11:30.090
ist das ein Kommando-Teilen-Tool? Das ist ein

01:11:30.090 --> 01:11:32.090
Kommando-Teilen-Tool, aber wie gesagt, es gibt für

01:11:32.090 --> 01:11:34.290
die meisten Editoren Plugins, die das dann halt aufmarschen.

01:11:34.370 --> 01:11:36.130
Diesen muss ich mir direkt mal aufschreiben hier. Wieder was

01:11:36.130 --> 01:11:37.570
gelernt. Genau.

01:11:40.330 --> 01:11:42.050
Ja, also ich würde sagen,

01:11:42.170 --> 01:11:44.110
heutzutage sollte man eigentlich nicht mehr von Hand

01:11:44.110 --> 01:11:46.110
formatieren müssen. Das macht man einfach nicht mehr.

01:11:49.190 --> 01:11:50.050
Genau, damit ist das

01:11:50.050 --> 01:11:52.030
im Grunde alles kein Problem mehr,

01:11:52.230 --> 01:11:52.430
weil

01:11:52.430 --> 01:11:56.170
man hat ja als Mensch gar nicht mehr damit zu tun,

01:11:56.190 --> 01:11:57.230
und man muss sich keine Gedanken mehr drum machen.

01:11:57.250 --> 01:11:59.450
Du kannst den Code in eine Zeile schreiben und es funktioniert weiterhin wunderbar.

01:12:00.190 --> 01:12:02.210
Ja, man kann tatsächlich relativ viel in eine Zeile

01:12:02.210 --> 01:12:03.930
schreiben, aber dann, Python muss man das dann auch

01:12:03.930 --> 01:12:05.930
signalisieren, dann schreibt man ein Semicolon, wenn man Statements

01:12:05.930 --> 01:12:08.090
voneinander schreiben möchte. Ja, das Semicolon

01:12:08.090 --> 01:12:09.910
gibt es auch in Python. Man muss es normalerweise nicht

01:12:09.910 --> 01:12:11.890
hinschreiben, weil der Zeilenumbruch, das ist halt

01:12:11.890 --> 01:12:13.810
quasi gleiche... Aber wenn man es hinschreibt, tut es nichts.

01:12:14.070 --> 01:12:15.870
Aber wenn man es hinschreibt, da kann man auch alles in eine Zeile schreiben.

01:12:16.010 --> 01:12:17.970
Ja, das geht. Nicht, dass man

01:12:17.970 --> 01:12:19.610
das wirklich tun sollte, aber... Das sieht ziemlich arglich aus.

01:12:19.810 --> 01:12:21.050
Aber für so einen Teleprompter oder so.

01:12:21.610 --> 01:12:23.230
Ja, genau.

01:12:24.070 --> 01:12:24.870
Ja, also das ist

01:12:24.870 --> 01:12:27.450
eine Geschichte, die halt immer wieder als

01:12:27.450 --> 01:12:28.550
oh, das ist ja total schrecklich

01:12:28.550 --> 01:12:30.970
angebracht wird, aber ich würde sagen, einmal

01:12:30.970 --> 01:12:33.010
sie ist nicht so schrecklich und zum Zweiten

01:12:33.010 --> 01:12:35.050
heutzutage kein Problem mehr eigentlich.

01:12:35.050 --> 01:12:36.750
Hier ist gerade der Piep, muss man eine Pflanze gießen jetzt?

01:12:37.130 --> 01:12:38.410
Nee, ich habe vergessen,

01:12:38.770 --> 01:12:40.730
meiner Uhr zu sagen,

01:12:40.870 --> 01:12:43.030
dass sie nicht stören, dass sie nicht rumnerven

01:12:43.030 --> 01:12:44.970
soll, deswegen piepst

01:12:44.970 --> 01:12:46.750
es bei mir. Ich mache das gerade noch hier

01:12:46.750 --> 01:12:47.210
auf lautlos.

01:12:49.550 --> 01:12:49.870
Und

01:12:49.870 --> 01:12:52.750
eine andere Geschichte ist,

01:12:52.970 --> 01:12:54.410
ja genau, Python ist langsam.

01:12:54.790 --> 01:12:56.230
Das ist auch immer etwas, was man halt hört.

01:12:56.970 --> 01:12:57.750
Oh mein Gott, nein!

01:12:58.550 --> 01:12:59.170
Was tue ich jetzt?

01:12:59.730 --> 01:13:02.150
Ich bin viel schneller mit...

01:13:02.150 --> 01:13:04.370
Man muss das in Go neu schreiben

01:13:04.370 --> 01:13:06.210
oder in C oder

01:13:06.210 --> 01:13:08.190
C++, viel besser, aber viel schneller.

01:13:08.590 --> 01:13:09.190
Und, ist es langsam?

01:13:10.630 --> 01:13:11.450
Ja und nein.

01:13:12.610 --> 01:13:13.970
Also es kommt halt tatsächlich...

01:13:13.970 --> 01:13:15.650
Solche pauschalen

01:13:15.650 --> 01:13:18.410
Urteile sind halt

01:13:18.410 --> 01:13:20.090
immer falsch eigentlich.

01:13:20.450 --> 01:13:22.410
Deswegen, weil man das...

01:13:23.050 --> 01:13:23.890
Man muss halt immer

01:13:23.890 --> 01:13:26.130
quasi konkret sagen, was man damit meint,

01:13:26.210 --> 01:13:28.090
wenn man jetzt sagt, das ist schnell oder langsam

01:13:28.090 --> 01:13:29.230
und halt in einem bestimmten Kontext

01:13:29.230 --> 01:13:31.950
geben und dann kann man das halt sagen.

01:13:32.070 --> 01:13:33.310
Also ich könnte zum Beispiel sagen,

01:13:34.370 --> 01:13:36.230
also wenn ich Methoden

01:13:36.230 --> 01:13:37.530
aufrufe in Python,

01:13:38.090 --> 01:13:40.130
dann ist das halt deutlich langsamer

01:13:40.130 --> 01:13:41.530
als jetzt in C++ zum Beispiel.

01:13:42.270 --> 01:13:44.090
Das ist tatsächlich so. Oder wenn ich eine Funktion aufrufe in C,

01:13:44.230 --> 01:13:45.810
ist es viel schneller als in Python.

01:13:46.830 --> 01:13:48.330
Also wenn ich halt eine Vorschleife mache

01:13:48.330 --> 01:13:50.090
und dann tausendmal eine Methode aufrufe auf einer Klasse

01:13:50.090 --> 01:13:52.170
oder so, dann ist das in Python viel, viel langsamer als in C

01:13:52.170 --> 01:13:53.130
oder in C++.

01:13:53.890 --> 01:13:57.990
Also, insofern, in diesem Kontext wäre Python tatsächlich sehr langsam.

01:13:58.670 --> 01:14:01.670
Aber die Frage ist halt, was ein Programm so tut.

01:14:02.550 --> 01:14:05.870
Und wenn ich jetzt zum Beispiel große Matrizen mit dem Alter multipliziere

01:14:05.870 --> 01:14:09.770
und ich mache das halt irgendwie mit zwei NumPy-Arrays in Python,

01:14:10.090 --> 01:14:13.130
wo die Syntax sehr schick ist und ich das in einer Zeile tue

01:14:13.130 --> 01:14:17.590
und jemand anders überlegt sich, hat gehört, Python ist langsam

01:14:17.590 --> 01:14:20.950
und macht das halt in C mit so einer dreifach verschachtelten For-Loop

01:14:20.950 --> 01:14:22.830
über halt irgendwelche Datenstrukturen,

01:14:23.170 --> 01:14:24.790
weiß ich nicht, irgendwie so ein Type-Memory-View oder

01:14:24.790 --> 01:14:26.630
warum immer das ein C, wie man das ein C hält.

01:14:26.630 --> 01:14:28.210
Das wird ganz schön ziemlich für die Zeilen lang, ja.

01:14:30.630 --> 01:14:31.030
Dann

01:14:31.030 --> 01:14:32.990
wird die C-Implementation

01:14:32.990 --> 01:14:35.010
deutlich lang, wird halt deutlich langsamer

01:14:35.010 --> 01:14:36.910
sein als die Matrizen-Multiplikation

01:14:36.910 --> 01:14:38.690
in Python, die halt

01:14:38.690 --> 01:14:40.690
man in eine Zeile schreiben kann, wo man einfach nur schreibt

01:14:40.690 --> 01:14:41.110
A mal B.

01:14:43.350 --> 01:14:44.730
Also C gleich A mal B, ja.

01:14:45.210 --> 01:14:46.690
Und das könnte jetzt für

01:14:46.690 --> 01:14:47.750
manche Leute überraschend sein, weil

01:14:47.750 --> 01:14:50.790
wenn quasi sich jemand

01:14:50.790 --> 01:14:52.350
die Mühe gemacht hat, irgendein Problem,

01:14:52.910 --> 01:14:54.350
also wirklich das letzte

01:14:54.350 --> 01:14:56.570
Kränzchen-Performance rauszuoptimieren, und

01:14:56.570 --> 01:14:58.150
es eine Bibliothek gibt, die halt

01:14:58.150 --> 01:15:00.650
dieses Verfahren dann benutzt,

01:15:00.650 --> 01:15:02.490
sozusagen in Python, und man das in Python

01:15:02.490 --> 01:15:04.230
benutzen kann, dann ist das halt auch in Python sehr schnell.

01:15:04.790 --> 01:15:06.930
Und gerade diese ganzen Berechnungsgeschichten,

01:15:07.050 --> 01:15:08.350
Certificate Computing

01:15:08.350 --> 01:15:10.690
Zeugs, das ist halt alles sehr schnell

01:15:10.690 --> 01:15:11.110
in Python.

01:15:12.730 --> 01:15:13.510
Wie heißt das, C-Types?

01:15:14.170 --> 01:15:16.530
Nein, C-Types ist nochmal

01:15:16.530 --> 01:15:17.230
eine andere...

01:15:17.230 --> 01:15:18.850
Entschuldigt, bitte.

01:15:19.850 --> 01:15:21.390
Es ist auch so, dass man quasi

01:15:21.390 --> 01:15:22.430
relativ einfach

01:15:22.430 --> 01:15:25.650
eine Geschichte, mit der man

01:15:25.650 --> 01:15:27.850
dann halt gut optimieren kann,

01:15:27.910 --> 01:15:29.570
ist auch sowas wie Sighten zum Beispiel.

01:15:29.710 --> 01:15:31.510
Also C-Types ist eher zum Anbieten von

01:15:31.510 --> 01:15:33.230
irgendwelchen C-Bibliotheken, aber

01:15:33.230 --> 01:15:35.910
es gibt

01:15:35.910 --> 01:15:37.750
sowas wie, das haben wir

01:15:37.750 --> 01:15:39.170
vergessen, das müssen wir vielleicht gleich nochmal,

01:15:39.710 --> 01:15:40.770
es gibt nicht nur den

01:15:40.770 --> 01:15:43.770
C-Python-Interpreter,

01:15:44.190 --> 01:15:45.410
es gibt auch andere Python-Interpreter

01:15:45.410 --> 01:15:47.630
und es gibt halt auch so Dinge wie Sighten, die

01:15:47.630 --> 01:15:49.530
Python, beziehungsweise

01:15:49.530 --> 01:15:51.510
Python-ähnlichen Code nehmen und

01:15:51.510 --> 01:15:53.690
den in C verwandeln.

01:15:54.630 --> 01:15:55.730
Ja, also das haben wir ja gar nicht

01:15:55.730 --> 01:15:57.550
vergessen, dann erklären wir das doch einfach jetzt. Genau, genau.

01:15:58.170 --> 01:15:59.650
Wenn ich jetzt irgendwas schnell

01:15:59.650 --> 01:16:01.550
machen möchte, dann gibt es halt die Möglichkeit, okay, ich

01:16:01.550 --> 01:16:03.150
schreibe das jetzt einfach in C und

01:16:03.150 --> 01:16:05.590
muss mich da ein paar Konventionen

01:16:05.590 --> 01:16:07.210
halten, dann kompiliere ich das und dann

01:16:07.210 --> 01:16:09.650
quasi importiere ich, kann ich

01:16:09.650 --> 01:16:11.670
das halt in Python auch wieder importieren

01:16:11.670 --> 01:16:13.470
als wäre es ein Python-Modul oder so und dann halt verwenden.

01:16:14.390 --> 01:16:15.610
Aber ich schreibe einfach C-Code

01:16:15.610 --> 01:16:17.910
und dann wird das in Python geladen, ich benutze die Python-Syntax

01:16:17.910 --> 01:16:19.510
und bin schnell dabei, oder? Ja, ja,

01:16:19.530 --> 01:16:21.370
Ja, so ungefähr. Das ist halt ein bisschen Arbeit.

01:16:21.890 --> 01:16:22.450
Aber das geht.

01:16:25.390 --> 01:16:27.010
Und das ist vor allen Dingen halt auch so ein bisschen,

01:16:27.150 --> 01:16:29.110
man muss sich da einlesen, wie man so ein

01:16:29.110 --> 01:16:29.990
C-Modul schreibt und so.

01:16:32.490 --> 01:16:33.530
Aber was man auch

01:16:33.530 --> 01:16:34.770
machen kann, ist, man schreibt halt

01:16:34.770 --> 01:16:37.130
das, was man auch immer mal machen möchte,

01:16:37.770 --> 01:16:39.510
in einem Python-ähnlichen

01:16:39.510 --> 01:16:40.570
Dialekt.

01:16:42.270 --> 01:16:43.470
Wo man halt auch,

01:16:44.030 --> 01:16:45.650
man kann einfach so Python hinschreiben.

01:16:45.770 --> 01:16:47.430
Python-ähnlicher Dialekt, das haben wir ja schon ganz viel

01:16:47.430 --> 01:16:48.930
Programmiersprache, jetzt gibt es ja nur noch Dialekte.

01:16:49.050 --> 01:16:51.910
Also der wesentliche Unterschied ist, dass man

01:16:51.910 --> 01:16:53.770
dazuschreiben kann, was die Typen sind, dass man zum Beispiel

01:16:53.770 --> 01:16:55.430
schreibt, also dies ist jetzt ein Integer

01:16:55.430 --> 01:16:57.770
oder das hier ist ein Float und so.

01:16:58.510 --> 01:16:59.630
Also man schreibt halt quasi noch

01:16:59.630 --> 01:17:02.150
Typen mit zu den Variablen.

01:17:02.390 --> 01:17:03.950
Wie wir das eben schon hatten, also das mit der

01:17:03.950 --> 01:17:05.290
neuen Version jetzt schon so drin ist.

01:17:05.410 --> 01:17:07.470
Es gibt Type-Annotationen, aber die sind halt leider noch mal was anderes.

01:17:07.630 --> 01:17:09.450
Das funktioniert nicht mit Type-Annotationen.

01:17:09.470 --> 01:17:10.730
Okay, das heißt nochmal ein bisschen umdrehen.

01:17:10.730 --> 01:17:12.210
Ja, könnte man vielleicht irgendwann auch machen,

01:17:12.390 --> 01:17:13.150
das gibt es aber noch nicht.

01:17:14.590 --> 01:17:16.790
Jedenfalls, wenn man das jetzt

01:17:16.790 --> 01:17:18.710
so hingeschrieben hat, in diesem Dialekt,

01:17:18.770 --> 01:17:27.290
sehr einfach ist und aussieht wie Python quasi, mit Typen dran, dann kann man das in C kompilieren

01:17:27.290 --> 01:17:32.270
und zwar in C, dass man dann hinterher wieder so kompilieren kann, dass es ein C-Modul ist,

01:17:32.270 --> 01:17:35.670
dass man dann wieder importieren kann. So dass man halt das eigentliche C nie so

01:17:35.670 --> 01:17:37.600
Man muss eigentlich nur Python, kleiner Dialekt

01:17:37.600 --> 01:17:39.640
schreiben und schon ist es C und dann

01:17:39.640 --> 01:17:41.680
wird es schnell. Genau, genau. So schnell wie

01:17:41.680 --> 01:17:43.240
C. Und ist dann so schnell wie C.

01:17:44.360 --> 01:17:45.720
Problem gelöst, würde ich sagen.

01:17:45.840 --> 01:17:47.480
Genau, und das ist halt schon sehr cool. Das kann man sogar

01:17:47.480 --> 01:17:49.260
in Jupyter-Notebooks, kann man das

01:17:49.260 --> 01:17:51.240
als Cell-Magic, kann man das schreibt man einfach

01:17:51.240 --> 01:17:53.360
Prozent-Prozent-Zeiten, schreibt dann halt

01:17:53.360 --> 01:17:55.380
irgendwie die Funktion rein mit

01:17:55.380 --> 01:17:57.520
Annotationen der Typen und dann hat man etwas,

01:17:57.620 --> 01:17:59.720
was halt so schnell wie C ist, halt direkt

01:17:59.720 --> 01:18:01.460
so ohne, dass man das irgendwie neu starten muss

01:18:01.460 --> 01:18:03.100
oder so. Wusch. Einfach so da.

01:18:03.100 --> 01:18:04.380
Das ist halt schon sehr...

01:18:04.380 --> 01:18:06.680
Das sind, ja, also ich meine,

01:18:07.420 --> 01:18:08.720
wenn man solche Sachen Leuten zeigt,

01:18:08.840 --> 01:18:10.100
die sagen, Python ist langsam, dann

01:18:10.100 --> 01:18:12.520
oh, genau.

01:18:13.200 --> 01:18:14.320
Also man kann,

01:18:14.600 --> 01:18:16.420
wenn man es darauf anlegt, kann man sehr schnell werden.

01:18:16.660 --> 01:18:18.500
Auch in diesen Geschichten kann man halt auch

01:18:18.500 --> 01:18:20.760
diesen Global Interpreter-Log deaktivieren.

01:18:21.000 --> 01:18:22.460
Und dann kann man halt sagen so, okay,

01:18:22.560 --> 01:18:24.300
ich weiß ja genau, was ich tue, ich deaktiviere das Ding.

01:18:25.860 --> 01:18:26.100
Also

01:18:26.100 --> 01:18:28.000
da ist das alles nicht mehr so relevant.

01:18:29.560 --> 01:18:30.600
Also da kann ich

01:18:30.600 --> 01:18:32.280
dann auch mit mehreren Kernen rechnen? Genau.

01:18:32.280 --> 01:18:34.260
Da kann ich dann auch quasi das, was ich tun möchte,

01:18:34.340 --> 01:18:35.320
mehrere Prozessoren verteilen.

01:18:36.360 --> 01:18:38.440
Passiert auch. Also wenn ich jetzt irgendwie, keine Ahnung,

01:18:38.500 --> 01:18:40.360
eben eine Matrizenmultiplikation, jetzt weiß ich gar nicht,

01:18:40.420 --> 01:18:41.940
ob das meine, wenn ich irgendwelche Dinge auf

01:18:41.940 --> 01:18:43.720
NumPy-Arrays mache oder in Pandas mache,

01:18:44.460 --> 01:18:45.840
manchmal, ja, nicht immer,

01:18:46.260 --> 01:18:48.160
verteilt es dann halt den Kram automatisch

01:18:48.160 --> 01:18:50.420
halt auf alle Prozessoren,

01:18:50.480 --> 01:18:50.960
die ich da habe.

01:18:52.220 --> 01:18:54.520
Ja, ansonsten gibt es auch jede Menge schöne Bibliotheken,

01:18:54.600 --> 01:18:56.760
die man da benutzen kann für Data-Science-

01:18:56.760 --> 01:18:58.260
Geschichten, ist da halt zum Beispiel

01:18:58.260 --> 01:19:00.400
Dask sehr zu empfehlen, kann man...

01:19:00.400 --> 01:19:01.340
Dask? Ja.

01:19:02.340 --> 01:19:02.980
Heißt so...

01:19:02.980 --> 01:19:05.100
CTAsk. Dask. Ich weiß gar nicht

01:19:05.100 --> 01:19:06.560
genau, wofür das steht. Oder Task.

01:19:07.120 --> 01:19:09.020
Statt Dask. Task, nur D.

01:19:09.520 --> 01:19:10.700
Ja. Da ist ein Dask.

01:19:11.040 --> 01:19:12.160
Ja, okay, lassen wir das.

01:19:13.440 --> 01:19:14.820
Ja, genau.

01:19:15.600 --> 01:19:15.960
Und

01:19:15.960 --> 01:19:18.960
ja, es gibt auch so, da gibt es noch diverse andere

01:19:18.960 --> 01:19:20.200
Geschichten. Es gibt zum Beispiel Number.

01:19:21.240 --> 01:19:23.040
Das ist halt ein Dekorator, den schreibt man

01:19:23.040 --> 01:19:25.140
drüber und dann macht das halt so Just-in-Time

01:19:25.140 --> 01:19:27.000
Kompilierung, wie man das halt auch

01:19:27.000 --> 01:19:28.100
von Java vielleicht kennt.

01:19:29.620 --> 01:19:31.000
Das kann Dinge auch total

01:19:31.000 --> 01:19:32.960
beschneidigen. Da muss man gar nichts ändern. Also auch

01:19:32.960 --> 01:19:34.620
da kann man dann wieder Typen dazuschreiben oder so.

01:19:35.120 --> 01:19:36.960
Aber auch da oft ist es so, man schreibt

01:19:36.960 --> 01:19:38.820
es einfach drüber und die Funktion wird viel, viel schneller.

01:19:40.560 --> 01:19:40.860
Und...

01:19:40.860 --> 01:19:42.740
PyPy oder sowas habe ich noch. PyPy, genau, das ist dann

01:19:42.740 --> 01:19:44.900
ein anderer Interpreter, den man verwenden kann.

01:19:45.160 --> 01:19:46.220
Der hat dann diverse Probleme nicht.

01:19:46.380 --> 01:19:50.320
Der macht auch so

01:19:50.320 --> 01:19:52.700
Just-in-Time-Kompilierungsgeschichten

01:19:52.700 --> 01:19:54.600
und so. Und ist dadurch

01:19:54.600 --> 01:19:56.760
viel schneller. PyPy ist ein bisschen problematisch.

01:19:56.880 --> 01:19:58.940
Das hat irgendwie...

01:19:58.940 --> 01:20:00.680
Ist nicht mehr so auf der aktuellsten Version

01:20:00.680 --> 01:20:01.840
von Python und

01:20:01.840 --> 01:20:04.100
es so ein bisschen leidet darunter, dass da nicht so

01:20:04.100 --> 01:20:05.160
genug Leute dabei sind.

01:20:06.640 --> 01:20:07.680
War es mal aktiv an diesem Projekt?

01:20:09.060 --> 01:20:10.160
Es gibt auch Stackless

01:20:10.160 --> 01:20:12.040
Python. Also es gibt noch diverse

01:20:12.040 --> 01:20:14.340
andere Interpreter. Es gibt nicht nur den C-Python-Interpreter.

01:20:15.380 --> 01:20:16.180
Aber man muss schon

01:20:16.180 --> 01:20:18.380
sagen, der C-Python-Interpreter ist natürlich eigentlich derjenige,

01:20:18.520 --> 01:20:20.060
den die Leute so verwenden und den man

01:20:20.060 --> 01:20:21.860
halt kennt. Und halt auch die Referenz

01:20:21.860 --> 01:20:24.200
Implementation. Aber wenn man jetzt

01:20:24.200 --> 01:20:26.120
in einem bestimmten Szenario mehr Performance braucht,

01:20:26.200 --> 01:20:27.880
dann kann es durchaus sinnvoll sein, da halt sowas wie

01:20:27.880 --> 01:20:30.220
PyPy zu verwenden oder so. Also trau niemals den Benchmark,

01:20:30.280 --> 01:20:31.060
den du nicht selbst gefälscht hast.

01:20:31.840 --> 01:20:33.800
Ja, genau.

01:20:34.660 --> 01:20:36.080
Ja, das ist auch so einer der Mythen.

01:20:36.440 --> 01:20:37.380
Irgendwie Python ist langsam.

01:20:37.680 --> 01:20:38.420
Was haben wir denn noch so?

01:20:43.840 --> 01:20:44.280
Ja.

01:20:45.740 --> 01:20:47.860
Also wir wissen, dass Python jetzt einfach ist.

01:20:47.980 --> 01:20:50.200
Wir wissen, dass Python nicht langsam ist.

01:20:50.320 --> 01:20:51.520
Oder nicht langsam sein muss.

01:20:51.840 --> 01:20:52.640
Nicht langsam sein muss.

01:20:52.720 --> 01:20:53.740
Wir wissen, dass man für Python

01:20:53.740 --> 01:20:55.900
ja trotzdem ganz viele mächtige Werkzeuge benutzen kann,

01:20:56.000 --> 01:20:57.740
wenn man dann irgendwann mal gelernt hat, wie.

01:21:00.080 --> 01:21:00.520
Ja.

01:21:01.840 --> 01:21:02.360
Ähm...

01:21:02.360 --> 01:21:03.000
Fällt dir noch was ein?

01:21:05.580 --> 01:21:06.020
Ähm...

01:21:06.020 --> 01:21:08.460
Warum hat Python so lange

01:21:08.460 --> 01:21:10.640
gebraucht, bis es sich so durchsetzte?

01:21:10.640 --> 01:21:12.040
Was glaubst du? Das ist eine gute Frage.

01:21:12.780 --> 01:21:14.500
Ich hätte damit auch gar nicht gerechnet, dass es jetzt

01:21:14.500 --> 01:21:16.500
passiert, dass mich jemand quasi

01:21:16.500 --> 01:21:18.760
am Anfang meiner Python-Begeisterung

01:21:18.760 --> 01:21:20.540
gefragt hätte, ob ich glaube, dass sich das mal so

01:21:20.540 --> 01:21:22.220
durchsetzt. Dann hätte ich gesagt, ja, auf jeden Fall.

01:21:22.740 --> 01:21:24.600
Und ich hätte wahrscheinlich geschätzt, dass es

01:21:24.600 --> 01:21:26.160
viel weniger lang dauert.

01:21:26.580 --> 01:21:26.700
Aha.

01:21:29.520 --> 01:21:30.620
Und jetzt da angekommen ist, sagst du,

01:21:30.640 --> 01:21:32.460
es gibt auch gar keine Alternative, also auch Go, sagst du,

01:21:32.520 --> 01:21:34.460
das war ganz fancy stuff, aber...

01:21:34.460 --> 01:21:36.680
Nein, das ist auch alles schön, also ich meine, ich finde Go auch toll,

01:21:36.840 --> 01:21:37.800
ich finde auch Rust toll,

01:21:38.640 --> 01:21:40.280
das hat alles schon so, das sind halt

01:21:40.280 --> 01:21:42.320
vor allen Dingen andere Trade-offs und ich meine, gut,

01:21:42.400 --> 01:21:44.200
das sind auch alles manchmal so sehr viel modernere,

01:21:44.420 --> 01:21:45.900
also ich würde sagen, Go ist stark,

01:21:46.100 --> 01:21:48.220
die Go-Syntax ist sehr stark inspiriert von Python,

01:21:51.160 --> 01:21:52.200
die also, ja,

01:21:52.980 --> 01:21:54.580
sind teilweise sehr, sehr viel,

01:21:54.800 --> 01:21:56.420
also es sind sowohl Go wie auch Rust

01:21:56.420 --> 01:21:58.420
sind halt sehr viel jünger als Python, insofern

01:21:58.420 --> 01:22:00.400
ist es halt

01:22:00.400 --> 01:22:02.000
auch vielleicht nicht unbedingt direkt miteinander

01:22:02.000 --> 01:22:03.680
vergleichbar, aber

01:22:03.680 --> 01:22:06.260
Go ist halt ein schmaleren

01:22:06.260 --> 01:22:08.280
Einsatzzweck, würde ich jetzt mal so

01:22:08.280 --> 01:22:09.040
denken.

01:22:10.220 --> 01:22:12.360
Vielleicht ändert sich das auch noch irgendwann. Und zwar, also wofür würdest du

01:22:12.360 --> 01:22:14.080
jetzt Go benutzen? Naja, Systemprogrammierung

01:22:14.080 --> 01:22:16.360
und halt Sachen, wo man

01:22:16.360 --> 01:22:19.500
quasi

01:22:19.500 --> 01:22:22.460
viel I.O. hat und viel

01:22:22.460 --> 01:22:23.540
CPU braucht.

01:22:25.680 --> 01:22:26.120
Das ist

01:22:26.120 --> 01:22:28.480
also wenn man jetzt zum Beispiel

01:22:28.480 --> 01:22:30.020
sowas wie einen Datenbank-Server schreiben will oder so.

01:22:30.140 --> 01:22:32.320
Wobei ich nicht weiß, ob Go da wirklich, also ich weiß

01:22:32.320 --> 01:22:34.320
auch nicht, ob das jemand schon mal gemacht hat, aber das könnte man eventuell

01:22:34.320 --> 01:22:34.560
tun.

01:22:36.120 --> 01:22:38.300
Also viel Sachen machen muss,

01:22:38.320 --> 01:22:40.200
heißt tatsächlich Input, Output die ganze Zeit.

01:22:40.220 --> 01:22:41.260
Input, Output plus

01:22:41.260 --> 01:22:44.080
viel CPU braucht. Also wenn man nur Input, Output

01:22:44.080 --> 01:22:46.040
machen muss und IOMultiplexen, das geht

01:22:46.040 --> 01:22:47.360
mit Python auch total super. Dann nimmt man

01:22:47.360 --> 01:22:49.840
ASIC.io oder die neuen

01:22:49.840 --> 01:22:51.520
Frameworks, die es da gibt, weiß ich nicht,

01:22:52.200 --> 01:22:53.180
Trio da oder

01:22:53.180 --> 01:22:55.720
was auch immer.

01:22:57.220 --> 01:22:58.440
Frito von David Beasley,

01:22:58.780 --> 01:23:01.160
Das war auch sehr toll. Aber ich glaube, das ist nur ein

01:23:01.160 --> 01:23:02.800
Dialekt von R-Sync.io.

01:23:03.620 --> 01:23:04.160
Ja, genau.

01:23:04.900 --> 01:23:06.900
Die sind auch relativ kompatibel zueinander.

01:23:08.480 --> 01:23:08.820
Das ist

01:23:08.820 --> 01:23:11.160
genau. Damit geht das auch alles

01:23:11.160 --> 01:23:13.380
total super. Dafür brauche ich jetzt nicht

01:23:13.380 --> 01:23:15.000
da

01:23:15.000 --> 01:23:17.440
ist der

01:23:17.440 --> 01:23:18.820
GIL nicht unbedingt ein Problem.

01:23:19.980 --> 01:23:21.020
Der Global Interpreter Log.

01:23:21.020 --> 01:23:22.720
Genau. Ich kann auch mehrere Prozesse

01:23:22.720 --> 01:23:24.780
starten oder so. Aber wenn ich jetzt so etwas

01:23:24.780 --> 01:23:26.780
habe wie eine Datenbank oder so, dann ist das mit

01:23:26.780 --> 01:23:28.580
mehreren Prozessen unter Umständen blöd, wenn ich jetzt

01:23:28.580 --> 01:23:31.360
also da könnte es sein, dass es sinnvoll ist

01:23:31.360 --> 01:23:33.200
ja, also, dass ich halt

01:23:33.200 --> 01:23:35.300
einen Prozess habe, der halt auf vielen

01:23:35.300 --> 01:23:37.080
Prozessoren läuft und dann auch

01:23:37.080 --> 01:23:38.840
IOMäßig irgendwie ganz viel nach draußen macht

01:23:38.840 --> 01:23:40.620
und da wäre Go wahrscheinlich super

01:23:40.620 --> 01:23:42.980
ja, oder Rust

01:23:42.980 --> 01:23:45.000
hat halt auch schöne Eigenschaften, dass halt da irgendwie

01:23:45.000 --> 01:23:46.880
diverse Sachen garantiert

01:23:46.880 --> 01:23:48.600
sind zur Compile-Zeit, das ist halt toll

01:23:48.600 --> 01:23:50.860
ja, aber

01:23:50.860 --> 01:23:52.860
Moment, jetzt musst du noch mal kurz

01:23:52.860 --> 01:23:54.680
erklären, es sind bestimmte Sachen garantiert zur

01:23:54.680 --> 01:23:56.900
Compile-Zeit, da die bei Python nicht sind

01:23:56.900 --> 01:23:58.960
Da musst du jetzt ganz kurz nochmal versuchen,

01:23:59.400 --> 01:24:00.900
das so zusammenzufassen. Das habe ich jetzt nämlich noch

01:24:00.900 --> 01:24:02.720
nicht so ganz durchblickt. Ach, ich weiß nicht.

01:24:02.800 --> 01:24:04.360
Vielleicht führt das auch ein bisschen zu weit.

01:24:04.500 --> 01:24:06.740
Bei Rust ist es halt so, dass

01:24:06.740 --> 01:24:08.920
man quasi garantieren kann, dass es keine Speicher-Lags

01:24:08.920 --> 01:24:09.360
gibt und so.

01:24:11.500 --> 01:24:12.820
Bei Python sollte das jetzt auch nicht

01:24:12.820 --> 01:24:14.220
passieren. Wenn man das schafft,

01:24:15.260 --> 01:24:16.780
irgendwie, außer dadurch

01:24:16.780 --> 01:24:18.720
den Speicher wirklich zu verbrauchen, also wenn man einfach nur

01:24:18.720 --> 01:24:20.700
irgendwas macht und also irgendwas

01:24:20.700 --> 01:24:22.720
erzeugt, irgendwas wieder wegschmeißt und

01:24:22.720 --> 01:24:24.420
trotzdem quasi der

01:24:24.420 --> 01:24:26.640
Prozess, der Speicher des Prozesses, den man

01:24:26.640 --> 01:24:28.280
da halt gestartet hat und immer größer wird,

01:24:28.680 --> 01:24:29.800
dann hat man halt einen Bug gefunden.

01:24:30.080 --> 01:24:32.020
So gibt es natürlich auch immer wieder.

01:24:33.100 --> 01:24:34.680
Sollte aber auch nicht passieren in Python.

01:24:35.720 --> 01:24:36.540
Aber es gibt da nicht so

01:24:36.540 --> 01:24:37.200
harte Garantien.

01:24:38.760 --> 01:24:40.200
Und man kann es auch kaputt machen, wenn man

01:24:40.200 --> 01:24:41.840
es drauf anlegt. Irgendwelchen Unsinn anstellen.

01:24:42.040 --> 01:24:44.080
Einen Gabel-Kollektor importieren, dann drauf referenzieren,

01:24:44.120 --> 01:24:44.960
auf die Objekte, die man da findet.

01:24:46.140 --> 01:24:48.480
Ja, man kann da beliebig kaputte

01:24:48.480 --> 01:24:49.360
Sachen natürlich machen.

01:24:51.300 --> 01:24:51.660
Genau.

01:24:53.100 --> 01:24:54.260
Ja, aber

01:24:54.260 --> 01:24:56.260
in diesem Anwendungsfall, dass man viel

01:24:56.260 --> 01:24:58.280
I.O. und viel Prozessor gleichzeitig braucht,

01:24:58.580 --> 01:25:00.100
den haben glaube ich gar nicht so viele Leute.

01:25:00.360 --> 01:25:01.580
Insofern ist es halt auch so, dass

01:25:01.580 --> 01:25:04.340
ich finde, das ist der richtige Schritt sozusagen

01:25:04.340 --> 01:25:05.980
oder ich finde, das ist ein sehr

01:25:05.980 --> 01:25:07.840
netter Punkt quasi.

01:25:08.140 --> 01:25:09.980
Wenn man jetzt Reference Counting in Python

01:25:09.980 --> 01:25:11.760
hat, man hat halt

01:25:11.760 --> 01:25:14.080
gute Single Thread Performance,

01:25:14.220 --> 01:25:16.240
man hat sehr gutartiges Latenzverhalten,

01:25:16.520 --> 01:25:18.240
das alles, verhält sich alles sehr

01:25:18.240 --> 01:25:18.540
schön.

01:25:20.580 --> 01:25:22.120
Gut skalierbar damit dann auch.

01:25:22.380 --> 01:25:24.300
Genau, opfert damit halt sozusagen,

01:25:24.300 --> 01:25:25.540
dass es auf mehreren Prozessoren laufen

01:25:25.540 --> 01:25:28.000
kann. Aber den Fall, dass man

01:25:28.000 --> 01:25:29.820
jetzt Software hat, die tatsächlich auf vielen

01:25:29.820 --> 01:25:30.860
Prozessoren laufen muss,

01:25:32.060 --> 01:25:33.820
den haben die meisten Programmierer gar nicht.

01:25:34.200 --> 01:25:36.020
Dieser Anwendungsfall trifft ja nur

01:25:36.020 --> 01:25:38.080
einen kleinen Teil. Spieleprogrammierer.

01:25:39.100 --> 01:25:40.260
Spieleprogrammierer und unter Umständen

01:25:40.260 --> 01:25:41.920
Leute, die einen Datenbank-Server schreiben

01:25:41.920 --> 01:25:44.080
oder einen Web-Server, nicht mal.

01:25:46.820 --> 01:25:47.880
Ich weiß es gar nicht.

01:25:47.920 --> 01:25:50.620
Mir fällt es sogar tatsächlich schwer, mir da

01:25:50.620 --> 01:25:52.960
Anwendungsfälle zu bauen,

01:25:53.020 --> 01:25:54.420
die das irgendwie erfordern.

01:25:55.540 --> 01:25:57.240
insofern ist halt diese Beschränkung

01:25:57.240 --> 01:25:58.480
nicht so schlimm, wie sie aussieht.

01:25:58.960 --> 01:26:01.000
Und in Java, das sieht total toll aus

01:26:01.000 --> 01:26:03.180
auf dem Papier. Irgendwie kann auf vielen Prozessoren

01:26:03.180 --> 01:26:03.660
laufen.

01:26:05.260 --> 01:26:07.140
In der Praxis ist es aber blöd. Single-Thread-Performance

01:26:07.140 --> 01:26:07.780
ist nicht gut.

01:26:09.040 --> 01:26:10.800
Also das, was halt die meisten Leute interessiert,

01:26:10.860 --> 01:26:13.000
wenn sie jetzt irgendwas starten, ein Programm starten

01:26:13.000 --> 01:26:13.840
und das tut dann irgendwas,

01:26:14.000 --> 01:26:16.340
das ist halt langsamer.

01:26:16.740 --> 01:26:18.620
Das ist halt genau der Grund, warum, wenn ich jetzt

01:26:18.620 --> 01:26:20.900
in so einer IntelliJ IDE auf den Kopf drücke,

01:26:21.060 --> 01:26:22.840
dann sich das halt irgendwie alles so zäh anfühlt,

01:26:22.840 --> 01:26:24.460
weil Single-Thread-Performance nicht so toll.

01:26:25.000 --> 01:26:29.360
Und Latenz nicht

01:26:29.360 --> 01:26:31.560
vorhersagbar, klingt nicht so schlimm, ist aber in der Praxis

01:26:31.560 --> 01:26:32.480
doof, weil manchmal

01:26:32.480 --> 01:26:35.360
zur falschen Zeit

01:26:35.360 --> 01:26:37.340
irgendwie, wenn man mehr Latenz braucht, kann halt

01:26:37.340 --> 01:26:38.940
sein, dass es halt unter Umständen sehr teuer wird.

01:26:40.220 --> 01:26:41.480
Je nachdem, was man da für Services

01:26:41.480 --> 01:26:41.880
betreibt.

01:26:43.720 --> 01:26:45.400
Das sind Dinge, die

01:26:45.400 --> 01:26:46.980
hören sich harmlos an, sind aber ziemlich schlimm.

01:26:47.460 --> 01:26:49.300
Während in Python das hört sich ziemlich schlimm an, ist

01:26:49.300 --> 01:26:51.360
aber gar nicht so furchtbar. Und wenn man dann tatsächlich

01:26:51.360 --> 01:26:53.200
so eins von diesen Problemen hat, dann kann man halt da

01:26:53.200 --> 01:26:55.100
drum herum arbeiten, oft indem man dann halt

01:26:55.100 --> 01:26:57.080
viele Prozesse startet. Gut,

01:26:57.140 --> 01:26:59.420
dann muss man irgendwie dazwischen kommunizieren,

01:26:59.540 --> 01:27:00.980
muss irgendwie vielleicht Chat-Memory haben

01:27:00.980 --> 01:27:02.080
oder solche Sachen, aber

01:27:02.080 --> 01:27:05.160
es geht. Selbst wenn man

01:27:05.160 --> 01:27:07.060
jetzt in einer Sprache ist, wo es theoretisch möglich ist, das alles

01:27:07.060 --> 01:27:09.060
in einem Prozess zu machen, ist es auch oft nicht so eine

01:27:09.060 --> 01:27:10.440
gute Idee, weil

01:27:10.440 --> 01:27:13.040
das dann oft sehr kompliziert wird

01:27:13.040 --> 01:27:14.720
und man halt auch

01:27:14.720 --> 01:27:16.420
ordentlich locken muss und

01:27:16.420 --> 01:27:19.240
ja, wirklich sich vorzustellen,

01:27:19.340 --> 01:27:20.460
was passiert, wenn

01:27:20.460 --> 01:27:23.020
ein Prozess auf mehreren CPU-

01:27:23.020 --> 01:27:24.560
parallel unterschiedliche Dinge tut,

01:27:26.760 --> 01:27:27.560
das ist

01:27:27.560 --> 01:27:29.220
einfach für die

01:27:29.220 --> 01:27:30.420
allermeisten Programmierer überfordert.

01:27:30.640 --> 01:27:31.860
Mich überfordert das total.

01:27:32.700 --> 01:27:34.860
Du kannst nicht einfach multidimensionale Matrizen

01:27:34.860 --> 01:27:35.760
in deinem Kopf schungieren.

01:27:35.760 --> 01:27:36.680
Ja, also

01:27:36.680 --> 01:27:39.600
das ist so. Und wenn man jetzt

01:27:39.600 --> 01:27:41.380
sozusagen etwas, was

01:27:41.380 --> 01:27:43.480
zu schwierig für die meisten Leute ist und selten

01:27:43.480 --> 01:27:45.180
gebraucht wird, sagt,

01:27:45.400 --> 01:27:47.220
das ist etwas, auf das optimieren wir hin,

01:27:47.280 --> 01:27:49.480
dann ist das irgendwie einfach, naja, ich weiß nicht,

01:27:49.520 --> 01:27:50.140
ob das so sinnvoll ist.

01:27:51.560 --> 01:27:52.740
Wenn ihr anderer Meinung seid,

01:27:52.780 --> 01:27:53.840
schreibt eine E-Mail an

01:27:53.840 --> 01:27:55.580
handels-pipeline-podcast.de

01:27:55.580 --> 01:27:57.380
Ich bin schon gespannt.

01:27:57.380 --> 01:28:00.420
Das ist jetzt nicht die reine Wahrheit,

01:28:00.860 --> 01:28:02.340
sondern es ist natürlich sehr gefärbt.

01:28:02.720 --> 01:28:03.580
Ich mag halt Python, aber

01:28:03.580 --> 01:28:04.960
ja.

01:28:06.440 --> 01:28:08.040
Ich finde, die haben da einfach einen sehr schönen

01:28:08.040 --> 01:28:10.340
Sweet Spot, quasi.

01:28:11.500 --> 01:28:12.660
Klingt, als ist das eine Sprache,

01:28:12.740 --> 01:28:14.140
die auch zukunftsträchtig durchläuft ist.

01:28:14.580 --> 01:28:16.080
Achso, hatten wir eigentlich das

01:28:16.080 --> 01:28:17.900
Zen auf Python schon?

01:28:18.060 --> 01:28:19.820
Nein, das haben wir noch nicht gemacht.

01:28:19.940 --> 01:28:22.120
Das wäre jetzt tatsächlich am Ende der Mythen noch der Punkt.

01:28:22.200 --> 01:28:24.080
Vielleicht sollten wir das noch mal kurz...

01:28:24.080 --> 01:28:25.860
Denn auf Python, das hört sich ja sehr philosophisch an,

01:28:25.920 --> 01:28:28.020
so ein bisschen nach fernöstlicher

01:28:28.020 --> 01:28:29.060
Philosophie.

01:28:32.300 --> 01:28:33.820
Wir rufen es gerade auf und

01:28:33.820 --> 01:28:35.720
möchtest du es tatsächlich zitieren?

01:28:36.180 --> 01:28:37.680
Ich denke schon, tatsächlich.

01:28:37.840 --> 01:28:39.660
Man kann sich das auch selber angucken, wenn man einfach

01:28:39.660 --> 01:28:42.100
so Python startet, einfach Python eingibt

01:28:42.100 --> 01:28:43.920
und dann sagt import this,

01:28:43.920 --> 01:28:44.280
dann

01:28:44.280 --> 01:28:47.880
erscheint das und das

01:28:47.880 --> 01:28:49.800
bringt halt so ein bisschen zum Ausdruck, was

01:28:49.800 --> 01:28:51.400
so Python

01:28:51.400 --> 01:28:53.080
besonders macht oder

01:28:53.080 --> 01:28:55.640
wie man Dinge in Python tut und wie sie vielleicht

01:28:55.640 --> 01:28:58.020
ein bisschen anders sind, als man das normalerweise vielleicht gewohnt ist.

01:28:59.500 --> 01:28:59.660
Und

01:28:59.660 --> 01:29:02.000
ja, da sind halt eben

01:29:02.000 --> 01:29:04.020
solche Dinge

01:29:04.020 --> 01:29:05.920
drin, ich weiß nicht, stimmt, die alle durchgehen,

01:29:06.000 --> 01:29:06.940
muss man vielleicht nicht, das ist halt

01:29:06.940 --> 01:29:09.440
besser als...

01:29:09.440 --> 01:29:13.980
Das steht auch am Anfang von der

01:29:13.980 --> 01:29:15.960
Pep-Version,

01:29:15.960 --> 01:29:17.800
kann das auch sein? Also von dem Style-Guide,

01:29:17.880 --> 01:29:20.720
den es für Python auf der offiziellen Seite gibt.

01:29:21.220 --> 01:29:24.060
Ja, weiß ich nicht so genau, aber kann gut sein.

01:29:25.460 --> 01:29:28.580
Ja, dann halt solche Sachen wie explizit ist besser als implizit.

01:29:29.300 --> 01:29:33.360
Man merkt auch dem Ding an, dass es so ein bisschen sich halt in viele Punkte

01:29:33.360 --> 01:29:35.860
sind so Abgrenzungen Richtung Perl, glaube ich.

01:29:38.000 --> 01:29:42.740
Also, ja, einfach ist besser als komplex.

01:29:43.280 --> 01:29:44.740
Komplex ist besser als kompliziert.

01:29:46.460 --> 01:29:48.300
Ja, flach ist besser als

01:29:48.300 --> 01:29:49.780
verschachtelt.

01:29:51.320 --> 01:29:51.400
Ja,

01:29:52.780 --> 01:29:54.120
Spars, weiß ich jetzt gar nicht, wie ich das im Kontext

01:29:54.120 --> 01:29:55.240
übersetzen soll, aber es ist halt

01:29:55.240 --> 01:29:56.420
sozusagen

01:29:56.420 --> 01:30:00.300
ja, Spars is better than

01:30:00.300 --> 01:30:02.200
dense, sozusagen

01:30:02.200 --> 01:30:04.060
lieber übersichtlich als

01:30:04.060 --> 01:30:06.260
Also nicht alles in eine Teile packen. Genau, genau, sozusagen.

01:30:07.380 --> 01:30:07.780
Ja,

01:30:08.540 --> 01:30:09.360
Lesbarkeit zählt.

01:30:10.080 --> 01:30:11.260
Zwischendurch mal leerzeilen lassen,

01:30:11.600 --> 01:30:14.100
Lesbarkeit ungemein. Ja, das ist überhaupt eines

01:30:14.100 --> 01:30:15.980
der Designziele bei Python gewesen, dass man das halt

01:30:15.980 --> 01:30:18.700
weil Code einfach viel

01:30:18.700 --> 01:30:20.000
öfter gelesen als geschrieben wird,

01:30:20.700 --> 01:30:22.820
es vielleicht Sinn macht, das darauf zu optimieren, dass man das gut lesen

01:30:22.820 --> 01:30:24.760
kann. Also wenn euer Nachbar den Abend aus dem Bett klingelt

01:30:24.760 --> 01:30:26.580
und dann noch lesen kann, was er da für einen Tag geschrieben hat,

01:30:26.640 --> 01:30:28.620
dann seid ihr vielleicht bei Python besser aufgehoben als

01:30:28.620 --> 01:30:29.960
bei anderen Sprachen.

01:30:30.460 --> 01:30:33.140
Ja, genau.

01:30:35.000 --> 01:30:36.880
Spezialfälle sind nicht speziell genug,

01:30:37.100 --> 01:30:38.480
um die Regeln zu brechen,

01:30:39.380 --> 01:30:40.720
aber Pragmatismus

01:30:40.720 --> 01:30:42.820
besser oder Practicality ist besser

01:30:42.820 --> 01:30:44.620
als die reine Lehre, als Purity.

01:30:45.060 --> 01:30:46.560
Wie lange schreibst du deine Zeilen?

01:30:48.600 --> 01:30:49.340
Ich habe das

01:30:49.340 --> 01:30:51.200
letztens erst geändert, glaube ich, auf

01:30:51.200 --> 01:30:52.920
130 Zeilen.

01:30:52.920 --> 01:30:55.140
Ich glaube, er hat 79, 130, 150

01:30:55.140 --> 01:30:57.140
irgendwie so. Ich hatte das ganz lange, also bis

01:30:57.140 --> 01:30:58.560
vor kurzem habe ich tatsächlich auch

01:30:58.560 --> 01:31:00.980
79 verwendet. Also das für die

01:31:00.980 --> 01:31:03.160
Leute, die alte Monitore verwenden, die konnten noch nicht mehr

01:31:03.160 --> 01:31:04.980
lesen oder die halt gesharete Terminals verwenden mit

01:31:04.980 --> 01:31:06.840
mehreren Seiten, das ist dann 79. Ja, Terminals sind

01:31:06.840 --> 01:31:07.780
vor allen Dingen, genau.

01:31:09.220 --> 01:31:10.320
Dann ist halt bei

01:31:10.320 --> 01:31:12.140
80 Zeichen Schluss und

01:31:12.140 --> 01:31:14.880
genau, das wäre natürlich, deswegen habe ich das auch

01:31:14.880 --> 01:31:16.900
ganz lange gemacht, aber tatsächlich ist es so, dass

01:31:16.900 --> 01:31:18.860
heutzutage hat man diese

01:31:18.860 --> 01:31:20.360
Anwendungsfälle fast nicht mehr und

01:31:20.360 --> 01:31:22.360
die Monitore...

01:31:22.360 --> 01:31:25.000
Die Zeichen kann man meistens besser coden, oder? Also es sieht besser aus

01:31:25.000 --> 01:31:26.100
auf seinem eigenen Monitor, oder?

01:31:26.960 --> 01:31:28.780
Naja, es ist vor allen Dingen auch, es gibt halt

01:31:28.780 --> 01:31:30.820
viele Fälle, wo es halt schwierig wird, wenn man dann immer

01:31:30.820 --> 01:31:32.700
quasi nach der Anzahl Zeilen

01:31:32.700 --> 01:31:34.540
umbrechen, Zeichen umbrechen

01:31:34.540 --> 01:31:37.120
muss, dann muss man halt komisch rumformatieren.

01:31:38.540 --> 01:31:39.000
Und dann

01:31:39.000 --> 01:31:40.520
lieber schön. Und dann lieber schön.

01:31:40.520 --> 01:31:42.080
Und das bricht halt dann diese

01:31:42.080 --> 01:31:44.540
Begrenzung. So gerade bei Tests, finde ich, ist es

01:31:44.540 --> 01:31:46.300
sehr schwer, das einzuhalten, weil oft

01:31:46.300 --> 01:31:48.760
muss man halt lange Testnamen

01:31:48.760 --> 01:31:50.420
haben und auch, wenn das

01:31:50.420 --> 01:31:52.440
irgendwie sprechend sein soll und gut lesbar sein soll, dann

01:31:52.440 --> 01:31:54.640
Im gleichen Namen noch umgebrochen.

01:31:54.780 --> 01:31:55.960
Uh, ja. Ja, genau.

01:31:55.960 --> 01:31:57.880
Dann kann man eigentlich nicht mehr umrechnen

01:31:57.880 --> 01:31:59.100
und dann wird es halt einfach lang.

01:32:00.320 --> 01:32:01.560
Daher bin ich jetzt, ich weiß nicht,

01:32:01.800 --> 01:32:02.960
130, ich weiß nicht,

01:32:03.460 --> 01:32:05.020
wie die konkrete Zahl ist,

01:32:05.520 --> 01:32:07.180
vielleicht rede ich auch Unsinn. Ich benutze das halt,

01:32:07.260 --> 01:32:09.760
ich formatiere meinen Code auch mit Black, also ich nehme das,

01:32:09.900 --> 01:32:11.840
was Black sagt und kümmere mich

01:32:11.840 --> 01:32:13.720
nicht mehr drum. Ich hoffe, die haben das sich irgendwie gut überlegt

01:32:13.720 --> 01:32:26.320
Und ja, genau, was haben wir noch? Ja, genau, Fehler sollten nicht einfach so still weggeworfen werden, sondern sollten immer sichtbar sein.

01:32:26.560 --> 01:32:31.420
Also wir haben ja auch ein patent assertion oder sowas, ich weiß nicht, ist das ein besonderes Feature oder gibt es das bei Ansprachen auch alles?

01:32:31.420 --> 01:32:40.740
Achso, das ist ein Keyword der Sprache, mit dem man halt überprüfen kann, ob eine Bedingung oder irgendwas wahr ist, was sein sollte.

01:32:40.820 --> 01:32:44.060
Und wenn es halt nicht so ist, dann wirft das halt einen Fehler.

01:32:44.700 --> 01:32:46.120
Das heißt, man kann einen guten Test konzipieren.

01:32:46.120 --> 01:32:48.900
Kann man einen guten Test schreiben, ja.

01:32:51.600 --> 01:32:58.060
Genau, ja, Fehler sollten irgendwie nie schnell weggeworfen werden, außer man bringt sie zum Schweigen irgendwie explizit.

01:32:59.680 --> 01:33:01.680
ja, wenn man irgendwie

01:33:01.680 --> 01:33:03.340
mehrere Dinge zur Auswahl hat,

01:33:04.440 --> 01:33:05.980
ja, sollte man

01:33:05.980 --> 01:33:07.880
irgendwie der Versuchung widerstehen, irgendwie einfach

01:33:07.880 --> 01:33:09.900
zu raten. Es sollte nur

01:33:09.900 --> 01:33:10.500
einen und

01:33:10.500 --> 01:33:14.000
möglichst nur einen, einen einzigen

01:33:14.000 --> 01:33:16.220
offensichtlichen

01:33:16.220 --> 01:33:17.360
Weg geben, wie man Dinge

01:33:17.360 --> 01:33:19.840
tun sollte. Und das ist

01:33:19.840 --> 01:33:21.660
natürlich ganz klar irgendwie ein Ding gegen

01:33:21.660 --> 01:33:23.680
Perl, weil Perl ist halt das Gegenteil davon.

01:33:24.200 --> 01:33:25.660
Es gibt irgendwie, Perl ist auch, ich weiß nicht,

01:33:25.660 --> 01:33:27.940
da gibt es auch einen, du kannst es halt irgendwie

01:33:27.940 --> 01:33:30.640
so machen, es gibt viele Wege

01:33:30.640 --> 01:33:32.460
zum Ziel. Du kannst es halt so machen, wie es dir am besten

01:33:32.460 --> 01:33:34.360
gefällt, was halt dann in der Praxis dummerweise

01:33:34.360 --> 01:33:35.760
dazu führt, dass es jeder irgendwie anders macht.

01:33:36.320 --> 01:33:38.420
Und die Lesbarkeit

01:33:38.420 --> 01:33:40.280
natürlich extrem, weil jeder

01:33:40.280 --> 01:33:42.200
schreibt dann halt sozusagen sein Perl-Idiom

01:33:42.200 --> 01:33:44.380
und man kann halt nicht

01:33:44.380 --> 01:33:46.320
mehr so gut, also bei manchen Leuten

01:33:46.320 --> 01:33:48.320
war es so, wenn man das nicht angeguckt hat, dann

01:33:48.320 --> 01:33:51.820
Was ist das überhaupt?

01:33:52.280 --> 01:33:54.380
Ich meine, teilweise ist es sehr schön. Ich habe auch mal

01:33:54.380 --> 01:33:57.440
ein Buch gelesen

01:33:57.440 --> 01:33:59.400
von Damien

01:33:59.400 --> 01:34:01.180
Conway, ich weiß nicht genau, Higher Order Pearl

01:34:01.180 --> 01:34:03.280
oder sowas, auch ganz viele verrückte Sachen

01:34:03.280 --> 01:34:05.000
gemacht und sowas habe ich dann mit Begeisterung verwendet

01:34:05.000 --> 01:34:07.320
und fand das total toll, was man alles für komplexe

01:34:07.320 --> 01:34:08.680
Geschichten irgendwie da in wenig

01:34:08.680 --> 01:34:10.420
Zeichen irgendwie unterbringen kann.

01:34:11.300 --> 01:34:13.260
Aber ich glaube, ich würde das heute wahrscheinlich nicht mehr

01:34:13.260 --> 01:34:14.980
lesen können und meine Kollegen damals oder

01:34:14.980 --> 01:34:16.940
kurz danach konnten das wahrscheinlich auch nicht mehr lesen.

01:34:17.220 --> 01:34:18.980
Oder du selber, etwa so zwei Stunden später.

01:34:19.020 --> 01:34:21.440
Ja, zwei Stunden später ist es halt dann vorbei und das ist

01:34:21.440 --> 01:34:22.940
nicht ganz so gut, also es ist nicht optimal.

01:34:22.940 --> 01:34:24.880
Das ist irgendwie das, da kann man noch was verbessern.

01:34:24.960 --> 01:34:26.760
Zu lange danach gearbeitet, dann steht man morgens wieder auf

01:34:26.760 --> 01:34:28.160
Oh, was habe ich gestern da gemacht?

01:34:30.760 --> 01:34:34.340
Ja, also das, ja, heutzutage.

01:34:34.600 --> 01:34:36.000
Also dokumentiert immer schön euren Code.

01:34:36.100 --> 01:34:37.640
In Python könnt ihr damit sogar Dock-Tests machen.

01:34:37.940 --> 01:34:40.120
Das heißt, ihr testet dann selber auch das, was ihr dokumentiert.

01:34:40.800 --> 01:34:42.220
Ja, weiß ich aber nicht, ob das so ein schlauer,

01:34:42.420 --> 01:34:44.020
also ob das so eine gute Idee ist.

01:34:44.020 --> 01:34:48.920
Kann man machen, aber ich würde eher explizite Tests schreiben.

01:34:49.440 --> 01:34:50.520
Und ich würde auch PyTests nehmen.

01:34:50.640 --> 01:34:54.820
Es gibt halt auch das eingebaute Test-Framework von Python,

01:34:54.820 --> 01:34:57.100
das sich stark an JUnit,

01:34:57.260 --> 01:34:59.240
glaube ich, an dem Unit-Testing

01:34:59.240 --> 01:35:00.640
von Java irgendwie orientiert hat.

01:35:00.820 --> 01:35:01.620
Ich weiß gar nicht, wie das heißt.

01:35:03.380 --> 01:35:05.000
Und das ist komisch,

01:35:05.060 --> 01:35:06.840
weil es ist halt nicht so richtig Pythonisch,

01:35:07.180 --> 01:35:08.860
weil es

01:35:08.860 --> 01:35:09.840
halt so die Dinge wie

01:35:09.840 --> 01:35:12.640
per Konvention sind halt die

01:35:12.640 --> 01:35:14.780
Methodennamen CamelCase und

01:35:14.780 --> 01:35:16.060
nicht mit Underscore. Normalerweise

01:35:16.060 --> 01:35:18.360
Underscore und da ist aber CamelCase

01:35:18.360 --> 01:35:20.820
mit Java und das ist halt, sieht komisch aus.

01:35:22.120 --> 01:35:22.900
Und diverse

01:35:22.900 --> 01:35:24.500
andere Dinge sind auch eigenartig.

01:35:24.580 --> 01:35:26.260
Das fühlt sich oft eher an, als würde man

01:35:26.260 --> 01:35:28.380
Java schreiben als Python und das ist halt eigentlich nicht schön.

01:35:28.840 --> 01:35:30.520
Und deswegen würde ich eben nicht das eingebaute

01:35:30.520 --> 01:35:32.540
Ding nehmen, nicht das eingebaute Unit-Test-Framework,

01:35:32.680 --> 01:35:34.320
sondern, wobei von den Features her,

01:35:34.420 --> 01:35:35.620
die können quasi das Gleiche.

01:35:35.960 --> 01:35:37.520
Aber du Dock-Testest ja jetzt nicht, oder?

01:35:38.260 --> 01:35:39.300
Dock-Test weiß ich gar nicht.

01:35:39.300 --> 01:35:41.040
Weil die Dock-Test ja einfach in den Dokumentationen

01:35:41.040 --> 01:35:42.160
dann irgendwie die Funktionen testen.

01:35:42.220 --> 01:35:44.820
Ich weiß gar nicht, ob das

01:35:44.820 --> 01:35:49.380
wie die ausgeführt werden

01:35:49.380 --> 01:35:50.700
oder welche Testrunner die dann halt

01:35:50.700 --> 01:35:53.300
ausführt. Wenn man den einstellen

01:35:53.300 --> 01:35:54.800
kann oder so. Das kann auch alles gut.

01:35:55.860 --> 01:35:56.180
Aber

01:35:56.180 --> 01:35:59.080
ich würde halt eher als Testrunner

01:35:59.080 --> 01:36:00.300
eigentlich immer eher PyTest verwenden.

01:36:01.060 --> 01:36:03.120
Ja, ich glaube, PyTest nimmt auch die Dock-Tester mit an

01:36:03.120 --> 01:36:04.440
oder so. Das kann gut sein.

01:36:05.040 --> 01:36:07.140
Ich habe noch nie Dock-Tests. Aber das ist auch alles

01:36:07.140 --> 01:36:09.440
nur geraten. Keine Ahnung, muss man sich mal

01:36:09.440 --> 01:36:10.400
angucken. Vielleicht ist auch alles gut.

01:36:11.980 --> 01:36:13.060
Aber ich würde auf jeden Fall,

01:36:13.260 --> 01:36:15.080
das ist halt auch so eine unoffensichtliche Geschichte,

01:36:15.080 --> 01:36:16.880
wenn man vielleicht anfängt, dann denkt man sich so,

01:36:16.960 --> 01:36:19.080
ach, ich nehme das eingebaute Unit-Test-Framework.

01:36:19.940 --> 01:36:21.020
Die Implementation ist

01:36:21.020 --> 01:36:22.860
hard to explain, it's a bad idea.

01:36:23.240 --> 01:36:25.280
Also ihr seht schon,

01:36:25.720 --> 01:36:27.640
wenn wir jetzt irgendwie anfangen rumzustammeln, dann ist das

01:36:27.640 --> 01:36:29.520
alles totale Grütze, was sie da gebaut haben natürlich.

01:36:30.640 --> 01:36:31.120
Ja.

01:36:32.240 --> 01:36:33.760
Ja, now is better

01:36:33.760 --> 01:36:34.400
than never.

01:36:35.040 --> 01:36:37.880
Ja, also das Do-It, so ein bisschen das Nike-Prinzip,

01:36:38.000 --> 01:36:39.840
also einfach anfangen, machen, Prototyping.

01:36:41.740 --> 01:36:43.800
Ob schon, niemals,

01:36:43.980 --> 01:36:45.720
vielleicht oft besser

01:36:45.720 --> 01:36:47.380
sein könnte als genau jetzt.

01:36:49.300 --> 01:36:50.740
Man weiß es aber nicht so genau.

01:36:51.900 --> 01:36:52.740
Wenn die Implementation

01:36:52.740 --> 01:36:54.180
schlecht zu erklären ist,

01:36:54.280 --> 01:36:56.340
ist eine schlechte Idee. Wenn die Implementation

01:36:56.340 --> 01:36:59.080
leicht zu erklären ist, könnte es

01:36:59.080 --> 01:37:00.280
sein, dass es eine gute Idee ist.

01:37:03.580 --> 01:37:05.160
Namespace ist eine total tolle Idee.

01:37:05.880 --> 01:37:07.080
Sollte man irgendwie mehr von machen.

01:37:08.100 --> 01:37:09.140
Was ist ein Namespace?

01:37:09.240 --> 01:37:10.340
Vielleicht musst du das nochmal kurz sagen.

01:37:15.860 --> 01:37:16.800
Sozusagen ein,

01:37:16.800 --> 01:37:18.200
ja, wie kann man das generell?

01:37:18.900 --> 01:37:20.740
Also die korrekte Übersetzung wäre

01:37:20.740 --> 01:37:22.320
der Namensraum. Also wenn man

01:37:22.320 --> 01:37:25.440
Variable genauso nennt wie die Nachbarvariable,

01:37:25.540 --> 01:37:27.180
dann ist es relativ schwierig, die dann irgendwann

01:37:27.180 --> 01:37:29.020
auseinanderzuhalten, weil wenn man das eine Kind rufkommt,

01:37:29.080 --> 01:37:31.440
entweder beide oder nur eins von beiden oder gar nichts mehr.

01:37:31.700 --> 01:37:33.120
Und dann kann man das mit einem Namensraum

01:37:33.120 --> 01:37:35.040
prefixen, in dem dann halt ein Name

01:37:35.040 --> 01:37:37.180
eindeutig ist. Was so ein bisschen, ich weiß

01:37:37.180 --> 01:37:39.000
nicht, ob da ist eine leichte Ironie, fürchte ich, drin,

01:37:39.120 --> 01:37:40.840
weil bei beiden ist das halt nicht so schön getrennt.

01:37:40.940 --> 01:37:42.140
Und wenn man jetzt zum Beispiel

01:37:42.140 --> 01:37:45.200
irgendein Modul-Import-Stern sagt,

01:37:45.200 --> 01:37:47.180
dann überschreitet einem das gnadenlos halt

01:37:47.180 --> 01:37:49.160
irgendwie Dinge,

01:37:49.340 --> 01:37:50.540
die man selber definiert hat vielleicht

01:37:50.540 --> 01:37:52.500
oder aus anderen Modulen oder so.

01:37:53.240 --> 01:37:54.980
Man kann auch übrigens die ganze Standardbibliothek

01:37:54.980 --> 01:37:56.460
überschreiben, wenn man einfach den Namen verwendet.

01:37:56.680 --> 01:37:58.620
Ja, kann man alles machen. Es gibt auch Leute,

01:37:58.740 --> 01:38:00.540
die dann, um das zu umgehen, sagen, die dann irgendwie

01:38:00.540 --> 01:38:02.460
import dieses vom das

01:38:02.460 --> 01:38:04.860
als irgendwie was ganz

01:38:04.860 --> 01:38:06.540
anderes, damit sie auf keinen Fall

01:38:06.540 --> 01:38:08.360
irgendwie sich Dinge überschreiben und so.

01:38:09.860 --> 01:38:10.760
Ja, das ist alles

01:38:10.760 --> 01:38:11.300
so ein bisschen

01:38:11.300 --> 01:38:14.960
aber im Grunde

01:38:14.960 --> 01:38:16.100
gibt es natürlich schon Namensräume

01:38:16.100 --> 01:38:17.700
in Python und

01:38:17.700 --> 01:38:20.160
ja, das funktioniert eigentlich auch ganz

01:38:20.160 --> 01:38:21.540
ganz gut.

01:38:23.420 --> 01:38:23.460
Ja.

01:38:26.900 --> 01:38:28.260
Sehnen auf Python haben wir jetzt so ein bisschen

01:38:28.260 --> 01:38:30.280
den Zuhörern auch noch näher gebracht.

01:38:30.440 --> 01:38:31.740
Also was man darunter so ein bisschen versteht.

01:38:32.440 --> 01:38:33.840
Wie man, ich sag mal, einen ganz besonders

01:38:33.840 --> 01:38:36.100
entspannenden Python-Code schreibt und wie man

01:38:36.100 --> 01:38:38.080
da richtig rangeht. Also tatsächlich müsst ihr es

01:38:38.080 --> 01:38:40.020
nicht zu komplex machen. Ich glaube, die einfache Lösung

01:38:40.020 --> 01:38:42.020
ist besser. Keep it short and simple.

01:38:42.380 --> 01:38:44.160
Ja. Das ist, glaube ich, immer eine gute

01:38:44.160 --> 01:38:46.060
Idee. Auch unabhängig von Python.

01:38:46.420 --> 01:38:48.160
Aber dadurch wird es

01:38:48.160 --> 01:38:49.960
halt sehr lesbar und sehr korrigierbar.

01:38:50.060 --> 01:38:51.840
er könnte auch sehr gut damit kooperativ arbeiten

01:38:51.840 --> 01:38:53.840
mit anderen, weil er, glaube ich, relativ schnell

01:38:53.840 --> 01:38:55.640
verstehen wird, was die da denn so getan haben.

01:38:55.940 --> 01:38:57.640
Ich meine, auch da gibt es Ausnahmen, aber...

01:38:57.640 --> 01:39:00.360
Das kann auch sein, dass das die...

01:39:00.360 --> 01:39:01.860
Das weiß ich nicht, ob es immer gut ist, wenn man schnell

01:39:01.860 --> 01:39:03.900
versteht, was andere da getan haben. Das könnte auch zu...

01:39:05.180 --> 01:39:05.900
Ja...

01:39:06.520 --> 01:39:08.340
Wie das bei Douglas Adams

01:39:08.340 --> 01:39:09.420
oder so irgendwie

01:39:09.420 --> 01:39:11.960
als der Babelfisch eingeführt wurde und alle sich plötzlich

01:39:11.960 --> 01:39:14.040
verstanden haben, dass es den schlimmsten

01:39:14.040 --> 01:39:16.040
Krieg ever oder keine Ahnung...

01:39:16.040 --> 01:39:17.920
Ja, das MRT hat da so ein paar lustige Sachen eingeführt,

01:39:17.980 --> 01:39:19.420
die ich letztens gesehen habe, irgendwie mit

01:39:19.420 --> 01:39:21.600
Lesen von Gesichtsmuskulatur

01:39:21.600 --> 01:39:23.620
und sowas, dann die Worte deines inneren

01:39:23.620 --> 01:39:25.560
Gedankens aufschreiben kann und so, das ist, ja.

01:39:26.000 --> 01:39:27.580
Hm, naja.

01:39:29.080 --> 01:39:29.280
Ja,

01:39:29.420 --> 01:39:31.600
Alter Ego

01:39:31.600 --> 01:39:33.100
heißt das Ding. Ach, okay.

01:39:33.540 --> 01:39:34.980
Da wird auch noch eine Menge

01:39:34.980 --> 01:39:37.580
interessante Dinge passieren,

01:39:37.660 --> 01:39:37.920
glaube ich.

01:39:39.160 --> 01:39:41.040
Aber ansonsten, ich weiß nicht genau, sind wir

01:39:41.040 --> 01:39:43.140
so ein bisschen durch mit der Einführung, glaube ich.

01:39:43.140 --> 01:39:45.260
Ja, ich würde tatsächlich sagen, wir sind langsam am Ende der ersten Folge

01:39:45.260 --> 01:39:47.360
angekommen. Wir haben es quasi fast

01:39:47.360 --> 01:39:48.980
geschafft. Also, was haben wir jetzt gerade schon gemacht?

01:39:49.060 --> 01:39:50.320
mal Zen auf Python kennengelernt,

01:39:50.720 --> 01:39:52.540
ein kleines bisschen an die Einführungstools gegeben,

01:39:52.960 --> 01:39:54.740
so ein bisschen die Features der Sprache uns

01:39:54.740 --> 01:39:56.380
angeschaut, irgendwie.

01:39:57.120 --> 01:39:58.420
Ja, wie kann man

01:39:58.420 --> 01:40:00.760
einen Einstieg finden, wofür wird das eingesetzt?

01:40:01.980 --> 01:40:02.980
Also falls ihr Fragen habt, wie gesagt,

01:40:03.100 --> 01:40:04.760
schreibt uns gerne an unsere E-Mail-Adresse.

01:40:06.020 --> 01:40:06.900
Da kriegt ihr alles nochmal

01:40:06.900 --> 01:40:08.800
erklärt. Ihr findet mit Sicherheit auch ganz viel im Internet,

01:40:09.040 --> 01:40:10.960
in Tutorials, es gibt ja unzählige

01:40:10.960 --> 01:40:12.620
schöne, spannende Seiten.

01:40:13.080 --> 01:40:14.860
Die Suchbegriffe werdet ihr bestimmt schon finden dafür.

01:40:15.760 --> 01:40:17.140
Ja, genau, dann

01:40:17.140 --> 01:40:18.400
würde ich sagen,

01:40:18.780 --> 01:40:20.700
In den nächsten Episoden gehen wir dann halt mal so

01:40:20.700 --> 01:40:22.880
oder da machen wir halt so irgendwie ein Thema

01:40:22.880 --> 01:40:24.980
pro Episode und gucken einfach mal, dass wir das

01:40:24.980 --> 01:40:27.100
ein bisschen näher beleuchten. Genau, nicht so der ganz allgemeine

01:40:27.100 --> 01:40:29.000
Schwank, sondern vielleicht tatsächlich irgendwie

01:40:29.000 --> 01:40:30.980
was Spezielles, irgendwie eine Modulibritik oder

01:40:30.980 --> 01:40:32.960
eine Technik oder irgendwie

01:40:32.960 --> 01:40:34.500
eins der Topics, die noch spannend sind.

01:40:34.860 --> 01:40:36.860
Wenn ihr Vorschläge habt, wenn ihr irgendwas Besonderes hören wollt,

01:40:36.960 --> 01:40:38.600
kommt gerne, sagt da von Voss.

01:40:39.840 --> 01:40:40.800
Jochen wird bestimmt

01:40:40.800 --> 01:40:42.100
was dazu erzählen können.

01:40:42.920 --> 01:40:43.740
Und ich stelle ihn blöde Fragen.

01:40:44.240 --> 01:40:47.020
Vielleicht schließen wir noch ein bisschen

01:40:47.020 --> 01:40:47.920
mit Veranstaltungshinweisen.

01:40:48.780 --> 01:40:51.240
Wir sind jetzt in Düsseldorf, also wenn ihr

01:40:51.240 --> 01:40:53.220
selber Veranstaltungshinweise habt, dann

01:40:53.220 --> 01:40:55.140
sagt doch bitte einer gerne Bescheid, dann

01:40:55.140 --> 01:40:57.240
können wir auch eure Veranstaltung jetzt im deutschsprachigen Raum

01:40:57.240 --> 01:40:58.440
gerne promoten und hier vorstehen.

01:40:59.660 --> 01:41:01.420
Bei uns ist nächstes Wochenende

01:41:01.420 --> 01:41:02.380
jetzt hier Python Sprint.

01:41:03.140 --> 01:41:05.220
Das ist immer eine tolle Gelegenheit, so ein bisschen Leute kennenzulernen.

01:41:05.320 --> 01:41:07.140
Ich glaube, der ist diesmal schon voll und auch die Warteliste ist schon

01:41:07.140 --> 01:41:08.820
voll, aber er ist, glaube ich, zweimal im Jahr.

01:41:08.820 --> 01:41:10.940
Die gibt es bei Meetup oder bei

01:41:10.940 --> 01:41:12.460
pi.ddf, also die Düsseldorfer

01:41:12.460 --> 01:41:14.780
super tolle Leute, immer ganz viele

01:41:14.780 --> 01:41:16.080
spannende Vorträge.

01:41:16.820 --> 01:41:18.180
Schaut euch das auch einfach mal an und

01:41:18.180 --> 01:41:20.720
ja, tatsächlich

01:41:20.720 --> 01:41:22.840
zweimal im Jahr. Also schaut einfach mal

01:41:22.840 --> 01:41:24.640
vorbei. Ja, also wenn ihr

01:41:24.640 --> 01:41:26.680
die Events in eurer Nähe promotet, schickt ihr auch

01:41:26.680 --> 01:41:28.800
eine E-Mail einfach an hallo-at-python-podcast.de

01:41:28.800 --> 01:41:29.580
Ja.

01:41:30.960 --> 01:41:32.660
Ansonsten genau, was faszinierend ist, es gibt einmal

01:41:32.660 --> 01:41:33.600
die Python User Group

01:41:33.600 --> 01:41:36.360
Düsseldorf-PyTDF, die halt auch diese

01:41:36.360 --> 01:41:38.500
Sprints organisiert. Es gibt

01:41:38.500 --> 01:41:40.500
einen Python-Foo, das ist

01:41:40.500 --> 01:41:42.560
im lokalen Düsseldorf

01:41:42.560 --> 01:41:44.500
Microspace im Chaosdorf. Das ist einmal

01:41:44.500 --> 01:41:45.620
wöchentlich, ist deutlich kleiner.

01:41:46.980 --> 01:41:48.780
sind mehr so

01:41:48.780 --> 01:41:50.820
immer die gleichen Leute, die da hingehen.

01:41:51.820 --> 01:41:52.820
Die ersten zwei Mal im Monat ist glaube ich

01:41:52.820 --> 01:41:54.860
für Anfänger und die dritte Mal ist...

01:41:54.860 --> 01:41:56.820
Ja, aber

01:41:56.820 --> 01:41:58.140
finde ich, ist auch ganz toll.

01:41:58.620 --> 01:41:59.240
Sollte man

01:41:59.240 --> 01:42:02.920
sich nicht von abschränken lassen. Das ist halt so ein bisschen,

01:42:03.040 --> 01:42:03.940
dass man so reinkommt und denkt so,

01:42:04.940 --> 01:42:06.800
ist die Veranstaltung jetzt

01:42:06.800 --> 01:42:08.800
wie... oder ist es

01:42:08.800 --> 01:42:10.080
gerade irgendwas anderes?

01:42:10.920 --> 01:42:11.980
Naja, das sind alles sehr nette Leute.

01:42:14.960 --> 01:42:15.320
Dann...

01:42:15.320 --> 01:42:17.140
Aber genau, vielleicht wenn man gerade mit Leuten

01:42:17.140 --> 01:42:18.660
mal persönlich irgendwie ein bisschen mehr reden will,

01:42:18.720 --> 01:42:19.980
das ist vielleicht ein bisschen besser,

01:42:20.120 --> 01:42:22.200
weil so PyDDF ist eher vortragsorientiert

01:42:22.200 --> 01:42:24.340
und immer ein bisschen etwas größerer Rahmen.

01:42:24.420 --> 01:42:28.700
Dann gibt es das Data Science Meetup in Düsseldorf,

01:42:28.840 --> 01:42:30.000
das ist auch immer sehr gut besucht,

01:42:30.940 --> 01:42:32.980
wo es häufig um Python-Themen auch geht.

01:42:35.140 --> 01:42:36.500
QuantFinance bei Jesu Statistik,

01:42:36.600 --> 01:42:38.520
das sind fortgeschrittene Themen auch.

01:42:39.360 --> 01:42:41.940
Genau, und dann gibt es die Python User Group Köln,

01:42:42.060 --> 01:42:42.620
Paikolonen.

01:42:44.100 --> 01:42:45.600
Einmal im Monat gibt es da ein Treffen.

01:42:46.940 --> 01:42:47.720
Das ist auch immer

01:42:47.720 --> 01:42:48.920
meistens so 20, 30 Leute.

01:42:50.320 --> 01:42:52.060
Und es gibt immer interessante Vorträge.

01:42:52.160 --> 01:42:52.900
Danach geht man irgendwo essen.

01:42:54.160 --> 01:42:55.680
Ja, bei Pai.d.D.F. ist das auch so.

01:42:57.300 --> 01:42:57.620
Hm.

01:42:58.780 --> 01:42:59.640
Ja, es ist also mehr im Umfeld.

01:42:59.740 --> 01:43:01.380
Wie gesagt, wenn ihr irgendwo aus, weiß ich nicht,

01:43:01.440 --> 01:43:03.240
Schießmichtod, Wien, München,

01:43:03.680 --> 01:43:05.700
von der Ostsee in der Uckermark irgendwas findet,

01:43:05.700 --> 01:43:06.500
dann sagt Bescheid.

01:43:08.120 --> 01:43:09.100
Stehen wir hier gerne auch vor.

01:43:09.980 --> 01:43:10.120
Ja.

01:43:11.460 --> 01:43:12.520
Ich kann nur sagen, Jochen, vielen Dank.

01:43:12.840 --> 01:43:13.460
Ja, danke Dominik.

01:43:13.480 --> 01:43:14.360
Ein bisschen schlauer geworden.

01:43:15.500 --> 01:43:17.500
Tja, so schnell kann es gehen.

01:43:17.840 --> 01:43:19.780
Ich hoffe, die Hörer haben auch ein bisschen Spaß gehabt.

01:43:20.160 --> 01:43:20.320
Ja.

01:43:20.940 --> 01:43:22.280
Dann bis zur nächsten Folge.

01:43:22.460 --> 01:43:23.020
Bis zum nächsten Mal.

01:43:23.240 --> 01:43:23.480
Tschüss.
