Dominik: Hallo, liebe Hörerinnen und Hörer, willkommen im Python-Podcast, Episode 66.
Dominik: Heute quatschen wir über das nächste Kapitel im Fluent Python-Buch,
Dominik: falls euch das interessiert, über Dataclasses und warum das riecht oder nicht,
Dominik: oder was Cooles und wer das sonst so ist mit Sachen.
Dominik: Hi, Johannes.
Dominik: Hallo, hallo Dominik, hallo Jochen.
Dominik: Hi, Jochen.
Dominik: Ja, hallo Dominik, hallo Johannes.
Dominik: Ich habe gehört, lieber Jochen, du wolltest, du warst auf einem Podcast-Barcamp.
Jochen: Genau, und dann habe ich so gesagt, wie wir Podcasts aufnehmen.
Dominik: Ja, und dann haben die gesagt, wir sollten ein bisschen mehr Struktur machen und das wieder ein bisschen schöner.
Jochen: Ja, das hat mich so leicht irritiert, aber dann dachte ich, ja gut, dann höre ich mal vielleicht, was so Leute zu sagen haben.
Jochen: Die haben ja vielleicht auch Erfahrung und so.
Dominik: Weil wir unseren Podcast an anderen Podcasts machen, als die ihren Podcast machen.
Dominik: Und deswegen machen wir das jetzt so, wie die anderen Leute, die nicht so einen Podcast machen, wie wir den Podcast machen.
Dominik: Wie wir das richtig machen.
Dominik: Also ich habe mich auch mit Leuten unterhalten und die haben dann so geguckt.
Dominik: Ich glaube, das geht gar nicht so schlecht.
Jochen: Ja, das geht schon, aber
Jochen: ich meine, wir machen das ja nicht so richtig professionell.
Jochen: Ich wollte gerade sagen, Jochen, möchtest du das jetzt professionell?
Jochen: Nein, nein, das auch nicht, aber
Jochen: also zum Beispiel irgendwie ein Ratschlag
Jochen: war halt so, ja, sagt doch vorher, wenn ihr euch vorstellt,
Jochen: irgendwie einmal macht das
Jochen: immer gleich quasi.
Jochen: Es wäre auch so eine Intro-Melodie
Jochen: oder so, wäre nicht so schlecht, dann dachte ich schon so,
Jochen: Gott, Gott, Gott. Aber ja,
Jochen: ich habe gehört, es gibt Leute hier unter uns.
Dominik: Ich kann ja meinen eigenen Jingle schreiben, dann mache ich den auf meinen
Dominik: Style und dann können wir ja gucken,
Dominik: ob der Ratschlag runtergeht.
Dominik: Wenn man sich die Kurve anguckt, ist halt so
Dominik: in allem einen eigenen Jingle.
Johannes: Immer wenn ich dabei bin, muss der am Anfang eingespielt werden.
Johannes: Das ist eigentlich eine coole Idee.
Jochen: Ja, okay, dann sieht die, wie viele Leute
Jochen: hören noch zu Kurve wahrscheinlich aus, wie so
Jochen: Akapulco, Klippenspringer, irgendwie ins Nichts.
Jochen: Das ist vielleicht auch nicht so
Dominik: toll. Ja, aber ich finde, wie wir es sonst so machen,
Dominik: wir haben ja eigentlich schon mehr eine Struktur,
Dominik: als du jetzt denkst. Also erstens kennen uns hier die Leute
Dominik: und wenn die sich dafür interessieren, wie wir sind oder
Dominik: interessieren würden, also ganz ehrlich, dann können die uns auch fragen.
Dominik: Hallo at PythonPodcast.de
Dominik: Also wir machen irgendwas mit Python, das hat man vielleicht
Dominik: schon mal rausgehört. Ich glaube, das ist auch offensichtlich.
Dominik: Und viel mehr muss man
Dominik: glaube ich gar nicht wissen. Also muss man nicht, kann man
Dominik: natürlich gerne. Dafür kann man ja fragen oder uns kennenlernen.
Dominik: Unseren Hörer treffen, das bald stattfindet.
Dominik: Wir organisieren das nämlich. Wir haben noch
Dominik: immer noch gar keinen festen Termin, aber es wird
Dominik: wahrscheinlich auf August, September hinauslaufen.
Jochen: Ja, aber ich fürchte, das müssen wir jetzt sagen.
Jochen: Sag ich doch. August oder September.
Jochen: Das ist kein fester Termin, oder? Nein.
Jochen: Dann müssen wir jetzt
Jochen: nochmal kurz unsere Kalender übereinanderlegen. Also ich glaube
Jochen: tatsächlich wird es eher Ende August
Jochen: bis Anfang September werden müssen
Dominik: wegen Schulferien. Ja, Anfang September bin ich
Dominik: übrigens im Urlaub.
Dominik: Ja, das musst du leider absagen.
Dominik: Das geht halt nicht.
Jochen: Na gut, dann wird es halt vielleicht eher sogar
Jochen: Ende September. Okay, dann sagen wir,
Jochen: wir schieben die Ankündigung auf
Jochen: nächste Episode, die hoffentlich im Juli...
Dominik: Ja, genau. Also es sollte noch gutes Wetter sein. Wir wollen es nämlich draußen machen.
Dominik: Und okay,
Dominik: September,
Dominik: was ist mit August?
Jochen: Geht nicht gut. Wie gesagt, das ist ein Schulferien.
Jochen: Wir diskutieren das später aus.
Jochen: Wir haben auf jeden Fall das Hörer-Entreffen.
Jochen: Sagt gerne Bescheid, wenn ihr vorbeikommen wollt.
Dominik: Es ist hier in der Gegend, also hier heißt Rheinland-Düsseldorf.
Dominik: Wir können ja schon mal sammeln.
Jochen: Also wenn ihr uns irgendwas an hallo-at-python-podcast.de
Jochen: schreibt, dann notifizieren wir euch,
Jochen: sobald wir genaueres wissen.
Jochen: Und es wird wahrscheinlich draußen
Jochen: irgendwie...
Jochen: Draußen gibt es vielleicht was zu essen.
Jochen: Irgendwie so Dinge.
Jochen: Ja, okay.
Jochen: Genau.
Dominik: Zur anderen Struktur, Jochen.
Dominik: Wir machen immer News.
Jochen: Ja, wir machen News. Cool, dann machen wir doch gerade ein bisschen News.
Johannes: Aber vorgestellt hat sich jetzt keiner, oder?
Johannes: Der Jochen wollte so schön hinfahren
Johannes: und jetzt ist keiner eingestiegen.
Johannes: Jochen, wer bist du denn?
Johannes: Ihr seid doch die wichtigen Leute.
Johannes: Stellt euch mal vor.
Jochen: Ja, aber man muss ja immer die anderen vorstellen.
Jochen: Man kann sich ja nicht gut selber vorstellen.
Jochen: Also ich stelle mal die Dominik vor.
Jochen: Dominik ist ...
Jochen: Das ist vorbei.
Jochen: Also meine drei Hashtags sind
Dominik: Python, Eurorack und
Jochen: Agentic
Jochen: Vibe-Coding, ja.
Jochen: Vibe-Coding, genau.
Jochen: Okay, ihr müsst jetzt alle guten
Jochen: Hashtags schon weg, meins wären
Jochen: Python,
Jochen: Python Podcast,
Jochen: Ja, Ukulele, Ukulele ist auch
Jochen: sehr gut, genau.
Jochen: Ich habe auch noch ein paar andere Instrumente, aber ja.
Dominik: Und Johannes, sollen wir...
Johannes: Ja, also ich, hallo, ich bin Johannes.
Johannes: Für die, die mich nicht kennen, ich bin gelegentlich
Johannes: hier im Python-Podcast als Gast, weil ich diese
Johannes: beiden anderen Typen da kenne.
Johannes: Und
Johannes: ich komme nicht aus dem Rheinland.
Johannes: Ich bin...
Johannes: Du warst da mal hier. Ich war mal im Rheinland,
Johannes: ja, aber es hat sich dann
Johannes: als... Also ich musste
Johannes: wieder weg.
Johannes: Und jetzt bin
Johannes: ich hier. Hier hat es übrigens
Johannes: 800 Sonnenstunden im Jahr mehr als
Johannes: bei euch im Rheinland. Das ist nur so nebenbei.
Johannes: Deshalb bin ich auch so ein sonniges Gemüt.
Johannes: und ihr seid so traurig und beregnet.
Johannes: Ja, richtig.
Dominik: Die kennst du übrigens alle aus dem Chaos-Umfeld
Dominik: so ein bisschen mehr oder weniger auch, oder?
Johannes: Ja, den Jochen habe ich im Computer-Club kennengelernt.
Johannes: Also, ja, mich auch.
Johannes: Meine Hashtags.
Johannes: Django, Mathematik
Johannes: und Spiele.
Johannes: Spiele, richtig.
Johannes: Absolut korrekt.
Johannes: Hört man schon am Namen.
Johannes: Ja.
Johannes: Nomen est omen.
Johannes: Ja.
Jochen: Okay, na gut, dann können wir ja jetzt nahtlos mit den
Jochen: News einsteigen.
Jochen: Perfekte Struktur. Sehr gut, sehr gut.
Jochen: Ich konnte nicht so viel sammeln,
Jochen: weil ich momentan total im Stress bin.
Jochen: Also ich bin im Privatstress.
Dominik: Dann erzählen wir doch ganz kurz nochmal vielleicht über das Barcamp. Also das ist jetzt
Dominik: vielleicht nicht so interessant für alle Peißenleute, aber für alle Leute, die
Dominik: Podcasts mögen schon. Es gab da nämlich
Dominik: eine tolle Veranstaltung, wo man Barcamps kennt ja vielleicht,
Dominik: aus dem Softwareumfeld, wo man ganz viele nette
Dominik: Podcastmenschen kennengelernt hat. Ich möchte nochmal
Dominik: Danke sagen für die tollen Kontakte, die ich da getroffen
Dominik: und kennengelernt haben durfte.
Jochen: Ja, Grüße an
Jochen: an hier Working Draft zum Beispiel
Jochen: auch ein Podcast aus
Dominik: nicht nur Düsseldorf. Ich habe auch gehört, also gute Tipps waren
Dominik: wir sollten mal wieder mehr zusammen
Dominik: eine Episode aufnehmen. Ja, ich habe gehört.
Dominik: Das wäre doch mal wieder eine Idee. Und
Jochen: wir haben auch schon konkret geplant, was zusammen mit
Jochen: wo wir sind, ist vorne zu machen.
Jochen: Die kennen wir
Jochen: auch gut und treffen uns immer wieder
Jochen: auf allen möglichen Konferenzen und
Jochen: so, aber
Jochen: genau, ist bisher noch
Jochen: nicht so richtig zustande gekommen, aber wir sind
Jochen: auf jeden Fall da auch noch dran.
Jochen: Das war so ein Tipp. Besucht euch
Jochen: auch einfach gegenseitig. Auch ein guter Tipp
Jochen: war halt, schaut nicht
Jochen: nur nach so totalen Berühmtheiten
Jochen: oder so, auch wenn das
Jochen: auf dem Papier oder so erstmal, wenn man drüber nachdenkt,
Jochen: gut aussieht.
Jochen: Ich wollte immer schon mal Guido haben.
Jochen: Das ist halt mit Englisch vielleicht ein Problem.
Jochen: Mit Sarah war das jetzt mal eine Ausnahme.
Jochen: Aber da gibt es
Jochen: ja schon Leute.
Jochen: In der deutschsprachigen Welt gibt es Paltenmenschen.
Jochen: Genau.
Jochen: es gibt eigentlich auch genug.
Jochen: Du sprichst immerhin schon Dutch.
Jochen: Aber das Problem ist halt
Jochen: bei Leuten, die zu
Jochen: bekannt sind, auch, dass man die dann halt
Jochen: oft schon gehört hat.
Jochen: Ich weiß nicht,
Jochen: das ist ja jeder Podcast mit Guido.
Jochen: Ja, genau.
Dominik: Es gibt doch jetzt demnächst
Dominik: ein toller Python,
Dominik: den Film.
Jochen: Ja, es gibt im Sommer, soll jetzt rauskommen, ich weiß gar nicht genau wann.
Jochen: Genau, da gab es einen Trailer, habe ich gesehen.
Jochen: Nix on the Plane?
Jochen: Äh, nee.
Jochen: Ja, den gab's schon, aber...
Jochen: Ja, das war ein Python-Film.
Jochen: Nee, das ist so ein...
Jochen: Python D-Story, irgendwie, ich weiß es nicht, hab ich vergessen.
Jochen: Irgendwelche Leute machen das immer
Jochen: und über Even You haben sie zum Beispiel
Jochen: ein Ding gemacht, das war ziemlich gut, das hab ich gesehen.
Jochen: Und über andere Leute...
Dominik: Der Typ wird VJS und
Dominik: jetzt Rolldown, hab ich gelesen.
Dominik: Und genau,
Dominik: das gibt's jetzt auch über Python und
Dominik: soll wohl auch, also der Trailer
Jochen: sah auch gut aus und ja, wir wollen mal schauen, wie das so wird.
Jochen: Genau.
Jochen: Ja, genau, wir sind
Jochen: auf so ein Podcamp gegangen, so ein Barcamp
Jochen: Podcast und immer Konferenzen für mich
Jochen: besonders attraktiv, wenn ich halt
Jochen: irgendwie zu Fuß hinlaufen kann. Ich bin
Jochen: irgendwie bequem an der Stelle
Jochen: und das war halt hier in der Zentralbibliothek
Jochen: am Bahnhof in Düsseldorf,
Jochen: was auch so ein total cooles Ding
Jochen: ist irgendwie und weil
Jochen: man kann die ganzen Räumlichkeiten auch für alles mögliche verwenden,
Jochen: man muss es nur irgendwie anmelden. Und jedes Mal, wenn man
Dominik: vorbeilief und gerade auf dem Gang, wie man es bei so
Dominik: Konferenzen macht, kurze Gespräche, kam er vorbei mit
Dominik: Pssst.
Jochen: Ja, das soll aber eigentlich nicht so sein, weil
Jochen: eigentlich hat man dieses
Jochen: irgendwie, man muss halt leise sein
Jochen: in der Bibliothek, Konzept
Jochen: da nicht mehr. Es ist auch
Jochen: so, dass man da Essen mit reinnehmen darf und so
Jochen: und man sagt, also ich hab dann so
Jochen: eine Führung damit gemacht und die sagt, naja, nee, wir wollen
Jochen: das irgendwie anders machen und nicht mehr so wie früher
Jochen: und man kann da auch was essen und
Jochen: man kann da auch irgendwie ein bisschen
Jochen: lauter sein, das ist alles kein Problem.
Jochen: Und es gibt nicht nur Bücher, sondern es gibt auch so Laserentfernungsmesser und 3D-Drucker und VR-Brillen und ein Podcaststudio und ein Ding, wo man Super-8-Filme digitalisieren kann und auch alte Vias digitalisieren kann.
Jochen: Und ein Musikstudio,
Jochen: wo man leider aber nicht
Jochen: drin laut sein darf. Da darf man nur digitale
Jochen: Instrumente drin verwenden,
Jochen: weil daneben die juristische
Jochen: Fachbibliothek ist, wo die Leute dann
Jochen: lernen für Prüfungen. Und das hat sich dann herausgestellt,
Jochen: dass das eine ungünstige Kombination
Jochen: ist.
Jochen: Ich beklage dich gleich!
Jochen: Ja, gut, hätte man auch
Jochen: vorher drauf kommen können, aber das muss da wohl
Jochen: irgendwie erstmal eskalieren und jetzt darf man da nicht mehr singen.
Jochen: Eigentlich schade, naja.
Johannes: Ja, schade. Gibt es auch Backformen?
Johannes: Ich habe das einmal gesehen, das ist Bücherei
Jochen: für Backformen. Genau, so Bücherei der Dinge nennen die das.
Jochen: Da gibt es auch so Fußball-Backformen und so
Jochen: Zeugs. Ja, also wirklich
Jochen: Geburtstagskids für alle möglichen
Jochen: Geburtstagspartys und so.
Jochen: Also wirklich, wirklich. Und man kann
Jochen: da halt sich hinsetzen und arbeiten. Es sind 600
Jochen: Arbeitsplätze in dem Ding. Das ist halt auch irgendwie
Jochen: echt groß. Es ist zwei Fußballfelder groß.
Jochen: Und es gibt jede Menge Räume
Jochen: für alles mögliche. Und wie gesagt, man muss halt nur sagen, ich hätte
Jochen: gerne den Raum für den und den Zweck und dann
Jochen: überlegen die und dann sagen sie einem
Jochen: nee, du stinkst oder ja, kannst du haben.
Dominik: In der alten Zentralbibliothek,
Dominik: da war ich vielleicht zwölf oder sowas,
Dominik: da stand so ein Computer drin rum
Dominik: und der war halt ganz gemein
Dominik: gesichert, also dachten sie, und da
Dominik: konnte man so ein paar Sachen machen.
Dominik: Heimlich. Und dann Sachen ausprobieren
Dominik: und dann...
Dominik: Tja, das weiß ich,
Dominik: also da gibt es auch eine Menge...
Dominik: Ich bin nämlich nach der Schule früher immer in die Bibliothek gefahren.
Jochen: Ja, das habe ich auch, ich habe nicht nur nach der Schule
Jochen: oft. Aber ob ich da jetzt
Dominik: meine Kinder hinlassen würde, ich weiß es nicht so genau.
Dominik: Ja.
Dominik: Es ist, ja, egal.
Jochen: Aber, also, wie gesagt, ich wusste gar nicht, dass es so einen Ort gibt
Jochen: und dass man da so coole Sachen machen kann.
Jochen: Da gibt es auch Bücher über Peißen, Jochen.
Jochen: Ja, da gibt es Bücher.
Jochen: Ja, da werde ich mir nicht...
Jochen: Aber es gibt eine Fernleihe, über die man halt
Dominik: eine Menge kriegt. Darüber wollten wir gleich reden.
Jochen: Und die liefert
Jochen: dann halt auch an die nächstgelegene
Jochen: Bibliothek, also man kann das auch online machen
Jochen: und dann kann man die Sachen dann lokal
Jochen: abholen und bei uns ist die nächstgelegene
Jochen: Bibliothek irgendwie ein paar
Jochen: hundert Meter entfernt.
Dominik: Wir gehen auch mal zu unserer Stadtteilbibliothek.
Jochen: Und man kann die Bücher auch überall zurückgeben und so.
Jochen: Also ich war überrascht.
Jochen: Oder Tonis ausleihen.
Jochen: Das auch, ja.
Jochen: Ja, genau.
Jochen: Da hat das Ganze irgendwie stattgefunden.
Dominik: Wir haben ein paar tolle Tipps bekommen
Dominik: für Marketing und was man nicht alles machen soll.
Dominik: Wir machen jetzt ganz viel Marketing.
Dominik: Viel Spaß damit.
Jochen: Für uns bestimmt gut, für euch, ja,
Jochen: ihr müsst halt damit leben.
Jochen: Ja, nee. Wir haben
Dominik: tatsächlich überlegt, ob wir ein Video mal aufnehmen wollen.
Dominik: Genau, ob wir ein bisschen mehr Video machen.
Dominik: Also ich hab's schon länger überlegt, aber
Jochen: ja, das war so auch einer der Geschichten, wo
Jochen: Leute sagen, ja, das muss man im Grunde irgendwie,
Jochen: wenn man
Jochen: Social Media Presence Interaction
Jochen: muss das schon irgendwie machen.
Jochen: Ja, man gewinnt halt
Johannes: einen Hörerkreis auf YouTube, oder? Also
Johannes: die Leute, die YouTube gucken, die
Jochen: Ja, und gar nicht mal
Jochen: gar nicht mal unbedingt die Podcast-
Jochen: Episoden selber, aber dass man zumindest da ist
Jochen: und da gefunden wird, für die Leute, die halt
Jochen: nur auf YouTube sind und dann halt
Jochen: da einen Trailer hat, dass sie halt wissen, oh, es gibt
Jochen: den Podcast, ich muss da vielleicht irgendwie
Jochen: auf meinem Podcatcher der Wahl oder auf der Website gucken.
Dominik: Das ist halt total steil, Johannes.
Dominik: Und da stehen die Fans hinterher auch vor deiner Tür
Dominik: und klopfen heimlich.
Dominik: Die Groupies.
Dominik: Ja, also,
Dominik: oder was mich auch... So stelle ich es mir vor.
Jochen: Was ich auch total cool fand, war, wie Leute darüber gesprochen
Jochen: haben, wie sie halt ihre Workflows halt so ein bisschen
Jochen: automatisieren mit
Jochen: so diversen Tools und
Jochen: was man da alles machen kann an
Jochen: Automatisierung von irgendwie
Jochen: ja, was man, oder
Jochen: Oh, jetzt sind wir bei einer anderen geplanten Folge
Dominik: übrigens, aber nicht bei Podcasts, aber
Dominik: wir wollten auch bald nochmal wieder bei
Dominik: so Data Science-Kram reden und dann auch nochmal
Dominik: über
Dominik: die ganzen neuen KI-Sachen. Darf ich
Dominik: KI sagen? Ich weiß nicht. MCPs und so.
Dominik: Ja, ich glaube, man darf was schon sagen. KI, musst du sagen.
Dominik: KI, oh.
Dominik: Achso, Entschuldigung. Du hast eben
Dominik: so einen tollen Link geschickt, der dazu passt.
Dominik: Ja, ich habe auch tatsächlich noch News,
Dominik: weil es
Johannes: gibt eine interessante Veröffentlichung vom
Johannes: MIT Media Lab mit dem Titel
Johannes: Your Brain on Jet GPT, die gerade
Johannes: so ein bisschen durch die News
Johannes: gegangen ist, wo
Johannes: sie untersuchen, was das denn für
Johannes: Auswirkungen hat. Also ich meine, es ist natürlich sehr reißerisch
Johannes: und die Studie
Johannes: hat 54 Teilnehmer.
Johannes: Es ist jetzt kein repräsentativer
Johannes: Querschnitt durch die Gesellschaft.
Johannes: Aber
Johannes: Aber es gab wohl signifikante Unterschiede zwischen Menschen, die LLMs benutzen oder nur eine Search-Engine oder Brain-Only in Klammern, no tools.
Johannes: Das finde ich eine sehr schöne Bezeichnung.
Dominik: Und was war besser, für was?
Johannes: Man kann sich Sachen besser merken, wenn man sie nicht von einem LLM erzeugen lässt oder wenn man es sich nicht von einem LLM vorkauen lässt.
Dominik: Ja gut, das ist ja keine Überraschung,
Dominik: dass wenn man das Wissen jetzt nicht selber erarbeitet hat,
Dominik: dass das dann flüchtig bleibt.
Johannes: Ja, aber auch Suchmaschine.
Johannes: Also auch wenn du normal bei Google oder bei irgendwas anderem eintippst
Johannes: und nicht diese KI, Kagi, ich benutze Kagi, benutzt.
Johannes: Wenn man nicht diese KI-Zusammenfassung benutzt,
Johannes: ist die Retention wohl deutlich besser.
Johannes: Und das Interessante ist eigentlich,
Dominik: dass diese Studie so durch die Neuigkeit geht.
Dominik: Ich habe es gerade nicht verstanden.
Johannes: Das Interessante finde ich eigentlich, dass diese Studie so durch die News geht und dass die so überall zitiert wird, weil es halt schon so ein bisschen dieses Gefühl reflektiert von, ja, vielleicht ist es doch nicht so gut für uns.
Jochen: Ja, aber ist das nicht immer eine Neuigkeit?
Jochen: Ich meine, die meisten, also viele Leute sind halt so doch eher so im Modus.
Jochen: News, technology is bad for you.
Jochen: Genau, meckernder Rentner im Fenster mit dem Kissen und Kulturpessimismus kommt halt immer gut an.
Jochen: Das ist halt immer eine Schlagzeile. Ja, aber Jochen, wir sind jetzt
Johannes: langsam in so einem Alter. Ach so.
Johannes: Genau, und hast du gesehen,
Dominik: zwei Straßen weit haben sie die
Dominik: Straße gelb gestrichen.
Dominik: Das habe ich nicht gesehen.
Johannes: Unglaublich. Also was die jungen Leute heute
Johannes: machen, das hätte es bei uns früher nicht gegeben.
Dominik: Das waren nicht die jungen Leute, das haben sie richtig mit Teams gemacht,
Dominik: die dann angerückt sind und alles verschönern wollten.
Dominik: Da haben sie alles mit einer stinkenden Farbe angestrichen
Dominik: und dann hinterher wollten sie einen Garten da drauf machen, ja.
Dominik: Also der Dominik ist auch
Dominik: in dem Alter, wie ihr hört.
Dominik: Genau.
Jochen: Also ich verstehe, wie diese medialen Mechanismen funktionieren, die halt dazu führen, dass das halt immer Schlagzeilen und Neuigkeiten sind. Aber ich habe große Zweifel, dass das quasi ein repräsentatives Bild davon zeichnet, was irgendwie so passiert.
Jochen: insofern. Ist es sicherlich nicht.
Johannes: Aber die Anzeichen
Johannes: davon, dass Leute auf diese Dinge
Johannes: vertrauen und dann
Johannes: auf solche Fakten reinfallen oder
Johannes: auf solche ausgedachten Sachen,
Johannes: dass Ungarn auch Holland genannt wird.
Johannes: Dieses Vertrauen ist da halt schon sehr groß.
Johannes: Ich habe heute zweimal gehört, ich habe
Dominik: Chat-Spotty gefragt, mir dann meine Schule ausgesucht
Dominik: und ja, das wird da als
Dominik: Suchersatz benutzt. Also ganz klassisch
Johannes: so. Ja, finde ich ganz toll. Also da bin ich zu
Johannes: alt dafür. Das finde ich ganz komisch.
Johannes: Ja, also Leute denken,
Dominik: das ist aber auch komisch, dass es nicht direkt die Wahrheit
Dominik: gesagt hat oder dass man da ja so ein paar
Dominik: Informationen hatte, die man so mal kurz überprüfen musste.
Dominik: Gut, das mit der Medienkompetenz ist
Jochen: halt ein Problem, aber das war auch schon immer ein Problem.
Jochen: Ich meine, ich erinnere mich noch, als Internet und Google
Jochen: neu waren. Hast du nicht dem Marksteiger geglaubt,
Jochen: dass er gerufen hat? Oder das Fernsehen, genau.
Jochen: Als das Fernsehen neu war, auch
Jochen: als das Radio neu war, irgendwie
Jochen: War of the Worlds,
Jochen: war auch ein großes Medienkompetenz. Damals, als man
Dominik: den Propheten noch wirklich glauben konnte.
Dominik: Ja,
Dominik: also es ist ein
Dominik: wiederkehrendes Muster.
Jochen: Bei Plato gibt es das schon, der wettert
Jochen: gegen die Schrift. Und der Schaffal der Jugend, sowieso.
Jochen: Ja, also
Jochen: ich würde mal einfach sagen,
Jochen: wenn man kann, so, Plato
Jochen: hat nicht recht gehabt.
Jochen: Und das mit der Schrift war schon Fortschritt.
Johannes: Und das wird ihn jetzt aber ganz schön atzen.
Jochen: Ja, aber ich glaube, du bist ein Fan,
Jochen: Jochen. Ja, auf der anderen
Jochen: Seite natürlich schon, bin auch irgendwo
Jochen: ein Plato-Fanboy, das ist richtig, ja.
Dominik: Ja, das können wir in der MCP-Folge noch mal
Jochen: genauer auslassen. Ja, wobei, du hattest ja ein Hashtag
Jochen: Mathematik, da habe ich einen Haken, um da mich rein...
Jochen: Ich habe jetzt eine Podcast-Episode gehört
Jochen: mit Terence Howe.
Jochen: Ja, der jetzt auch anfängt.
Jochen: Oder der jetzt auch viele Dinge
Jochen: macht. Ja, ja, der macht vor allen Dingen viel
Jochen: mit Lean, also sozusagen
Jochen: eine Programmiersprache, mit der kann man...
Jochen: Also schreibt man halt nicht Code, sondern quasi
Jochen: Mathe und... Ja, man schreibt schon
Johannes: Code, aber hinterher sagt er einem dann das.
Jochen: Genau, kann der Compiler, der Compiler zählt nicht zu den beiden Readers,
Jochen: sondern der gibt einem ein Zertifikat,
Jochen: dass das, was man halt hingeschrieben hat,
Jochen: folgerichtig war.
Jochen: Und wenn das ein Beweis war,
Jochen: dann ist es halt dann bewiesen.
Jochen: Genau.
Jochen: Und das macht es halt auch zugänglicher.
Jochen: Das macht es halt auch möglich,
Jochen: dass mehrere Leute miteinander irgendwie kollaborieren,
Jochen: weil das Problem an der bisherigen Mathe-Notation,
Jochen: auch die ist natürlich ein Riesenfortschritt
Jochen: gegenüber früher,
Jochen: aber die ist halt so,
Jochen: wenn man jetzt so ein aktuelles Mathe-Paper nimmt
Jochen: und schlägt Seite 15 auf,
Jochen: dann kann einem niemand sagen,
Jochen: was da steht, ohne die 15 Seiten
Jochen: vorher gelesen zu haben. Und das ist super
Jochen: anstrengend. Und deswegen macht das keiner und
Jochen: dann kann man nicht so gut zusammenarbeiten, sondern muss jeder
Jochen: für sich das irgendwie, und das limitiert
Jochen: natürlich die
Jochen: Menge an Dingen, die man
Jochen: irgendwie tun kann. Und jetzt können halt auch
Jochen: irgendwie Nicht-Profis quasi
Jochen: da Pull-Requests gegen
Jochen: lange Beweise stellen und man kann
Jochen: halt automatisch checken, ob das halt so halbwegs stimmt, was
Jochen: die geschrieben haben oder nicht. Und dann
Jochen: genau. Das machen sie auch schon.
Jochen: Die haben da ein total cooles Projekt,
Jochen: wo es darum geht, quasi
Jochen: nicht neue Sachen zu beweisen
Jochen: oder so, sondern die gesamte
Jochen: mathematische Theorie, die es so gibt
Jochen: und alle Lemmas, die man halt so hat,
Jochen: die alle mal
Jochen: formal mit Linen durchzubeweisen
Jochen: und das dann halt in der Datenbank zu haben,
Jochen: sodass man halt später sagen kann, okay.
Jochen: Im Endeffekt halt Mathematik, oder?
Johannes: Also das, was es gibt so an Mathematik
Johannes: einmal komplett
Jochen: durchformalisiert zu haben
Jochen: und dass man es halt auch noch suchen kann, dass man mal sagen kann,
Jochen: okay, ich habe jetzt dieses Problem, welche
Jochen: Lemmas könnten mir da helfen oder welche Tricks
Jochen: gibt es, siehst du denn in den Dingen, die
Jochen: alle bewiesen sind, die man jetzt verwenden könnte und dann
Jochen: kann einem auch ein LLM da vielleicht helfen.
Jochen: Ja, also fand ich
Dominik: auf jeden Fall. Ja, gewusst wie, aber man muss ja eigentlich
Dominik: on top von den Dingen stehen oder nicht
Dominik: nach neuer Information suchen,
Dominik: sondern auch was man selber quasi auch schon
Dominik: rausputzen könnte und das geht dann halt schneller.
Dominik: Ja.
Dominik: So ein bisschen anders, glaube ich, als wenn man
Dominik: sich davon erstmal die Welt erklären lässt.
Dominik: Ja, aber
Jochen: es ist auf jeden Fall, Mathematik ändert sich auch
Jochen: noch immer und mehr Leute
Jochen: können an Dingen, die hatten dann jetzt auch so
Jochen: ein Paper dazu und da waren halt dann
Jochen: 50 Autoren drauf oder so und das
Jochen: Wo ist so ein Paper? Das gab es ja
Jochen: sonst so in der Physik mit tausend Autoren
Jochen: und in der Mathematik eigentlich nicht.
Jochen: Ja, ist spannend.
Jochen: Kennt ihr das Chicken Paper?
Jochen: Nee, was ist das?
Jochen: Chicken, Chicken, Chicken, Chicken, Duck Tonka.
Jochen: Also es gab jemand, der hat es tatsächlich geschafft,
Dominik: ein Paper zu veröffentlichen, weil das
Dominik: alles Standards erfüllt, formalen Standards.
Dominik: Ach so, okay.
Dominik: Habe ich am Montag gehört. Danke, Sascha.
Jochen: Ja, jedenfalls, genau.
Jochen: In dem Podcast habe ich auch, also ich bin ja auch
Dominik: so ein... Das ist ein offiziell
Dominik: peer-reviewtes Paper.
Dominik: Da kommen ziemlich viele
Dominik: Hühner drin vor. Ja, genau.
Dominik: Eigentlich nur Hühner.
Dominik: Ja, alles Ding.
Dominik: Ist auf jeden Fall
Dominik: eine sehr spitze Zielgruppe.
Dominik: Genau, also was
Jochen: der, also ich würde ja sagen,
Jochen: Also bisher war ich immer in dem, es gibt ja im Grunde zwei Lager, was Theorie der Mathematik angeht.
Jochen: Es gibt halt so die Platoniker irgendwie, also das ist eine der wenigen Gebiete, wo halt Platonismus irgendwie noch eine Rolle spielt.
Jochen: Und die Intuitionisten oder so.
Jochen: Und ich würde sagen, naja gut, ich bin schon irgendwie da eher auf der Platon-Seite, weil, naja, wie soll das anders gehen?
Jochen: man kann ja auch quasi zum Beispiel
Jochen: experimentelle Mathematik machen, wo man einfach irgendwie
Jochen: zufällig Beweise generiert
Jochen: und dann überprüft mit einem Ding, das halt
Jochen: nicht alle checken kann, aber
Jochen: checkt, ob da irgendwas interessant, äh, ob das
Jochen: wahr ist erstmal, ob das richtig ist und dann,
Jochen: ob irgendwas Interessantes dabei rausgekommen ist und dann manchmal
Jochen: fällt da irgendwas Interessantes dabei raus und dann
Jochen: wie kann man das über so einen Prozess
Jochen: erfunden haben, sondern das muss man
Jochen: halt eher entdeckt haben und auch so andere Dinge
Jochen: wie, weiß ich nicht, dass es Kreise gibt oder
Jochen: Dreiecke oder so, da hat man so intuitiv
Jochen: das Gefühl, naja, die gibt's schon irgendwie,
Jochen: da draußen und die kann man eher entdecken,
Jochen: dass das halt 180 Grad sind in der Winkelsumme
Jochen: und das kann man nicht erfinden oder
Jochen: das ist halt einfach so und
Jochen: deswegen dachte ich immer so, ja, also
Jochen: quasi so
Jochen: mathematischer
Jochen: Platonismus ist eigentlich schon so die richtige Geschichte
Jochen: und dann, genau, Intuitionisten seit
Jochen: Anfang des 20. Jahrhunderts sagen so, nee, nee, das kann man
Jochen: vielleicht alles nicht so machen und das ist doch eher vielleicht eine Erfindung.
Jochen: Das habe ich eher so für Quatsch gehalten
Jochen: und der hatte jetzt aber ein super
Jochen: Argument für den
Jochen: mathematischen Intuitionismus und zwar
Jochen: Wie war denn das noch?
Jochen: Jetzt musst du das auch richtig zusammenkriegen.
Jochen: Jetzt muss ich es zusammenkriegen, verdammt.
Jochen: Mathematik war besonders
Jochen: einfach.
Jochen: Genau, achso, ja richtig,
Jochen: das ging ungefähr so, der sagte halt,
Jochen: naja, also es gibt ja so Zahlen wie Pi, wir hatten es glaube ich auch
Jochen: mal im Podcast schon mal irgendwann davor, als wir
Jochen: über Pi geredet haben, naja, das ist halt
Jochen: völlig unklar, zum Beispiel, also
Jochen: es ist Pi, die Dezimalbruchentwicklung
Jochen: von Pi besteht jeden Test für
Jochen: Zufälligkeit.
Jochen: und ja, aber niemand weiß, ob
Jochen: wirklich zufällig ist oder nicht, oder ob nicht doch irgendeine
Jochen: Conspiracy da drin,
Jochen: Verschwörung ist, die halt
Jochen: doch nicht zufällig sein lässt
Jochen: oder so, das weiß halt keiner und man hat auch keine Idee,
Jochen: wenn man das rauskriegen kann. Aber er sagt,
Jochen: eigentlich ist es ja ganz einfach, also natürlich
Jochen: wahrscheinlich, was man erwarten würde, ist, dass es
Jochen: zufällig ist, weil
Jochen: man kann relativ einfach
Jochen: beweisen, dass
Jochen: quasi die allermeisten realen Zahlen
Jochen: zufällig sein müssen,
Jochen: sonst wäre einfach nicht genug Platz.
Jochen: Wenn da irgendwelche Muster wären,
Jochen: dann könnte man das irgendwie
Jochen: diagonalisieren oder so.
Jochen: Das darf nicht gehen. Die allermeisten müssen
Jochen: zufällig sein. Aber das ist was ganz Schlimmes.
Jochen: Das ist ein ganz schlimmes Argument, Jochen, weil
Johannes: jetzt kommst du
Johannes: auf einen ganz schlimmen Punkt in der Mathematik.
Johannes: Die allermeisten reellen Zahlen
Johannes: können wir nicht erfassen.
Johannes: Die können wir nicht sehen.
Johannes: Die können wir, die sind, das sind so völlig
Johannes: doofe, das sind so
Johannes: völlig doofe Zahlen wie Pi. Und das sind
Johannes: die allermeisten und wir kennen vielleicht
Johannes: drei davon.
Johannes: Aber es sind die allermeisten.
Johannes: Ja, und das finde ich
Johannes: sehr unangenehm. Genau.
Jochen: Und Vorstellung. Da gibt es ja dann dieses
Jochen: Bild von den, das hat ja bestimmt auch schon jeder mal gehört,
Jochen: von den, diese
Jochen: Infinite Monkeys, so relativ viele Affen,
Jochen: wenn die nur lange genug irgendwie auf ihre
Jochen: Schreibmaschinen eindreschen, dann
Jochen: kommt dabei auch mal Shakespeare raus oder so.
Jochen: Jede von diesen Zahlen muss alle Werke von
Jochen: Shakespeare in der richtigen Reihenfolge
Jochen: und so enthalten werden. Alle urheberrechtlich geschützt.
Jochen: Wenn die echt zufällig sind.
Jochen: Das kann nicht anders sein. Das muss so sein.
Jochen: Und jetzt ist halt natürlich die Frage so,
Jochen: okay, also wenn jede einzelne von diesen blöden Zahlen
Jochen: im Grunde das ganze Universum irgendwie enthält,
Jochen: weil, naja, also egal, wie man das Universum beschreibt,
Jochen: diese Beschreibung muss da auch drin vorkommen irgendwo.
Jochen: Wie kann das denn sein, dass das schon vorher existiert da draußen
Jochen: und wir es nur entdecken?
Jochen: Oder ist es dann nicht so, dass man, ja,
Jochen: wenn man das jetzt erzeugen wollte, zum Beispiel über die...
Johannes: Ja gut, aber das geht ja weg, Johan.
Johannes: Da musst du nur sagen, das Universum ist quantifiziert
Johannes: und schon existieren diese Zahlen nicht mehr.
Johannes: Ja, aber das, gut, okay,
Jochen: Universum, sehr weit gefasst jetzt nicht
Jochen: als physikalisches Universum,
Jochen: Mathematisches Universum eingeschlossen,
Jochen: wo alle mathematischen Objekte auch drin sind,
Jochen: inklusive Pi und so.
Jochen: Aber jetzt ist es doch jetzt zirkulär.
Jochen: Zirkulär?
Jochen: Aber jetzt ist es zirkulär.
Jochen: Ja.
Johannes: Du sagst, es existiert, weil wir annehmen,
Johannes: dass das Universum, in dem wir drin sind,
Johannes: das Universum ist, in dem die existieren.
Johannes: Nee, nee, ich würde sagen,
Jochen: ich meine jetzt nicht das physikalische Universum,
Jochen: sondern ganz weit gefasst,
Jochen: Also auch
Jochen: die Welt, in der halt auch
Jochen: mathematische Objekte existieren,
Jochen: da ist halt alle, also als Platoniker würde ich
Jochen: davon ausgehen, eben sowas wie Pi, das existiert
Jochen: da draußen halt nicht in unserem
Jochen: Universum natürlich, im physikalischen
Jochen: Sinne, sondern quasi
Jochen: als Konzept, als Idee. Ja, in einem
Jochen: anderen Universum, wenn es ein anderes gibt, müssen
Jochen: sie auch auf diese Idee kommen, weil
Jochen: diese Idee existiert halt unabhängig davon.
Jochen: Und ich kann auch nicht getäuscht sein, wenn man
Johannes: da sitzt oder so. Ich finde, da gibt es eine Grenze,
Johannes: Jochen. Ich verstehe, worauf
Johannes: du raus willst, dass das sozusagen was Universales ist.
Johannes: Egal, welches Universum du dir vorstellst, die
Johannes: Kreiskonstante ist immer so.
Dominik: Überall gibt es sowas wie Gravitation.
Johannes: Brauchst du nicht mal. Du brauchst nicht mal die Gravitation.
Johannes: Du brauchst nur Mathematik. In jedem Universum,
Johannes: das Mathematik enthält, gibt es die Kreiskonstante
Johannes: und die ist immer gleich. Ist aber Mathematik
Johannes: keine Gravitation? Weil Geometrie immer gleich ist.
Johannes: Nee, brauchst du nicht.
Jochen: Nee, das hat nichts mit Physik zu tun.
Johannes: Aber es gibt eine Grenze.
Johannes: Jochen, ich glaube, dass es da eine Grenze gibt.
Johannes: Weil es gibt Dinge, die sind ganz
Johannes: offensichtlich von Menschen ausgedacht.
Johannes: Ja, klar. In der Mathematik.
Johannes: Ach so, okay. Die gibt es nur,
Johannes: weil wir so denken.
Dominik: Da kannst du einfach fliegen gehen.
Johannes: Und die Frage ist, wo ist die Grenze?
Johannes: Wo sind die Sachen von Gott
Johannes: gegeben, wie man so sagt? Dieses Zitat,
Johannes: die natürlichen Zahlen
Johannes: sind von Gott gegeben.
Johannes: Menschenwerke, ja.
Johannes: Aber da gibt es eine Grenze.
Johannes: Sind die komplexen Zahlen, sind die schon ausgedacht?
Johannes: Ja, ne.
Johannes: Die haben ja schon eine Entsprechung in anderen Dingen
Johannes: drin und die findest du überall in der Physik und so weiter.
Johannes: Aber dann gehst du
Johannes: weiter, sind, keine Ahnung, ist die Monstergruppe
Johannes: ausgedacht oder nicht?
Johannes: Wobei die Monstergruppe
Johannes: ein schlechtes Beispiel ist.
Dominik: Jetzt musst du kurz erklären, was denn die Monstergruppe ist, also wenn du nicht uns drei
Dominik: meinst.
Johannes: Es gibt so eine Klassifizierung von Gruppen
Johannes: und in vielen Bereichen
Johannes: der Mathematik ist es so, dass du fünf
Johannes: sehr schöne Beispiele findest.
Johannes: Da gibt es die natürlichen
Johannes: Zahlen und die
Johannes: ganzen Zahlen und dann
Johannes: die könntest du so erweitern und
Johannes: da gibt es irgendwie fünf verschiedene Kategorien und dann gibt es
Johannes: noch drei zusätzliche,
Johannes: die einzeln sind und die eine hat
Johannes: fünf Elemente und die andere hat sieben Elemente und dann
Johannes: gibt es noch die Monstergruppe, die hat 880.973
Johannes: verschiedene Elemente.
Johannes: Irgendwie so komische Zahlen.
Johannes: Und weil die da so rausfällt, aus dieser
Johannes: schönen Klassifizierung, hast du einen schönen
Johannes: Setzkasten mit den ganzen ordentlichen Gruppen drin
Johannes: und dann hast du drei so komische dazwischen
Johannes: und dann hast du da noch die riesige Monstergruppe
Johannes: daneben. Hat die den Namen Monstergruppe.
Johannes: Okay.
Johannes: Das ist ein schlechtes Beispiel, weil die fällt halt aus diesen Klassifizierungen raus. Aber ganz viele von diesen Dingen, finde ich, sind schon eindeutig ausgedacht. Die sind so, weil wir die Definitionen so gewählt haben und daraus fallen die Sachen raus. Aber ja, das ist eine schwierige Frage.
Jochen: Ja, aber ich würde auch eben, wenn man sagt, man kommt ja an die Dinger nicht dran, wenn man es jetzt ausrechnet, dann fallen da zwar diese langen Zahlen raus, aber da braucht man Energie und Energie hat man aber nicht unendlich viel, das heißt, also Shakespeare's Werk hat rauszukriegen, wird schwierig, da braucht man irgendwie nahezu unendlich viel Energie, das heißt, man könnte ja sagen, okay, vielleicht existieren die…
Jochen: In unserem physikalischen Universum.
Jochen: Ja, genau. Ja, aber ich finde das halt schon irgendwie, damit könnte man schon was sagen, wenn ich da wahnsinnig viel Energie investieren muss, um da was, kann ich zwar beliebige Sachen daraus kriegen, aber dann wird es halt dann doch wieder eher so, also wenn ich das sozusagen in unsere Existenz holen will, dann muss ich halt irgendwie, dann bin ich plötzlich, unterliege ich wieder all diesen Beschränkungen und dann ist es doch wieder mehr erfunden, weil ja, was.
Jochen: Zeit vielleicht?
Jochen: Ich komme halt nicht, kann sein, dass es es gibt, aber ich komme halt nicht dran.
Dominik: Aber wenn das mit Zeit nützen kann,
Dominik: könnte das ja vielleicht gehen, weil in der Zeit könnte es ja noch eine andere
Dominik: Dimension versteckt haben, die dann
Dominik: nicht nur linear in der Architektur geht.
Johannes: Ja, aber das bringt nichts, weil das ist ja nicht unendlich.
Johannes: Stipsen und dann...
Jochen: Ich würde ja sagen, das ist ja im Grunde das Gleiche, ob das jetzt Zeit
Jochen: oder Energie, das kannst du ja
Jochen: gegeneinander
Jochen: aufrechnen.
Dominik: Vielleicht eine Abkürzung, so eine Meta-Abkürzung.
Dominik: Ja, keine Ahnung.
Jochen: Müssen wir vielleicht auch irgendjemanden fragen, der da mal...
Jochen: Keine Ahnung, das waren so meine Gedanken.
Jochen: Ja, vielleicht finden wir ja einen
Jochen: Mathematiker, der
Jochen: was weiß.
Jochen: Ja, das ist auch
Jochen: vielleicht eher in der Mathematik esoterisch.
Jochen: Ja,
Johannes: nee, aber solche Diskussionen sind in der Mathematik
Johannes: schon,
Johannes: die kommen immer wieder, gerade in den
Johannes: früheren Semestern. Sobald man mal ins
Johannes: Grundstudium abgeschlossen
Johannes: hat, dann, ja,
Johannes: hat man es akzeptiert. Das ist
Johannes: die Mathematik, die gibt es halt.
Johannes: Und da gibt es auch nicht alles. Ich hatte mal eine sehr lange
Johannes: Diskussion mit einem, der
Johannes: ein Student von mir,
Johannes: den ich tutoriert habe, der offensichtlich
Johannes: auch schon
Johannes: einen Hang zur Esoterik hatte
Johannes: und der dann gesagt hat, ja, aber du musst
Johannes: alles untersuchen. Warum
Johannes: untersuchst du das hier nicht? Und dann habe ich ihm bewiesen,
Johannes: wenn ich das untersuche oder wenn ich diese Annahme
Johannes: treffe, dann führt das zu Paradoxa.
Johannes: Dann falle ich direkt raus, brauche ich gar nicht
Johannes: weitermachen. Das hat er aber nicht akzeptiert, sondern
Johannes: er wollte mir dann versuchen zu erklären,
Johannes: dass das aber eine Sinneserfahrung
Johannes: ist und du musst alle Sinneserfahrungen
Johannes: versuchen, als Wissenschaftler
Johannes: musst du alles akzeptieren.
Johannes: Das ist aber nicht so, sondern
Johannes: als Mathematiker geht man da pragmatischer vor
Johannes: und sagt, ja, aber da brauche ich nicht
Johannes: weitermachen, weil das bringt mir nichts.
Dominik: Du bist ja eigentlich nur Statistiker, du hast ja so eine Approximation gemacht
Dominik: von dem, was du glaubst, was dabei rauskommt und dann doch
Dominik: dich auf deine eigene Sinneserfahrung verlassen,
Dominik: die irgendwie da so ein bisschen
Dominik: in die Glocke, in die Mitte gesetzt wird.
Dominik: Ja, Mathematik und Sinneserfahrung.
Johannes: Ja, das hat keine riesige
Johannes: Überschneidungsmenge.
Jochen: Genau, der Versuch quasi von den Sinneserfahrungen
Jochen: zu abstrahieren.
Jochen: Mit den eigenen Sinnen.
Jochen: Was natürlich schwierig ist, klar.
Jochen: Ja, sagen wir mal zu den
Johannes: praktischen Dingen.
Johannes: Ich habe auch ein News-Ding.
Johannes: Ja, genau.
Jochen: Jetzt können wir das sagen, jetzt haben wir die ganzen
Jochen: Leute vergrault irgendwie mit
Jochen: unseren letzten
Jochen: drei Zuhörern.
Jochen: Trauen wir das jetzt auch noch zu?
Dominik: Du wolltest doch nicht irgendwas sagen, du hast
Dominik: ein Learnings vom Barcamp, was man nicht machen soll.
Dominik: Achso, jetzt ist der Film wieder eingeweiht.
Dominik: Wir machen es aber gnadenlos egal.
Jochen: Und zwar, wir machen gleich noch was über MCP.
Jochen: Oder ich kann dazu was erzählen?
Jochen: Nein.
Jochen: Machen wir nicht?
Jochen: Nein.
Jochen: Ey!
Jochen: Wir machen eine eigene Folge zu MCP.
Jochen: Wir machen eine eigene Folge zu MCP?
Jochen: Ja.
Jochen: Okay, na gut.
Johannes: Also ich finde ja, MCP ist das Master Control Program.
Johannes: Genau, das fand ich auch.
Jochen: Ich habe da Vortragsvorteile.
Johannes: Oder Metoclub Ramit, je nachdem, wie man möchte.
Jochen: Na gut, dann machen wir das heute eben nicht.
Jochen: Aber das müssen wir echt dann bald machen,
Jochen: sonst weiß ich das alles nicht mehr, ich weiß das jetzt gerade.
Jochen: Mit dem Jochen unter den Nägeln.
Jochen: Ja, Mathematical Compute.
Johannes: Liebe Hörer, schreibt uns an hello
Johannes: at python-podcast.de, ob ihr
Johannes: diese Folge dringend hören wollt oder nicht.
Johannes: Ja, okay.
Johannes: Meinst du, jetzt hört noch jemand zu?
Jochen: Aber das News-Item wäre an der Stelle irgendwie
Jochen: hier, Ex-CTO von OpenAI
Jochen: hat irgendwie von einem Venture Capital
Jochen: Fonds irgendwie zwei Milliarden gekriegt,
Jochen: ohne irgendwas, bei einer Validierung von
Jochen: zehn Milliarden oder so.
Jochen: Also der ursprüngliche Entwickler von ChatGPG ist halt auch dabei,
Jochen: John Schulmann und ein paar andere Größen.
Jochen: Also ich meine, die ganzen ursprünglichen Leute
Jochen: sind ja alle nicht mehr bei OpenAI.
Jochen: Und na ja, also das ist halt völlig irre.
Jochen: Die haben kein Produkt, nichts und kriegen halt so viel Geld.
Jochen: Das ist echt Wahnsinn.
Jochen: Aber wenn man sich für MCP interessiert,
Jochen: der aktuell beste Podcast, den man hören kann,
Jochen: eine Podcast-Episode, ist tatsächlich irgendwie von einem Partner
Jochen: auch von diesem Venture Capital Fonds
Jochen: von einer Partnerin
Jochen: mit Interview mit
Jochen: David Soria Parra
Jochen: oder ich weiß gar nicht, wie man das ausspricht.
Jochen: Einer der beiden ist, die sich das
Jochen: ausgedacht haben und das ist irgendwie echt ganz nett.
Jochen: Ja, also
Jochen: aber dieser ganze Bereich ist momentan völlig
Jochen: irre. Das erinnert mich echt sehr stark
Jochen: an diese ganze DotCamp
Jochen: Bubble Ende der 90er
Jochen: und es ist irre.
Jochen: Ja, naja.
Jochen: Genau.
Jochen: Aber dann machen wir das nochmal in einer anderen Episode.
Jochen: Okay.
Dominik: Ja, dann ist es endgültig
Dominik: Zeit für den
Dominik: Unfucked.ai.
Dominik: Jetzt kommt aber ein radikaler Wechsel. Achtung, jetzt kommt ein radikaler Bruch.
Dominik: Data Class Builders.
Dominik: Ah, okay.
Dominik: Weil wir ja bei Unfucked.ai sind, das wollte ich noch einmal kurz
Dominik: erwähnt haben, das hat Johannes eben geschickt.
Dominik: Das war schön.
Dominik: Link in den Show Notes.
Dominik: Genau, für Business Leaders oder für Senior Developers.
Dominik: Wichtig.
Dominik: Alles klar.
Johannes: Ja, Kapitel 5 ist ein etwas kürzeres Kapitel
Johannes: und ich fand es sehr gemischt beim Lesen.
Johannes: Ich fand, es ist so ein bisschen, es meandert so ein bisschen
Johannes: und bringt dann so ein paar Themen einfach noch so mit rein.
Dominik: Sollen wir erst über das Ende reden, warum das ein Kurzmeld ist
Dominik: oder warum das keiner ist?
Dominik: Ja, ich stimme dem überhaupt gar nicht zu.
Dominik: Was ist denn das Argument?
Dominik: Warum sollte das denn ein Kurzmeld sein?
Johannes: Sag du doch mal, Dominik, du findest, das ist ein Kurzmeld.
Johannes: Das habe ich nicht gesagt.
Dominik: Also vielleicht geht es erstmal um, was es im Kapitel
Dominik: geht. Es geht darum, wie man
Dominik: Datenobjekte
Dominik: einfach,
Dominik: welche Instanz hier ist vielleicht falsch,
Dominik: deklariert.
Dominik: Also mit Data Class oder Named Tuple.
Johannes: Eine Klasse, die nur Daten hält und keine Funktionen hat.
Johannes: Wie so ein Named Tuple?
Johannes: Ja, zum Beispiel. Das ist eine, also gleich auf der
Johannes: ersten Seite sind drei Mechanismen
Dominik: genannt. Oder auch wie ein TypeDict Johannes.
Dominik: Named Tuple. Ne,
Johannes: das nicht. Kommt direkt auf der zweiten
Johannes: Seite, steht direkt drauf, das nicht.
Johannes: Also es gibt Collections.NameTupel, das ist schon lange in der Python-Schneider-Bibliothek seit 2.6, haben sicherlich viele schon mal gesehen, können wir gleich noch erklären, was das ist. Dann gibt es eine neue Variante davon, Typing.NameTupel und der heißeste Scheiß ist natürlich DataClasses.DataClass, ein Dekorator, der diese ganzen Sachen mitnehmen soll.
Johannes: Am Ende geht es immer darum, Klassen zu machen, die nur Attribute haben. Und im Endeffekt ist das auch alles nur so ein bisschen Zucker obendrauf gestreut, weil man könnte prinzipiell diese ganzen Sachen alle mit Dicks machen oder sogar mit Tuples, wenn man möchte. Das heißt, das Einzige, was man gewinnt, und das Einzige ist hier in sehr großen Anführungszeichen, dieses Wort Einzige, das Einzige, was man gewinnt, ist, dass das Programm besser verständlich wird.
Dominik: Ruff lintet zum Beispiel
Dominik: vom Typing-Import-Name-Tupel
Dominik: und sagt, naja, es ist Collections-Name-Tupel, bitte.
Dominik: Darfst du nicht.
Dominik: Ja, sagen die das?
Johannes: Ich bin so ein bisschen, ich bin nicht
Johannes: ganz hundertprozentig mal einverstanden mit den
Johannes: Sachen, die Ruff sagt. Und ich habe heute auch einen Ruff-Cycle
Johannes: gefunden.
Johannes: Wo ich einen Hinweis
Johannes: gekriegt habe von Ruff, der gesagt hat,
Johannes: der Generator ist unwichtig,
Johannes: ist nicht wichtig, mach bitte eine Dict-Comprehension
Johannes: draus. Dann habe ich eine Dict-Comprehension draus gemacht.
Johannes: Dann hat er gesagt, ah, das ist eine unnütze Dict-Comprehension,
Johannes: mach bitte einen Dikt-Aufruf mit Generator drin draus.
Johannes: Sehr amüsiert.
Johannes: Wie man es macht, ist falsch.
Johannes: Ruff ist ja schon so ein bisschen opinionated.
Johannes: Also nicht alles, was da von Ruff kommt, ist ganz richtig.
Johannes: Und es gibt schon einen wichtigen Unterschied
Johannes: zwischen Named Tuple und Named Tuple,
Johannes: was auch in dem Kapitel erklärt wird.
Johannes: Also die sind schon unterschiedlich.
Johannes: Aber jetzt, wo wir wissen, was eine Data Class ist,
Johannes: eine Klasse, die keine Funktionen hat,
Johannes: sondern nur Daten halten soll,
Johannes: kommt direkt in der Einleitung,
Johannes: sagen sie, ja, das ist eigentlich nicht so gut.
Johannes: Es wird an diesem Kapitel mehrmals darauf hingewiesen,
Johannes: dass namhafte Personen
Johannes: Data Classes durchaus als Code Smell sehen
Johannes: oder als Einstiegspunkt
Johannes: und als das ist noch nicht fertig ansehen.
Johannes: Und das Hauptargument, so wie ich es verstehe,
Johannes: ist, dass wenn du eine
Johannes: Data Class hast, dann bedeutet
Johannes: das, dass du eine Klasse hast, die
Johannes: nur Daten enthält und keine Funktionen hat.
Johannes: Und du musst ja aber trotzdem was
Johannes: mit den Daten machen.
Johannes: Und das bedeutet, dass die
Johannes: eigentlich schon Funktionen hat, nur dass die irgendwo
Johannes: anders drin stehen.
Johannes: Weil es nur
Johannes: ein Vehikel ist und das wäre blöd?
Johannes: Weil du
Johannes: mit Daten halt irgendwas machen musst.
Johannes: Und eigentlich bedeutet
Johannes: Data Class dann in dem Sinne,
Johannes: dass du deine Funktionen, die zu den Daten
Johannes: gehören sollten, irgendwo anders
Johannes: hinschiebst.
Johannes: Und dass du die irgendwo anders hast.
Johannes: Und ich stimme diesem
Johannes: Argument überhaupt gar nicht zu.
Johannes: Das hört sich
Johannes: für mich sehr nach, also
Johannes: ich meine diese Namen, die immer da
Johannes: gesagt bekommt, Martin, Fowler und Kent Beck,
Johannes: es hört sich für mich sehr nach
Johannes: Kingdom of the Nouns an, es hört sich für mich
Johannes: sehr nach Java an, es hört sich für mich sehr an nach
Johannes: der Code ist wichtiger als
Johannes: die Daten. Und das stimmt halt in
Johannes: ganz vielen Fällen nicht. In ganz vielen Fällen
Johannes: sind die Daten viel wichtiger als
Johannes: der Code. Was du da drin hast,
Johannes: welche Felder du hast, wie du drankommst,
Johannes: ist in ganz vielen
Johannes: Anwendungsfällen, zumindest in denen, die mir so
Johannes: begegnen, viel wichtiger als
Johannes: dann, dass die
Johannes: Funktion direkt dabei steht und dass
Johannes: du die direkt dazu packst.
Johannes: Das ist der eine Aspekt.
Johannes: Du gibst der Funktionalität
Johannes: mehr Gewicht als den Daten und das
Johannes: ist oft nicht der Fall.
Jochen: Da könnte man dann, mir fällt das Zitat
Jochen: jetzt nicht ein, aber da gibt es eines von
Jochen: Linus Torvalds, wo er sagt, naja, das ist halt
Jochen: quasi oft ein Fehler von Leuten,
Jochen: die quasi das Licht noch nicht so
Jochen: richtig gesehen haben, dass sie halt Wert auf
Jochen: Algorithmen oder sozusagen
Jochen: auf Dinge legen und wenn man dann mal
Jochen: irgendwann später da so weiß, was man tut,
Jochen: dann guckt man sich eher so die Datenstrukturen
Jochen: an und wie die eigentlich aussehen sollen
Jochen: und dann ist das mit der
Jochen: Funktionalität
Jochen: ist dann ganz klar und einfach,
Jochen: hoffentlich.
Jochen: Und ja, aber ich würde
Jochen: auch denken, dass, genau, also für mich erinnert
Jochen: das auch total an irgendwie
Jochen: objektorientierte Programmierung Ende der 90er
Jochen: ist halt irgendwie das Heilmittel für alles
Jochen: und
Jochen: aber inzwischen wird man ja sagen so,
Jochen: naja, das aktuelle Heilmittel für alles ist halt
Jochen: Domain Driven Design und
Jochen: aus der Perspektive
Jochen: ist es halt, gibt es halt zwei unterschiedliche
Jochen: Arten von Dingen, für die man halt
Jochen: Klassen hat und das ist halt, eine sind halt
Jochen: Entities, also Dinge, die
Jochen: halt irgendwie eine Identität haben,
Jochen: die halt wichtig ist. Und das andere
Jochen: sind halt so Value Objects und
Jochen: bei denen ist es halt wurscht.
Jochen: Also sowas wie zum Beispiel ein Objekt,
Jochen: das halt einen Geldbetrag repräsentiert
Jochen: und das Wichtige ist halt der Wert von dem Geld
Jochen: und aber nicht, welchen Geldschein man
Jochen: hat, das ist völlig egal. Und für
Jochen: solche Value Objects sind halt Data Classes halt auch
Jochen: total super, weil
Jochen: genau, aber
Jochen: wenn es halt State hat und
Jochen: dann braucht man halt natürlich vielleicht schon Methoden
Jochen: und so. Also ich würde auch denken, also das
Jochen: ist differenzierter, ja.
Jochen: Es gibt noch einen zweiten
Jochen: Aspekt, der mir
Jochen: da fehlt in
Jochen: dieser Argumentation.
Johannes: Der geht so ein bisschen in das, was du eben gesagt hast, die Leute, die
Johannes: sich noch nicht gesehen haben.
Johannes: Wenn man über Klassen
Johannes: nachdenkt und
Johannes: die sieht als
Johannes: eine Anzahl von
Johannes: Funktionen und ein paar Daten dazu,
Johannes: dann ist das ein anderer Blick auf das, was man tut.
Johannes: Es ist ein anderer Blick auf das Programm
Johannes: und was ein Programm kann.
Johannes: Und zwar ist es ein Blick auf einzelne Objekte.
Johannes: Weil wenn ich so eine Klasse schreibe,
Johannes: also in Python gibt es den Self-Parameter,
Johannes: in anderen Sprachen heißt der This-Parameter,
Johannes: dann gibt es immer ein Objekt, was irgendwie hervorgehoben ist.
Johannes: Das ist nämlich das Objekt, an dem ich gerade dran bin,
Johannes: in dem ich gerade drin bin.
Johannes: Wenn ich aber den Blick habe auf eine Data Class, dann geht es mir oft gar nicht so sehr um eine einzelne Instanz oder ein einzelnes Attribut von dieser Data Class, sondern dann verändert sich mein Denken hinzu, was ist denn, wenn ich tausend davon in der Hand habe?
Johannes: Was ist denn, wenn ich eine Tabelle von diesen Objekten in der Hand habe? Und dann ist auf einmal gar nicht mehr das Einzelobjekt wichtig, sondern dann ist auf einmal die Gesamtheit der Objekte wichtig.
Johannes: Was ist denn, wenn ich eine Million von diesen Geldbeträgen bekomme, was kann ich denn dann damit machen? Und diese Art zu denken oder auch diese Art zu modellieren ist in der klassischen OOP nicht naheliegend, weil im klassischen OOP denkt man eben oft über Einzelobjekte nach, weil du eben eine Klasse schreibst, die eine Instanz hat und für diese eine Instanz hast du diese Funktion dran.
Johannes: Und wenn du die Funktion auf der einen Instanz aufrufst, dann hast du diesen Blick auf die eine Instanz. Und das ist schwer zu greifen und schwer zu erklären, aber das verändert das Denken über Programmstrukturen und das verändert das Denken über die Inhalte von einem Programm.
Johannes: Und das ist was ganz
Johannes: Gefährliches zu sagen, meiner Meinung nach,
Johannes: dass das ein Codesmell ist, weil du
Johannes: nur diesen einen Blick auf Programmierung
Johannes: haben darfst.
Johannes: Und deshalb, ich bin
Johannes: da sehr skeptisch, wenn Leute sagen,
Johannes: Dataclasses, ja, das ist schon
Johannes: okay, aber hier,
Johannes: das fängt direkt an, Dataclasses are like
Johannes: children, they are okay as a starting point, but to
Johannes: participate as a grown-up object, they need to take some
Johannes: responsibility. Das heißt, die
Johannes: grob übersetzt, Datenklassen
Johannes: sind wie Kinder, das ist okay, wenn man
Johannes: damit anfängt, aber wenn man sie
Johannes: wie richtige Objekte verwenden will, dann müssen sie
Johannes: schon auch Funktionalität haben.
Johannes: Sehe ich gar nicht so und finde
Johannes: ich tatsächlich nicht gut,
Johannes: diesen Blick so zu haben.
Dominik: Aber vielleicht meint das so ein bisschen was wie,
Dominik: dann zu Pedantic überzugehen,
Dominik: was ja fast sowas ist wie eine Dataklasse,
Dominik: mit sowas wie
Dominik: Validierung dran dann noch
Dominik: oder so. Ja, aber auch
Johannes: das ist noch, Pedantic
Johannes: sind natürlich, ja, sind schon
Johannes: Dataklasses auch, oder?
Jochen: Ja, ich würde, das sind halt, da gibt es dann eben, genau, das ist ein bisschen, das kommt jetzt in dem Buch nicht so vor, weil das halt auch teilweise aktueller, also das Buch ist ja relativ aktuell, aber gerade so der auf, sozusagen das, Pydentic, ja genau, beschränkt sich mehr so auf die Standard, aber wobei ja auch das Vorbild von Dataclasses in der Standardlib ist Atris, ist halt auch nicht, ja, Hynix sollte man vielleicht mal fragen.
Jochen: Es wird auch ein Band am Ende, aber mehr so als Further Reading.
Jochen: Ja, genau, aber sozusagen Pydentic ist ja danach erst so richtig populär geworden, würde ich sagen, oder jetzt auch noch neuer Message-Spec, gibt's ja auch, ist ja vielleicht noch mal schneller und keine Ahnung, aber da muss man vorsichtig sein, also ich glaube, da vermischt man dann, also Pydentic, es ist natürlich auch praktisch, aber es vermischt halt zwei so Sachen, einmal diese Klassenbilder-Geschichte mit den Adnotationen, damit man halt sozusagen, ja, das halt kompakt hinschreiben kann, was man da für Attribute dran hat.
Jochen: Das ist bei Pydentic ja genauso.
Jochen: Und dann gibt es halt diesen Validierungsteil,
Jochen: der ist aber irgendwie anders,
Jochen: weil das hast du halt in Dataclasses
Jochen: und halt bei NameTupel oder so eigentlich nicht.
Johannes: Auch mal bei Typing.NameTupel hast du Validierung.
Johannes: Nee, gar nicht, genau.
Jochen: Und da muss man halt extrem vorsichtig sein.
Jochen: Also ich meine, das kann natürlich auch sehr praktisch sein,
Jochen: aber es gibt da auch eben von dem Entwickler von Atos
Jochen: einen sehr schönen Vortrag von der letzten PyCon US,
Jochen: wo jetzt auch die Vorträge rausgekommen sind
Jochen: und der heißt, glaube ich, Design Pressure
Jochen: und das ist eigentlich
Jochen: Der Entwickler heißt Design Pressure
Jochen: Der Vortrag heißt Design Pressure
Jochen: Aber ist das nicht
Jochen: Hinek Schlaback? Genau
Jochen: Der ist doch auch Deutscher, oder?
Jochen: Ja, genau, den sollte man auch echt mal fragen, weil
Jochen: der hat immer tolle
Jochen: Artikel zu diesen ganzen
Jochen: Tolle Software geschrieben, tolle Artikel geschrieben, macht tolle
Jochen: Videos, toller Typ, müssen wir mal fragen
Jochen: Wenn du in dieser Episode
Johannes: zeigst, ob er diesen tollen Podcast kommen möchte
Jochen: Genau. Vielleicht werden wir auch toll
Jochen: dann so ein bisschen Glanz könnte auf uns abfallen.
Jochen: Wer weiß. Mal schauen.
Jochen: Ja, genau. Und
Jochen: ja, eigentlich ist das ein Vortrag über Software-Architektur.
Jochen: Der hat ja, war ja auch Reviewer
Jochen: für hier das Architekturbuch, was ich
Jochen: immer empfehle, also das Software-Architecture
Jochen: with Python.
Jochen: Und er hat auch schon häufiger Vorträge
Jochen: über Software-Architektur gehalten.
Jochen: Und das ist auch wieder so einer.
Jochen: Und der startet mit dem
Jochen: Hot-Take irgendwie so Dinge wie
Jochen: Identik oder irgendwie diese Geschichten
Jochen: Data-Validation-Dinger,
Jochen: das macht eure Architektur
Jochen: von eurem Programm kaputt.
Jochen: Ihr Trottel!
Jochen: So, und jetzt sage ich euch mal,
Jochen: warum das so ist. So, gut, man braucht
Jochen: halt irgendwie so ein, meinte so, ja,
Jochen: ich komme ja aus der YouTube-Welt, da macht man
Jochen: das so, dass man so einen Hook platzieren muss
Jochen: und dann muss man drauf deliveren oder nicht.
Jochen: You want to believe what happens next. Genau, genau.
Jochen: Und wenn man das halt schafft, dann ist gut und wenn man
Jochen: es nicht schafft, ist halt doof, aber mal schauen.
Jochen: Und ja,
Jochen: also da
Jochen: und ich, aber ich würde sagen, im Grunde
Jochen: hat er da ganz recht, ja, also ich meine, wenn man
Jochen: jetzt das so macht, dass man
Jochen: ein paar Identik-Modelle
Jochen: verwendet, halt als
Jochen: Data-Classes-Ersatz und die dann
Jochen: halt quasi benutzt, um die eigene
Jochen: Domain, ich weiß gar nicht,
Jochen: ob es da für irgendeinen guten deutschen Begriff gibt oder so,
Jochen: dass also der Bereich, in dem die
Jochen: eigene Business-Logik stattfindet,
Jochen: zu beschreiben, dann hat man halt schon einen bösen
Jochen: Fehler gemacht eigentlich oder dann hat man
Jochen: sich in der Ecke modifiziert, aus dem man schlecht wieder rauskommt.
Jochen: Ja,
Jochen: und da muss man aufpassen. Also ich meine, man kann
Jochen: das ja auch richtig verwenden, aber es ist
Jochen: halt nicht so einfach. Also
Jochen: das ist halt schon gefährlich. Also
Jochen: insofern bei Pidentic, also
Jochen: ist auch ein sehr cooles Projekt, aber
Jochen: man muss halt echt aufpassen, dass man da
Jochen: nicht, also
Jochen: wenn man damit auf
Jochen: irgendein Problem zielt, dann hat
Jochen: der Pidentic-Lauf auch immer so die Tendenz,
Jochen: so weich zu werden und so auf den eigenen Fuß runter
Jochen: zu neigen und
Jochen: wenn man im falschen Moment schießt, dann hat man ein Loch im Fuß.
Dominik: Kannst du nochmal kurz vergleichen oder erklären, was du meinst, wann das passiert?
Jochen: Naja, also wenn du zum Beispiel anstelle einer Dataclass halt ein Pidentic-Modell verwendest.
Jochen: Warum ist das blöd?
Jochen: Naja, weil du dann zum Beispiel Pidentic importierst in deiner Business-Logik.
Jochen: Und dann bist du davon abhängig?
Jochen: Ja, genau. Du hast halt dann diese Konzerns irgendwie miteinander vermischt.
Jochen: Und dann kriegst du alle möglichen Arten von üblen Design-Problemen, Architektur-Problemen.
Jochen: Ähm, genau.
Jochen: Ja. Welche?
Jochen: Naja, äh, also
Jochen: zum Beispiel, wenn das dann halt jetzt nicht
Jochen: äh, schnell genug ist
Jochen: und du willst jetzt was anderes, eine schnellere Art
Jochen: irgendwie die Sachen zu, weil du hast das
Jochen: jetzt gekoppelt an, du spreifst das als JSON
Jochen: raus und liest JSON rein und so,
Jochen: was ja Pidentic auch ganz gut kann,
Jochen: und jetzt stellst du halt fest so, oh,
Jochen: oder gibst das über eine API raus,
Jochen: und jetzt stellst du halt fest so, oh shit, aber,
Jochen: also ich meine, das ist relativ schnell,
Jochen: aber das ist nicht so schnell, wie es geht. Also es geht natürlich,
Jochen: es gibt da Dinge draußen, die sind deutlich schneller als Pydentic
Jochen: und dann stellst du halt fest, so okay,
Jochen: irgendwie Pydentic ist zu langsam für mich.
Jochen: Du wirst Pydentic niemals
Jochen: austauschen können, da kannst du dein Ding neu schreiben, das ist halt,
Jochen: kannst du einfach völlig vergessen.
Jochen: Und
Jochen: ja, das ist halt,
Jochen: wenn man das halt
Jochen: quasi nicht so
Jochen: gebaut hat, dass man halt Pydentic austauschen
Jochen: kann, dann hat man halt, so ähnlich wie bei
Jochen: man hält von den Django,
Jochen: Models Model erbt, also oft kann
Jochen: das ja auch okay sein und bei Pydentic kann das ja auch oft
Jochen: okay sein, aber wenn du halt ein Großprojekt hast und dann
Jochen: hast du halt
Jochen: irgendwann, willst du Dinge anders
Jochen: machen, dann kann es gut sein, dass
Jochen: das nicht mehr geht.
Jochen: Ja, okay, klar, natürlich.
Jochen: Ja.
Jochen: Hm.
Jochen: Ich fand das jetzt nicht so, dass
Jochen: Kinder gegen ein Win.
Jochen: Sollen wir mal zurückkommen zum Buch?
Johannes: Ich glaube, da sind tatsächlich noch ein paar interessante Sachen drin.
Johannes: Diese, es werden ja hier
Johannes: drei Alternativen genannt.
Johannes: Also Collections.NameTupel,
Johannes: TypingNameTupel und DataClass.
Johannes: Und warum nicht
Johannes: TypeDict?
Johannes: Ja, das ist tatsächlich hier,
Johannes: da lese ich, ich zitiere,
Johannes: TypeDict may seem like another DataClass-Builder.
Johannes: Ja, das ist es nicht. However, TypeDict does not
Johannes: build concrete classes that you can instantiate.
Dominik: Genau, es ist in Kapitel 25
Dominik: oder sowas, geht ja nochmal drauf ein.
Johannes: Genau, also das macht nicht solche
Johannes: Klassen, wie wir sie hier brauchen, sondern
Johannes: das ist nur... TypeAnnotations für Dicts
Johannes: aber es funktioniert anders.
Johannes: Genau, und es ist eine böse Falle.
Jochen: Ich weiß nicht, wie oft ich das schon gesehen habe,
Jochen: dass Leute denken, dass sie dann sicher werden,
Jochen: aber nie MyPy oder sowas ausführen.
Jochen: Und dann, wenn man es dann mal ausführt,
Jochen: kriegt man halt gesagt,
Jochen: das, was du da machst mit den Type-Ticks,
Jochen: das ist bei uns alles falsch.
Jochen: Nie einer gemerkt.
Jochen: Hat dir das Claude erzählt?
Jochen: Nee, mir begegnet sowas ständig.
Jochen: Hat sich jemand ausgedacht.
Johannes: Okay, aber im Endeffekt funktionieren doch
Johannes: diese drei Verfahren
Johannes: alle irgendwie gleich. Du musst irgendwie eine
Johannes: Definition schreiben und du sagst, ich möchte jetzt eine Klasse
Johannes: haben, die soll einen Namen haben
Johannes: und die soll folgende Attribute
Dominik: haben. Und die werden dann getypt
Dominik: und getyped hinted? Ja,
Johannes: entweder getypt oder auch nicht getypt. Musst du ja nicht
Johannes: unbedingt getypt haben.
Johannes: Und selbst wenn du es getypt hast,
Johannes: kannst du es ja immer noch anders verwenden.
Johannes: Selbst wenn du deine Dataglass schön mit
Johannes: Types versehen hast, kannst
Johannes: du ja immer noch reintun, was du möchtest.
Johannes: Also ein Tuple wäre jetzt immutable,
Dominik: dann muss ich ein Frozen machen bei der Data-Klasse.
Johannes: Genau, aber das hat mit den Types nichts zu tun.
Johannes: Du kannst auch, also auch das Typing.name-Tuple
Johannes: kann ja andere Sachen nehmen.
Johannes: Das ist ja erst mal nur eine Absichtserklärung.
Johannes: Ich beabsichtige, dass dieses Attribut nur ein Int sein kann,
Johannes: aber da hält dich niemand davon ab.
Johannes: Kannst auch eine Letzte reinmachen.
Johannes: Das ist ja generell bei Python so.
Johannes: Okay, aber ich finde es interessant,
Johannes: weil im Wesentlichen gibt es da zwei verschiedene Syntax-Möglichkeiten.
Johannes: Und die eine, das ist die, die von Name-Tupel kommt,
Johannes: wo man halt sagt, ich möchte einen Name-Tupel haben
Johannes: und dann rufe ich die Funktion oder rufe ich den Konstruktor Name-Tupel
Johannes: als Konstruktor auf und sage eben, diese Datenklasse soll den Namen,
Johannes: hier haben Sie das Beispiel Coordinate haben, also Koordinate haben
Johannes: und die hat zwei Attribute, Lat und Lon.
Johannes: Und dann kriege ich da eine Klasse raus.
Johannes: Oder besser gesagt, ich kriege einen Konstruktor raus für eine Klasse.
Johannes: Ich kriege ja nicht meine ganze Klasse raus,
Johannes: sondern ich kriege nur den Konstruktor raus
Johannes: und das ist so
Johannes: ein bisschen irgendwie so eine textuelle Beschreibung und
Johannes: ich habe da immer so ein bisschen Hemmungen, das fühlt sich
Johannes: so ein bisschen an, als ob man irgendwie
Johannes: um diesen
Johannes: ja, um so Python
Johannes: außen rum geht und
Johannes: um den Interpreter
Johannes: außen rum geht und dass man irgendwelche
Johannes: langsamen, magischen Sachen
Johannes: macht, aber ich glaube
Johannes: tatsächlich, man muss da weg davon und muss sagen, okay
Johannes: dieses Herstellen der Klasse
Johannes: das ist langsam, aber das ist ja egal,
Johannes: weil das macht man nur einmal. Das
Johannes: Instanziieren, das ist dann so schnell wie ein Tupel.
Johannes: Und das ist nicht,
Johannes: und die verbrauchen auch nicht mehr Speicher. Also diese
Johannes: Namen werden nicht bei jeder Instanz
Johannes: dazu gespeichert. Das ist nicht wie bei einem
Johannes: Dictionary, sondern es ist eben ein
Johannes: Tupel. Und im Endeffekt ist es ein Tupel mit
Johannes: so einem kleines bisschen
Johannes: Karamellsoße obendrauf gestreut, wo man
Johannes: eben nicht Index 0, Index 1
Johannes: und Index 2 hat, sondern wo man eben Latitude
Johannes: und Longitude sagen kann.
Johannes: Und das bedeutet dann Index 0 und Index 1.
Johannes: Ja, das sieht viel schneller aus tatsächlich.
Jochen: Also lange Zeit war NameTupel
Jochen: auch irgendwie deutlich schneller, also wobei
Jochen: nichts ist so schnell wie tatsächlich einfach
Jochen: quasi, wenn man eine Klasse
Jochen: instanziiert, aber NameTupel war dann
Jochen: halt die schnellste Alternative.
Jochen: Und wenn man
Jochen: jetzt früher war das halt oft so,
Jochen: oder wenn man
Jochen: halt Attribut-Lookup
Jochen: macht, dann ist das bei
Jochen: NameTupel natürlich schneller.
Jochen: Also irgendwas, Instance, Punkt,
Jochen: irgendein Attribut, weil
Jochen: Tupel-Index.
Jochen: Und inzwischen macht er aber Dataclasses
Jochen: und auch, glaube ich,
Jochen: nennt Tupel, wenn man davon erbt, per Default
Jochen: irgendwie Slots. Aber vielleicht erzähle ich jetzt auch Unsinn.
Jochen: Das müsste, muss man irgendjemand nachgucken.
Jochen: Aber ich glaube, das ist tatsächlich so.
Jochen: Das Fazit ist für mich,
Johannes: das hat gar keine praktische Auswirkung.
Johannes: In keinem Fall, den ich je hatte,
Johannes: hätte das eine Auswirkung gehabt, dass die Konstruktion
Johannes: von diesen Datenobjekten
Johannes: zu langsam gewesen wäre. Das heißt, das ist auch wieder so ein
Johannes: Jagdnig-Fall. Das ist so eine Angst,
Johannes: die ich in meinem Kopf habe, die aber eigentlich
Johannes: in dem Moment noch nicht berechtigt ist.
Jochen: Eine große API-Response
Jochen: ist, oder wo du Zeugs
Jochen: reinkriegst, weil da kann das schon
Jochen: so bei, wenn du so halt irgendwie 10.000
Jochen: Dinger in Objekte verwandelst und
Jochen: dann ist halt dein Objekt erzeugt gemeinsam.
Johannes: Wenn da Jason reinkommt, hast du ja eh schon verloren.
Jochen: Ja, aber es gibt ja schnelle Jason-Parser, aber
Jochen: du musst es ja nochmal zu Objekten machen.
Jochen: Aber du kriegst ja auch einen Dikt.
Jochen: Wie auch immer,
Johannes: für mich der Takeaway ist,
Johannes: ich habe da immer so ein bisschen Hemmungen.
Johannes: Ich habe immer so ein bisschen Hemmungen, so ein Name-Tupel zu machen,
Johannes: weil das nicht so richtig in die Syntax
Johannes: passt, weil das anders aussieht, als
Johannes: andere Sachen aussehen, aber es ist gar nicht
Johannes: schlecht. Es ist gar nicht
Johannes: falsch, ein Name-Tupel zu machen.
Dominik: Ja, aber was meinst du, es sieht anders aus? Also ich finde,
Dominik: wenn du das jetzt vom Typing
Dominik: oder vom Collections importierst, dann kannst du ja
Dominik: Klasse schreiben. Sieht ja fast aus wie eine Data-Klasse,
Dominik: nur dass du nicht jetzt Data-Klassen importierst.
Johannes: Genau, das kannst du machen. Das sieht auch normal aus.
Johannes: Das ist auch was, was ich empfehlen würde.
Johannes: Das
Johannes: das Ganze machen, aber dieser Konstruktor,
Johannes: der Named-Tubel-Konstruktor, also das ist
Johannes: tatsächlich alles klein geschrieben und dann musst du da
Johannes: Strings reingeben.
Johannes: Ja, das ist schon...
Jochen: Was daran auch komisch ist halt,
Jochen: also einmal, ich finde es auch ehrlich gesagt ein bisschen hässlich,
Jochen: ich meine, das ist uralt, das gibt es schon ewig.
Jochen: Das ist super praktisch.
Jochen: Das ist natürlich manchmal super praktisch, wenn man
Jochen: halt irgendwie auf alten
Jochen: Interpreterversionen rumguckt, aber
Jochen: genau, das funktioniert wahrscheinlich bis,
Jochen: also da gibt es nichts mehr, was noch läuft, was irgendwie
Jochen: älter ist. Das funktioniert wirklich
Jochen: überall, aber also was halt auch
Jochen: blöd ist, ist, dass es halt, es geht zwar auch,
Jochen: dass man da Methoden dranhängt, aber das ist auch voll umständlich.
Jochen: Da muss man halt auch erstmal
Jochen: die Funktionen anzeugen und dann muss man
Jochen: das Ding irgendwie da dranhängen und so. Und es geht
Jochen: alles, klar, aber es ist halt schon so, wenn das
Jochen: als Methode dransteht, ist das schon leichter
Jochen: verständlich, wie das passiert. Ja, da kann man ganz viel
Dominik: hässliche Magie mitmachen. Ich glaube, wenn man so Codecoil
Dominik: spielt oder sowas, dann ist das eine Disziplin, die man so spielen kann.
Dominik: Und wer Leute verwirren will oder
Dominik: so ein bisschen Obfuscation, ne?
Dominik: Nee, nee, nee, das ist nicht gut.
Johannes: Nee, dann gehen wir über zu Typing-Name-Tupel,
Johannes: weil Typing-Name-Tupel hat nämlich Klassen-Syntax.
Johannes: Und die ist tatsächlich, ich finde die sehr schön.
Johannes: Es wird gleich noch ein Problem beschrieben werden,
Johannes: was ich auch tatsächlich sehe, jetzt, wo ich es gelesen habe.
Johannes: Aber es ist so ein bisschen so, wie man es sich vorstellt.
Johannes: Wenn man aus einer anderen Sprache kommt,
Johannes: dann sagt man, ich möchte eine Klasse haben
Johannes: und die soll folgende Attribute haben.
Johannes: Und das ist hier genauso, weil die Klassen-Syntax halt so ist,
Johannes: dass ich sage, Class, dann den Klassennamen,
Johannes: abgeleitet von Name-Touple,
Johannes: was aber so ein bisschen
Johannes: nicht ganz
Dominik: richtig ist. Weil die MRO da gar nicht
Dominik: drin ist, weil das nur in Meta-Klasse ist, weil da
Dominik: nämlich gar nicht tatsächlich Name-Touple entsteht, sondern
Dominik: ein richtiges Toupe. Genau. Und dann
Johannes: innerhalb von der Klasse gebe ich einfach
Johannes: die Attribute an, die ich haben möchte
Johannes: mit ihrem Typen. Also hier in dem Fall beispielsweise
Johannes: Latitude, Doppelpunkt Float
Johannes: und Longitude, Doppelpunkt Float.
Johannes: Und das bedeutet, dass diese Klasse
Johannes: automatisch einen Konstruktor bekommt,
Johannes: der eben diese zwei
Johannes: Attribute nimmt, entweder named oder unnamed.
Johannes: Das war so der Hauptanwendungsbereich.
Johannes: Du möchtest jetzt nicht irgendwie eine Klasse schreiben,
Dominik: wo du reinschreibst in init, nimm folgende
Dominik: Argumente, latitude und longitude und dann machst du
Dominik: save, init, lot, gleich, lang und da.
Dominik: Genau, kannst du alles selber machen,
Johannes: aber es wird dir alles abgenommen, wenn du das hier machst.
Johannes: Genau. Durch Meta-Klassen-Magie.
Johannes: Und im Endeffekt
Dominik: Jetzt ist schon das zweite Mal, dass ich
Dominik: jetzt wieder das Trinkspiel mache, was wir letztes Mal angefangen haben.
Dominik: Ja, ich weiß, das ist
Johannes: mein Wort, was
Johannes: zu oft kommt. Wir sagen das jetzt nicht
Johannes: nochmal.
Johannes: Bei Delta Classes
Johannes: ist ja im Grunde genommen
Johannes: das Gleiche, dass du so eine gewisse
Johannes: du sagst, welche Klassennamen du
Johannes: haben möchtest, welche Attribute du haben möchtest, welchen Typ
Johannes: du haben möchtest. Und da ist natürlich
Johannes: leicht, weitere Methoden hinzuzufügen.
Johannes: Die schreibst du einfach in den Klassenkörper rein.
Johannes: Ja, das mache ich auch.
Johannes: Das geht ja eigentlich schon häufig im Delta Class.
Dominik: Aber ich mache das tatsächlich relativ häufig, dass wenn irgendwie
Dominik: auffällt, ah, ich hätte noch gerne keinen und doch das Maximum
Dominik: und die Summe berechnet von irgendwas.
Dominik: Das war schon super praktisch.
Dominik: Ja, natürlich, das ist auch wichtig.
Dominik: Das ist ja dann das, was hier
Dominik: der Onkel Bob würde sagen,
Dominik: das ist gut, bist du auf dem richtigen Weg.
Dominik: I just implemented that last night.
Dominik: Genau, es ist interessant,
Dominik: weil da ist ja so ein bisschen
Johannes: Triggery drin hier, dieses Name-Tupel,
Johannes: dieses Typing-Name-Tupel, das ist ja gar keine normale
Johannes: Klasse, sondern das ist ja eine Meta-Klasse.
Johannes: Ja.
Johannes: Was ist denn jetzt so eine Meta-Klasse?
Johannes: Eine Meta-Klasse?
Johannes: Welches Kapitel ist das?
Jochen: Das ist weiter hinten, glaube ich.
Jochen: Da machen wir noch ein bisschen.
Dominik: Es sind Komplimente von Dynamic, Attribute
Dominik: and Property. Wir verschieben das.
Dominik: Das Metaprogramm ist Kapitel 24.
Dominik: Ja, also Kapitel 24.
Johannes: Also nur noch 19 weitere
Johannes: Episoden und schon sind wir über das Buch
Johannes: Fluren passen.
Johannes: Dazwischen natürlich noch die
Johannes: anderen. Okay, aber
Johannes: dann, dieses Kapitel macht ja jetzt
Johannes: hier eine total interessante Biege,
Johannes: weil das nächste
Johannes: ist ja jetzt, ah übrigens, wir müssen
Johannes: Type-Ins machen, wir müssen noch ein bisschen über Typing sprechen.
Johannes: Ja, ja, ja. Und das fand ich
Johannes: interessant, als ich es gelesen habe, weil das hatte ich,
Johannes: das war so ein Twist, den ich nicht erwartet
Johannes: hatte.
Dominik: Er hat deswegen darüber gesprochen, weil er
Dominik: gesagt hat, dass es total cool ist, wenn man
Dominik: jetzt Match-Case benutzt. Und das liegt auch daran,
Dominik: dass das... Ja, aber das ist dann der dritte,
Johannes: das ist der nächste Twist. Achso.
Dominik: Ja, das wurde ja gerade erst eingeführt, als das Buch rauskam.
Dominik: Ich glaube, deswegen ist da so die Emphasis so ein bisschen
Dominik: tiefer. Ja, vielleicht war es
Johannes: auch nicht genügend für ein, ups, jetzt geht hier
Johannes: mein Aufnahmekomputer geht gerade aus,
Johannes: die,
Johannes: vielleicht ist es auch noch nicht groß
Johannes: genug für ein eigenes Kapitel, aber ich
Johannes: finde es interessant, dass hier so Type Hints
Johannes: oder Type
Johannes: Annotations so
Johannes: in einem ganz
Johannes: anderen Kapitel versteckt
Johannes: wird.
Johannes: Und auch nicht so, dass man es jetzt,
Johannes: also ich habe mir ja die,
Johannes: das, das, habe mir ja die Inhaltsangabe
Johannes: hier die Sachen durchgelesen,
Johannes: Aber da habe ich damit gerechnet,
Johannes: dass das jetzt hier so eine
Johannes: Abbiegung macht und dann sagt, ach so, übrigens,
Johannes: hier, lassen Sie über Typen sprechen.
Johannes: Also kommt natürlich nachher noch mal,
Johannes: aber
Jochen: ja. Ja, ist natürlich schon auch so
Jochen: ein bisschen naheliegend, weil man muss halt jetzt dann
Jochen: irgendwie, wenn man schon erklärt,
Jochen: wie das da bei diesen
Jochen: Class-Bildern funktioniert, dass man halt
Jochen: über die
Jochen: Typ-Annotation im Grunde
Jochen: halt, ja,
Jochen: schon sagt, was das dann sein soll, dann muss man ja auch
Jochen: erklären, wie das funktioniert. Und dann kann man ja,
Jochen: dann muss man ja irgendwie andere
Jochen: Annotations irgendwie erwähnen und dann
Jochen: ist man ja mittendrin in den Annotationen.
Jochen: Ja, das
Johannes: man muss da so ein bisschen in den Wald reinlaufen
Johannes: und sich so ein bisschen drin verlaufen, ja. Also
Johannes: ich verstehe es schon, aber es war irgendwie
Johannes: was, hatte ich nicht erwartet.
Johannes: Und da kommt
Johannes: auch das eine Problem raus mit den Data Classes.
Johannes: Also wenn ich so eine Data Class schreibe, dann
Johannes: habe ich ja diesen Dekorator vorne dran, Data Class.
Johannes: Dataclass ist dort Dataclass, dann
Johannes: schreibe ich Class den Klassennamen, also
Johannes: in dem Fall jetzt hier ClassCoordinate
Johannes: und im Klassenkörper schreibe ich
Johannes: dann die Attribute, die die Instanzen haben sollen.
Johannes: Und das
Johannes: wird hier in dem Kapitel sehr
Johannes: deutlich gemacht und das finde ich auch sehr richtig und sehr gut,
Johannes: weil das da tatsächlich
Johannes: eigentlich eine Abwendung ist
Johannes: von dem, was Python normalerweise macht.
Johannes: Weil wenn ich normalerweise hier
Johannes: ein Attribut reinschreibe,
Johannes: also wenn ich Latitude gleich
Johannes: X reinschreibe und Longitude gleich
Johannes: Y, dann ist es ja erst mal
Johannes: ein Klassenattribut.
Johannes: Und hier
Johannes: in dem Fall, wenn ich jetzt aber
Johannes: Latitude Doppelpunkt Float,
Johannes: also Latitude getypt mit dem
Johannes: Float-Typ,
Johannes: hinschreibe, dann ist es auf einmal ein
Johannes: Instanzattribut.
Johannes: Und dieser Unterschied wird hier
Johannes: in einer gewissen Länge
Johannes: diskutiert, weil der wirklich sehr wichtig
Johannes: ist, weil es sehr leicht ist, diesen Unterschied
Johannes: zu machen, diese beiden Sachen sind sehr nah aneinander
Johannes: und die sehen sehr gleich aus, machen
Johannes: aber dann andere Dinge und sind eigentlich
Johannes: anders als das, was
Johannes: in Python so normal ist, das heißt
Johannes: da muss man schon besondere Vorsicht
Dominik: Du musst nochmal bitte den Unterschied
Dominik: genau erklären zwischen diesem
Dominik: Instanzattribut und dem Klassenattribut, ich habe nämlich schon
Dominik: mehrfach Menschen gesehen, die das so
Dominik: gewohnt waren, dass das halt dann immer
Dominik: ein Instanzattribut ist, was man
Dominik: da direkt unter die Klasse schreibt, dass sich das
Dominik: erst später festgestellt hat, dass das
Johannes: In anderen Sprachen ist das ja auch so, wenn du in
Johannes: Java oder C oder sonst wo bist, dann ist es
Johannes: genau so. Dann sagst du, die Klasse soll folgende
Johannes: Instanzattribute enthalten.
Johannes: Und in Python ist es
Johannes: aber anders. In Python sagst du, die Klasse
Johannes: soll folgende Klassenattribute
Jochen: enthalten. Der Hauptunterschied zwischen
Jochen: Klassenattributen und Instanz ist halt, dass
Jochen: ein Klassenattribut ist halt für alle Instanzen
Jochen: der Klasse gleich. Und das ist halt
Jochen: wahrscheinlich überraschender. Also diese
Jochen: Eigenschaft ist mir auch schon mehrfach blöd
Jochen: auf die Füße gefallen.
Jochen: Aber so ist es halt. Genau.
Jochen: Da muss man vorsichtig sein.
Dominik: Das heißt, wenn du das setzt, irgendwo an einer existierenden
Dominik: Entität, dann wäre das für alle
Dominik: Gesetz?
Dominik: Ja, also wenn das eine Klasse ist, zum Beispiel
Jochen: sagst halt jetzt, schaffst du es irgendwie,
Jochen: dass tatsächlich irgendwie
Jochen: ein Klassenattribut defaultmäßig
Jochen: zum Beispiel eine Liste ist, also
Jochen: indem du das auf Ecke Klammer auf
Jochen: Klammer zusetzt oder so,
Jochen: dann... Oh, das ist jetzt aber
Jochen: ganz hässlich, was du jetzt machst.
Jochen: Und du überschreibst das nicht nachher nochmal irgendwie
Jochen: in einem Konstruktor oder so, was ja dann
Jochen: oft passiert, dann ist es kein Problem mehr,
Jochen: weil in dem Moment, wo man es neu setzt oder so,
Jochen: ist es dann ein Instanzattribut
Jochen: und nicht mehr ein Klassenattribut.
Jochen: Merkt man auch nichts von, ist vielleicht ein bisschen gefährlich,
Jochen: aber wenn das nicht passiert, dann
Jochen: passieren plötzlich wilde Dinge, weil
Jochen: dann ist das halt für alle Instanzen gleich
Jochen: und es funktioniert zwar, dass man da
Jochen: Sachen appendet, aber da sind dann halt nicht nur die Sachen,
Jochen: die man selber appendet hat drin, sondern alle anderen auch.
Dominik: Deswegen ist es eine Konvention, wie man das
Dominik: macht und zwar kann man das nennen Cache
Dominik: unter Strich irgendwas
Dominik: oder, ne? Dann hast du
Dominik: einen Cache für alle Instanzen
Dominik: dieser Klasse. Dann kannst du damit merken, alle
Dominik: Errors, die aufgetreten sind, ever oder sowas.
Jochen: Ja, also das hat durchaus Gründe,
Jochen: weshalb man sowas haben will.
Dominik: Ist ganz gut, aber damit kann man sich
Dominik: hart infusieren. Also tatsächlich, das
Dominik: hatten wir, glaube ich, auch schon ein paar Mal gesagt,
Dominik: dieses Instanzieren von
Dominik: leeren Dicts oder
Dominik: Listen ist in Python generell sehr
Dominik: gefährlich. Wenn man das als Default-Argument macht,
Jochen: sollte man nicht. Ja, ganz, ganz
Jochen: gefährlich, ja. Ja, und
Johannes: Und generell Klassen, also ich mache oft Programmierkurse und das ist wirklich schwierig zu verstehen, was eine Klasse ist und was eine Instanz von einer Klasse ist und wie die zusammenhängen und was die zusammen tun und warum die das so tun.
Johannes: Und das ist echt, echt schwierig. Und jetzt gibt es hier eben genau diesen subtilen Unterschied hier. Das eine, das sieht genauso aus wie das andere, aber wenn du nicht Doppelpunkt Int hinterschreibst, dann ist es auf einmal eine Klasseninstanz.
Johannes: Ja, und das ist schon, das ist wirklich was sehr Subtiles und das geht eben weg von dem, was Python normalerweise macht. Normalerweise schreibst du in die Klasse die Klasseninstanzen rein und hier schreibst du auf einmal, wie in anderen Programmiersprachen, wo es sich natürlich anfühlt, schreibst du die Instanzeigenschaften rein, die Instanzattribute.
Jochen: Wobei dir dann natürlich zum Beispiel Data Classes
Jochen: schon auch auf die Finger haut, wenn du da
Jochen: irgendwie einfach eine Liste hinschreibst
Jochen: oder so, dann sagt dir das so,
Jochen: nee, das kannst du aber nicht machen, du musst ja irgendwie
Jochen: dann Default
Jochen: wie heißt das Ding?
Jochen: Field? Ja, eine Factory musst du rein.
Jochen: Factory angeben, genau.
Jochen: Aber da kommt es natürlich rum.
Johannes: Es gibt viele Mutable Classes
Johannes: oder viele Dinge, die du da reintun kannst,
Johannes: die eben nicht, das ist nur jetzt für Liste und
Johannes: für Dictionary und für Set ist es
Johannes: Special Cased, weil
Johannes: die so häufig vorkommen.
Jochen: Genau. Ja, also das ist gefährlich, das
Jochen: stimmt. Das ist,
Jochen: ich weiß auch nicht, wie ihr das so macht.
Jochen: normalerweise, also sicher,
Jochen: auch wenn man jetzt Konstrukturen hat von
Jochen: normalen Klassen, da ist es ja auch
Jochen: gefährlich, wenn man da irgendwie
Jochen: zum Beispiel sagt, annotiert, das ist
Jochen: jetzt eine Liste und dann sagt man gleich und dann
Jochen: Ecke, Klammer auf, Klammer zu. Und so
Jochen: viele Leute denken sich wahrscheinlich nichts dabei, wenn sie das tun, aber das
Jochen: ist halt auch schon brutal gefährlich.
Dominik: Also ich mache immer listor none
Dominik: gleich none.
Dominik: Das ist das Pattern, das muss man sich einfach
Johannes: merken. Das ist ein doofes Pattern, aber man muss es sich
Jochen: einfach merken. Aber das ist ja auch
Jochen: nicht so schön, weil einmal
Jochen: ist dann deine Typ-Annotation halt
Jochen: so ein bisschen, also einmal ist sie halt hässlich,
Jochen: würde ich jetzt mal so sagen, mit diesem
Jochen: pipe none, das ist halt
Jochen: schon so, uh.
Dominik: Es gibt doch diesen schönen unknown-typed
Jochen: hin. Der kannst du auch optional nehmen, ist auch hässlich.
Jochen: Unknown gibt es da noch
Jochen: dazu? Ja, aber Anna und
Jochen: U, da ist ja schon, wer kennt denn das?
Jochen: Annie. Ja, U.
Jochen: Oder Annie. Es gab noch
Dominik: einen dritten Type, der da so ein bisschen spezieller war,
Dominik: dass das klar ist, dass das irgendwann in der Liste hängen könnte.
Dominik: Also, was ich an der Stelle mache,
Dominik: also mir gefällt das alles nicht. Also,
Jochen: okay, Leute machen das, aber ich finde auch,
Jochen: es funktioniert nicht richtig. Wenn man jetzt
Jochen: dem statischen Typchecker sagt,
Jochen: das kann jetzt auch None sein, dann hat man damit
Jochen: so einen riesen, dann hat man sich
Jochen: einen riesen Haufen Würmer.
Dominik: Dann sagt er immer, tatsächlich, irgendwann im Kotakt
Dominik: immer, hey, du hast ja nicht auf None geprüft
Dominik: und dann lintet dir das alles, weil du
Dominik: musst vorher mal so ein Assert-as-not-none machen.
Jochen: Oder noch schlimmer, also wenn es dann halt nur
Jochen: nervt, ist ja noch, was noch schlimmer
Jochen: ist, ist halt, dass Bugs dann halt
Jochen: irgendwie unerkannt, dass halt, du kannst
Jochen: plötzlich
Jochen: Illegal-State repräsentieren. Und normalerweise sagt man
Jochen: immer so, also, make
Jochen: Illegal-State unrepresentable. Ja, das
Jochen: sollte gar nicht passieren dürfen. Da sollte der
Jochen: Type-Checker dir sagen, nee, das darf nicht None sein.
Jochen: Und du hast dieses None ja nur
Jochen: benutzt, damit du es initialisieren konntest.
Jochen: Das hat ja gar nicht, wenn in deiner Logik
Jochen: nicht None vorkommen darf,
Jochen: was ja dann oft bei diesen Initialisierungsgeschichten
Jochen: gar nicht so ist, dann darf das
Jochen: da nicht drinstehen. Und wenn
Jochen: du es trotzdem möglich machst, dass es drinsteht,
Jochen: dann machst du halt eine Büchse
Jochen: Backwürmer auf, die dich irgendwann
Jochen: beißen werden. Und die Frage ist halt
Jochen: nur,
Jochen: warum ist das?
Jochen: Oder umgekehrt, du
Johannes: machst es wie in Java,
Johannes: wo jeder Typ optional ist und hast dann auf einmal
Johannes: in jeder Scheiß-Funktion, in die du reingehst,
Johannes: musst du acht Variablen auf Null überprüfen.
Jochen: Ja, das ist natürlich auch, genau, das ist auch hässlich.
Jochen: Genauso schlecht.
Jochen: Also ich würde sagen, aus der Perspektive betrachtet
Jochen: musst du eigentlich sagen, nee, das darf
Jochen: nicht Null sein dürfen und nicht Optional
Jochen: sein dürfen. Die allermeisten Sachen, die man
Jochen: so hat, die sind nicht Optional.
Jochen: Also du würdest sagen, es ist eine leere Liste
Jochen: und wenn da eine leere Liste reinkommt, musst du es
Jochen: neu initialisieren.
Jochen: Ja, das war da auch wieder verwirrend.
Jochen: Das kannst du ja auch nicht gut machen.
Jochen: Ne, was ich an der Stelle mache, ist, ich nehme
Jochen: einen Trick von... Oh, eine Sentinel.
Jochen: Eine Sentinel. Ja, genau. Von
Jochen: Luke Plant, da habe ich das her.
Jochen: Ja. Und zwar
Jochen: definiere ich mir einen Typ namens
Jochen: Auto und
Jochen: der ist definiert
Jochen: über eine Klasse unterstrich Auto
Jochen: und das Ding, es macht
Jochen: nichts, außer, dass es nach
Jochen: Falls evaluiert
Jochen: und
Jochen: in
Jochen: In Kindern dann.
Jochen: Auto, Auto, Auto, Auto, Auto.
Jochen: Und den Typ Any hat.
Jochen: Und dann musst du nicht oder irgendwas sagen,
Jochen: sondern Any geht halt überall durch.
Jochen: Das heißt, wenn du mal eine Auto hinschreibst,
Jochen: dann kann man die Typ-Annotation richtig lassen
Jochen: und Auto geht halt trotzdem durch.
Jochen: Aber Any geht überall durch, das ist doch falsch.
Jochen: Nee, aber das ist so.
Jochen: Aber das ist falsch.
Jochen: Dadurch, dass Auto Any hat,
Jochen: ist es egal, welche Typ-Annotation du vorher dran geschrieben hast,
Jochen: ist es richtig.
Dominik: Das ist übrigens PEP 696, oder?
Jochen: Das weiß ich nicht. Ich kenne die nicht auswendig.
Jochen: Wie, du kennst nicht alle
Jochen: PEPs auswendig?
Jochen: Entschuldigung.
Jochen: Und dann kannst du halt
Jochen: in dem Kurzdruck zum Beispiel dann halt
Jochen: sagen, if das Ding
Jochen: oder if not das Ding,
Jochen: dann machst du, das kannst du ja mit none auch
Jochen: nicht machen, weil none musst du in Cocktailweise immer sagen,
Jochen: if das da ist none,
Jochen: dann setzt es neu.
Jochen: Und ja, also.
Johannes: Ja, okay, aber wie würdest du das mit dem Auto machen?
Johannes: Das habe ich jetzt nicht verstanden.
Johannes: Eine eigene Klasse Auto.
Johannes: Es ist halt Auto.
Jochen: Also das importiere ich dann irgendwo her.
Jochen: Also der Default-Wert ist Auto.
Jochen: Die Annotation ist so, wie sie halt sein soll.
Jochen: Und dann?
Jochen: Und dann sage ich, if not das Ding, dann setze ich es neu.
Johannes: Okay, aber wenn jemand eine leere Liste reingeben würde,
Johannes: würdest du es dann auch neu setzen?
Dominik: Der Unterschied ist tatsächlich nur,
Dominik: dass da halt ein None
Dominik: sparen kann.
Jochen: Aber dann würde ja, wenn das halt nicht
Jochen: okay wäre, dann würde ja der Type-Checker meckern.
Jochen: Also du hast halt nicht
Dominik: dieses If-Ding, das ist None.
Johannes: Du hast einen semantischen Unterschied
Johannes: eingeführt.
Johannes: Schreibst halt nicht If-Not-Fu,
Dominik: also du schreibst If-Not-Fu,
Dominik: dann Foo neu setzen,
Dominik: weil das halt Auto ist immer fault,
Dominik: sagst nicht Foo ist None, weil dann sparst du halt
Dominik: einfach das None, sondern... Genau, ich spare mir das None
Jochen: und ich spare mir die Is-Geschichte
Jochen: und ich mache es halt so, wie es
Jochen: Leute miteinander machen. Wobei die X-Geschichte,
Jochen: du könntest ja immer noch
Jochen: X-Is-Auto machen. Das könnte ich auch machen, ja.
Johannes: Ich würde tatsächlich sogar sagen, du musst
Johannes: das machen, weil
Johannes: nehmen wir mal an, ich rufe diese
Johannes: Funktion, die du mir gerade eben gesagt hast,
Johannes: oder diesen Konstruktor, rufe ich auf mit
Johannes: dem Parameter
Johannes: und der Parameter ist eine leere Liste.
Johannes: Und ich behalte
Johannes: die aber außen vor und benutze die an einer anderen Stelle
Johannes: nochmal. Das heißt, ich pende da Sachen rein
Johannes: Das hast du jetzt genau den Use Case,
Johannes: den Python so gefährlich macht,
Johannes: den hast du jetzt kaputt gemacht.
Johannes: Und jetzt überlassen wir jetzt,
Johannes: wir starten jetzt eine Umfrage.
Johannes: Schreiben Sie uns an hallo.python-podcast.de,
Johannes: ob das gut oder schlecht ist.
Johannes: Schlecht?
Johannes: Ja, genau.
Jochen: Also ich bin auch noch nicht endgültig zufrieden.
Jochen: Ich halte mich zurück, damit die Hörer was sagen können.
Jochen: Aber ich mache es halt jetzt gerade so.
Jochen: Ich leide dann auch mal ein bisschen darunter,
Jochen: dass zum Beispiel LLMs, die halt das gewohnt sind,
Jochen: dass Leute da Nan oder Nan schreiben.
Jochen: Denn die sind immer total verwirrt.
Jochen: So, was will der denn da jetzt?
Jochen: Und dann sagt er mir schon wieder,
Jochen: ich soll dieses Auto verwenden.
Jochen: Hä?
Jochen: Ich verstehe nur Bahnhof.
Jochen: Hast du deine Instruktionen nicht im Griff?
Jochen: Machen sie irgendwie komische Sachen.
Jochen: Und ja, ja, gut.
Jochen: Ich schreibe das dann auch immer
Jochen: in die entsprechenden Rules mit rein.
Jochen: Aber es hilft ja auch nur so begrenzt.
Jochen: Es ist ein Kreuz.
Jochen: Ich weiß auch nicht.
Johannes: Der Code ist einfach zu wenig standardkonform.
Johannes: Der ist zu wenig gewöhnlich.
Johannes: Kann man den ja noch lesen?
Johannes: Wenn er über ein Auto steht,
Johannes: weiß ja jeder, was gemeint ist.
Jochen: Nee, das wissen Leute dann halt dummerweise auch nicht,
Jochen: das wäre auch schon passiert.
Jochen: Wenn er das in NLM schaut, ich weiß.
Jochen: Ja, genau.
Jochen: Kontrollklick drauf.
Jochen: Okay, aber
Johannes: das Kapitel macht ja jetzt noch eine zweite
Johannes: Abbiegung, der Dominik hat es ja schon erwähnt.
Johannes: Und zwar Richtung Pattern Matching
Johannes: Class Instances.
Johannes: Auf einmal kommt hier in dem Kapitel noch
Johannes: Pattern Matching. Hooray.
Johannes: Was?
Johannes: Ist doch schön.
Johannes: Zweiter Twist in the end.
Johannes: Ja.
Johannes: Da war ich ja
Johannes: überhaupt gar nicht drauf vorbereitet.
Johannes: Dominik, warum magst du Pattern-Matching? Erklär mal.
Dominik: Weil ich damit relativ
Dominik: verschiedene,
Dominik: das ist erst blöd, weil das mag man eigentlich
Dominik: nicht. Also ich kann verschiedene Objekte entgegennehmen
Dominik: und die checken und dann gucken.
Dominik: Und wie geht das? Erklär mal, wie das geht.
Dominik: Du machst ein Match und ein Case auf,
Dominik: matchst dann deine Variable, die du hast
Dominik: und gibst dann verschiedene Cases. Also da hättest du gerne
Dominik: irgendwas ist
Dominik: schwieriges Beispiel,
Dominik: so eine Koordinate.
Dominik: Dann gibst du rein, dass das eine Koordinate sein könnte
Dominik: und dann hat der tatsächlich den Pfad,
Dominik: okay, hier ist eine Koordinate. Und wenn du danach
Dominik: zum Beispiel sagst, es ist eine Straßenadresse,
Dominik: dann guckt der,
Dominik: okay, hier ist eine Straßenadresse, passt da rein und geht weiter.
Dominik: Und du kannst da bestimmte Attribute
Dominik: omitten, indem du die einfach auf dann
Dominik: setzt, falls das verständlich
Dominik: ausgerückt ist. Und kannst
Dominik: damit relativ schön Cases abfangen und
Dominik: hast dann irgendwann einen Standardcase. Also so ein bisschen
Dominik: so if, then,
Dominik: if, elif, elif, elif,
Dominik: in, gut lesbar finde ich.
Dominik: Also ich mag das sehr gerne.
Dominik: Du kannst auch Types machen
Dominik: und kannst Guards machen
Dominik: und sowas. Ja, man kann ja sehr viele
Johannes: Sachen machen. Ich glaube, das verdient
Johannes: fast eine eigene Episode. Da muss man eine eigene Episode
Jochen: zu machen, haben wir noch nicht gemacht, haben wir auch schon häufiger
Jochen: geplant, aber ja, genau, das müssen wir mal machen.
Jochen: Man kann auch da, ich finde, ja,
Jochen: es ist super mächtig. Ich brauche es ehrlich gesagt
Jochen: nicht so oft. Ja, das ist
Jochen: ich bin ein großer Fan davon.
Johannes: Ich finde es großartig, das ist eines der besten
Johannes: Language Features, was es gibt, aber ich habe es noch nie verwendet.
Johannes: Das ist ganz komisch.
Johannes: Also ich meine,
Jochen: ich glaube, das ist halt auch für Leute,
Jochen: die jetzt oft Parser für irgendwelche
Jochen: Sachen schreiben oder so,
Jochen: oder halt so Domain-Specific
Jochen: Languages für irgendwas haben,
Jochen: die brauchen das wahrscheinlich oft.
Jochen: Aber das mache ich halt nicht so oft.
Jochen: Also ich, also
Johannes: das erste Mal habe ich Pattern Matching gesehen,
Johannes: da war ich noch ein junger Mann
Johannes: damals und das war
Johannes: ein Erlang. Ah, ja, ja, ja, gut.
Johannes: Und da ist es ja
Johannes: ein Core-Language-Feature, ja, da ist es ja so
Johannes: ein, ja, hier, da hast du eine Funktion und
Johannes: natürlich, das Erste, was die Funktion macht, ist
Johannes: immer erst mal Pattern-Matching.
Johannes: Und die benutzen
Johannes: das für alles, ja, wenn du hier ein None reinkriegst,
Johannes: ja, klar, dann geht die Funktion, wenn das Pattern
Johannes: hier ein None ist, dann musst du erst mal hier diesen, das
Johannes: jedes Mal.
Johannes: Und da ist es ja nicht, da geht es nicht so sehr um Parse,
Johannes: sondern da geht es ja schon irgendwie auch
Johannes: um Schnittstellen und um Datenaustausch und
Johannes: ich habe in meinem Kopf
Johannes: schon immer den Gedanken, dass
Johannes: man, wenn ich eine Schnittstelle schreibe,
Johannes: dass ich da irgendwie so ein
Johannes: Pattern-Matching reinmachen könnte.
Johannes: Aber irgendwie hat es noch nie so
Johannes: richtig gut gepasst.
Johannes: Ja.
Jochen: Weiß auch nicht. Ich weiß auch nicht.
Jochen: Kann man verschiedene Exception-Types
Jochen: gucken oder...
Johannes: Ja, aber die fange ich doch in den
Johannes: Accept-Blocks schon ab, die verschiedenen
Johannes: Exception-Types. Da gibt es doch schon Syntax für.
Johannes: Und für die verschiedenen Instanz-Typen
Johannes: muss ich eher irgendwie
Johannes: in Funktionen reinverzweigen.
Johannes: Und ich weiß irgendwie,
Johannes: ich würde es gerne mehr benutzen. Ich weiß nicht, ob das
Johannes: ein Problem an mir ist oder
Johannes: ob das ein Problem an...
Jochen: Also ein Problem war
Jochen: eine ganze Zeit lang auch, also
Jochen: jedenfalls als das Feature total frisch war, für mich
Jochen: jedenfalls auch, dass ich mir gesagt habe, ah, ich muss
Jochen: ein bisschen vorsichtig sein, dass ich das jetzt nicht
Jochen: irgendwie mich zu sehr darauf verlasse, dass es das gibt,
Jochen: weil es ist ja noch ganz neu und
Jochen: viele verwenden halt noch ältere Python-Versionen.
Jochen: Und vermutlich super langsam.
Jochen: Ja, genau, aber
Jochen: das ist ja jetzt inzwischen, ist ja
Jochen: so 3.10 ist ja jetzt schon die
Jochen: älteste Version, die man so, mit der man normalerweise
Jochen: so zu tun hat.
Johannes: Nee, 3.10, also
Johannes: 3.10 meinst du nicht? Ja, genau, und in 3.10 ist es
Jochen: genau, nicht 3.10, meinte ich nicht, nee,
Jochen: 3.10, genau. Ja, 3.10, ja, das ist,
Jochen: würde ich sagen, ja. Und da ist es ja
Jochen: dazugekommen, also insofern würde ich sozusagen, jetzt ist
Jochen: sicher, dass man es eigentlich immer verwenden kann,
Jochen: insofern, ja,
Jochen: muss man mal gucken, ob es da nicht doch mehr Use Cases gibt, als man
Jochen: so denkt, aber es ist auch, auch
Jochen: fiese Syntax, also ich habe mir dazu auch schon ein paar
Jochen: Vortrag angeschaut und man kann sich
Jochen: auch da wieder leicht in den Fuß schießen.
Dominik: Ja, was nicht so ganz so interessant ist, ist, dass wenn man so die
Dominik: Bild in Typen nimmt, also man sagt
Dominik: irgendwie Match Unknown und dann machst du
Dominik: eine Case List oder
Dominik: Tupel und wenn man die dann
Dominik: nicht instanziiert mit den Klammern,
Dominik: dann ist es Kacke, weil es always
Dominik: true ist, weil der auch die Funktion
Dominik: guckt und nicht guckt, ob es eine List oder ein Tupel ist.
Dominik: Genau.
Dominik: Dann kann man sich auch mit den Fuß schießen.
Jochen: Ja, und das ist der Default
Jochen: Fall auch immer irgendwie,
Jochen: wenn nichts anderes gefunden wird, ist es auch irgendwie etwas,
Jochen: was halt in anderen Sprachen anders ist.
Jochen: Und es gibt ja schon so ein paar
Jochen: Falschstricke.
Jochen: Naja. Und dass man den
Jochen: am besten immer handeln sollte, genau.
Jochen: In Python. Ja, aber das ist
Jochen: doch auch nervig. Ja gut, aber
Dominik: das ist ja klassische Programmierung, dass man immer
Dominik: das else für alles, was man
Dominik: nicht erwartet, schreibt.
Johannes: Wenn man das else weglassen kann,
Johannes: dann lässt man es weg.
Johannes: Tja.
Johannes: Je mehr man weglassen kann, umso mehr
Johannes: kann man weglassen. Das ist doch viel besser.
Johannes: Eigentlich schon.
Johannes: Ja, und dann ist das Kapitel auch schon vorbei.
Johannes: Dann kommt nur noch hier so ein bisschen...
Dominik: Also Else makes the universe explode.
Dominik: Also immer, wenn der Else-Case einschickt, dann alles abreißen.
Dominik: Alles vernichten.
Dominik: Ist das
Dominik: Quantum-Sort, ja?
Johannes: Kennt ihr den Quantum-Sort-Algorithmus?
Johannes: Der ist ein O-von-1-Sortier-Algorithmus.
Johannes: du machst
Johannes: eine zufällige Permutation
Johannes: von deinem Input
Johannes: und guckst, ob sie sortiert ist.
Johannes: Und wenn sie nicht sortiert ist, zerstörst du das Universum.
Johannes: Ja.
Johannes: Und das in dem Universum,
Johannes: in dem sortiert ist,
Johannes: da überlebst du immer.
Johannes: Schneller geht nicht mehr.
Johannes: Also
Johannes: dieses Kapitel macht mehrere interessante
Johannes: Wendungen und
Johannes: es schneidet einige
Johannes: Sachen an, die
Johannes: interessant sind, die aber so ein bisschen
Johannes: über Data Classes
Johannes: hinausgehen.
Johannes: Ich muss ja sagen...
Dominik: Macht ihr denn lieber einen Data Class oder lieber einen M2P?
Dominik: Lieber Data Class.
Jochen: Ja, ich auch. Lieber Data Class.
Jochen: Ich weiß jetzt gar nicht so genau, warum.
Jochen: Ja, weil das
Johannes: gutes Marketing hat.
Johannes: Man steht auch hier im
Johannes: Abschnitt Further Reading. Da sind natürlich
Johannes: viele Verweise dann drin.
Johannes: Und da steht auch drin hier, bei der
Johannes: PyCon US 2018, da gibt es einen
Johannes: Talk von Raymond Hettinger,
Johannes: den auch wir alle schon gesehen haben.
Johannes: Und ich gehe davon aus, dass die Hörer
Johannes: den auch alle gesehen haben. Der heißt Data Classes,
Johannes: the Code Generator to End All Code Generators.
Johannes: Und das hört sich ja schon
Johannes: sehr hochtrabend an. Und ich muss
Johannes: sagen, ich habe mir den Talk angeguckt
Johannes: und ich habe danach Data Classes verwendet und
Johannes: das war gar nicht so beeindruckend.
Johannes: Ja.
Johannes: Es ist irgendwie gar nicht so
Johannes: viel, was einem das macht, was
Johannes: einem das gibt.
Dominik: Deswegen auch Dreck neben Tupel, ist ein Tupel.
Dominik: Ja, man darf da gar nicht
Dominik: so viel
Johannes: drauf geben. Da werden viele Worte
Johannes: darüber gesagt und es wird viel
Johannes: darüber gesprochen, aber es ist eigentlich was
Johannes: total Simples und was total
Johannes: Kleines und Nettes und Einfaches und das
Johannes: ja.
Jochen: Ja, also es
Jochen: gibt halt so Anwendungsfälle, da verwende ich es halt sehr gerne
Jochen: für. Also zum Beispiel eben in so
Jochen: für, also wenn man jetzt halt so
Jochen: Event-Driven-Architecture hat dann
Jochen: für die Events und Commands, da
Jochen: sind Data-Classes halt super.
Jochen: Genau, für
Jochen: alle Arten von Value-Objects, wo man halt
Jochen: nichts drauf gibt, was
Jochen: das denn konkret für ein Objekt ist, wo einem nur der Wert
Jochen: von irgendwelchen Dingen interessiert, da ist
Jochen: das total super. Und für alles
Jochen: andere nehme ich normale Klassen. Also
Jochen: genau, das ist so mein Daumenregel
Jochen: für diesen Kram.
Jochen: Und ja, ich glaube, in allen Fällen, wo ich
Jochen: Data-Classes verwende, könnte ich wahrscheinlich auch einen Topfel
Jochen: verwenden, aber
Jochen: Ja, aber es ist schon
Johannes: bequemer, dass man die Namen schreiben kann.
Johannes: Das ist schon cool.
Johannes: Das kannst du bei NameTupel auch.
Johannes: Ja, genau. Aber dann kannst du nicht ein normales
Dominik: Tupel nehmen. Nee, nee, aber NameTupel ist
Dominik: doch schon... Also ich benutze fast
Dominik: kein... Ich würde, glaube ich, fast nie
Dominik: ein normales Tupel nehmen.
Dominik: Sondern statt einem normalen Tupel immer ein NameTupel,
Dominik: weil ich gerne die Namen verwende und ich mag
Dominik: Indizes nicht so. Ja.
Dominik: Ja, okay. Ich verwende
Dominik: Tupel sehr häufig.
Dominik: Ja, ich würde so implizit...
Jochen: Genau, beim Zurückgeben von irgendwelchen
Jochen: Sachen ist es halt ja automatisch so.
Johannes: Aber da benutzt du ja auch den Index nicht, da benutzt du ja Unpacking
Johannes: und dann ist ja schon diese Tupel, ist dieses Tupel
Jochen: so ein bisschen... Da willst du ja dann nicht
Jochen: ein Name-Tupel verwenden, ja. Ja doch, also warum nicht?
Dominik: Als Return-Wert ein Name-Tupel, dann hast du schon
Dominik: Type-Annotation und kannst danach auf die Attribute des Dings
Dominik: wieder zugreifen. Ach, viel zu viel Arbeit.
Dominik: Viel zu viel Arbeit.
Johannes: Einfach zwei Werte zurückgeben, zack.
Johannes: Zack, zack, dies und jenes.
Johannes: Dies und jenes wird
Dominik: vielleicht auch das und dafür wird ein Match-Case wieder gut.
Dominik: Ja, sorry.
Dominik: Ja. Ich glaube, wir haben das
Johannes: Kapitel besprochen, oder? Wir müssen mal Beispiele sehen.
Dominik: Wollt ihr noch was erzählen? Also,
Jochen: genau, was wir noch tun könnten, ist irgendwie,
Jochen: wir machen noch Picks und
Jochen: ich weiß nicht, ob irgendjemand anders anfangen
Jochen: möchte? Ja, ja, mach doch mal.
Jochen: Völlig? Ja. Okay, also. Das ist doch was Gutes.
Jochen: Ja, also was ich gerne picken würde
Jochen: und ja, ich weiß nicht, ob die
Jochen: so viele Hater haben wir gar nicht, aber
Jochen: das wäre ein guter Hook für
Jochen: die Hater. Wir hätten erst einmal einen.
Jochen: Ja. Wenn ich mich aktiv verändere.
Jochen: Und zwar, was mir
Jochen: momentan tatsächlich... Nachts um halb drei mit dem
Dominik: Tunnel, da war ich auch schon vor.
Jochen: Ja, aber was mir tatsächlich
Jochen: momentan richtig viel Spaß macht, ist
Jochen: ein Tool von Anthropic.
Jochen: Und zwar heißt das
Jochen: Claude Coote. Und
Jochen: das ist quasi so ein
Jochen: LLM-basierter
Jochen: Kommando-Teil.
Jochen: Dein neuer
Jochen: Agent, oder? Ja.
Jochen: Genau. Was ist ein Agent?
Jochen: Ja, schwierig.
Jochen: Was ist ein Agent?
Jochen: Und ja, also das Ding ist einfach nur, es ist halt ein LLM und es läuft in einer Schleife und macht halt Dinge. Und das funktioniert, also ich will jetzt gar nicht so definieren, was das ist.
Dominik: Und hast du Clues schon einen Rutschgriff auf deinen Rechner gegeben?
Jochen: Das mache ich nicht, aber in Projekten, wo ich weiß, wenn das committed ist oder gepusht, dann kann das halt auch weglöschen, ist nicht so schlimm.
Dominik: Ja, gib dir doch mal ein, zwei Server, da kannst du dich austoben.
Dominik: Ein bisschen Budget dafür.
Dominik: Ja. Ich hab mal gefragt,
Dominik: also auch Claude, ob
Dominik: der ist jetzt eigentlich
Dominik: mich ersetzt oder ist das,
Dominik: was ist das so für eine Beziehung?
Dominik: Muss ich Angst haben
Dominik: oder augmentiert mich das eher oder sowas?
Dominik: Und Claude meinte dann so, hey, ist eher so eine Bromance.
Dominik: Ja, okay.
Dominik: Das glaube ich bei dir,
Dominik: Dominik, das glaube ich bei dir.
Dominik: Ja.
Dominik: I agree.
Johannes: Die Bromance zwischen dir und KI.
Johannes: Aber
Jochen: also ich würde es einfach mal,
Jochen: man kann das nicht gut beschreiben, man muss das mal ausprobieren
Jochen: und da ist das eigentlich schon sehr
Jochen: cool. Also ich benutze das
Jochen: jetzt in letzter Zeit super häufig
Jochen: und das hat mir schon echt viel...
Dominik: Super häufig ist es untertrieben, weißt du, wenn du jochen beim Arbeiten
Dominik: zu guckst, dann schlägst du die ganze
Dominik: Zeit nur drauf und dann so, nö,
Dominik: ja, doch, vielleicht, ach, mach noch mal
Dominik: so. Ja, aber
Jochen: das ist auch schon wichtig, also ich gucke schon noch drauf
Jochen: und ich... Also das heißt, das
Dominik: draufgucken ist das, was dich von Vibe unterscheidet?
Jochen: Ist das dann... Ja, ja, nee, das ist nicht Vibe-Coding.
Jochen: Also ich nenne das manchmal
Jochen: bosnacherweise Vibe-Coding. Nein, nein, das ist nicht Vibe-Coding.
Jochen: Um die Leute zu ärgern,
Jochen: die... Keine Sorge,
Jochen: das ist nicht Vibe-Coding.
Dominik: Ja, es gibt ja zwei Menschen, glaube ich, die sich mit dem Begriff
Dominik: Vibe-Coding so ein bisschen schwer tun. Simon zum Beispiel
Dominik: sagt, das wäre gar nicht gut, weil
Dominik: der Begriff total blöd ist, weil
Dominik: er davon abdenkt, dass das total anstrengend ist.
Jochen: Das war mal gut definiert und zwar
Jochen: als Vibe-Coding ist halt dann, wenn
Jochen: in der das Ergebnis und der Code
Jochen: egal sind und du halt nur
Jochen: sozusagen basierend auf dem
Jochen: Vibe
Jochen: sozusagen den Kram baust.
Johannes: Ja, okay, das habe ich abgelesen, dass der Simon Wilson das nicht mag, weil jemand
Johannes: anders sein Wort verwendet hat, was nicht so ist,
Johannes: wie er es haben möchte. Ist doch auch Old Man
Johannes: in der Z-Cloud. Ja, aber er hat schon
Jochen: recht, also das war ursprünglich mal so definiert
Jochen: und jetzt benutzen es halt alle irgendwie anders
Jochen: und das ist natürlich schon ein bisschen doof, aber
Jochen: Egal, jedes Wort ist halt
Jochen: anders definiert. Ja, aber es gibt
Jochen: in dem Bereich halt schon so viele Worte, die halt ihre
Jochen: Bedeutung verloren haben, dass jetzt so, dass
Jochen: ja, okay, naja gut,
Jochen: ist auch wurscht, kann man auch nicht mehr zurückholen.
Jochen: Meinetwegen ist es auch
Jochen: Vibe-Coding, aber, also es ist tatsächlich so,
Jochen: dass ich damit halt
Jochen: viele Dinge irgendwie
Jochen: jetzt so machen kann, die vorher mühselig waren
Jochen: und jetzt sind sie halt nicht mehr so mühselig.
Jochen: Und auch quasi das
Jochen: über Copy-Paste und, oder
Jochen: halt über Cursor oder
Jochen: sonst wie Copilot kann man das ja auch machen.
Jochen: Das hat auch schon alles ganz gut funktioniert, aber
Jochen: Cloud-Code ist tatsächlich für mich nochmal
Jochen: eine deutliche Verbesserung. Also das ist halt,
Jochen: macht alles nochmal deutlich angenehmer.
Dominik: Das ist schon mega gut, aber da
Dominik: möchte ich tatsächlich für alle, die es noch nicht kennen,
Dominik: die meisten kennen es wahrscheinlich, mein Pick machen.
Dominik: Und zwar ist das tatsächlich
Dominik: wie der Manns Ausschuss,
Dominik: weiß ich nicht, NITN?
Dominik: Ah, mhm.
Dominik: Ich finde normalerweise so
Dominik: Logo-Sachen ziemlich schlecht und schwachsinnig
Dominik: und scheiße, aber das Ding ist
Dominik: erschreckend gut.
Dominik: In Business-Prozessen direkt anbinden
Dominik: an der Postgres, an SAP, an
Dominik: was auch immer du gerade brauchst.
Dominik: Und du kannst es dir so zusammenklicken.
Dominik: Du machst da einen Telegram-Channel dazu und dein Discord
Dominik: und hast einen Bot und ziehst da so
Dominik: zwei Lines irgendwie zusammen und
Dominik: machst dann noch einen Prompt dahin und setzt dann
Dominik: da noch eine Nachfrage für das
Dominik: Ergebnis vom Prompt, passt das dann in JSON,
Dominik: kannst einen kleinen Python-Schnipsel reinbauen.
Dominik: Also wenn ich
Dominik: Low-Code mir überlegen würde, würde ich das wahrscheinlich auch so
Dominik: machen.
Dominik: Ich würde sagen, das ist sehr gefährlich für
Dominik: unsere Profession auch.
Dominik: Also ich kann jetzt jeder Marketier hinsetzen und sagen, hey, ich bin Coder und macht sich miteinander so einen Business-Prozess, wo man vorher halt gut bezahlte Software-Ingenieure für braucht. Das ist schon so ein bisschen, schon nicht schlecht. Also da sind wir wieder bei dem Pick, den ich eben schon gespoilert habe, den der Johannes verraten wollte.
Dominik: Nee, das ist nicht mein Pick.
Dominik: Gut, dass das nicht dein Pick war.
Dominik: Aber das macht es ja schon so ein bisschen.
Dominik: Das ist, ja, erzeugt halt viel Zeugs, viel Code,
Dominik: den man halt kaputt machen kann oder halt auch nicht.
Dominik: Oder ist der kaputt?
Dominik: Wen braucht man dafür?
Dominik: Die richtigen Ingenieure wie uns, um das wieder zu reparieren?
Dominik: Oder schafft das dann Cloud Code selber?
Jochen: Naja, also ich meine, für den Anwendungsfall,
Jochen: dass du halt überhaupt erstmal irgendwie rausfinden willst,
Jochen: ob das etwas ist, was du gebrauchen kannst
Jochen: oder nicht, dafür ist das
Jochen: wahrscheinlich schon nicht so schlecht. Nein, aber das ist
Dominik: ein Irrtum. Es geht nicht nur darum, rauszufinden,
Dominik: was ist das, was du willst, weil das
Dominik: ist genau das, was die,
Dominik: ich sag mal, mediocre
Dominik: Devs immer schon verkauft haben.
Dominik: Irgendein Scheiß, der gerade so
Dominik: aussieht, als würde er funktionieren und
Dominik: nach zweimal Gegenpusten zusammenbricht und das
Dominik: ist kein Unterschied mehr zu dem, was du dir einfach da
Dominik: viben kannst und das ist das, mit dem die
Dominik: meisten Leute irgendwie in der Branche irgendwie
Dominik: ihren Umsatz gemacht haben und das ist jetzt einfach quasi
Dominik: obsolet.
Jochen: Ah, obsolet, weiß ich nicht.
Jochen: Du bist ja immer noch dann abhängig auch da von dem Service
Jochen: und so. Also, naja.
Jochen: For business leaders,
Dominik: unfuckete I. How did you find us?
Dominik: My therapist recommended you.
Dominik: Are you very sorry? Yes, no, fuck you.
Dominik: Genau.
Jochen: Ja, also ich muss, ich
Jochen: stimme zu, dass das halt von den ganzen
Jochen: Dingern, die es da draußen gibt, halt tatsächlich irgendwie
Jochen: gut gemacht ist. Ich persönlich, für mich hat das
Jochen: nicht so Appeal, weil ich denke mir so, ja gut, ich schreibe halt
Jochen: Python macht für mich jetzt
Jochen: mehr Aufwand. Ich kann schon programmieren, ich brauche
Jochen: das nicht. Sehr gut, aber so eine
Dominik: Postgres-Schnittstelle mit zwei Klicks, ne?
Dominik: Ja, aber also
Jochen: ist für mich jetzt nicht so ein Aufwand, aber
Jochen: ja, gut.
Jochen: Wir werden sehen. Vielleicht, ja, keine Ahnung.
Jochen: Mein Pick geht in eine
Jochen: ganz andere Richtung.
Jochen: Turning Caffeine into Code?
Johannes: Ich picke Unregistry.
Johannes: Ich bin ja ein Docker-Anhänger
Johannes: und ein Problem, was man aber hat mit Docker
Johannes: Containern, ist, dass wenn man die lokal
Johannes: gebaut hat, auf seine Entwicklungsmaschine,
Johannes: dann muss man die
Johannes: irgendwo hin tun, damit die deploybar werden.
Johannes: Das heißt, wenn ich die auf meinem
Johannes: Produktionsserver dann ausrollen möchte, dann müssen die
Johannes: irgendwo sein. Und dieses irgendwo heißt normalerweise
Johannes: RetroG. Ja, Docker Hub
Johannes: kannst du nehmen, wenn du Open Source machst
Johannes: und wenn du keine Geheimnisse, wenn du alle
Johannes: deine Sachen
Johannes: offenlegen willst auf der Welt.
Dominik: Ansonsten ist es eine Artifactory.
Dominik: to Factory Nexus oder
Dominik: in die Amazon,
Johannes: in so eine private Registry
Johannes: für Amazon. Aber jetzt gibt es hier
Johannes: ein Projekt, das heißt Unregistry
Johannes: und
Johannes: damit kann ich direkt von meiner
Johannes: Maschine auf die Server-Maschine
Johannes: ein
Johannes: Image pushen,
Johannes: ohne über eine Registry zu gehen.
Johannes: Der Trick ist,
Johannes: also das geht natürlich manuell auch,
Johannes: ich kann natürlich manuell dieses
Johannes: Docker-Image exportieren und kann es zippen,
Johannes: und dann per SCP rüber kopieren
Johannes: und so weiter. Aber das ist zum einen
Johannes: nervig und es ist auch langsam, weil jedes Mal
Johannes: das komplette Image übertragen werden muss und nicht nur
Johannes: die Schichten, die man neu braucht.
Johannes: Und das macht Unregistry
Johannes: einfach alles im Hintergrund. Das heißt, der Trick ist,
Johannes: das tut so, als ob es ein Registry wäre
Johannes: und wenn du sagst, hier,
Johannes: push mal auf den Server, dann macht es dort einfach kurz
Johannes: ein Registry auf, dann pushst du dahin
Johannes: und dann ist es bei dem Server,
Johannes: bei dem Produktionsserver
Johannes: einfach im lokalen,
Johannes: in den lokalen Images drin und das ist
Johannes: großartig, weil das macht viele
Johannes: Deployment-Prozesse einfach super viel einfacher.
Johannes: Du musst dann aber nicht
Dominik: History und so was
Dominik: hast du dann halt weg, ne?
Johannes: Wie meinst du History? Hast du bei Docker-Containern
Dominik: nie. Na doch.
Dominik: Das zu, hast
Johannes: die, jeder Tag, den du
Johannes: pushst, ist dort. Also
Johannes: du hast kein zentrales
Johannes: Repo mehr und das ist genau das, was du möchtest.
Johannes: Okay. Wenn du
Johannes: die Sachen aufbewahren möchtest, dann brauchst du
Johannes: eine Registrierung.
Jochen: Ach so, mein History von
Jochen: Images.
Jochen: Nee, das ist ja eben
Johannes: unregistered. Das hast du jetzt nicht mehr.
Johannes: Und das will ich auch in ganz vielen Fällen einfach
Dominik: nicht haben. Ja, ist eben meistens noch ein Müll im Ballast.
Johannes: Ich habe immer nur Latest. Es gibt nur Latest.
Johannes: Aber wenn du was kaputt gemacht hast,
Dominik: da musst du ja dann wieder zurück, anstatt dass du
Dominik: vorwärts gehst. Ja, gut,
Dominik: aber das habe ich dann noch lokal.
Dominik: Na gut.
Dominik: YOLO, YOLO Driven Development.
Dominik: YOLO Vibe.
Dominik: Ja, danke
Dominik: fürs Zuhören. Das war etwas ganz anderes.
Dominik: Kommt zum Hörer-Treffen
Dominik: vorbei und wir freuen uns auf euch
Dominik: hier. Wann war das gleich noch?
Dominik: Ja, Ende August, Ende
Dominik: September. We are discussing that
Dominik: in another episode.
Dominik: Okay. Und machen wir es.
Dominik: Ja, dann bleibt uns gewogen. Hallo at peisenpodcast.de
Dominik: Dankeschön und bis bald.
Dominik: Jo, macht's gut.