Transkript: Refactoring

· Zurück zur Episode

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

Dominik

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

Dominik

Willkommen beim Python Podcast, Episode 37.

Dominik

Wir wollen heute ein bisschen über Refactoring reden und natürlich ist wieder Jochen dabei.

Dominik

Hi Jochen.

Jochen

Jo, hallo auch Dominik.

Dominik

Und wir haben heute Rolli da.

Dominik

Hi Rolli.

Hi.

Dominik

Kennt ihr vielleicht auch noch?

Dominik

Grüße.

Dominik

Ja, vielleicht erstmal ein bisschen News.

Dominik

Ich weiß nicht, so viel neues Karte.

Jochen

Haben wir News?

Jochen

Ich weiß nicht genau.

Dominik

Also am 6.

Dominik

Nikolas, das ist noch nicht so lange her, zwei Tage oder so, gab es Python 13.1.

Jochen

Ach, okay.

Jochen

Das ist an mir vorbei gekommen, das habe ich gar nicht mitbekommen.

Dominik

Habe ich bei mir jetzt überall eingebaut und stable.

Jochen

Ich glaube, das war vorgestern oder so.

Jochen

Oder gestern, ich bin gar nicht sicher.

Jochen

Vielleicht gestern ist Django 4 released worden.

Ja, stimmt.

Jochen

Ja, das ist auch eine ganz gute Neuigkeit.

Jochen

Ja.

Jochen

Es ist gar nicht so viel Neues dazu gekommen, ehrlich gesagt.

Ronny

Aber es ist super viel weggefallen.

Ronny

Also die Backwards-Inkompatibility List, oh mein Gott, die ist ungefähr fünfmal so lang wie die neuen Features.

Das ist echt krass.

Jochen

Das ist super, ja.

Dominik

So ein paar Sachen rausgeflogen, die man nicht mehr braucht oder die gefährlich sind oder so schon gar nicht so schlecht.

Ronny

Ja.

Jochen

Ja, ansonsten, weiß nicht genau.

Jochen

Machen wir auch News in anderen für andere Sprachen?

Ja.

Jochen

Ich glaube, hier PHP 8.1 das irgendwie released und da gibt es ein neues interessantes Feature mit dabei.

Jochen

Und zwar Async Await.

Jochen

So wie in Python halt auch.

Jochen

Nur anders.

Jochen

Also die Keywords, aber es ist ein bisschen anders.

Jochen

Man kann das halt, man kann halt Async-Funktionen auch so callen ohne Await.

Jochen

Was ganz interessant ist.

Jochen

In JavaScript übrigens auch so.

Jochen

Man muss halt nur, wenn man Await sagen will innerhalb von einer Funktion, irgendwie die Async definiert haben, aber man kann die auch einfach so aufrufen und ja, dann passiert irgendwie magisch das Richtige oder was Falsches oder was.

Jochen

Aber man hat halt daher das, also was in Python tatsächlich ein bisschen nervig ist, ist man halt dieses Farbigkeitsproblem der Funktionen hat, dass man halt, wenn man irgendwo Async was machen möchte, dann.

Alles Async sein, Async, ja.

Jochen

Man kann natürlich auch hingehen und sagen, okay, async.io.run oder so, aber das ist natürlich.

Dominik

Er muss dann erstmal den Event-Loop immer rausmitteln oder wenn man im Dupe da gerade ist, dann ist das auch immer ein bisschen doof

Jochen

und so, ja.

Jochen

Ja, also ich in Python ist es expliziter als in JavaScript und in PHP, aber es ist halt auch so ein bisschen unhandlicher zu benutzen vielleicht.

Jochen

Aber naja, gut.

Jochen

Ja.

Jochen

Aber das ist vielleicht auch mal wählenswert, weil damit wird in PHP auch dann irgendwann das möglich, was ja jetzt in Python, jetzt, das kommt ja jetzt in Python ist das jetzt in den ganzen Frameworks halt irgendwie so, oder zumindest Django und das ist bei den anderen weiß ich gar nicht so genau.

Jochen

Fast API halt auch, aber das war ja schon immer so angekommen, dass man halt irgendwie Asynchram machen kann und dann eben kann man halt solche Sachen machen wie auch File-Serving vom Applikationsserver aus oder halt auch Websocker ist relativ einfach und so und das geht dann halt.

Jochen

Weil ich weiß gar nicht, wie das in PHP ist.

Jochen

Da normalerweise eben Sachen PHP-File-Serven, das geht halt einfach nicht so richtig gut, weil üblicherweise hat man nach irgendwie einer Minute oder so werden die Prozesse gekillt bei den meisten Hostern.

Dominik

Ja, da brauchst du mich jetzt gar nicht fraglich.

Null kommen wir gar nicht aus mit der Sprache.

Jochen

Naja, aber genau, da geht es halt auf jeden Fall auch voran.

Jochen

Also sowieso PHP in den letzten Versionen viel dazu gekommen und ja.

Dominik

Ich kenne die mir noch vom Gegenschubsen und versuchen umzutreten.

Tja.

Jochen

Kann man natürlich auch machen.

Ja, haben wir noch andere News?

Jochen

Haben wir noch was?

Jochen

War's nicht.

Dominik

Was war denn in Dango 4 drin alles?

Dominik

Schönes.

Wisst ihr das noch?

Jochen

Ja, neuer, also Django Redis ist irgendwie.

Jochen

Also Django Redis-Client wird reingekommen war.

Dominik

Automatisch.

Dominik

Das gab ja immer sonst Dango Redis Package und das kann man direkt als Default setzen oder

Jochen

so, ne?

Jochen

Ja, es ist jetzt halt drin, weil es gab irgendwie eine Umfrage, was verwendet ihr denn so für Caching und alle nehmen Redis.

Jochen

Genau, Memcache war eingebaut im Ding und aber alle nehmen Redis, daher macht es irgendwie nicht so richtig viel Sinn, da das nicht eingebaut zu haben.

Jochen

Und ja, deswegen ist das jetzt halt drin.

Jochen

Ja, ansonsten, naja, was nicht.

Dominik

Die haben weit die Set ist rausgeflogen, glaube ich, in der

Jochen

Version oder so zu unserem Niveau.

Ronny

Aber ich glaube, das war echt mehr ein Aufräum-Release gefühlt.

Ronny

Was ja auch eine gute Sache ist und was auch sehr gut zu unserer Refactoring-Session anpasst.

Jochen

Absolut.

Jochen

Genau.

Jochen

Das ist nämlich das Thema, glaube ich.

Dominik

Genau, das Thema.

Dominik

Ja, was ist denn das überhaupt, Refactoring?

Was sagt ihr denn, was das ist?

Dominik

Also ich sag mal so, ich baute da oft meinen Code um, aber ist das schon Refactoring?

Dominik

Also immer dann, wenn man halt ein bisschen später wieder drauf guckt, merkt man halt, oh, wie war ich doof oder ego, ist das dann aber hässlich oder schlecht, was ich denn vorher gemacht habe.

Dominik

Mache ich das doch mal nochmal oder passe ein bisschen an oder machst du ganz von neu.

Dominik

Was heißt Refactoring für euch?

Dominik

Nimmt man nicht da extra Zeit für?

Dominik

Gehört das in ein Sprint oder so?

Jochen

Also ich würde jetzt mal sagen, so dem meinem Verständnis nach gehört das halt schon dazu, zu den, also wenn man sich der agilen Softwareentwicklung bedient als Prozessmethode, was auch immer wie man das nennen möchte, dann würde ich sagen, ich würde mal so Definitions of Done zum Beispiel bei Scrum.

Jochen

Sagt, wann ist was fertig und dann würde aus meiner Sicht halt dazu gehören, normalerweise, dass man sagt, man hat das auch irgendwie mal refactured oder so.

Dominik

Wie viel Prozent der Zeit würde in sowas wieder?

Ach, keine

Ahnung, das kommt drauf an.

So ein Tag?

Jochen

Je nachdem, was man macht.

Jochen

Nee, das kommt halt.

Jochen

Und manchmal muss man es vielleicht auf das komplette System refactoren, weil.

Dominik

Wer refactort das denn man selber?

Dominik

Ein anderes Team?

Dominik

Das eigene Team mit vier, fünf, sechs Augenprintsieben?

Jochen

Nee, immer der, der fragt.

Dominik

Okay, also bei uns bin ich jetzt immer ich.

Dominik

Also ich bin, weil ich mag das irgendwie, Code umzubauen.

Dominik

Ich weiß auch nicht, das ist doch so ein bisschen ein blödes Hobby.

Dominik

Also es gibt ja Zen of Python, das ist ja eigentlich eher für andere Dinge da.

Dominik

Da wollten wir auch nochmal eine Folge drüber machen.

Dominik

Aber der erste Satz ist natürlich, beautiful is better than ugly.

Jochen

Ja.

Dominik

Und ich mag das irgendwie, wenn es hübsch ist.

Dominik

Aber ist das ein guter Grund zum Reflektor, dass es halt nach und aussieht?

Dominik

Es tut halt dasselbe.

Dominik

Ist das das wartbarer?

Jochen

Aus meiner Sicht eigentlich schon.

Jochen

Aber da ist natürlich irgendwie quasi, ja, aber ich meine, man

Dominik

kann unendlich viel Zeit damit zu verbringen, immer wieder dran rumzufeilen und dass es immer alles ein bisschen hübscher ist.

Dominik

Es macht halt kein einziges Feature mehr.

Dominik

Aber das ist auch vielleicht so ein bisschen, das hatten wir schon ein paar Mal erwähnt, so dieses, warum Programmierer irgendwie, Programmierer sein, irgendwie nicht so business-lassig ist.

Wie ist nochmal dieser Talk?

Dominik

Da hatten wir schon mal drüber gesprochen.

Jochen

Weiß ich gar nicht, welche meinst du.

Dominik

Ja, ja, der weißt, du kennst auch noch, der hast du auch gesehen.

Dominik

Der war auf der DjangoCon irgendwie ganz entspannt.

Jochen

Ach, der, der erste, ne?

Jochen

Der erste Talk auf der DjangoCon EU, ja, der, ja, weil man mag halt programmieren.

Dominik

Bei Programm ist Fun oder sowas.

Jochen

Und deswegen macht man das halt und ob es irgendwie am Schluss dabei was rauskommt oder nicht, ist eigentlich dann auch so ein bisschen egal.

Ronny

Ich glaube, ganz wichtig ist halt wie in allen Bereichen, überall ist halt Pareto-Prinzip.

Ronny

Also dass man einfach schauen muss, dass man, also 80% der Red-Sachen kriegst du halt einfach in 20% der Zeit refactort und die Details, die kosten halt richtig viel.

Dominik

Die ganz wichtigen Details davon das erklären.

Ich weiß nicht.

Ronny

Es kommt immer ganz drauf an, würde ich sagen.

Ronny

Also ich meine, wenn man jetzt irgendwie an einer Software bastelt und da geht es jetzt gerade irgendwie um die, weiß ich nicht, Zahlungsschnittstelle oder Auftragsabwicklung, dann sollte man schon schauen, dass das vernünftig funktioniert und dass man da vielleicht auch eher einen Schritt weiter denkt, als einen Schritt zu kurz denkt.

Ronny

Aber es gibt ja doch in jedem System Bereiche, weiß ich nicht, irgendeine Administrationsseite, die zweimal im Jahr aufgerufen wird oder so.

Ronny

Und wenn die jetzt nicht ganz perfekt ist, jo, ich meine.

Dominik

Also du sagst ja, dann der Business Use Case, das ist eigentlich, glaube ich, eine sehr gesunde Einstellung, wenn man sagt, es geht darum, ein Business Value.

Also zumindest aus der Business ist es eine sehr gesunde Einstellung, da hat man das an.

Ronny

Aber ich würde nicht nur sagen, dass, also zum Beispiel, ich habe jetzt in einem Projekt, habe ich jetzt, ich habe ja vor einiger Zeit mir mal so ganz tolle Class-Based E-Mails für Django ausgedacht und habe jetzt in einem Projekt mal wirklich, weil ich Internationalisierung eingebaut habe, habe ich jetzt dann direkt alle E-Mails, weil ich da eh dran musste, weil ich die Templates halt anpassen musste und gucken muss, dass halt die Sprache reingegeben wird, etc.

Ronny

etc.

Ronny

Habe ich halt dann direkt gesagt, okay, ich refactor jetzt direkt alle E-Mails zu Class-Based.

Ronny

Was ist natürlich viel, viel, also das war definitiv in den 20 Prozent, ja, und nicht in den 80%.

Ronny

Aber trotzdem weiß ich jetzt halt, dass wenn ich irgendwas mit den E-Mails machen muss und vielleicht mal auch generell was anpassen, zum Beispiel nochmal irgendwie das Layout überarbeiten, was eh für irgendwann ansteht bei dem Projekt und sowas, habe ich halt danach einfach weniger Arbeit und das bot sich halt an.

Ronny

Wenn ich die Dinger eger auseinandernehme, dann mache ich das halt einfach noch mit.

Dominik

Gut, aber das ist jetzt auch wieder aus dem Effizienzgedanken heraus.

Dominik

Das heißt, du machst Refactoring deswegen, weil du später Arbeitszeit, Wartungszeit oder neue Feature-Entwicklungszeit sparst.

Ja.

Dominik

Okay, das wäre auch so ein Effizienzgedanken.

Dominik

Also quasi extrem wichtig, dass man das dann tut.

Ronny

Und es schont dann auch meine Nerven, wenn ich das dann nächstes Mal entspannter machen kann.

Dominik

Ja, das finde ich auch.

Dominik

Also ich finde so Faktoren aufgrund von, wir brauchen das vielleicht nochmal und wie das da so steht, das versteht ja keiner.

Dominik

Dass es eine Spaghetti-Band irgendwie hat irgendwas gebaut, weil er noch gar nicht wusste, wie das ging, hat das dann alles hingeschrieben.

Dominik

Das ging dann irgendwie, aber so richtig nutzbar und schön ist das alles nicht, dass es irgendwie so, wie man so kennt, so zusammengezimmert.

Ronny

Ich finde auch ein ganz wichtiger Punkt, ist, dass halt, also die meiste Software, die funktioniert, wird ja konstant weiterentwickelt.

Ronny

Es ist ja einfach so.

Dominik

Frage ich mich auch ehrlich gesagt immer, warum, aber okay.

Ronny

Und immer wenn neue Anforderungen dazu kommen, dann hat man die ja logischerweise vorher nicht bedacht, weil man ja nicht wusste, dass die kommt in den meisten Fällen, oder in vielen Fällen.

Ronny

Und das heißt, man fängt dann an, in etwas, das nicht dafür gedacht ist, mehr Sachen reinzubauen.

Ronny

Und das ist immer der Punkt, wo, glaube ich, intrinsisch einfach schon der Bedarf von einem gewissen Refactoring besteht.

Ronny

Vielleicht nicht bei der ersten und zweiten Änderung, aber irgendwann ist dann, gibt die Struktur das einfach nicht mehr her.

Dominik

Na, das ist halt genau die Frage, ne?

Dominik

Wird was moderner, muss man das dann, diesen modernen Stil, dann auch refactoren?

Dominik

Das ist aber eine Stilfrage, ja.

Dominik

Das heißt, ich habe eine schönere Skulptur, die Skulptur hat eine andere Mode als vorher.

Dominik

Und deswegen mache ich es jetzt auf die gleiche Art ein bisschen neuer, ein bisschen anders.

Dominik

Es gibt ja jede Menge Dinge, die man neu machen kann.

Dominik

Schönes Beispiel finde ich zum Beispiel Google, ja.

Dominik

Google hat unheimlich viel Energie reingesteckt in das G-MAI-Programm or so.

Dominik

Und eigentlich würde ich fast setzen, dass so quasi Feature Computer, so dem, was man sich so wünscht.

Dominik

Man kann alles dann machen, was man mit so einem E-Mail-Clientlich so machen will.

Dominik

Und die haben auch schon so viel Zeit drauf geschmissen, dass so viel Neues nicht kommt.

Dominik

Was ich jetzt immer sehe, da kommen irgendwelche Änderungen am Style, an der Grafik, die irgendwas einfach nur anders machen, die mich dann zum Beispiel eher nerven, weil ich nicht brauche, die einfach nicht will zu haben wie früher oder so, weil ich veränderungsresistent bin oder so.

Dominik

Und das ist aber dann mit Refactoring verbunden.

Dominik

Warum macht man das?

Dominik

Vielleicht, weil die Abteilung dann denkt, okay, wir haben jetzt noch vielen Sprint, weil wir wollen nicht aufgelöst werden, wir wollen irgendwas machen und dann refactern die da irgendwie rum.

Dominik

Ist halt eigentlich schon fertig, die Software.

Dominik

Und ja.

Jochen

Naja, du hast halt dann normalerweise irgendwelche Metriken, die halt an irgendeiner Stelle nicht so gut aussehen und dann machst du halt was, um das zu verbessern.

Jochen

Und manchmal wird das dann besser und manchmal wird das dann schlechter.

Jochen

Und nur schlechter für manche Leute und dann bist du halt hast du vielleicht einfach Pech.

Ja, genau.

Jochen

Aber naja, ist halt die Frage.

Jochen

Also ich meine, ja, man könnte auch sagen, Software ist irgendwann fertig, also irgendwann ist halt der Wert, den neue Features bringen, halt unter den Kosten, wenn du das halt priorisiert hast, nach irgendwie, was es reinkommt, irgendwie minus Kosten ist zu entwickeln.

Jochen

Irgendwann wird das halt negativ.

Jochen

Und aus einer Business-Sicht müsstest du dann einfach aufhören zu entwickeln.

Jochen

Aber ja, ja, stimmt.

Jochen

Mit diesem Schritt tun sich viele schwer.

Ja, genau.

Dominik

Und dann würde er sagen, okay, gehen wir jetzt jetzt fertig und machen jetzt was anderes.

Dominik

Würde ich auch sagen, dass das wäre eigentlich, irgendwann ist halt durch.

Dominik

Und dann, na klar, kann man irgendwann in zehn Jahren nochmal einen Designer draufsetzen und sagen, hey, wir machen das ein bisschen moderner, aber dann muss die API vielleicht im Hintergrund bleibt halt gleich.

Dominik

Und was ich aber als Entwickler jetzt auch sehr super finde, ist tatsächlich Code schöner machen, weil man lernt immer was.

Dominik

Also ich kann ja eigentlich nicht so viel mit den Sachen, die ich neu mache, die kann ich vorher eigentlich meistens nicht.

Dominik

Also sonst sind die immer relativ schnell fertig und dann.

Dominik

Aber wenn die neu sind, dann baue ich irgendwas Neu, dann muss ich mir ein Konzept überlegen.

Dominik

Ich weiß gar nicht, wo ich hin will.

Dominik

Und am Ende sehe ich halt immer, oh, was auf dem Weg dahin bist du irgendwelche Sackkassen gelaufen, irgendwelche Abkürzungen gegangen, die du eigentlich gar nicht gehen solltest und hast voll irgendwas vergessen und das muss man dann nach und nach irgendwie einbauen.

Dominik

Aber das sorgfältig zu machen, das dauert halt viel mehr Zeit.

Dominik

Du musst den ganzen Code kann man fast wieder neu schreiben und dann hat man am Ende was viel Schöneres da stehen.

Dominik

Und ich weiß nicht, ist das Refactoring?

Dominik

Und ja, einem halben Jahr später fand ich es wieder an und es ist wieder irgendwie so, ich bin gesagt, es hätte irgendwie schöner machen können.

Jochen

Also ich hab, äh, ich kann das ja gleich mal direkt schon mal spoilern.

Jochen

Ich habe so ein Buch gelesen, das nennt sich A Philosophy of Software Design von John Oosterhood oder so.

Jochen

Keine Ahnung, ob ich den jetzt richtig ausgesprochen habe.

Jochen

Das wurde mir empfohlen, irgendwie in einer Hacker-News-Diskussion und deswegen werde ich jetzt ganz viel daraus zitieren oder beziehungsweise Dinge sagen, die da drin stehen, weil ich davon jetzt noch eine Menge weiß und dann dubbe ich das wieder alles vergessen.

Jochen

Vielleicht habe ich jetzt schon eine ganze Menge vergessen.

Jochen

Aber da ist ein schöner Satz.

Jochen

Am Anfang steht da sowas wie, ja, also Software schreiben ist ja eigentlich toll, weil es ist halt so eine der puresten, eine der reinsten kreativen Tätigkeiten.

Weil man halt nicht.

Jochen

Weil man hat kaum Begrenzungen durch irgendwelche Dinge, sondern also alles, was man sich vorstellen kann, kann man im Grunde machen.

Jochen

Deswegen ist es halt sehr rein.

Jochen

Man ist nicht abhängig von irgendwelchen Dingen.

Jochen

Und da ist was dran.

Jochen

Ich weiß jetzt nicht, ob die meisten Leute das so sehen würden, aber das ist halt jetzt auch relativ weit auf der

Entwicklerseite schon.

Jochen

Auf der Seite, das ist halt einen Wert, wenn das schön ist, sozusagen.

Jochen

Wenn es schön ist und rein ist und keine Ahnung, dann ist das irgendwie eine wertvolle Geschichte.

Jochen

Und die andere Seite wäre halt, ah, ist doch egal, Hauptsache es tut.

Jochen

Also Hauptsache, die Features sind entwickelt und der Kunde ist glücklich.

Dominik

Und ich habe möglichst wenig Zeit dran im Rechner gesessen an der blöden Kinder, so

dass ich keine andere Sachen machen kann.

Jochen

Der Produkt Owner hat es abgenommen.

Jochen

Ja, und nach mir diesen Flut irgend so ein bisschen, also nicht, aber eher so ein pragmatischer Ansatz.

Jochen

Ich glaube, beide haben so eine gewisse Berechtigung.

Dominik

Ja, total.

Dominik

Gerade wenn ich jetzt meinen Nutzen maximiere, dann würde ich möglichst wenig Zeit am Rechner verbringen, weil ich ja damit mein Geld verdiene.

Dominik

Also tu mir so, ich werde per Auftrag bezahlt oder sowas, ja.

Dominik

Dann will ich möglichst wenig Zeit daran sitzen, weil ich möchte ja irgendwas andere Sachen machen.

Dominik

Und was dann unten drunter, wie das aussieht, ob es hübsch und hässlich ist, ist einem dann völlig egal.

Dominik

Hauptsächlich schnell damit fertig und haben das, könntest du abhaken, den Auftrag erfüllt.

Dominik

Das sieht ja quasi der Manager eh nicht, weil der guckt ja eh nicht unter die Haube, guckt ja nur, was am Ende dabei rausfällt.

Ronny

Du zahlst es halt beim nächsten, bei der nächsten Aufgabe.

Dominik

Genau, aber das, was passiert, ist mir egal.

Dominik

Und ob ich dann selber dann was Neues dran platschen muss, kann ja sein.

Dominik

Also man merkt es tatsächlich aber erst, wenn man so Speed aufnimmt, das heißt, wenn man das ordentlich macht, dann kann man diese Erweiterung, die Skalierung immer schneller machen und das, was Delivern von neuen Sachen, wenn man es ordentlich gemacht hat, ist dann einfacher.

Dominik

Oder man kann halt Copy-Pasten aus dem anderen Projekt, wenn man es ordentlich gemacht hat und kann es ganz einfach auf die neuen Sachen generalisieren.

Dominik

Das sind halt aber so Sachen, die nicht ziehen, wenn man halt immer was anderes machen muss.

Jochen

Ja, sagen wir mal so, also der, der, wenn man jetzt rein aus der Business und auch aus der, sagen wir mal so, agilen Methodologie-Sicht da drauf guckt, dann ist der, es muss halt irgendwie funktionieren und ob das Feature fertig ist oder nicht, ist halt das, was man von außen sieht und das ist halt das Relevante.

Jochen

Das ist der deutlich dominantere, der deutlich dominantere Punkt, was halt dazu führt, dass der halt auch oft sehr stark betont wird in so kommerziellen Entwicklungen.

Dominik

Ja, ja, also der Manager, der interessiert sich nur für das KPI-Feature fertig oder nicht, User-Story.

Ronny

Das ist halt der Atomar gesehen, ne?

Ronny

Also wenn man, wenn man jetzt sagt, im Endeffekt, jedes Feature ist, also wenn man sich das wie so, weiß ich nicht, eine Menge von Commits im Branch oder sowas vorstellt, jedes Feature ist ja irgendwie ein Teil auf dieser Strecke zum Produkt, das irgendwann fertig oder an einem irgendwann an einem Release-Punkt ist.

Ronny

Und wenn man das halt sehr atomar sieht, dann ist es stimmt das natürlich.

Ronny

Aber wenn man das halt übers große Ganze sieht, dann, insbesondere bei langlaufenden Projekten, die halt wirklich konstant weiterentwickelt werden, und wo vielleicht dann auch irgendwie ein Geschäftsprozess oder irgendwas, also wirklich dann Firmengeld drüber läuft, glaube ich, ist das halt viel zu kurz gedacht.

Ronny

Also ich kann da, ich habe letztens mit ein paar Entwicklern gesprochen und die waren in ihrem Projekt halt so ein bisschen nicht wirklich schlimmer, es ging so ein bisschen fing an, Richtung Zombie-Scrumb zu werden.

Ronny

Es waren relativ hohe Backquote.

Ronny

Das Team ist sehr viel Sachen hinterhergelaufen.

Ronny

Generell war so.

Dominik

Eine Backquote, ganz kurz, ist eine Anzahl an Bugs pro 100 Zeilen-Code oder wie müsste man sagen?

Ronny

Backquote ist quasi die Anzahl der Bugtickets an allen Tickets im Sprint.

Ronny

Ah, okay.

Ronny

Oder Bug-Storypoints auf die insgesamten Sprint-Storypoints gezogen, berechnet.

Ronny

Und das Team war halt latent frustriert.

Ronny

Der Product Owner hat so ein bisschen die Fähigkeit des Teams irgendwie angezweifelt, weil irgendwie da waren die Bugs und Sachen, die abgesprochen waren, haben dann plötzlich nicht mehr funktioniert.

Ronny

Das war hinsgesamt so eine so eine latente Unmut auf allen Seiten irgendwie, das lief halt einfach nicht wirklich rund.

Ronny

Und dann haben die halt angefangen, halt so ein paar größte Sachen einfach mal anzugehen.

Ronny

Weil dann war halt gerade so der eine große, das eine große Release durch und dann haben wir okay, wir machen irgendwie Coverage rein.

Ronny

Also wir zwingen Coverage in der Pipeline, also sprich, neuer Coden muss getestet sein, sonst kann ich nicht deployen, kann ich nicht, äh, committen schon, aber nicht deployen.

Ronny

Dann einfach mal geschaut, dass man einfach so Streamlining, wie kriegen wir alle möglichen Variablen beim Prot-Deployment, das immer wieder mal auf die Nase fällt.

Ronny

Wie kriegen wir das raus?

Ronny

Und immer mehr solche Sachen halt, äh, haben die halt dann angegangen.

Ronny

Und damit hat sich dann, also nicht nur, dass halt dann plötzlich die Bugquote enorm gefallen ist, das ist echt, also man glaubt nicht, was so ein simples Maß wie ich erzwinge, ich erzwinge Coverage in der Pipeline, das ist so trivial, aber es hat total geholfen und auch die anderen Sachen.

Ronny

Und auf einmal hat sich dann, haben sie mir erzählt, einen ganz neuen Drive entwickelt.

Ronny

Das ist echt faszinierend zu sehen gewesen.

Ronny

Und ja, und da hätten ja auch, da hätten die selber nicht darüber nachgedacht, dass das wirklich so einen großen Effekt haben kann.

Ronny

Aber auf einmal ist auch so diese ganze Litargie raus, wenn man plötzlich meint, hey cool, da geht was weiter, es klappt wieder, man hat plötzlich wieder auch Energie oder Muße, irgendwie Sachen anzupassen, zu refactoren, weil man halt eh das Gefühl hat, okay, es geht jetzt wieder nach oben, wir versuchen nicht irgendwie dieses Haus immer so lange zusammenzuzimmern, dass es bloß nicht auseinanderfällt, sondern man macht halt wieder was, was, ja, das Kreative, das Schöne halt.

Dominik

Ich finde das so ein bisschen schwierig, weil, ähm, du hast auch was sehr Interessantes gesagt, also weil der, wenn es halt nur um diese User-Stories geht, ne, und dann möchtest du da irgendwas Schönes entwickeln, das funktioniert dann irgendwie und dann hast du langfristig Ziele, die du erreichen kannst, wenn du am Anfang von Anfang an auf gute Qualität achtest oder halt viele Tests schreibst oder ein bisschen TDD machst, also je nachdem das, was so deine Overall Quality so ein bisschen, also wenn man ein bisschen mehr nachdenkt, vielleicht am Anfang und ein bisschen mehr Know-how sich von Anfang an Team holt, ist das, glaube ich, auch was, was sich langfristig auszahlt, ja

Dominik

, weil man sich irgendwie alles von vorne neu machen muss.

Dominik

Aus Business ist es aber so ein bisschen komisch, weil die ist es eher so, die meckern immer die ganze Zeit rum, so, warum läuft das denn noch nicht und warum sind ja noch so viele Barks und das verstehe ich alles nicht, das muss alles fertig sein und so.

Dominik

Dann aber später sind die dann gewohnt, dass sie genauso viel Zeit und Geld aufwenden müssen für Neueentwicklungen.

Dominik

Und denkst du, ja, aber eigentlich ist das ja in zwei Tagen fertig, weil wir haben ja ordentlich am Anfang einen Refactor und schön gemacht.

Dominik

Das heißt, wenn es richtig macht, könnte man die neuen Features alle direkt rausknallen, weil die super schnell gehen dann, aber das versteht dann keiner und das kann man auch nicht kommunizieren.

Dominik

Und es ist auch eher gefährlich, das zu kommen, weil dann so eine Erwartungshaltung entsteht, dass das halt immer so wäre und dass es auch nicht irgendwie clever dann vielleicht, ne?

Für so ein ganzes Team.

Ronny

Ich glaube, da ist es halt super essentiell, dass man halt einfach eine gute Vertrauensbasis mit dem Product Owner hat.

Dominik

Tja.

Jochen

Genau, oder überhaupt diese Kommunikation zwischen irgendwie, eben, ob das jetzt Product Owner ist, oder oft ist es ja so, der Produkt Owner ist ja noch so irgendwie quasi mehr oder weniger Teil des Teams, aber genau, Produkt Owner und also sagen wir Team irgendwie und dem Product Owner mit einem bezogen und halt irgendwie, im weitesten Sinne das Management oder so.

Jochen

Wenn es gar kein Vertrauen ist, schlechtest.

Dominik

Ja, genau, und auch ganz wichtig ist eigentlich, dass die Entwickler mit dem Kunden irgendwie eigentlich so viel zu tun haben oder mit dem Gedanken dieser User-Stories, dass sie halt da selber so committed drin sind, auch.

Dominik

Weil wenn halt die immer nur irgendwie ihre Tickets wegschubsen, dann ist das dann irgendwann wurscht.

Dominik

Das ist halt so eine genau so eine Komplikationssache.

Dominik

Was der eigentliche Clou wäre, ein gutes Refactoring zu machen, von Anfang an das richtig zu tun, ist halt ein gutes Teamgespräch immer am Laufen zu halten, auch mit PO.

Dominik

Und zwar nicht nur über Tickets und Leistungen und KPIs, sondern halt auch.

Jochen

Aber tatsächlich, also ich meine, das ist halt auch das, also ein zu dem, zu ganzem Agile-Kram gibt es halt auch einen kleinen Absatz in dem Buch, wo da halt so gesagt hast, ja, okay, Agile voll gut, iterativ super, irgendwie, dass die Fachkompetenz nicht an den Reichen gekommen ist.

Jochen

Also viele gute Sachen dabei, aber irgendwie, was nicht so toll ist, ist, dass diese ganzen Agile-Geschichten einen großen Wert auf diesen, was bringt es fürs Business-Punkt legen, was ja auch nicht unbedingt falsch ist, aber sozusagen sie tendieren dazu, das deutlich überzubetonen, weil es gibt halt auch diesen anderen Punkt.

Jochen

Ist das denn jetzt gut Design zum Beispiel?

Jochen

Ist das denn schön?

Jochen

Ist das denn mit der geringstmöglichen Komplexität irgendwie gebaut worden?

Jochen

Und da gibt es jedenfalls auch auf meiner Ansicht nach nichts in dem, zum Beispiel bei Scrum, was eine Rolle, die dafür zuständig wäre, das durchzusetzen.

Dominik

Das heißt, dann nächstes Jahr noch Python.

Jochen

Wenn das durch die Review beim Produktowner, der da aber nicht aus einer technischen Perspektive drauf guckt, sondern aus einer Business-Perspektive durchgeht, dann ist das ja gut.

Jochen

Und das Team wird immer dazu gesagt, es ist dafür verantwortlich, dass halt das fertig sein muss, getestet sein muss.

Jochen

Aber tatsächlich, es gibt niemanden, der dann sagen kann, okay, das lasse ich nicht live gehen, das geht so nicht, das ist Kacke.

Ronny

Aber super Lust.

Ronny

Bitte, red zu Ende.

Jochen

Ja, und das gibt es halt nicht und das ist halt etwas, was so ein bisschen fehlt und was man, wo man sagen würde, okay, aus einer taktischen Perspektive ist das irgendwie, also es führt halt, das Buch sagt, es gibt halt Unterschied zwischen taktischer Softwareentwicklung und strategischer und taktisch macht das irgendwie Sinn, die Features rauszukriegen, ja, und man hat halt auch ein Problem, wenn man das nicht hinkriegt, weil dann wird einem ja möglicherweise auch der Hahn zugedreht irgendwann, wenn man auch Refactoring zu lange dauert.

Jochen

Aber man muss halt die so strategische Perspektive auch berücksichtigen, weil ansonsten hat man halt irgendwann später ein Problem.

Jochen

Und diese Dinger summieren sich halt auf und machen Sachen halt am Schluss sehr, sehr teuer.

Jochen

Unerwarteterweise auch, ja.

Jochen

Und ich würde jetzt sagen, so Refactoring ist halt auch so ein Ding, was halt im Grunde dafür da ist, die Komplexität von so einem Software-System halt zu reduzieren.

Jochen

Das wäre so, würde ich denken, das wäre ein Ziel.

Jochen

Wäre die Frage, was ist Komplexität?

Jochen

Komplexität würde ich jetzt auch so mal definieren wie, also mit dem Buch wurde das ja pragmatisch definiert, als alles, was dazu führt, dass ein System schwerer zu ändern ist, beziehungsweise dazu führt, dass man es nicht so gut verstehen kann, ist Komplexität.

Dominik

Also entweder Abhängigkeiten oder zu hohe Abstraktionsniveaus oder zu verschachtelt, falsch namen.

Dominik

Also ich finde, das ist relativ nah an diesem Code-Review-Gedanken dran.

Dominik

Ja, also kann ich den Code gut lesen?

Dominik

Sind die Namen so, wie ich sie haben will?

Dominik

Ist die Dokumentation schön?

Dominik

Sind halt die Designs so implementiert, wie man es erwarten würde vielleicht?

Dominik

Oder ist das irgendwas ganz anderes?

Dominik

Oder sind die, macht das Sinn?

Dominik

Noch ein bisschen Style?

Dominik

Ist das so eine Frage?

Dominik

Du hast irgendwie gesagt, du wolltest den Unterschied zwischen Design und Style an der Stelle vielleicht erklären, was ja

Jochen

gemeint ist.

Jochen

Design ist tatsächlich, damit ist tatsächlich das quasi, wie funktioniert das System gemeint, nicht so sehr, wie sieht's aus oder wie sieht der Code aus, das ist alles nicht so, sondern eher, wie funktionieren die Teile miteinander.

Dominik

Also tatsächlich so Pattern.

Jochen

Nee, also wie ist, also du hast ja, also ich meine, nimm mal sowas wie Design Patterns, da sieht man vielleicht, was da damit gemeint ist.

Jochen

Das ist halt so, ja, das ist halt die Art, wie dein System designt ist.

Dominik

Also da gibt es mittlerweile so ein paar logische Strukturen, an denen man sich orientieren kann für Lösungen von bestimmten Problemen.

Jochen

Genau, aber man kann natürlich auch selber was machen, außer wenn man irgendwas tut, ich meine, es ist ja die Frage, ob man sich an diese Patterns hält oder nicht, oder die benutzt, aber man hat auf jeden Fall hinterher.

Dominik

Interessant wäre, wenn man selber was baut, wo man keine Ahnung hat, dann immer mehr Ahnung davon bekommt und das dann refactort, ohne mal, dass man jetzt die Pattern kennt, ob jetzt die Lösung, die man hat, selber Richtung dieser Pattern konvergiert.

Jochen

Ja, genau, Design Patterns ist genau das, worauf es dann halt irgendwie immer hinausläuft.

Jochen

Genau.

Jochen

Das ist eigentlich die Idee dabei, ja.

Ronny

Ich wollte noch gerade eine Sache einwerfen zu der Sache mit der fehlenden All im Scrum.

Ronny

Das ist auch eine Sache, über die ich jetzt in letzter Zeit relativ viel nachgedacht habe, weil wir ja auch ganz viele Scrum-Teams haben und im Endeffekt, es ist natürlich schon so, dass wenn du einen gut entwickler hast, dass der natürlich schon irgendwie darauf achten sollte, dass da jetzt irgendwie gute Arbeit abliefert.

Ronny

Das ist ja schon irgendwie auch Teil des Jobs.

Ronny

Aber diese Sache, dass man halt so eine Ebene höher denkt, dass man überlegt, okay, wann ist denn jetzt der Zeitpunkt gekommen, dass ich jetzt nicht das 18.

Ronny

Feature noch da reinbauen kann, sondern dass ich es halt mal irgendwie besser reflectern muss, umstrukturieren muss.

Ronny

Oder zu überlegen, wie setze ich denn jetzt die Sachen so um, dass es in einem Jahr auch noch funktioniert.

Ronny

Das sind ja Sachen, die stehen ja nicht in der User-Story drin, die stehen nicht bei den Epics drin.

Ronny

Der Product Owner hat davon keine Ahnung, weil er ja kein Techniker ist.

Ronny

Der Scrum Master ist vielleicht Technik, aber vielleicht auch nicht.

Ronny

Das heißt, er kann es auch nicht beurteilen.

Ronny

Dann hast du ein Team, was ja meistens gemischt aus Seniors und Juniors ist.

Ronny

Bei den Uniors kann man es eigentlich nicht erwarten, dass wenn jemand ganz frisch im Job ist, schon irgendwie drei Jahre im Voraus denkt.

Ronny

Und es gibt tatsächlich auch super viele Artikel dazu im Internet, die genau versuchen, diese Idee des IT-Architekten aus dem klassischen Wasserfall irgendwie in dieses, ich habe jetzt nicht Gänsefüßchen gesagt, IT-Architekt, weil das irgendwie in dieses Scrum reinzubringen.

Ronny

Und da gibt es halt auch wirklich lange Artikel und so dazu, wo halt wirklich dafür auch gesagt wird, dass man das braucht, wie du es gerade auch gesagt hast und dass es auf jeden Fall ein Muss.

Ronny

Und dann gibt es Artikel, die sagen, nein, braucht man nicht weit und so weiter.

Ronny

Und ich glaube, dass die Wahrheit liegt wie immer dazwischen und ich glaube, eine Sache, die im Scrum nicht vorgesehen ist, aber eine Lösung dafür könnte sein, halt jemand, der sich halt, sag ich mal, so als Lead-Entwickler im Team sieht.

Ronny

Das ist im Scrum ja explizit eigentlich nicht gewünscht, weil er alle gleich sind und alle haben gleich die Verantwortung.

Ronny

Aber ich glaube, so zumindest wieder.

Dominik

Aber oben und die Teams ja auch immer nicht, ne?

Ronny

Genau.

Ronny

Aber ich glaube, wenn du jemanden hast, der sich dafür verantwortlich fühlt und der das, der das technische Know-how hat, und wie gesagt, wichtig auch, dass es, dass er erstens weiß, dass er diese Rolle hat und zweitens auch, dass er das machen kann, dann glaube ich, kann das diese Brücke schon ganz gut überspannen, also diese Brücke spannen.

Ronny

Und wenn der PO dieser Person auch vertraut und wenn die Person sagt, nee, sorry, aber wir müssen uns ja das technische Ticket vorher machen, bevor wir das umsetzen, weil sonst wird sonst nichts, dann glaube ich, ist das so der Weg, den man da gut geht.

Dominik

Aber ganz interessant, du hast gerade von klassischen Wasserfall-Software-Architekten gesprochen.

Dominik

Den musst du vielleicht nochmal kurz erklären, weil den kennt vielleicht auch nicht jeder.

Ronny

Also ich bin da jetzt auch kein Experte, ich bin auch mit agiler Entwicklung, naja, nicht aufgewachsen, aber schon die, wir haben nie wirklich nach klassisch Wasserfall gearbeitet.

Ronny

Die Idee dahinter ist eigentlich, dass ein IT-Architekt, der im Agilen ist es ja, dass man iterativ und kleinteilig arbeitet und im Wasserfall ist die Idee, dass man am Anfang alle Informationen, die man hat, sammelt.

Dominik

80% Planung und dann wird umgesetzt, oder?

Ronny

Genau, und also darum auch Wasserfall, du fängst halt quasi oben an und danach geht das diese Stufen einfach immer runter und am Schluss kommt halt in Gänsefüßchen eine fertige Software raus.

Ronny

Und da sind halt einfach ganz viele Probleme, weil, wie gesagt, Software ist nie fertig und Wasserfall macht doch keinen Sinn.

Ronny

Und der IT-Architekt ist halt derjenige, der unter anderem halt dieses Lasten- und der Pflichtenheft schreibt initial.

Ronny

Also spricht, der sich dann auch nicht.

Dominik

Da ist der Entwickler dann aber auch.

Dominik

Der quasi der Entwickler ist, ein IT-Architekt in dem Falle und

Ronny

nicht zwingend.

Ronny

Also ich glaube, es ist tatsächlich auch eine eigene Rolle gewesen oder ist es noch.

Ronny

Also je größer die Firma, umso mehr Rollen hast du da logischerweise.

Ronny

Aber ich glaube, die Idee ist wirklich, dass es jemand, der gar kein zwingender Entwickler sein muss, der aber trotzdem halt technisches Know-how hat und der versucht, alle Abhängigkeiten und Eventualitäten, die dieses System betrifft, also alles, was man an Setup, Surroundings und so weiter hat, alles bedenkt und das alles niederschreibt.

Dominik

Ja, dann braucht der eigentlich relativ viel Ahnung vom eigentlichen Business, ja, und vom Kunden, ja, für alles, was.

Ronny

Und halt auch technisch, also das ist das Wichtige, also dass man zum Beispiel sagt, weiß ich nicht, wenn ich jetzt irgendwas habe mit asynchronen Prozessen und Mailing, dass ich halt sicherstelle, dass irgendwo darüber nachgedacht ist, dass ich irgendeine Art von asynchronem Processing auch drin habe und nicht, dass das halt dann nachher irgendwann auffällt, ups, blöd, wie machen wir das denn jetzt?

Blödsinn.

Dominik

Das ist ja blockiert leider den Prozess.

Jochen

Ja, also genau, Software-Architektur ist natürlich auch so ein verwandtes Thema und ja, genau, aber ja, wer ist dafür zuständig?

Jochen

Gibt es dann meistens, also Software-Architektur, also es kann sein, dass sie dann halt nicht in den Teams immer mit drin sind, sondern übergreifend, die gucken sich das dann halt mal an und machen dann irgendwie Vorschläge oder so.

Jochen

Aber ja, es ist unterschiedlich, wie das gehandhabt wird, aber genau, also dass da irgendwie sich jemand darum kümmern müsste, mal so, ist eigentlich schon, glaube ich, relativ offensichtlich.

Jochen

Ja, aber was, was, genau, was denkt ihr denn so, genau, was macht man denn, wenn man versucht, so ein Software-System einfacher zu machen?

Jochen

Was könnte man denn da tun?

Dominik

Müsste man das Refactoren?

Jochen

Na gut, Refactoring ist jetzt sozusagen das, was man dann tut, aber wenn man, was wäre denn das Ziel von so einem Refacturing, wenn es darum geht, die Komplexität zu senken?

Dominik

Also ich würde auch, ich würde tatsächlich von diesem Schönheitsansatz ausgehen.

Ja, das ist ein bisschen abstrakt.

Dominik

Wahrscheinlich wisst ihr alle, was man damit meint, wenn ihr schon mal irgendwie ein bisschen gut geschrieben habt.

Dominik

Kennt ihr was, was agil ist und was stinkt irgendwie oder was man denkt, oh, das ist aber hübsch.

Jochen

Was wir da am Anfang irgendwie dann so um die On, ich habe das am Anfang nicht so richtig verstanden.

Jochen

Ich werde, vielleicht geht es ja anderen Leuten auch so.

Jochen

Immer wenn dann jemand drauf geguckt hat und meinte so, okay, vielleicht nicht so toll, dann hieß es immer so, ja, da muss man vielleicht mal so ein bisschen modularisieren oder so.

Jochen

Modularisierung, ich weiß nicht, ob euch das schon mal so, genau, da gibt es ein ganz berühmtes Paper von 1972, glaube ich, ist das.

Jochen

Jetzt habe ich den Titel vergessen.

Jochen

Naja, David Calas, ja, genau.

Jochen

Wo der zum ersten Mal diese Idee formuliert hat, dass wenn du jetzt ein komplexes System hast, wo viele Abhängigkeiten sind oder so, dann ist es vielleicht eine gute Idee, das System so zu teilen, dass man nur noch einzelne Teile quasi verstehen muss und nicht alles auf einmal.

Microservices.

Jochen

Und ja, wie man das dann macht, ist eigentlich relativ egal.

Jochen

Du kannst es mit Microservices machen, du kannst es aber auch mit Funktionen machen, mit Klassen, mit Modulen, Paketen, was auch immer.

Jochen

Völlig egal.

Jochen

Das ist letztlich nicht der wichtige Teil, sondern der wichtige Teil ist quasi, kannst du dein System so aufteilen, dass sich die Komplexität deines Gesamtsystems reduziert auf die Komplexität des komplexesten Moduls sozusagen.

Dominik

Ja, das finde ich.

Jochen

Idealfall.

Dominik

Also weil zum Beispiel in Dango gelingt es mir nicht immer, dass man so die Sachen voneinander trennt, weil viele Sachen sind von User-Sap-Abhängig oder sowas, dass das nicht so einfach, dass irgendwie.

Jochen

Das ist nicht so einfach, das ist auch richtig, ja.

Jochen

Das ist genau das, ja, genau.

Jochen

Ich wusste dann auch nicht so genau, was macht man denn dann da genau und so.

Jochen

Alles sehr schwierig.

Jochen

Ja, ist es tatsächlich auch sehr schwierig.

Jochen

Finde ich immer noch schwierig.

Jochen

Aber ja, also im Grunde ist das halt so die Idee, dass man das halt tatsächlich vielleicht irgendwie so hinbekommt.

Jochen

Und ja, das ist im Grunde auch, im Grunde jetzt rausfinden, wie sind diese Module und was soll damit was reden und wie sind die Interfaces?

Jochen

Das ist eigentlich im Grunde das, was Software-Architektur macht, beziehungsweise was man halt auch macht, wenn man jetzt Design macht irgendwie.

Dominik

Also nochmal, Interface ist halt die Schnittstelle, quasi eine API, wo ein Modul mit einem anderen interagiert.

Dominik

Und da muss man quasi definieren, welches Protokoll reden die miteinander und mit welchen Feldern und welchen Daten und Datentypen wollen

die denn haben.

Jochen

Und im Grunde ist, also das ist jetzt wieder, aus mir spricht dieses Buch.

Jochen

Geht es da, ist der interessante Teil gar nicht darum, wie man das jetzt technisch umsetzt oder so, sondern im Grunde ist die interessante Frage, naja, also die Abstraktion, also man hat halt Abstraktion.

Jochen

Also ein Modul ist ja auch so eine Abstraktion und eine Abstraktion hat immer das Ziel, dass man etwas, also quasi nur einen bestimmten Aspekt von etwas tatsächlich wissen muss und die ganze Komplexität der Diagramente ist, ist halt versteckt.

Jochen

Und deswegen hat man nur diese, hat man diese Abstraktion.

Jochen

Und wenn die Abstraktion gut ist, dann muss man den Rest auch nicht wissen oder meistens nicht wissen.

Jochen

Wenn die Abstraktion schlecht ist, dann liegt die halt und dann muss man Dach doch wissen und das ist dann schlecht.

Jochen

Aber wenn man eine gute Abstraktion gefunden hat, dann braucht man sich sozusagen mental nur mit dieser Abstraktion beschäftigen und gar nicht wissen, wie das im Detail alles funktioniert.

Dominik

Zum Beispiel Python.

Dominik

Ja, es hat eine Sprache, die so ein relativ hohes Abstraktionslevel hat, vielleicht auch schon über viele Probleme.

Dominik

Also das ist ja vielleicht auch der Grund, warum wir sowas benutzen und nicht mehr so alles in C schreiben oder so.

Jochen

Ja, natürlich.

Jochen

Also, obwohl C ist ja auch eine High-Level-Language schon, das im Gegensatz zu dem.

Dominik

Wenn wir jetzt nicht mehr in Registern rumspringen wollen, wenn wir irgendwie einen Webserver schreiben, ist ja schon mal gar nicht so schlecht vielleicht.

Jochen

C ist ja schon eine Hochsprache.

Ronny

Ich habe tatsächlich ein ganz schönes Beispiel.

Ronny

Ich hatte letztens, hatte ich eine sehr undankbare Aufgabe, ich sollte in einem Projekt, sollte ich bei, also quasi eine Sache, die sich durch das gesamte System gezogen hat, das hatte relativ viel mit Zeitberechnung zu tun, also wo irgendwie Tage und irgendwelche Uhrzeiten und Tage berechnet werden.

Ronny

Und da sollte eine Sache, die vorher statisch war, also es gab halt im Endeffekt nur Tage, sollten diese Tage dann nach Regionen aufgeteilt werden.

Ronny

Also jetzt beispielsweise halt Feiertage, die halt jetzt nicht nur irgendwie, es gibt nicht fixe Feiertage, sondern es gibt halt die Feiertage, je nachdem, wo halt jemand dann ist, also wie gesagtberechnungssystem.

Ronny

Und das hatte halt wirklich querbeet eigentlich alle Bereiche des Systems betroffen.

Ronny

Weil vorher war es halt einfach, du machst halt eine abstrahende Datenbank, ist an diesem Tag ein Feiertag fertig.

Ronny

Danach musst du aber gefragt werden, naja gut, welche Leute betrachte ich denn gerade, ob jetzt Feiertage sind und wann wann haben die denn in dieser Region gewohnt und wann nicht mehr?

Ronny

Und auf einmal wurde es halt, war es halt super kompliziert, eine Sache, die vorher halt wirklich trivial war, wie mit einem einzigen Select oder ORM, Abstraktion Select, halt super einfach abzufragen war.

Ronny

Und dann habe ich halt auch lange darüber nachgedacht, wie ich das überhaupt hinbekomme, weil wie gesagt, ich habe nachher, glaube ich, an 300 Stellen im System irgendwas angepasst.

Ronny

Und die Lösung war tatsächlich dann ganz, ganz blöd Abstraktion.

Ronny

Also sprich, jetzt war halt ein Django-Projekt, ich habe dann einfach mir Custom Query Set und Manager-Methoden geschrieben, die das halt komplett wegkapseln, wo ich dann trotzdem einfach nur das Datum und vielleicht noch den Nutzer reingebe.

Ronny

Und darunter liegt dann halt irgendwie ein Riesenapparat mit irgendwas, da halt alles dann passiert, um das halt zu bestimmen.

Ronny

Aber von oben verwendet es sich fast genauso wie die triviale Datenbankabfrage.

Ronny

Und damit habe ich es wirklich geschafft.

Ronny

Also ich habe das ganze Ding umgebaut.

Ronny

Ist ja auch irgendeine Art von Refactoring eigentlich, nur das ist halt das, in dem im Moment das Ticket war.

Ronny

Und ich habe wirklich nur drei oder vier kleine Bugs gehabt, weil halt, wie gesagt, die ganze Komplexität an einer einzigen Stelle war und ich halt danach nur noch schauen, musste sich halt die Methoden austauschen.

Ronny

Und das war, es hat mich selbst total überrascht, wie gut das funktioniert hat.

Ronny

Also das hätte ich, hätte ich mir selbst nicht zugetraut, dass die Idee dann doch so gut trägt.

Ja.

Ja.

Dominik

Ja, das ist super.

Dominik

Wenn man so eine High-Level-API hat, die man gut bedienen kann, ist das schon echt was wert.

Jochen

Ja, also genau, also und was sind gute Abstraktionen, also nach dem Buch, ist es halt so, ja, wenn Module tief sind, ist das gut.

Jochen

Und wenn die API halt kleiner ist, ist das auch gut.

Jochen

Also je kleiner die API und tiefer, je kleiner und tiefer, desto besser.

Dominik

Genau, also du kannst mit einfachen Worten viel erreichen.

Das ist also

Jochen

ein schönes.

Jochen

Also als sozusagen ein Beispiel für das ist irgendwie eine schöne API, ist halt hier die Pile-API von Unix benutzt, das ist halt auch tatsächlich eine sehr schöne.

Jochen

Also das ist ja im Grunde Unix ist nichts ist ja, wir hatten das letztes Mal in der letzten Episode, was wenn alles ein Dikt wäre.

Jochen

Unix ist halt so, was wenn alles ein Pfeil wäre.

Jochen

Das ist irgendwie die Antwort darauf.

Jochen

Dann kommt halt, dann fällt halt Unix dabei raus.

Jochen

Und die File-API ist halt tatsächlich, die ist halt sehr, also man kann nicht, es gibt nicht viele Operationen, die man machen kann.

Dominik

Also was ist denn Open, Seek und Close?

Jochen

Es gibt Open, Meet und Read.

Jochen

Und das war es eigentlich schon fast, ja.

Jochen

Also Close, weiß ich gar nicht, ob das ein eigener.

Jochen

Ja, doch, wahrscheinlich.

Jochen

Ja, aber stimmt.

Jochen

Genau.

Jochen

Und ja, es gibt noch I.O.

Jochen

Control, aber.

Dominik

Also wahrscheinlich Read and Write oder so, aber ja.

Was ist I.O.-Control?

Jochen

Ja, ja, man kann jetzt noch Spezialoperationen machen.

Jochen

Da wird es dann auch allem ehrlich hässlich.

Jochen

Aber tatsächlich eigentlich so mit Pfeil aufmachen, irgendwie drin rumsieken, lesen, schreiben, kommt man halt schon sehr, sehr weit.

Jochen

Und ja, das ist halt eine schöne Abstraktion.

Jochen

Während zum Beispiel die Abstraktion, das ist so ein Negativbeispiel gewesen.

Jochen

Halt so, wenn man jetzt in Java irgendwie Dinge lesen will aus einem Pfeil, dann macht man erstmal irgendwie so einen Input-Reader auf und dann macht man so einen Buffer-Input-Reader auf.

Jochen

Wenn man das vergisst, hat man ein Problem, dann ist alles ganz langsam, man weiß nicht so genau, warum.

Jochen

Und dann muss man die Dinger konfigurieren.

Jochen

Und die Exposen halt ganz viele Sachen, die man halt setzen muss.

Jochen

Und der Default-File ist halt, den man halt eigentlich immer hat, der ist halt nicht der, also wenn man es einfach nur so aufmacht, ein File, dann hat man halt keine gebufferte IO und das ist halt alles ganz schrecklich.

Jochen

Und man muss halt sehr, sehr viel Detailwissen in der API schon, also man konfiguriert da schon sehr viel rum und also man hat halt, die API hat eine große Oberfläche und es ist schwer zu benutzen und eigentlich, was sie macht, ist relativ trivial.

Also es sieht super flach.

Dominik

Also du hast eben Python with OpenFileName als FileFile.read.

Jochen

Genau, oder ja, vor Line in File oder sowas.

Jochen

Das ist halt irgendwie, und das macht halt auch per Default alles richtig.

Jochen

Ja, wenn du das in Python machst, dann ist das halt direkt schnell und macht alles schon so, wie man das eigentlich normalerweise haben will.

Jochen

Für die Fälle, in denen man das nicht so haben will, kann man das ja immer noch konfigurieren, dass das nicht, dass es sich anders verhält.

Jochen

Aber genau, und das ist halt gutes versus schlechtes API-Design quasi.

Jochen

Ja.

Jochen

Und ja, aber die richtige API für ein Problem, das man hat oder die überhaupt die richtige Abstraktion zu finden, ist natürlich nicht so einfach.

Jochen

Das ist halt richtig schwierig.

Dominik

Vielleicht auch einer der Gründe für PHP, warum das immer so schlecht angesehen wird an so zwei Stellen und sich lange braucht, bis es ein bisschen besser wurde.

Dominik

Also wie gesagt, ich habe immer noch keine Ahnung davon.

Dominik

Aber ist, dass einer der Erfinder ja irgendwie gesagt hat am Anfang so, ja, eigentlich kenne ich mich Programmiersprachen eigentlich gar nicht aus und ich wollte eigentlich auch nie Sprache machen, aber hey, jetzt bin ich hier irgendwie und da wir müssen jetzt irgendwie das wieder retten und dann.

Jochen

Ja, aber ich meine, es ist schon einen langen Weg gekommen, sozusagen, also mittlerweile ist das PHP gemacht.

Jochen

Aber ja, vielleicht

Dominik

einer der Gründe dafür, dass man sich über sowas noch keine Gedanken gemacht hat.

Dominik

Während Guido ja, glaube ich, von Anfang an, glaube ich, sehr auf diesem Level war, dass er schon so ein bisschen wusste, warum er Sachen wie machen wollte.

Jochen

Ja, ja, der hat da viel Absicht mit dabei, ja.

Jochen

Ja, keine Ahnung.

Also ist

Dominik

ja auch die Frage, ne?

Dominik

Ist also eine neue Sprache, ein Refactoring von neuen Gedanken, die man über Computer hat?

Jochen

Ja.

Jochen

Naja, ja, aber ich meine, es ist halt, aber es ist wirklich schwer zu sagen.

Jochen

Also man kann das nicht unbedingt vorher, also man, ich glaube nicht, dass das eben auch im Sprachdesign ist ja, also das wäre jetzt sozusagen, wie ist eine Sprache design.

Jochen

Da die richtigen Abstraktionen zu finden, auch super schwierig.

Jochen

Und da würden da Leute dann auch direkt am Anfang schon unterschiedliche Ansichten vertreten und würden halt sagen, so, okay, also es gibt dann halt ein Lager irgendwie, das sagen würde, so, ach, dieses dynamisch Getypte, das ist alles nicht gut.

Jochen

Irgendwie statisch getypt, bestes getübt, voll gut.

Jochen

Muss alles statisch, ja, und an der Stelle wird man sich ja schon, und das ist bis heute nicht raus, was jetzt nur besser ist.

Dominik

Aber es ist da an, also typisieren ist auf jeden Fall anstrengender, wenn man halt also einfach mal sowas schnell hinhotzen muss.

Dominik

Ich habe heute eine kurze Übung in Rust geschrieben.

Dominik

Das ist einfach halt, du musst halt jedes Mal an jedem keinen Fitzel dran treiben, was das eigentlich sein soll oder sollte.

Dominik

Und dann beschwert er sich der Compiler immer, wenn es halt nicht stimmt.

Dominik

Was ja auch gar nicht eigentlich schlecht ist, weil eine Benutzer will, man ja, dass es eigentlich stimmt.

Dominik

Meistens ist es halt an egal, aber es funktioniert irgendwie trotzdem und das ist ein bisschen.

Jochen

Ja, aber das ist genau so ein Punkt.

Jochen

Genau, also wenn du jetzt in, du kannst ja jetzt auch zum Beispiel in Python Type-Annotations machen.

Jochen

Und auch unbedingt in meiner Folge.

Jochen

Ich habe jetzt erst so vor kurzem damit angefangen, mich so ein bisschen zu beschäftigen, weil ich dachte ich immer so, oh, du musst aber auch Type-Annotationen schreiben.

Jochen

Oh, keine Lust.

Jochen

Und mich interessiert das alles nicht.

Jochen

Ich bin ja nicht deswegen zu Python gegangen, damit ich irgendwie überall Typen dran schreiben muss.

Aber es mit Fast-API, obwohl das wir übrigens auch noch eine Folge machen, das ist cool benutzt, Alter.

Dominik

Aber da macht das sogar dann Dinge, wenn du die Typen verwendest und so.

Jochen

Ja, ja, ja, ja.

Jochen

Aber gut, da passieren auch Sachen dynamisch.

Jochen

Also das ist halt auch nochmal so ein, das geht ja schon fast darüber, die reinen Typannotationen hinaus, sondern.

Jochen

Ja, also je nachdem, was für Typen man dann da hat, passieren halt unterschiedliche Sachen, aber dann auch zur Laufzeit, nicht nur nicht nur für einen statischen Typ-Checker.

Jochen

Ja, aber natürlich, genau, das ist halt so ein Problem beim Sprachdesign.

Jochen

Will man jetzt Typisierung haben oder nicht?

Jochen

Weil es natürlich fängt es halt Bugs.

Jochen

Ich habe das jetzt auch gemerkt, ich mache das seit einiger Zeit, mache ich auch Fast API und habe jetzt auch, dachte ich mir, gut, wenn ich das schon mache, dann schreibe ich die Annotation halt auch mit dazu.

Jochen

Und tatsächlich sind mir schon ein paar Mal Sachen aufgefallen, wo ich dann gemerkt habe: so, oh, das, da hat mir jetzt, und ich lasse dann auch MyPi drüber laufen, wo mir dann MyPi auf die Finger haut oder halt eben Pilance oder was auch immer, so, da ist irgendwas nicht richtig.

Jochen

Und ich denke, so, oh, okay, also meistens ist es tatsächlich nur, ich habe es nicht richtig hingeschrieben, ich habe das irgendwie nicht richtig bedient.

Jochen

Und deswegen, und man muss es ein bisschen anders hinschreiben und dann stimmt's, aber das, was ich vorhatte, war schon richtig.

Jochen

Und dann ab und zu kommt dann doch so ein Ding, wo ich dann drüber nachdenke und dann so, oh Mist, tatsächlich, an der Stelle kann irgendwas nannen werden oder so.

Jochen

Das ist meistens sowas.

Jochen

Und das, wenn man ein bisschen drüber nachdenkt, dann ist es klar, dass das auch so tatsächlich so sein kann.

Jochen

Aber mir war das vorher gar nicht klar.

Jochen

Den Fall habe ich, ich dachte, das kann überhaupt nicht passieren.

Jochen

Und so, ach doch, kann doch passieren, ja.

Jochen

Und dann habe ich tatsächlich eigentlich im Grunde einen Fall übersehen und auch, da wären Bug gewesen eigentlich.

Aber sowas, also ich glaube auch.

Dominik

Also die meisten Bugs, die ich irgendwann entdecke, sind wirklich viele Type-Bugs irgendwann.

Jochen

Ja, nee, also viele sind es nicht gewesen, ein paar waren es.

Dominik

Also ich hab zum Beispiel, kennt ihr Entfern of Code, ja, ne?

Dominik

Also Entfern of Code ist so ein tolles Spiel, was man in einem Adventszeit spielen kann, wo man halt so Coding-Rätsel macht, ganz süß immer gemacht.

Dominik

Dieser ist ein U-Boot.

Dominik

Und auch da, also ganz einfache Aufgabe, erste Aufgabe iterieren über so ein Array vergleichen.

Dominik

Es gibt einen unheimlich großen Unterschied, ob man halt den Typ, das ist eigentlich nur eine Liste, also in der Datei von Zahlen, ob man da ein Int drauf castet oder halt nicht.

Dominik

Weil halt der Vergleich, den man machen muss zwischen Zahlen, halt ein anderes Ergebnis hat.

Aber nur an zwei Punkten.

Dominik

Das heißt, man kommt am Ende irgendwie auf 1300 Treffer und dann kommt man auf 1301-Treffer, wenn man halt den Typ ändert oder sowas und das ist halt nur eine Sache richtig.

Dominik

Und das halt zu finden, dass man halt überhaupt so einen Bug hat, wenn halt das meistens stimmt, ja, also 1299 Fällen ist das richtige Ergebnis da.

Dominik

Das geht halt nur wirklich, wenn man tatsächlich weiß, warum und welche Typen man da hat und wenn man das irgendwie sicherstellen kann.

Dominik

Und das geht halt mit Typons ganz gut, weil du weißt halt, oh, da muss halt ein Int rein oder so.

Dominik

Und wenn man das vergisst, dann funktioniert das halt nicht.

Dominik

Und das ist mir auch erst klar geworden, als ich jetzt zum Beispiel Lösung auch in Russ oder in Go geschrieben habe, weil dann klar ist, welchen Typ er hat und weil es halt immer das falsche Anzeigt, wenn man halt den Typen nicht konvertiert hat.

Ronny

Ist aber auch, glaube ich, auch eine super Sache, wenn man so interne APs hat, also entweder wenn man irgendwie so zentrale Funktionalität hat, die irgendwo liegt, oder Sachen, die jetzt von vielen verschiedenen Seiten irgendwie verwendet wird oder von vielen verschiedenen Entwicklern, gehe ich inzwischen ja auch immer hin und versuche die so weit wie möglich zu typisieren in Python.

Ronny

Einfach, dass dann, dass der nächste Entwickler, auch wenn ich das bin, einfach weiß, okay, da kommt jetzt, weiß ich nicht, vielleicht ein Nun raus oder eine Liste oder ist das ein Dictionary.

Ronny

Weil das sind halt wirklich so Sachen, meistens findet man es, bevor es wirklich auf Production geht.

Ronny

Aber selbst dann sucht man nochmal irgendwie fünf oder zehn Minuten, wenn man nochmal denkt, hey, ich hab doch einen Baum, was soll das denn?

Ronny

Und wenn dann da die Idee dann direkt anzeigt, nee, nee, du kannst, du machst die Äpfel mit Birnen, das ist einfach super praktisch.

Ronny

Und umso tiefer das bei mir drin ist, umso mehr versuche ich auch dann wirklich die Type-ins zu machen.

Dominik

Ja, mit dem Nunn ist halt echt ein Problem, ne?

Jochen

Aber ja, das fällt mir auch gerade noch so eine Anekdote zu ein.

Jochen

Da gibt's, da gibt es noch ein Buch, JavaScript The Good Parts, glaube ich, auch relativ bekanntes Buch.

Dominik

Das muss halt dünn sein.

Jochen

Das ist tatsächlich relativ dünn.

Ronny

Da gibt es auch diesen Witz mit dem dicken Buch, genau.

Jochen

Die Reference, es ist irgendwie tausend Seiten und dann irgendwie Good Parts ist halt irgendwie so ein Heftchen, ja.

Das stimmt.

Jochen

Und der Autor davon, ich glaube, das ist David Crockford oder ich weiß nicht genau, der ist auch in diesen Standardisierungsgremien drin und so und der schrieb dann halt auch irgendwo, weiß gar nicht, meinte so, naja, also irgendwie diese, diese, ist eigentlich kein Wert oder ist irgendwie nix, Dinger sind ein Problem bei Sprachen, ja.

Jochen

Also Python halt nun, da gibt es halt ein Ding.

Jochen

Und es ist halt immer wieder in diesem, wenn man sich über so Standardisierungsfragen ist halt irgendwie die Frage, ist das eine gute Idee, sowas in der Sprache zu haben oder nicht, zum Beispiel SQL, ja, ist ja auch Null ist für einen Großteil der wirklich hässlichen Sachen im Sprachstandard und auch für viele Bugs in Datenbankimplementationen, die dann halt auch irgendwie und für viele Inkompatibilitäten in den Standards und so, also Null spielt ja eine große Rolle.

Jochen

Wenn man jetzt nicht so ein harmloses Ding wie Null, das kann ja nicht so viel kaputt machen.

Jochen

Das Ding macht irgendwie dauernd und seit Jahrzehnten und konsistent irgendwie ganz viel Probleme.

Jochen

Und ja, er meinte halt so, ja, also es ist immer so, unter Leuten, die sich mit Sprachdesign beschäftigen, die Frage, also will man sowas in einer Sprache haben oder nicht?

Jochen

Und dann gibt es immer so einen Teil der Leute, die sagen, ja, ach doch, ist eigentlich schon gut, wenn man das hat.

Jochen

Der andere Teil sagt, nee.

Jochen

Aber niemand, absolut niemand vertritt die Ansicht, es ist voll gut, zwei davon in einer Sprache zu haben.

Jochen

Und da hat halt zwei, ja.

Jochen

Das hat man null und undefined.

Jochen

Und das ist halt wirklich, ah, ja, das ist halt irgendwie so.

Jochen

Ja, und das macht Dinge wirklich komplizierter, aber das Problem ist jetzt auch die Type-Annotationen selber machen Sachen natürlich auch komplizierter.

Dominik

Ja, zum Beispiel auch sekuläre Import oder sowas, das ist ja ein bisschen nervig.

Jochen

Nee, die Annotationen, also.

Jochen

Achso, ach du, gut, okay, klar, da kannst du auf das Problem natürlich auch stoßen, ja klar.

Jochen

Oder leichter.

Jochen

Aber ich meine, wenn das, wenn das jetzt eben, also entweder man macht halt, wenn man jetzt die Typen annotiert und man macht es jetzt so quasi einfach, man muss halt dann auch seinen Stil ändern.

Jochen

Wenn die Typen-Annotationen einfach bleiben sollen, dann muss man halt irgendwie das auf so relativ primitive Datentypen runterbrechen und kann dann eigentlich auch nur noch so richtig so relativ primitive Datentypen verwenden.

Dominik

Ja, man will ja eigentlich schon komplexere Daten, also so auf ein Patentik-Objekt oder sowas hinten.

Jochen

Ja, ja gut, okay, also Patentik ist nochmal, aber das Problem dabei ist halt, also wenn man das macht, dann hat man halt im Grunde kommt man dann irgendwie so, und wenn das Typsystem relativ einfach ist, was man so verwendet, dann kommt man halt bei einem Dialekt von Java raus, der halt super langsam ist.

Jochen

Was halt, und sieht überhaupt nicht mehr aus wie Python eigentlich im Grunde genommen.

Jochen

Das ist halt irgendwie doof.

Jochen

Aber wenn man jetzt Python idiomatisch schreibt, so Pythonisch irgendwie, dann wird das mit den Typen-Annotationen ziemlich schwierig, ne?

Jochen

Also weil zum Beispiel so eine, das gab es letztens auch eine Podcast-Episode mit Luciano Ramaglio, der hat früher in Python geschrieben, das Buch.

Jochen

Auch kann ich nur empfehlen.

Jochen

Gibt es jetzt, äh, früher kommt eine zweite Ausgabe, zweite Edition, Second Edition, wo er auch viel über Type-Annotationen und so schreibt.

Jochen

Und der sagt halt so, ja, also der hat in der hat sich das auch dann halt mal so richtig angeguckt und so und hat dann die Typ-Annotation für die Max-Funktionen sich angeguckt.

Jochen

Und das Problem bei Typ-Annotationen ist jetzt auch, die können jetzt auch, die können ja auch falsch sein.

Die können ja richtig sein, falsch sein.

Jochen

Die können uns False-Positives geben.

Jochen

Es kann sein, dass etwas dem Typ zwar entspricht, aber tatsächlich ist es inkompatibel und innen knallt es irgendwo.

Jochen

Das sollte natürlich nicht passieren.

Jochen

Typ-Annotationen sollten so sein, dass es keine False-Positives und keine False-Negatives gibt.

Jochen

Also auch keine, das ist halt das, was mir immer passiert, wenn ich versuche, das hinzuschreiben.

Jochen

Ich habe halt ganz oft False Negatives.

Jochen

Das heißt, mir sagt irgendwie MyPi oder so, da hast du was falsch gemacht, und ich hätte gesagt, nee, das ist eigentlich nicht falsch, das ist eigentlich schon richtig, aber ich hab's irgendwie falsch hingeschrieben.

Jochen

Und bei einer Funktion wie Max ist das halt extrem schwierig und hat er halt in den Type-Annotationen dafür halt Fehler gefunden, eben False Positives, False Negatives.

Jochen

Und dann hat er versucht, das richtig zu machen.

Jochen

Also es gibt irgendwo Type-Chat oder so, da steht die Annotation für Max drin.

Jochen

Und das wurde dann richtig, richtig gemein, weil Max ist halt auch so eine komische, also es gibt so diverse Funktionen, so Max-LAN und so, die halt schön sind irgendwie, weil du kannst halt, es ist eine sehr generische Funktion, du kannst ja alles reinwerfen und es macht eigentlich immer das Richtige.

Jochen

Aber das jetzt zu annotieren, ist halt die Hölle.

Jochen

Also er hat dann irgendwie so, naja, also die eigentliche Implementation von Max sind halt irgendwie so 25 Zeilen oder so.

Jochen

Und allein die Typ-Annotationen waren hinterher, du musstest halt sechs sechs Overloads dafür irgendwie definieren der Funktion und es waren viel, viel mehr Zeilen in den Typdefinitionen, als hinterher in der Implementation.

Jochen

Und dann ist natürlich die Frage, und es war sehr schwer zu verstehen und also irgendwie diverse subtile Fehler drin.

Jochen

Also dann ist ja halt die Frage, okay, wenn das so schwierig ist, die Typen hinzuschreiben, ja, macht das dann, ist dieses Verhältnis zwischen, und es ist halt komplett, ist auch sehr schwer zu lesen, ja.

Jochen

Also es ist halt die Frage, ja, ist das dann wert noch, ja?

Jochen

Und ja, das ist halt so die, das ist halt so die Frage, ne?

Jochen

Und da gibt es genauso, weil das war auch aus dem Podcast hat, da hat er, ähm, meinte er so, es gibt dann so auch ein Buch zu Java, auch ich habe vergessen welches das ist, auf jeden Fall auch einer der, ist auch einer, der in der Sprache mitgearbeitet hat oder so, der schrieb dann halt zu, als die Generics eingeführt worden, selber sagt er dazu, also die Generics waren ein Desaster in Java.

Jochen

Und es gibt diverse Geschichte, Konstrukte, die sie da gemacht haben, wo es dann, wo sie dann gesagt haben, so, okay, wir haben das jetzt irgendwelchen Professoren, die sich mit Typtheorie beschäftigen, gezeigt.

Jochen

Und die sagen, das stimmt.

Jochen

Aber wir können das nicht bestätigen oder weil wir verstehen nicht, was das macht.

Jochen

Und das ist dann halt einfach so, ja gut, wozu macht man es dann jetzt?

Jochen

Wenn man es nicht mal verstehen kann.

Jochen

Ja, schwierig.

Jochen

Und also was man da sieht, ist halt, das Problem ist, dass die Sprache ist halt, also bei Python ist es halt auch so, die Sprache ist halt expressiver als die Sprache, die man verwendet, um die Typ-Annotation zu machen.

Jochen

Und das hat ja schon in diversen Sprachen zu Katastrophen führt.

Jochen

Also bei C<unk> mit den Templates, ja, ganz furchtbar als ein Turing vollständig.

Jochen

Irgendwie, wenn man davon genug verwendet, versteht man auch nicht mehr, was da los ist.

Jochen

Der Compiler braucht ewig lange viel Hauptspeicher und schrecklich.

Jochen

Java, Generics, ganz furchtbar.

Dominik

Wie macht man das so?

Dominik

Zum Beispiel mit einem JSON-Objekt, wie würde ich das type monentieren?

Das ist so ein bisschen.

Jochen

Genau, das kann man.

Das kann man tatsächlich.

Jochen

Also ich beschäftige mich ja gerade auch so ein bisschen mit TypeScript und da gibt das, also da kannst du, du kannst tatsächlich solche Sachen machen wieder.

Rekursive definieren.

Jochen

Du kannst rekursive Typdefinitionen machen, wenn es geht.

Jochen

Ja, das kann gut sein, dass es ein Python nicht geht.

Jochen

Also die Type-Definition für einen JSON, wo dann hinterher der TypeScript, der TypeScript-Compiler, auf die Finger haut, wenn du da auch beliebig rekursiv irgendwo etwas reinschreibst, was jetzt nicht mehr World is JSON wäre, so wo du den rote Kringel kriegst, das sind so 25 Zeilen, rekursive Type ohne Notation in TypeScript.

Jochen

Das geht.

Jochen

Und das ist natürlich schon sehr cool, dass das geht.

Jochen

Auf der anderen Seite, ich bin, ich beschäftige mich jetzt seit einer Zeit damit, also ich kann diese 25 Zeilen sehen, ehrlich gesagt, ich verstehe sie nicht so ganz.

Jochen

Das ist halt auch wirklich, wirklich schwierig.

Dominik

Ja, da können ja halt rekursiv irgendwelche Dinge drin, irgendwelche Listen drin liegen und irgendwelche Dicks drin liegen, irgendwelche Listen drin liegen, wo vielleicht noch ein Swing ist und irgendwie null oder irgendwas.

Dominik

Es ist halt

Jochen

wieder eine Sprache für sich, also allein schon, dass du in Types, dass du halt sagst, okay, du kannst, es gibt ja eben diese Generics, also sag ich mal, es ist auswärtig, du kannst halt nicht nur, du definierst die Typen nicht fix, sondern du sagst halt, also du kannst jetzt, wenn er in der Funktion sagen, welchen Typ du zurückerwartest und denen dann als Typ-Annotation verwenden.

Jochen

Du kannst also sozusagen einen Typen parametrisieren, die du irgendwo setzt.

Jochen

Du kannst eine generische Funktion haben und dann sagen, während du sie aufrufst, im Aufruf kannst du dir sagen, und die gibt jetzt das und das zurück.

Jochen

Und dann kann der Compiler das überprüfen, dass das stimmt.

Jochen

Und das kannst du dann auch noch rekursiv machen.

Jochen

Und das kannst du dann mit beliebig verschachtelten Sachen machen.

Dominik

Sollte ich das vielleicht ein bisschen refactoren?

Jochen

Naja, also es wird halt, ich meine, es ist schon cool.

Jochen

Auf der einen Seite finde ich es super cool, dass es geht, auf der anderen Seite denken wir so, mein Gott, was haben wir getan?

Das wird mein Monster erschaffen.

Jochen

Aber ja, es ist.

Dominik

Also, ist das eine Mode?

Dominik

Also ich habe auch das relativ oft benutzt, ich benutze das auch gerne und ich versuche auch das relativ vollständig so zu benutzen.

Dominik

Aber halt, ja, es hat halt irgendwie seine Grenzen auch.

Dominik

Also manchmal nutze ich es halt einfach nicht, weil es einfach keinen Sinn macht.

Dominik

Also für so ein Int oder String, okay, weil das nur komplexe Objekte.

Jochen

Ja, bei komplexeren Sachen wird es halt dann sofort ziemlich schwierig.

Jochen

Also eine Geschichte, die wohl cool ist, ist halt Protocols, damit kann man halt, also Typing.

Jochen

Protocols mit Python 38, glaube ich, dazu bekommen, damit kann man dann viele der Probleme, die man sonst hat, irgendwie gehen dann weg, weil man dann sagen kann, okay, ich erwarte hier nur ein Ding, das.

Jochen

Also Protocols sind immer so keine Sachen, wo du eine Methode hast oder vielleicht zwei oder so.

Jochen

Und dann musst du halt nur diese Methoden implementieren.

Jochen

Du kannst halt überprüfen, ob das so ist, ob das konform ist.

Jochen

Und dann fällt ein Großteil der Schmerzen weg.

Jochen

Aber also wirklich, ja, also.

Dominik

Also wenn das zu komplex wird, vielleicht muss man dann reflection, dass man einfache Dinge macht, wie zum Beispiel nach Strings realisieren oder sowas.

Jochen

Nee, nee, aber das Problem ist ja, also das willst du ja eigentlich vielleicht nicht.

Jochen

Du willst ja vielleicht sowas, so generische Funktionen haben wie Max oder so.

Jochen

Aber die kannst du praktisch nicht mehr gut annoten, also außer du machst es halt, es ist halt schwierig, die zu adoptieren.

Ronny

Wir müssen es ja nicht in Python, ne?

Ronny

Von daher vielleicht.

Ronny

Ja, genau.

Jochen

Und vielleicht ist es für die Fälle, das ist auch dann nicht typisieren, sondern sagen, okay, wir machen es an den Stellen, wo es halt was bringt und nicht so genau ist.

Jochen

Und dann an den Stellen, wo es halt nicht gut geht, dann lassen wir es halt weg und dann schreiben wir halt eine generische Funktion, die halt.

Dominik

Magic Python, wenn man magie.

Jochen

Genau, ja, das ist vielleicht irgendwie so der richtige Weg.

Dominik

Das haben wir hinterher zu Tyson.

Jochen

Ja.

Ronny

Eine Sache, die mir noch aufgefallen ist, jetzt in den letzten Monaten beim Arbeiten bezüglich Refactoring, ist, es geht auch so ein bisschen Richtung Modularisierung, aber mehr Richtung die Semantik, denn wirklich die Sachen physisch irgendwie zu trennen.

Ronny

Und das ist, wenn man relativ viel, also jetzt in meinem Beispiel relativ viel Business-Logik hat.

Ronny

Also wenn man meistens fängt, also wenn man agil arbeitet, fängt so ein System mit MVP an, also sprich, man hat, weiß ich nicht, irgendeinen Onlineshop, da kann irgendwas kaufen, dann kriegt er vielleicht eine E-Mail, da gibt es irgendwie eine Bestellung und das war es im Endeffekt.

Ronny

Und dann kommt vielleicht noch ein anderer Fall dazu, noch ein Fall und noch ein Fall und irgendwann wird ein neuer Geschäftsbereich dazu gebaut und irgendwann hat man halt dann da ein riesiges Konstrukt von irgendwie E-Mails, die hin und zurück geschickt werden und irgendwelche Order-Objekte in der Datenbank, die riesig werden, wo 100.000 Felder drin sind.

Ronny

Und das eigentliche Problem ist, dass dann an einem gewissen Punkt, und das habe ich jetzt schon mehrfach gesehen, weder der Kunde noch die Entwickler eigentlich noch genau wissen, was eigentlich der Geschäftsprozess ist.

Ronny

Das System macht zwar ungefähr das, aber dann kommt plötzlich irgendwann mal ein Fehler.

Ronny

Dann schickt nämlich eine E-Mail und irgendein Falsches geschickt, und dann stehen die Leute dann da und sagen, ja, was passiert da eigentlich genau?

Ronny

Und das finde ich ein total interessantes, interessanten Refactoring-Ansatz, weil das halt nicht so, also keine Ahnung, wenn ich jetzt irgendwie merke, okay, das ist irgendwie schlechtes Pattern oder keine Ahnung, das ist nicht, das ist nicht lintkonform oder keine Ahnung was.

Ronny

Dann geht man hin und Refactor Zeit, weil das schreit einen quasi an, das ist das Hässliche, was du meintest.

Dominik

Das ist ein Code Review, wenn man relativ sehen kann, wie gesagt, Kommentare stimmen nicht oder Docs sind falsch oder es sieht hässlich aus, ist zu lang, man kann es so ein bisschen umbauen, Naming sind komisch, dann kann man das mehr machen.

Ronny

Genau, aber so eine Sache, wenn man sagt, okay, ich habe jetzt da dieses Konstrukt und es ist auch alles vielleicht auch gar nicht so schlecht an sich für den Pattern.

Ronny

Also man hat das vielleicht alles in Klassen drin und Services und du hast auch irgendwie Models gebaut, wo das auch alles irgendwie die Datenschutzprogramm ist.

Dominik

Interessant ist man noch Services, da müssen wir auch nochmal drüber reden, was das eigentlich ist.

Ronny

Aber wenn halt irgendwann dieser ganze Business-Prozess halt nicht mehr offensichtlich ist, da muss man dann einfach diese Art von Abstraktion, einfach eine neue Art von Abstraktion finden.

Ronny

Und da ist eine sehr interessante Sache, mit der wir uns jetzt beschäftigt haben, sind halt die Finite State Machines.

Ronny

Dazu gibt es auch einen sehr coolen Vortrag von 2019.

Ronny

Ich habe vergessen von wem, aber da gibt es Django FSM.

Ronny

Das Problem ist, das Package ist leider deprecated und die neue Version ist noch in Alpha.

Ronny

Also man kann die schon nutzen, aber die Doku hat Lücken.

Ronny

Wen es interessiert, wir haben beim letzten Django Meetup in Köln länger drüber gesprochen.

Ronny

Das ist bei YouTube.

Dominik

Vielleicht nochmal ganz kurz dann erklären, was ist denn eine finite State-Maschine?

Ronny

Also, Finite State-Machine ist im Endeffekt relativ simpel, dass man sagt, ich habe ein Objekt und dieses Objekt kann in verschiedenen Status sein.

Ronny

Also sprich, ich habe einen Auftrag, der kann neu offen sein, der kann in Bearbeitung sein, der kann in Lieferung sein, der kann abgeschlossen sein, der kann bezahlt sein.

Ronny

Und dass es eine endliche Menge von Wegen gibt, wie ich von jedem Status, also nicht von jedem, zu jedem, aber wie ich von einem Status zum anderen komme.

Ronny

Da kann man sich im Endeffekt einfach wie ein Graph mit Pfeilen, also Kringeln und Pfeilen vorstellen.

Ronny

Und man hat halt im Endeffekt fix definiert, also erstmal auf dem grafischen Level, dass ich zum Beispiel von, ich komme, ich kann nicht von offen direkt nach geschlossen kommen, weil davor muss es erstmal irgendwie bearbeitet, bezahlt und geliefert werden.

Ronny

Ja, oder so, das geht halt sonst nicht, also könnte man sich jetzt vorstellen, ja.

Ronny

Und der Vorteil an diesen, also das ist nur eine von vielen Möglichkeiten, um so mit sowas anzugehen.

Ronny

Und wir haben das jetzt halt ausprobiert und es hat halt wirklich, wirklich gut funktioniert.

Ronny

Weil das Schöne ist, diese Graphen sind sehr, also die werden natürlich auch immer komplexer, wenn man halt sehr viel Business-Logik hat, aber trotzdem, die versteht halt wirklich jeder.

Ronny

Also der kompletter Non-Tech, die kannst du das auf den Tisch legen und der weiß sofort, um was es geht.

Ronny

Und das Schöne ist halt, das geht mit der neuen Version, glaube ich, nicht, mit der alten Version, wenn man diese Flows implementiert in Django, mit diesem Package, dann konnte man sich die Graphen auch rausrendern lassen.

Ronny

Also sprich, die Business-Logik, die man einerseits für S-Entwickler sinnvoll ablegen kann, weil man halt auf einmal nicht mehr überall irgendwo langwurscht und irgendwie in jedem Service irgendwas irgendwie ein bisschen anders macht, je nachdem aus welcher Ära vom Projekt das dann halt gebaut wurde.

Ronny

Sondern man sagt, okay, ich habe ein Flow und hier definiere ich jetzt genau, was passiert, wenn Aufdruck von offenen Bearbeitung geht.

Ronny

Zum Beispiel, da geht eine E-Mail raus oder da geht keine E-Mail raus oder da muss jemand irgendwas machen damit, ja, und welche Variablen gesetzt werden.

Ronny

Und erstens ist es halt im Code sauber gekapselt und die alte Version konnte, wie gesagt, direkt die Graphen rausrennen.

Ronny

Das heißt, wenn man ein Hinrechtkomplexe Business-Modell implementiert hat und dann kommt der Kunde und sagt, ich würde da gerne was dran ändern, dann kann man im Endeffekt auf den Knopf drücken, kriegt da ein wunderbares PDF raus, kann darüber dann im Kunden reden und sagen, okay, welche Pfeile sollen wir jetzt umbiegen und wo soll was anders passieren.

Ronny

Und das ist halt, also das ist halt wirklich auf einer ganz anderen Ebene.

Ronny

Und das ist halt so trivial.

Ronny

Also ich bin eher schockiert, dass mir sowas noch nicht, also dass ich da so spät im Endeffekt drüber gestolpert bin über solche Sachen.

Dominik

Ich glaube, was eigentlich schwierig ist, ist tatsächlich, diese Dinge aufzumalen, weil ich glaube, selbst die Kunden kennen nicht immer ihren Flowchart oder wie man.

Dominik

Genau.

Dominik

Weil die halt nicht wissen, was passiert denn da.

Dominik

Und bevor sich das sich jemand angeguckt hat und vielleicht mal das in der Realität getestet hat, oh, da ist aber noch ein Problem, dann tauchen diese einzelnen Ereignispunkte oder auch die States, die irgendwas haben kann, gar nicht auf.

Dominik

Und das bei uns hat das so einen ganz bösen Bug geführt.

Dominik

Ja, die Tests waren eigentlich ganz gut.

Dominik

Also die haben eigentlich das getestet, was getestet werden soll, dass das Carbage war hoch der Code, aber es gab halt den Fall einfach nicht.

Dominik

Und das führte halt einfach dazu, dass fälschlicherweise, beispielsweise, wir haben so CMN-Quatsch gemacht, an ein paar hundert Vertriebler einfach so E-Mails rauskriegen, die gar nicht rausgehen sollten oder so.

Dominik

Oder zu oft.

Dominik

Und so ist es halt so ein bisschen so ein, okay, ähm, ups.

Dominik

Und das Böses schreit halt dann, weil denkt sich halt so, nein, wir können den nur und total doof und das macht ja gar nicht das, was sollen, alles falsch.

Dominik

Aber eigentlich ist es halt nur der Fall, dass man halt nicht bedacht hat, dass es einen besonderen Fall geben kann, der halt nicht abgebildet wird.

Ronny

Genau, aber das Schöne ist halt, wenn man halt mit solchen Tools vielleicht auch direkt konzeptionell, also auch im Agilen, einfach mal, wenn man, wenn man die Tickets überarbeitet, sagt, hey, wir haben hier dieses Modell und wir arbeiten immer an diesem Modell, dann kann man halt vielleicht über solche Sachen auch schon viel früher stolpern, weil der Kunde dann plötzlich merkt, so, ja Moment mal, oder wenn der Kunde es an seinen Stakeholdern zeigt, oder der Broad-Owning-Stakeholdern zeigt, dann sagt vielleicht, ja Moment mal, aber ich arbeite doch die ganze Zeit an einem Pfeil, den es ja gar nicht gibt, da stimmt doch was nicht.

Ronny

Weil wenn das halt implementiert ist, dann ist es halt für die Non-Techs halt quasi weg.

Ronny

Das ist dann nicht mehr einsehbar.

Ronny

Und als Entwickler natürlich sollte man das grob verstehen, wie du halt gesagt hast, das System ab einem gewissen hinreichender Komplexität ist es halt vorbei.

Ronny

Dann kann man nicht mehr alles verstehen.

Ronny

Dann sind die Sachen hoffentlich irgendwie gekapselt und dann will man auch gar nicht mehr wissen, was da hinten passiert.

Ronny

Vielleicht muss ich das wissen für meine Sache, weil es irgendwas gibt, was halt noch keiner weiß.

Dominik

Vielleicht nochmal zur Definition, finite State Machine.

Dominik

Ja, genau, also einen endlichen Automaten kann man quasi auf alles dann abbilden.

Dominik

Was ja mit unendlichen Automaten geht, so war es auch.

Jochen

Du kannst damit nicht alles machen.

Jochen

Also endliche Automaten zum Beispiel, also etwas, was quasi äquivalent ist, sind reguläre Ausdrücke.

Jochen

Das ist halt auch eigentlich, wobei regulärer Ausdrücke, je nach Implementation, da gibt es auch noch ein bisschen mehr, was man aber machen kann, aber das ist halt, ja, also wenn man endlich ein Automat hat, die Sprachen, die, also jetzt theoretische Informatik, vielleicht hoffentlich richtig nicht allzu großen Unsinn, das ist alles schon sehr lange her, aber im Grunde, wenn du endlich einen Automaten hast, dann sind die Sprachen, die von denen akzeptiert werden, heißen regulär und deswegen auch reguläre Ausdrücke, weil

Jochen

es halt Ausdrücke sind, mit denen du reguläre Sprachen parsen kannst, halt.

Jochen

Aber du kannst damit nicht alles machen.

Jochen

Zum Beispiel, was du damit nicht machen kannst, sind halt so, also das, das ist immer so Informatik 1 oder bei mir war das, glaube ich, tatsächlich Informatik-1-Klausur.

Jochen

Musst du dann beweisen, dass eine bestimmte Sprache nicht mit einem endlichen Automaten passbar ist.

Jochen

Normalerweise nimmt man dann irgendwas, wo so Klammer gibt.

Jochen

Du hast dann eine Sprache, die halt so Klammern hat.

Jochen

Wo halt, ob du hinten eine Klammer zumachst, davon abhängt, ob du die vorne aufgemacht hast.

Jochen

Und dann gibt es dann so ein Pumpkin-Lebern, heißt das.

Jochen

Das kann man dann benutzen, um zu zeigen, dass das halt, dass man keinem endlichen Automaten das parsen kann, weil man sich nicht merken kann, quasi sozusagen, wie das.

Jochen

Dafür braucht man dann halt so einen Stackautomaten oder irgendwie sowas.

Dominik

Stackautomat ist, also wie gesagt, ich bin keine Twitch-Informatik kenne.

Dominik

Was ist ein Stackautomat?

Jochen

Ja, so ein Ding, was halt einen Speicher hat.

Dominik

Also einfach nur tatsächlich ein Stapel, den es gibt.

Dominik

Okay.

Dominik

Warum ist das Ding Automat?

Jochen

Ja, ich weiß gar nicht, Methoden im Kind.

Jochen

Ich weiß es nicht genau, ich weiß gar nicht, ob das Automat heißt.

Dominik

Und also alles, was halt dann ein unendlicher Automat quasi ist, das hat halt dann States, die du vorher nicht kennst oder sowas?

Dominik

Oder worum geht es da?

Dominik

Dass du das nicht vorher wegdefinieren kannst.

Jochen

Nein, du musst dir halt sozusagen merken, was passiert ist.

Jochen

Das kannst du im eigentlichen Automaten nicht machen.

Jochen

Da hast du halt Zustände, die sind endlich und du kannst zwischen denen wechseln, aber du kannst ja jetzt nicht merken, wo du schon über langgelaufen bist oder so.

Jochen

Oder ob du Klebern aufgemacht hast oder nicht.

Jochen

Das geht halt nicht.

Jochen

Und genau, das nächste, also wir gehen wir mal die Dinger durch bei der theoretischen Formatik.

Jochen

Das zweite ist halt dann sozusagen Stackmaschinen.

Jochen

Damit kannst du halt dann kontextfreie Grammatiken parsen und dann gibt es halt noch kontextsensitiv.

Jochen

Dafür brauchst du dann schon Loop-Rechenbar oder sowas und dann irgendwie gibt es noch irgendwie alles irgendwie.

Jochen

Und dafür brauchst du dann Turing-Maschinen.

Jochen

Oder halt ein Weilprogramm oder ein Vorprogramm oder was auch noch.

Dominik

Okay, also nochmal vielleicht zum Abschließen, was eine Turing-Maschine ist.

Jochen

Oh Gott, eine Turing-Maschine.

Jochen

Eine 7-Tuppel aus, Sprache, Grammatik, irgendwie, Terminal-Symbolen, Nicht-Terminal-Symbolen, keine Ahnung, weiß ich nicht.

Jochen

Alphabet, ja, also im Grunde das Ding, was halt sozusagen die Informatik als Fach irgendwie so ein bisschen begründet hat damals.

Jochen

1937.

Jochen

Ich glaube, es ist das Paper, glaube ich.

Dominik

Von Neumann-Architektur, oder was?

Dominik

Nein, nein, nein.

Dominik

Nein, nein, nein, du hast eins anderes.

Jochen

Das ist auch SCP.

Dominik

Was ist das?

Jochen

Von Neumann-Architektur ist das halt Hauptspeicher, also dass der Speicher für Daten und Programme dergleich ist.

Jochen

Mehr oder weniger.

Jochen

Aber das ist halt eine Rechnerarchitektur, aber das ist halt Hardware.

Jochen

Turing-Maschine ist ein theoretisches Konstrukt.

Jochen

Wie gesagt, das hat Turing da 1937 veröffentlicht.

Jochen

Ich glaube, das Paper hieß On Computable Numbers with an application to the Entscheidungsproblem oder sowas.

Jochen

Und da hat er das Ding halt vorgestellt und in dem Paper bewiesen, dass das halte Problem nicht entscheidbar ist.

Jochen

Also, ja, und genau, das hat eigentlich die Informatik begründet, weil so, also, beziehungsweise es gibt da halt noch irgendwie ein Paper zu Lambda-Kalkulus von Church, das ist ein bisschen später rausgekommen, ist eigentlich ein Stückchen eleganter, aber ja.

Jochen

Ja, aber genau, also das Typ 0 Sprachen, also du kannst mit einer Turing-Maschine kannst du halt alles parsen, was du auch parsen kannst.

Jochen

Und mit einem regulären, also mit einem regulären Automaten, also mit einem endlichen Automaten halt nicht, sondern nur ganz spezielle Sachen.

Jochen

Aber trotzdem kannst du wahrscheinlich eine Menge damit abbilden, ja.

Jochen

Ich meine, so ist nicht.

Ronny

Ja, vor allem in meinem Case ging es ja wirklich auch um tatsächlich um Business Flows.

Ronny

Ja.

Ronny

Und das glaube ich das Interessante halt an Business Flows ist, weil das halt wirklich eine Sache ist, man muss ja dann im Endeffekt die gelebte Realität von dem Kunden oder von demjenigen, für den man das baut, muss man ja halt wirklich eins zu eins spiegeln, ohne dass man wirklich genau weiß, was die da eigentlich tun.

Ronny

Also wenn man jetzt, wenn man, keine Ahnung, wenn es jetzt darum geht, verschicke E-Mails, dann ist das Ergebnis wichtig.

Ronny

Aber bei den Geschäftslogik, beim Geschäftsmodell, muss man tatsächlich das nachbauen.

Ronny

Also da kommt irgendwas daher, da werden irgendwie Daten reingegeben, dann wird mit den Daten irgendwas gemacht, dann wandert das irgendwo weiterhin.

Ronny

Und das ist, glaube ich, so der spannende Punkt, warum da halt zum Beispiel, ich meine, es gibt doch bestimmt noch 50 andere schlaue Ideen, wie man halt umgehen kann, aber halt damit mit diesen endlichen Automaten halt schon mehr Struktur reinbringen kann.

Ronny

Ich glaube, wenn man das halt auch von Anfang an sich für irgendwas entscheidet und nicht halt sagt, wir machen das halt, wie ich halt in ganz normalen Code programmieren würde, glaube ich, da kann man sich sehr viel knarcher sparen und hat bestimmt zwei, drei Jahre Entwicklungszeit, Entspannung vom, also quasi ein bisschen Schutz vor tiefgreifendem Refactoring.

Jochen

Ja, klar, also es ist.

Dominik

Also um Refactoring zu vermeiden.

Dominik

Aber das wäre jetzt aber auch nur Refactoring vermeiden, was quasi Bugs entfernt und die Features sicherer macht.

Dominik

Aber das wäre jetzt nicht das Refactoring, was keinen Style schöner macht, Namenskonventionen besser einhält, dokumentierbarer macht.

Jochen

Ja, okay, stimmt.

Jochen

Das ist natürlich auch eine Art von Refactoring.

Dominik

Ja, man kann auch quasi irgendwas, also wenn man das übergibt, also wenn ich jetzt selber was geschrieben habe, was ich mich gut mit auskenne, ist es ja was anderes, was wenn jetzt jemand anders das gut benutzen muss.

Dominik

Und wenn man halt seinen Cook, glaube ich, in einen Zustand versetzt, in der der halt irgendwie auch gut übergebbar ist, dass halt jeder damit arbeiten kann.

Jochen

Wobei man da ein bisschen vorsichtig sein muss.

Jochen

Ich meine, ich falle, da geht es ja dann quasi um, würde ich mal sagen, Konsistenz.

Jochen

Und da ist leider, also meine persönliche Ansicht dazu ist, konsistent ist es dann so, ist es dann, wenn es mir gefällt.

Dominik

Okay, Taste kann man nicht schreiten.

Jochen

Aber das Problem ist halt, das habe ich gerade sagen.

Jochen

Ja, aber wenn man so in Codebasen guckt, die es da so gibt und sich denkt so, oh, das ist alles ganz schrecklich, dann habe ich so den, dann so zuerst fängt das Augenlied an zu zucken und dann irgendwann lasse ich Black über alles drüber laufen.

Dominik

Ich kenne das aber auch von Joch, das ist immer ganz gut.

Dominik

Also er hat ja netterweise ein paar Sachen von mir mal korrigiert und so.

Dominik

Und ganz mal anfangen, was sagt denn da?

Dominik

Das geht ja überhaupt nicht, alles wegschmeißen, neu machen.

Dominik

Nee, nee, nee kann man nichts trennen.

Dominik

Und dann habe ich die wieder angefangen neu gemacht und das ging dann so ein paar Mal so, ah, wegschmeißen, neu machen, nein.

Dominik

Und dann irgendwann hat er gesagt, ah, was ist denn das?

Dominik

Das hat das alles wieder neu machen, weg.

Dominik

Ja, das habe ich von dir kopiert.

Jochen

Ja, das mag sein, dass es ja ich meine, manchmal ist es auch alleine einfach Quatsch.

Jochen

Man hat man sich so daran gewöhnt, dass irgendwie und dann macht man hinterher irgendwas dann falsch, wenn man davon ausgeht, dass es sowieso irgendwie nicht richtig ist.

Jochen

Also man muss aufpassen, es ist nicht so einfach.

Jochen

Aber genau, also ja, also ich tendiere dazu, das dann so zu machen.

Jochen

Ich glaube aber, es ist falsch.

Jochen

Also ich glaube, es ist, und eben auch da dieses, das Buch würde sagen, ah, Konsistenz wichtiger, weil es halt für Leute wichtiger ist, das zu verstehen und dass es genauso ist, wie sie das halt kennen, als dass es richtig ist.

Jochen

Weil richtig ist halt kein guter Wert quasi oder es senkt halt nicht die Komplexität.

Also es kommt drauf an.

Jochen

Also ich meine, es gibt natürlich Situationen, in denen es ist so schlimm, da muss man halt was machen.

Jochen

Aber wenn es jetzt sozusagen nur unschön ist, aber halt in sich konsistent, dann ist es wahrscheinlich besser, das so zu lassen, weil es senkt halt nicht, also die Konsistenz zu brechen, erhöht halt die Komplexität ganz sicher.

Jochen

Während das anders zu machen, verringert die Komplexität vielleicht ein bisschen, aber wahrscheinlich gleicht das nicht das aus, dass man das dann halt inkonsistent gemacht hat und damit dann komplexer.

Jochen

Also ja, es ist blöd.

Ronny

Es ist ja generell auch ein Problem, dass wenn man jetzt ein altes, gewachsenes Projekt hat, das man dann vielleicht im schlimmsten Fall übernimmt, aber vielleicht auch, wo man halt auch schon selber lange dran arbeitet und irgendwann kommt dann jetzt der Impuls, wir müssen da jetzt mal irgendwie anfangen, Sachen besser zu machen, das geht so nicht mehr weiter.

Ronny

Und da ist dann ja auch bei vielen motivierten Entwicklern, wie das bei mir früher auch so war, man geht hin und sagt, okay, machen wir irgendwie so gefühlt alles neu.

Ronny

Und dann fängt man irgendwie sieben Baustellen an und das klappt halt einfach nicht.

Ronny

Also ich glaube, die größte Kunst, wenn man wirklich so ein altes Projekt retten möchte, ist wirklich, sich zu überlegen, wie kriege ich die Patterns, die ich möchte, unter den Nebenbedingungen meines Projektes.

Ronny

Ohne dass ich quasi alles anzünden muss und.

Dominik

Oh oh, lieber die Finger vorlassen.

Ronny

Also ich habe tatsächlich mal jahrelang auf einem wirklich komplett von der grünen Wiese gewachsenen Plain PHP-Projekt gearbeitet.

Ronny

Das war halt einfach, das war vor und hinten eine Katastrophe.

Ronny

Also die Codebasis war wirklich, wirklich schlimm.

Ronny

Da gab es nie irgendjemanden, der drüber geguckt hat.

Ronny

Das waren alles im Endeffekt alles von Freelancern gebaut, die, genau wie du es gerade gesagt hast, halt, die dafür bezahlt wurden, möglichst schnelle Feature abzuliefern und dann danach mit die Sintflut.

Ronny

Böse, ich meine, nicht bei allen, aber es gab halt auf jeden Fall Leute und wenn du halt einen so im Team hast, dann ist halt schwierig.

Dominik

Ich habe einen befreundet, einen Entwickler aus Malawi, der halt so versucht, günstige Aufträge ranzubekommen.

Dominik

Und weil die Kunden, die er hat, dann halt ein relativ wenig Budget haben und immer ausgeben, merkt man halt auch, welche Entwickler sich halt dann leisten können.

Dominik

Und wenn er halt dann so sieht, so die Leute, die von denen er das aufräumen muss, das wäre der selber nicht weiß, worum es geht, und die haben dann teilweise Pandas selbst implementiert, weil sie nicht wussten, was das dann gab und hat Sachen selber geschrieben und vorne auseinanderfallen, oder mich wie Spaghetti-Zeug und dann das dann neu zu machen.

Dominik

Also die Arbeit, die hat, er ist die ganze Zeit am Limit und weiß überhaupt nicht, was da passiert ist.

Dominik

Das ist so unheimlich schwierig, das besser zu machen und das zu refactoren.

Dominik

Aber ich glaube, da ist dann gordische Knoten besser gelöst, indem man manchmal tatsächlich dann durchschneidet oder halt einfach verbrannte Erde und das neu anfängt oder so.

Ronny

Also es gibt es auf jeden Fall.

Ronny

Aber es ist ja leider bei zum Beispiel bei vielen Firmen, die so vor, weiß ich nicht, 10 Jahren, 15 Jahren angefangen haben und einfach ihr Geschäftsmittel irgendwie implementiert haben.

Ronny

Da wurde ja die meisten, oder vor allem auch so Frühzeiten des Web, da sind ja einfach sehr, sehr viele schlimme Dinge passiert.

Ronny

Da gab es so teils noch keine Frameworks, das waren Leute, die da nicht so richtig wussten, was die da tun.

Ronny

Und das Problem ist aber, dass halt, weil halt auch da in der Firma dann nie jemand ist, der dann wirklich da versucht, das kontinuierlich besser zu machen.

Ronny

Dann kommt halt irgendwann so, okay, es geht nicht mehr, ja, da weiß ich nicht, ein Formular anpassen dauert eine Woche, wir müssen irgendwas machen.

Ronny

Und das ist halt dann, dass diese Firmen dann halt in so einem Deadlock sind, dass die halt nicht das Budget haben, diese riesige gewachsene Software mit 28.000 Sonderfällen neu implementieren zu können, aber es geht auch nicht weiter.

Ronny

Und das ist halt genau der Fall.

Ronny

Und ich glaube, das ist ein sehr, sehr häufiger Fall, insbesondere wenn das halt so eine Software ist, die halt wirklich in-house dann für sich selbst entwickelt wurde.

Ronny

Dass man da, da ist super wichtig, dass man reflected.

Ronny

Das ist super wichtig, dass man, also vor allem, ich finde in solchen Fällen das Einzige, was dann irgendwie motivieren kann, an diesem Projekt zu arbeiten, dass man halt versucht, die Herausforderung halt anzunehmen und das irgendwie besser zu machen kontinuierlich.

Ronny

Und da ist es halt einfach super wichtig, dass man sich Patterns überlegt.

Ronny

Also beispielsweise bei diesem alten Plain PHP-Ding, war halt auch, dass das einfach eine Kette von Skripten, die eingebunden wurden.

Ronny

Eine n-lange Liste.

Ronny

Niemand wusste genau, was da oben kommt und was unten kommt.

Ronny

Du hattest keinen Variablen-Scope.

Ronny

Also das kann man sich nicht vorstellen, was das für ein Segen ist, dass man einen Variablen-Scope hat, ja.

Ronny

Und im Endeffekt habe ich dann, das war das, wo ich dann so mich am meisten darüber gefreut habe, dass es funktioniert hat.

Ronny

Ich habe dann im Endeffekt Django Class-Based Views den Kleinen nachgebaut.

Ronny

Und es war ein Segen.

Ronny

Und es war im Endeffekt, das halt einmal zu bauen, also mir im Endeffekt grob abzugucken und dann halt ein bisschen fein zu schleifen, war ich in zwei, drei Tagen durch.

Ronny

Das war jetzt echt nicht viel Arbeit.

Ronny

Und jedes Mal, wenn ich halt an irgendeinem View dran war, also View in Gänsefüßchen, letztes Skript der Reihe, habe ich halt dann einfach, okay, jetzt stelle ich das einfach um.

Ronny

Habe ich dann mit dem Kunden noch abgesprochen, das hat dann auch meistens nicht rasend viel, was meistens nur einsortieren war.

Ronny

Ich habe gar nichts im Code wirklich gemacht.

Ronny

Aber dadurch, dass man plötzlich Scope hatte, konnte auch die Idee plötzlich mit Variablen arbeiten.

Ronny

Hat einem plötzlich zum Beispiel gesagt, ey, da ist ein ganzer, weiß ich nicht, 100 Zeilen, Zweig in diesem Dings.

Ronny

Die Variable wird gar nicht gesetzt.

Ronny

Die kommt nirgendwo her.

Ronny

Dieses Gips, das kann man einfach rauswerfen, ja.

Ronny

Also das war im Endeffekt mehr oder weniger eine Kleinigkeit und das war so ein Gewinn für dieses Projekt, weil wie gesagt, man wusste, was diese Views, man hat angefangen, man konnte, man wusste doch erstmal, wie ich überhaupt anfangen soll aufzuräumen, ja.

Dominik

Ja, ist so unterschiedlich als die.

Dominik

Ich habe auch da gehört.

Dominik

Also es gibt Leute auf der Welt, programmieren unterschiedlich.

Dominik

Zum Beispiel, ich habe jetzt vom Freund gehört, der mit Ukrainern relativ viel zu tun hat, also wirklich, die dann lange Jahre schon so Auftragsarbeit machen für europäische Kunden oder sowas und die sich jetzt halt wirklich auf dem internationalen Vergleich da irgendwie gucken, wie das Ganze aussieht.

Dominik

Und da gibt es Firmen aus anderen Teilen der Welt, irgendwo aus Asien oder sowas, die entweder genug genau das machen, was sie aufgeschrieben haben und also halt nur genau Definition, das heißt, du brauchst ultra lange, wenn du mit dem Zusammenarbeit, um diese Definition aufzuschreiben, weil alles, was da nicht drinsteht, das wird halt nicht gemacht.

Dominik

Das ist halt blöd, weil wir waren halt nicht bestimmte Dinge tun.

Dominik

Oder die halt diese Abstraktionslevels nicht benutzen, also mit auch Firmen aus dem anderen asiatischen Raum, wo du halt dann da stehst und anstatt, dass du so ein Fettern jetzt halt hast und eine abstrakte Klasse dazu schreibst, werden halt alle 100 einzelne Möglichkeiten einzeln implementiert.

Dominik

Und dann sagt, ja, kommen ja auch noch weitere, ja, 900 dazu, irgendwie vielleicht mehr Abstraktionsniveau sinnvoll.

Dominik

Nun, die 900 machen wir dann auch ganz schnell.

Dominik

So halt, das ist halt dann schwierig.

Dominik

Also wenn man das halt dann refactort, dann ist es halt unheimlich viel Fleißarbeit auch dann, ne?

Dominik

Wie man das irgendwie dann versucht.

Dominik

So modular, auseinanderziehen.

Dominik

Also ist Refactoren Auseinanderziehen oder Extraktion, ich weiß nicht.

Ronny

Ich glaube, es sind halt viele Facetten, oder?

Ronny

Ja, aber.

Jochen

Ja, ich würde sagen eben, das ist halt, letztlich sollte es halt dazu führen, dass die Komplexität vom Gesamtsystem geringer wird.

Jochen

Und wenn du halt, dann ist halt die Frage, was ist Komplexität eigentlich?

Dominik

Ja, Don't Repeat your Self vielleicht auch, ja,

Jochen

manchmal ist es.

Jochen

Genau, eben, wenn du das halt so implementierst, ja, also nehmen wir diesen Fall, du hast halt nicht, du machst halt nicht eine generelle Lösung für irgendwas, sondern du hast halt dann 900 Spezialfälle, dann sieht das ja erstmal gar nicht so schlimm aus, aber tatsächlich, wenn du jetzt etwas hast, was all diese Fälle betrifft, quasi etwas, was du zum Beispiel immer tun musst, oder dann musst du die alle anfassen.

Jochen

Das heißt, du hast eine Abhängigkeit zwischen allen, die nicht sichtbar ist.

Jochen

Ja, also wenn du das sozusagen.

Dominik

Explizit Methoden Implice, wir sind schon wieder bei Zen of Heist und können jetzt hier die Liste wieder runterbieten, ja,

Jochen

was wir tun.

Jochen

Das ist auch, das Beispiel hier in dem Buch ist sozusagen, wenn du eine Webseite mit ein paar tausend Seiten hast und du hast halt irgendwo einen Banner da drin, das halt eine Hintergrundfarbe hat und du hast sie jetzt halt einfach von Hand gesetzt in allen Seiten.

Jochen

Du hast sie, dann hast du halt eine implizite Abhängigkeit zwischen allen Seiten, weil du kannst diese Farbe nicht mehr ändern, ohne alle anderen Sachen anzufassen.

Jochen

Besser ist es halt nur eine Abhängigkeit zu haben zu einem Modul irgendwie, wo du diese Farbe setzen kannst.

Jochen

Und dann hast du eine explizite Abhängigkeit, das heißt, du siehst auch, dass es die gibt und du kannst es an einer Stelle ändern und dann ist es halt für alle geändert.

Jochen

Das wäre ein Refactoring quasi zum Schluss.

Dominik

Aber gerade das, also es gibt ja so Sprachen, wo das nicht ging, zum Beispiel mit Variablen Sätzen oder sowas, also in HTML oder alten CSS oder sowas, waren Variablen ja nicht so einfach so setzen.

Jochen

Gut, keine Ahnung, ich weiß aber auch noch nichts über CSS.

Dominik

Ja, aber das war halt zum Beispiel dann ein Problem, wenn du quasi eine Variable, also eine Farbe gesetzt hattest auf eine Farbe, die es schon gab.

Dominik

Von zwei verschiedenen Komponenten.

Dominik

Weil wie willst du denn jetzt, also das sind wir weiß nicht, ein paar hundert Stellen, wo das auftaucht und die Farbe ist aber dieselbe, und wie kriegst du denn jetzt raus, was dann war jetzt vorher jetzt der Hintergrund 2, was war der Hintergrund 1 oder so?

Dominik

Solche Dinge.

Dominik

Das ist halt ziemlich hässlich.

Jochen

Aber genau, also ja, das Buch sagt dazu quasi zu, wo kommt diese Komplexität eigentlich her und wie kriegt man sie klein?

Jochen

Es gibt eigentlich im Grunde nur zwei Quellen von Komplexität.

Jochen

Das eine ist halt so solche Abhängigkeiten.

Jochen

Und das ist halt, wenn man viel davon hat, ist halt doof, weil das bedeutet halt, wenn du etwas änderst, musst du viele andere Sachen, alle Abhängigkeiten ja auch anfassen.

Jochen

Und die zweite Geschichte ist Obscurity.

Jochen

Ich weiß gar nicht, wie man das am besten übersetzt.

Ronny

Undurchsichtigkeit.

Jochen

Undurchsichtigkeit, ja.

Nebel.

Jochen

Obscurität, ja, ich weiß nicht, genau.

Jochen

Unklarheit, Unklarheit vielleicht, ich weiß nicht.

Jochen

Naja.

Jochen

Jedenfalls, das ist halt, ähm, das passiert, also, und das sorgt halt für noch schlimmere Probleme, das sorgt so für so Unknown Unknowns, dass du halt gar nicht weißt, also wenn du viele Abhängigkeiten hast, ja, nehmen wir an, du hast halt irgendwie, du weißt halt, wenn du das jetzt änderst, dann musst du das an 100 Stellen auch noch anfassen.

Jochen

Dann weißt du halt so, oh mein Gott, das dauert

jetzt lang.

Dominik

Aber was dann diese 100-Stellen eigentlich alles machen, das weißt du halt nicht, vielleicht?

Ja.

Jochen

Ja, aber wenn du, genau, zum Beispiel nehmen wir an, du hast jetzt diese eine Abhängigkeit, die sagt, wenn du die Hintergrundfarbe von diesem Banner ändern willst, dann machst du das hier.

Jochen

Und jetzt hast du aber in zehn Dingern hast du es halt von Hand überschrieben.

Jochen

Aber das weißt du halt nicht mehr, das ist nicht dokumentiert.

Jochen

Dann, das sind halt diese Sachen, wo dir dann hinterher auffällt, dass den, oder ein Kunde sagt dann halt irgendwann so, oh, da stimmt aber die Farbe nicht.

Jochen

Wir hatten das doch geändert.

Jochen

Wieso ist denn die jetzt da an der Stelle falsch?

Jochen

Und dann kriegst du das sozusagen als Bugs wieder zurück, was du nicht wusstest, dass es diese Abhängigkeit gibt, aber die war halt nicht dokumentiert.

Jochen

Ja, und dann, die sind eigentlich, das sind die schlimmsten, weil das Problem ist halt, du weißt halt gar nicht, dass du das eigentlich hättest machen sollen.

Dominik

Ja, da alles, was implizit dann tatsächlich einem nicht auf die Füße fällt.

Jochen

Ja, und dann ist halt die Frage, wo kommt das her und wie kriegt man das verändert?

Jochen

Und oft ist es halt vielleicht Dokumentation.

Jochen

Das ist auch etwas, das fand ich nett, wie dieses Buch hat meine Einstellung zu Kommentaren und Dokumentation so ein bisschen verändert.

Dominik

Jochen schreibt übrigens nie Dokumentation oder.

Jochen

Nein, das da nie.

Jochen

Es wäre nie zu hart.

Dominik

Ja, der Code erklärt sich selbst und so.

Jochen

Ja, okay.

Jochen

Aber tatsächlich, ich würde auch sagen, also ja, ich meine, es gibt ja da unterschiedliche Ansichten zu.

Jochen

Eine auch verbreitete, jetzt, wenn man so Clean Code nimmt, auch ein Buch, was sich ja mit solchen Themen beschäftigt, von Robert Martin, Ankel Bob genannt, der sagt ja immer, ja, so komm, wenn du einen Kommentar schreibst, gut, manchmal lässt sich das nicht vermeiden, musst du halt machen oder manchmal musst du halt, aber sei dir bewusst, wenn du das tust, es ist im Grunde ein Fehler.

Jochen

Also es ist im Grunde eins.

Jochen

Weil wenn du es richtig gemacht hättest, dann hättest du es so hingeschrieben, dass man das nicht hätte kommentieren müssen.

Jochen

Ja, ich

Dominik

meine, ein paar Kommentare sind natürlich blöd, weil man muss sie halt aktualisieren und anpassen, wenn man sie.

Jochen

Ja, du hast halt eine mögliche Inkonsistenz auch erzeugt, das ist ja findet.

Dominik

Genau, das ist schon doof, also man muss halt echt schon aufpassen.

Dominik

Aber es ist einfach an vielen Stellen sehr, sehr hilfreich, auch gerade wenn man kollaborativ arbeitet, einmal kurz hinzuschreiben, was denn da passieren, warum denn da irgendwas passiert.

Dominik

Absolut.

Dominik

Anstatt das halt einfach nicht zu machen, weil dann die Leute fragen sich, da wird irgendwie funktioniert aufgerufen, warum?

Dominik

Oder so.

Dominik

Selbst wenn der Name toll ist und so.

Jochen

Absolut.

Jochen

Ja, ja.

Jochen

Ja, ich muss auch sagen, also der, der, der, genau, dieses Buch hier nimmt das auch relativ detailliert auseinander.

Jochen

Und da sagt dann halt so Sachen wie, ja gut, selbst wenn der Code selbst dokumentierend ist, dann einmal, du kriegst das Problem, die Variablen und die Funktionsnamen werden halt lang.

Jochen

Du hast das Problem, du schreibst dann, wenn das die Dokumentation von deinem Ding ist, dann schreibst du die ja an jede Stelle, wo du das verwendest.

Jochen

Das ist ja auch Quatsch.

Jochen

Das sollte man ja nicht, also das ist ja auch irgendwie offensichtlich Quatsch, das kann ja nicht sein.

Jochen

Das sollte ja reichen, wenn man das an einer Stelle schreibt und dann ja.

Jochen

Und hat halt noch so viele, viele Punkte, aber der allerwichtigste Punkt eigentlich, wo ich dann auch gedacht habe, okay, ich glaube, ich muss meine Einstellung dazu überdenken und vielleicht mal anders probieren und mal gucken, vielleicht funktioniert es dann ja anders besser, ist, dass er sagt, ja, also eigentlich das, was dein Code tut, ist eigentlich, oder das, das Entscheidende beim Design von so einem System ist eigentlich nicht so sehr, der Code ist eigentlich gar nicht das Entscheidende, weil der Code ist halt die Implementation davon, aber das ist halt.

Dominik

Ich kann schreiben Magie, Call Magie, Call Magie, Call Magie.

Dominik

Und aber was da herauskommt, ist wichtig.

Jochen

Die Abstraktionen sind wichtig.

Jochen

Und die stehen aber, aber Code ist möglicherweise gar keine so gute Art, um diese Abstraktionen sichtbar zu machen oder irgendwie zu dokumentieren.

Jochen

Und er sagte also, natürliche Sprache ist dafür deutlich besser geeignet.

Jochen

Und eigentlich sollte man sich Gedanken über die Abstraktionen machen.

Jochen

Und dann schreibt man in natürlicher Sprache hin.

Jochen

Und wie man das dann implementiert, ist ja nochmal eine andere Sache.

Dominik

Das ist sehr schön, weil bei Python halt, finde ich, von meinem Empfinden her, ich mache natürlich auch keine Ahnung, aber die Sprache ist, mit der man am nächsten an natürlicher Sprache schreiben kann, entwickeln kann und dass es irgendwie stimmt.

Dominik

Sonst bei Sonic, es hört sich für mich irgendwie so ein bisschen mehr nach, ich schreibe wirklich was dahin, was ich auch so sagen könnte, vielleicht.

Dominik

Also ein bisschen.

Dominik

Und das ist nicht immer bei allen anderen Sprachen drin.

Eigentlich so nie.

Jochen

Nie.

Jochen

Ja.

Jochen

Ja, naja.

Jochen

Es ist halt ja, es gibt da ganz unterschiedliche Philosophien.

Jochen

Ich finde das, ich finde das sowieso auch interessant.

Jochen

Bei Go zum Beispiel, die, die, ähm, gibt es auch bekannte, ich weiß jetzt nicht mehr wie der Talkies, aber einer, der ja auch, der, der die Sprache mit designt hat, der ist halt ein Verfechter von irgendwie kurze Variablenamen nehmen.

Jochen

Ja, aber letztens irgendwann einen.

A, B, C, D und E.

Jochen

Auf der Frostconf.

Jochen

Frostcon, ja, also, ja.

Jochen

Ja, also es ist nicht immer gut.

Jochen

Es gibt auch einen auf der Frostcon, habe ich letztens einen getroffen, der war, da hatte der sehr extreme Standpunkt und meinte, was muss man lang sein?

Jochen

Kurze Variablenamen schrecklich.

Jochen

Ganz furchtbar geht gar nicht, ist schrecklich.

Jochen

Ich sage so, naja, also manchmal ist das schon nett.

Jochen

Also gerade wenn man jetzt komplizierte Logik hat, dann kann es sein, wenn man lange Variablen stehen an wie Variablenamen im Weg, dann sieht man überhaupt nicht mehr, was passiert.

Jochen

Das ist ja auch in der Mathematik so, da schreibt man auch eigentlich immer nur ganz kurz Sachen und Formeln so kurz hin.

Jochen

Das hat halt auch den Vorteil, dass man das dann auch überblicken kann, wenn man das alles ganz detailliert ausschreibt.

Manchmal machen wir überhaupt nichts mehr sehen.

Dominik

An der Stelle tatsächlich vorher die Zuweisung, zum Beispiel D gleich Data vor irgendwas.

Dominik

Und dann mache ich dann nicht immer Data vor irgendwas, dann nimmt man irgendwie so, dann wird das so ein bisschen dadurch klar.

Jochen

Ja, genau.

Jochen

Und da macht das Buch auch einen interessanten Vorschlag und sagt so, ja, ja, also der Name sollte umso länger sein, je weiter weg die Variable quasi von ihrem ursprünglichen Ort, wo sie mal definiert wurde, ist, verwendet wird.

Jochen

Also je weiter das weg ist, desto eher musst du halt einen langen Namen nehmen oder desto länger muss der Name sein.

Jochen

Aber je näher du da dran bist, dann ist es, ähm, dann kannst du auch kürzere Namen nehmen oder sehr kurze.

Jochen

Ja.

Jochen

Weil dann ja immer noch alles im Blick ist.

Jochen

Du hast halt, du siehst halt, was da passiert irgendwie sofort.

Naja, also es ist.

Dominik

Also Readability Count, das ist ja auch wieder so eine Sache aus dann auf Python.

Jochen

Naja, also ja, schon faszinierend.

Jochen

Genau, aber auch sowas, also Obscurity kommt halt auch, der ist auf dem ein sehr schönes Beispiel beschrieben, wo Variablen-Namen an böse Überraschung bescheren können.

Jochen

Der hatten sie, die haben, also der Autor von dem Buch, der hat TCL mal diese Scripting-Language geschrieben, also diese Sprache designt.

Jochen

Vielleicht kennt man das auch von früher, da hat man so User-Interfaces damit gebaut in Unix, häufig Tickle DK, ist das?

Dominik

Ja, das hintergibt es, ja.

Jochen

Genau, das ist die Python-Geschichte.

Jochen

Mit Python kann man das auch machen.

Jochen

Das ist die einzige UI-Geschichte, die in der Steiner-Bibliothek drin ist.

Jochen

Und der hat aber noch diverse andere gemacht.

Jochen

Der hat zum Beispiel ein Cloud-Dings gebaut, also ein quasi verteiltes Betriebssystem und ganz viele coole, interessante Dinge.

Jochen

Und in diesem Dings gab es ein Fallsystem auch und in der Fallsystemimplementation gab es irgendwie eine Variable, die hieß Block.

Jochen

Und da hatten sie einen ganz fiesen Bug, wo sie irgendwie da Monate gebraucht haben, um den zu finden.

Jochen

Und der lag dann letztlich daran, und das ist dann halt eben das, was dann diese Obscurity tatsächlich so schlimm macht, der lag daran, dass sie Block subtil unterschiedlich einer Bedeutung verwendet haben.

Jochen

Also sie haben Block als Variablen Namen benutzt, aber in dem einen Fall bedeutet er etwas leicht anderes als in dem anderen Fall.

Jochen

Und wenn du das liest, dann sieht es aber so aus, als ob das irgendwie das gleiche ist.

Jochen

Immer der Block.

Jochen

Aber wenn du es dann halt verwendest, so als wäre es das gleiche, dann hast du halt einen subtilen Fehler gemacht.

Jochen

Und in ganz obskuren Fällen hat es dann halt irgendwie mal irgendwie zusätzliche Daten in irgendwie Files reingeschrieben oder weil irgendwas nicht richtig allein war.

Jochen

Also so ganz Horrorbockbugs.

Dominik

Naja, irgendwie so Magie, die passiert im Dunkeln, aber schwarze Magie macht irgendwas kaputt und du weißt nicht genau was.

Dominik

Ja, ja, schwierig.

Jochen

Und das ist halt dann, ja, das lag halt einfach daran, dass der Variablename halt zu generisch war.

Jochen

Also sie können halt zu generisch sein, sie können halt aber auch zu speziell sein.

Jochen

Also ich meine, irgendwie, keine Ahnung, der Java, File-Input, Buffer, Stream, Schlag nicht tot, Reader, ist halt auch irgendwie dann nicht mehr so der Sinn.

Jochen

Das ist auch nicht so für ein Jahr.

Dominik

Ja, aber das ist halt vielleicht geschmacksfrei, vielleicht auch anwendungsfrei spezifisch.

Ronny

Ich glaube, eine Sache, die man ganz generell festhalten kann, ist, wenn man irgendwas refactoren möchte, also nochmal ganz generell gesprochen ist, dass einem der Unit-Tests oder funktionale Tests oder was auch immer für Tests sehr, sehr helfen können.

Ronny

Und nicht nur, dass man dass man quasi das, was man refactort hat, dass man das vernünftig testet, das sollte eh klar sein, sondern wenn es hinreichend kompliziert ist, dass man auch einfach mal Tests schreibt für den Bestandscode, dass man einfach sicher sein kann, was mache das eigentlich und dass sich das nicht verändert hat.

Ronny

Ich habe letztens, ich weiß nicht ob das, ob das mit euch war, ob ich mit euch darüber gesprochen habe, mit dieser Oracle-Implementierung, wo die dann auch gesagt haben, das Ding war irgendwie dermaßen alt and verbuggt, dass sie dann quasi alles komplett mit Unitests zementiert haben.

Ronny

Also jeden Bug und dieses merkwürdige Verhaltenssystem hatte, haben die mit Unitests zementiert und die haben irgendwie ein Jahr lang, glaube ich, nichts anderes gemacht.

Ronny

Und dann haben die angefangen das zu refactoren, weil die halt einfach Angst hatten, weil also teilweise war es wohl auch so in der Community, dass die Leute halt auf diesen merkwürdigen Verhalten oder Bugs, wie man es halt nennen möchte, halt aufgebaut haben und Features draufgesetzt haben.

Ronny

Und die konnten das den Leuten nicht einfach wegnehmen, weil dann halt irgendwie ganz viele Sachen zerbrochen wären, weil das halt irgendwie so Teil der impliziten API gewesen ist und sowas.

Ronny

Und das kann tatsächlich.

Ronny

Und das kann tatsächlich auch helfen.

Ronny

Also ich habe das jetzt einmal gemacht, als ich jetzt ein größeres Teil angefangen habe zu refactoren, also einfach Tests für den Bestandscode zu schreiben.

Ronny

Es macht keinen Spaß.

Ronny

Ja.

Jochen

Ja, aber dass man den Tests auch ein gutes Stichwort, ja.

Jochen

Das ist halt auch so, also natürlich, es gehört, dass man, dass man Sachen testet und es ist auf jeden Fall super, also das ist eine der Dinge, die viel gebracht haben auf der anderen Seite, muss ich sagen, Test-Driven Development, weiß ich nicht so genau.

Jochen

Da würde mich jetzt doch nochmal allmählich interessieren, ob es wirklich Leute gibt, die das so durchziehen und die das gut finden.

Jochen

Ich glaube schon.

Vielleicht müssen wir mal jemanden suchen.

Dominik

Es kommt noch an, ich glaube, wenn man selber schreibt und wenn man weiß, was man tut.

Dominik

Dass man halt, wenn man halt tatsächlich weiß, was man raus haben will, dann schreibt man einen Test, der das quasi die Logik, die man implementiert, die zwei Methoden quasi mit einem Test Case so das Ergebnis hat.

Dominik

Also zum Beispiel zwei, du hast halt einen Datensatz und du kennst das Ergebnis, das heißt, du machst einen Beispieldatensatz und da am Ende weißt du, das Ergebnis kommt raus, und dann weißt du ja quasi schon implizit in der Stelle wahrscheinlich oder explizit so ein bisschen, also du kannst auch hinschreiben in Logik, wie das aussehen soll.

Dominik

Was muss passieren, damit das passiert, dass das stimmt.

Dominik

Und dann kannst du den Methoden schon die richtigen Namen geben, die du dann irgendwie füllen musst, damit die am Ende rauskommen sollen, wenn das jetzt nicht zu komplex ist und dann kannst du das implementieren und dann, wenn das für dein Test Case stimmt, wirst du ziemlich sicher sein, dass das auch für die anderen Fälle laufen sollte.

Jochen

Ja, aber also.

Dominik

Und wenn du das halt so machst, das ist halt so ein TD-File, wo ich sagen würde, das kann dann ganz gut sein.

Dominik

Du kennst quasi.

Jochen

Ja, also wenn du genau weißt, was passieren sollte.

Dominik

Genau, du kennst den Testfile.

Dominik

Du kennst halt den Testfall.

Dominik

Du weißt den Testcase, den kennst du schon.

Dominik

Du weißt, okay, das sind meine Testdaten und du weißt, das Ergebnis von dem Test ist so und dann kannst du dafür dann eine Methode schreiben, die diesen Testfall nicht dich macht.

Dominik

Und wenn du quasi alle Testcases hast, dann ist dein Code schon richtig.

Dominik

Und das ist ein cooler Fall, wo man das machen kann, wo man dann halt für generische Fälle Code hat, der funktioniert und wo TDD Sinn macht.

Dominik

Wenn du es aber nicht hast, weil du nicht weißt, ob die Testcaser vollständig sind, ob du irgendwelche Edge Cases hast oder sowas, dann ist es halt Nooper nervig, weil dann muss ich Test draußen mal umbauen, irgendwas wegmocken müssen.

Ronny

Aber das ist ja auch Teil Teil des Prozesses, dass du halt die Tests auch ständig anpasst.

Jochen

Ja, ja, genau.

Ronny

Also ich glaube, ich glaube, TDD, der größte Vorteil davon ist einfach, dass man erstens Code so schreibt, dass er testbar ist.

Ronny

Weil das habe ich früher auch nicht so gemacht.

Ronny

Wenn man keine Unit-Tests schreibt, dann schreibt man Code anders.

Ronny

Und das ist schlechterer Code.

Ronny

Das ist einfach eine generelle richtige Aussage.

Ronny

Und das zweite ist, du wirst, du kommst, wenn dann plötzlich der PO oder irgendwer Stress macht, dann lässt man die Tests nicht weg, weil die sind schon da.

Ronny

Ich glaube, das sind die beiden Hauptverkaufsargumente dafür.

Jochen

Ja, du kannst halt keinen ungetesteten Code schreiben.

Jochen

Das ist halt irgendwie natürlich so ein bisschen, das ist halt schon vielleicht gut.

Jochen

Aber eben, das gab es auch in der letzten Django-Chat-IP so, ich weiß nicht, letzte Vorletzte, keine Ahnung, wo sie.

Jochen

Da gab es auch, da ging es auch um das Thema Test-System Development und auch alle da meinten so, ja, ganz gut hier ist eigentlich vielleicht nicht so schlecht, aber der Konsens in der Runde war halt auch so, naja, so wirklich machen, macht das dann doch keiner.

Jochen

Und auch mit dem Argument und das, was wir, glaube ich, auch schon mal gemacht haben, dass halt das Problem ist, wenn man jetzt, wenn klar ist, was zu tun ist, dann ist das vielleicht machbar.

Jochen

Aber ich hatte auch heute wieder so einen Fall, wenn man nicht weiß, was man machen will, dann ist das ganz blöd, weil das hilft einem überhaupt nicht, dass man damit mit dem Test anfängt, weil man muss sowieso irgendwie rumprobieren und das dann in einem Test zu machen, macht irgendwie nicht so viel Sinn.

Jochen

Das Buch macht da auch einen interessanten Punkt und sagt halt, naja, also wenn du Test-Development machst, dann zwingt dich im Grunde das Vorgehen, dir von Anfang an ganz viele detaillierte Gedanken über die Implementation zu machen, an der Stelle, wo das vielleicht überhaupt nicht zielführend ist, sondern du willst vielleicht am Anfang dir erstmal Gedanken über das Design über die Abstraktion machen und nicht über die Implementierung.

Jochen

Und das geht mit Test-Driven Development gar nicht so richtig.

Jochen

Und was er dann vorschlagt, ist zu sagen, mach doch lieber Document oder ja.

Dominik

Du implentierst die Methoden, schreibst du den Doctrine dazu, weil das tut toll und schreib dann Vortrag.

Jochen

Genau, überhaupt nicht die Implementation, sondern du schreibst halt nur in natürlicher Sprache sozusagen, was die Abstraktionen sind, was die ungefähr machen sollen.

Jochen

Und mit denen spielst du so lange rum, bis dir das Design gefällt.

Jochen

Und dann fängst du erst das an, das zu implementieren.

Jochen

Ehrlich gesagt, also ich versuche das jetzt mal, mal gucken, keine Ahnung.

Dominik

Okay, dann die Tests schreiben und dann implementieren vielleicht.

Jochen

Ja, aber genau, also ich weiß es nicht so genau, ob es wirklich funktioniert, weil ich habe immer so den Verdacht, also bei mir ist es oft so, wenn ich irgendwie, ich merke erst beim Rumprobieren damit um rumspielen und umstellen, irgendwann, ach, wie das Design eigentlich hätte sein sollen.

Jochen

Ich kann das nicht gut mir vorher irgendwie, also dass ich mit einem Design, dass ein gutes Design dabei rauskommen würde, wenn ich nur so mit abstrakten Geschichten rumspiele, das ist bei mir irgendwie nicht so.

Dominik

Man merkt ja auch mal ein paar Mal, wenn man auch das erweitert hat, also ist auch doch nicht so toll, dann muss er doch nochmal anders und vielleicht auch selber.

Jochen

Oft kommt halt die Idee für das Design aus dem aus der Implementation.

Jochen

Also dass ich merke so, okay, ich halte an der Stelle, mache ich zwei, drei Umstellungen und dann merkst du, okay, das ist jetzt alles, jetzt brauche ich gar kein Objekt mehr, das nämlich da einfach dickt oder so.

Jochen

Und dann, oh, dann kann ich das ja so ausdrücken und dann kann ich so, oh, und jetzt ist das Design auch klar und so.

Jochen

Und das kommt halt aus dem, da mit den Datenstrukturen rumspielen.

Jochen

Nicht so sehr aus dem, sich abstrakte Gedanken machen.

Jochen

Ich weiß es nicht.

Jochen

Ich probiere es mal aus, mal gucken.

Jochen

Also es klingt auf jeden Fall ganz interessant und es ist halt nochmal ein bisschen was anderes als Test-Driven Development.

Jochen

Und ja, ich glaube auch, das habe ich bisher einfach unterschätzt und irgendwie nicht richtig gemacht mit der Dokumentation und Kommentaren.

Jochen

Das ist wahrscheinlich doch deutlich wichtiger, als ich gedacht habe.

Jochen

Da muss ich mal mehr machen.

Dominik

Ja, das klingt gut.

Dominik

Also tatsächlich dokumentierter Code.

Dominik

Sehr Senn, sehr senn, sehr senn ermeißend.

Dominik

Ja, ich glaube, wir haben über Refactoring, äh, ich habe nicht mehr so viel auf meinem Channel, was ich hätte.

Jochen

Ich kann mal gerade gucken, ob ich mir, was habe ich mir denn aufgeschrieben, was ich dazu noch.

Dominik

Ich muss natürlich sagen, mein Tießen kaputt, hatte ich am Anfang schon erwähnt, aber das ist nicht so schlimm.

Jochen

Ja, übrigens, achso, genau.

Jochen

Das ist das jetzt, das ich hier gerade habe, was ich mir aufgeschrieben habe, ne, Red Flag, irgendwie extensive Dokumentation, schreibt er auch, obwohl er eigentlich sagt, du hast voll gut.

Jochen

Er sagt, ja, wenn Leute viel, viel dokumentieren, ist auch ein Zeichen für schlechtes Design.

Jochen

Weil das ist ja etwas, was nicht, ist ja nicht gut, dass man das hat, sondern je mehr man dokumentieren muss.

Man muss viel erklären, ist auch nicht.

Jochen

Wenn du viel erklären musst, ist nicht gut.

Jochen

Eigentlich sollte es offensichtlich sein und man sollte es mit wenig.

Dominik

Also ein oder zwei Sätze am Anfang, was macht das überhaupt?

Dominik

Und dann muss man die ganze Funktion nicht lesen, wenn das stimmt.

Dominik

Aber deswegen, das finde ich auch so eine Sache, warum ich Typeins gut finde.

Dominik

Jetzt nicht, weil es unbedingt so die Typensicherheit alles sicherstellt.

Dominik

Aber wenn ich halt den Funktionsnamen lese, der gut gewählt ist, die Typeins, die dazu passen, zu den Parametern, die die Funktion hat, und dann den Doc-String, der idealerweise mir erklärt, was das macht, dann habe ich ja den Return-Wert, dann muss ich gar nicht in die Funktion reingucken, um der alles genau angucken, sondern ich weiß halt, was sie tut.

Dominik

Ah ja, okay, und kann zum nächsten übergehen.

Dominik

Das ist super, super schön zum Arbeiten.

Jochen

Ja, das ist dann halt beispielsweise für eine gelungene Abstraktion.

Jochen

Wenn du halt sozusagen der Interface-Dokumentation schon ansehen kannst, also alles daraus alles erfährst, was du brauchst, um das benutzen zu können.

Dominik

Ja, genau.

Dominik

Du kannst einfach die Doc-Strings skimmen, ja, und kurz gucken, ja, okay, jetzt mach das und das und das.

Dominik

Muss gar nicht so genau den Code hier angucken, dann ist das auch egal, ob die Leute da so ordentlich gearbeitet haben irgendwann.

Ja.

Ja.

Ronny

Absolut.

Ja, ja.

Jochen

Nö, ich habe jetzt gerade nochmal geguckt, ich habe auch sonst nichts mehr eigentlich, was ich irgendwie unbedingt unterbringen kann.

Ronny

Nein, bei mir ist ja auch alles untergebracht.

Jochen

Oh, jetzt sind wir auch, wir sind ja schon relativ weit dran.

Jochen

Wir haben immer viele Leute, die ab dann abspringen.

Jochen

Jetzt kann man Meinung von Leuten, die sich, die bis hier durchgehalten haben, wäre ganz interessant vielleicht.

Jochen

Und zwar habe ich, das war letztens im Stream, hat dann irgendjemand geschrieben und meinte, so, ach, es wäre doch voll gut, wenn ihr sowas hättet wie ein Discord oder so.

Jochen

Aha.

Jochen

Wollen wir sowas haben?

Jochen

Ich meine, wir haben einen Slack, aber Slack ist irgendwie.

Wie hat das jemand dann gedacht?

Jochen

Ach, Slack ist ja immer so ein Boomer-Discord.

Ja.

Dominik

Also Discord habe ich übrigens auch, habe ich auch von meinen eigenen Zeugs von online einmal und so.

Dominik

Also ja, wir können einen Tele anmeister kein Problem.

Jochen

Oder ich meine, welche Plattform sollte man da verwenden?

Jochen

Discord.

Jochen

Discord echt.

Jochen

Ja.

Jochen

Ja, die machen auch so NFT-Kram und Krypto.

Dominik

Dass das sagt jemand, der Werbung für VPNs macht.

Dominik

Spoiler Flynn, ich weiß nicht.

Jochen

Ja, es ist alles so ein bisschen.

Jochen

Ich weiß nicht so genau.

Jochen

Ja, okay.

Jochen

Also Discord wäre gut.

Jochen

Ja, weil ich meine, dann könnten halt auch Leute da irgendwie mal, man könnte mit Leuten chatten und so.

Jochen

Also könnten Leute live.

Dominik

Das haben wir auch irgendwann wieder weggeschmissen.

Dominik

Also Discord würde ich auch sagen, ist cool.

Jochen

Okay.

Dominik

Das nutzen halt alle von früher und so vom Gaming und so weiter.

Dominik

Und man kann halt super easy da halt irgendwie reingehen, man hat halt Video, man halt halt Chat, man hat halt alles eigentlich, was man so bildet.

Dominik

Das ist argument.

Dominik

Die Firma kenne ich gar nicht.

Dominik

Du hast irgendwas Böses für die Firma gehört.

Jochen

Ja, also es ist halt nicht so, dass man das selber betreiben könnte.

Jochen

Du bist halt dann abhängig von der Firma, genau wie bei Slack.

Dominik

Ja, gut, du machst halt einen Channel auch fertig, ne?

Dominik

Ja, ja, okay.

Dominik

Ja, ich weiß so ein bisschen, was du meinst, aber so.

Jochen

Also ich würde das natürlich, äh, mir ist es schon sympathisch, zum Beispiel auch, was sie technisch machen.

Jochen

Die haben ja auch irgendwie da Rekorde aufgestellt, mit wie viele Clients an einem Server hängen können, mit Erlangen und so.

Jochen

Die machen halt, das ist alles schon cool, aber irgendwie, ja, das ist halt eine Firma, also ich würde es gerne selber hostenkosten können oder sonst was.

Dominik

Ja, aber diese ganzen Indie-Lösungen, die es für sowas halt gibt, ich weiß nicht, die sind halt von der Nutzerbasis, glaube ich, gar nicht so interessant.

Jochen

Ja, man muss wahrscheinlich dahingehen, wo die User sind.

Dominik

Ja, genau.

Dominik

Hey, wir haben.

Jochen

Gefällt mir gar nicht, aber gut.

Dominik

Nein, sind wir doch nicht auf Instagram-Tade.

Jochen

Ja, gefällt mir.

Jochen

Genau, ja, dann lass uns doch noch nicht festkommen.

Dominik

Nee, aber Discord finde ich ganz okay, es geht.

Dominik

Du hören mir es eh immer an.

Jochen

Ja, gut.

Dominik

Johannes auch da.

Jochen

Ja, ja, ich weiß, der hat ja da auch irgendwie ein eigenes Ding aufgemacht, aber der ist auch gar nicht so wahnsinnig viel los.

Dominik

Ja, aber das liegt auch ein bisschen daran, also unter anderem, dass er das halt auch seine Sachen benutzt, wie seine Spielfirma.

Dominik

Naja, aber wie auch immer.

Dominik

Du hast ja auch Discord auf der Arbeit.

Nein.

Dominik

Okay.

Dominik

Also ich habe meine eigene, mit Leuten, ich würde da auch mit Kunden drüber sprechen.

Dominik

Also ich finde, das ist so die beste Teams-Alternative zum Beispiel, wenn ich jetzt so Kundenprojekte habe.

Dominik

Wenn die auf meine Plattform kommen, ich nicht auf deren muss, dann die Kommunikation ist irgendwie schöner, professioneller, sauberer Cleaner irgendwie.

Dominik

Aber es ist noch wieder so eine ästhetische Sache und keine Ahnung, als kommerzieller

Jochen

Profitherer hat.

Jochen

So besser als Teams zu sein, ist jetzt nicht so furchtbar,

Dominik

weil wir darum, wo die

User sind und so.

Dominik

Und die sind ja auch schon alle leider da, meistens dann.

Jochen

Ja, ja, ja.

Jochen

Ja.

Jochen

Wollen wir noch Picks machen?

Dominik

Stimmt, wir haben noch Picks, keine Hammer keine Picks.

Dominik

Bonny darf anfangen.

Ronny

Ich habe mich jetzt motiviert von der letzten DjangoCon jetzt echt intensiver mal mit HTMX auseinandergesetzt.

Oh ja, ja.

Ronny

Und das finde ich wirklich sehr, sehr cool.

Dominik

Ja, dafür machen wir auch irgendwas eine Folge, das ist tatsächlich toll.

Ronny

Ich bin ja tatsächlich auch nicht so ein riesen JavaScript-Freund.

Ronny

Und diese Karotte quasi kleinseitige Weblogik ohne JavaScript zu schreiben, ist schon sehr, sehr groß für mich.

Ronny

Hab da letztens noch einen sehr interessanten Vortrag von dem Macher gehört.

Ronny

Ich glaube, das war von der

Jochen

Pacon US oder so.

Jochen

Castleister irgendwie.

Ronny

Ja, genau, genau.

Jochen

Der hat auch sehr schön erklärt, wie REST eigentlich funktioniert.

Ronny

Genau, und dass es ja eigentlich darum geht, halt dem H-Snips hin und her zu schicken und nicht JSON-APIs zu bauen.

Ronny

Und es ist ein super interessanter Vortrag, hat mir ein Kollege empfohlen.

Ronny

Und ich habe mich damit nochmal beschäftigt, habe heute noch ein kleines Feature damit gebaut.

Ronny

Ich muss gestehen, ich glaube, ich habe es noch nicht so 100%.

Ronny

Also es tut die Beispiele, die da drin sind, relativ simpel.

Ronny

Also ich klicke irgendwo, dann tauscht sich was aus, das ist klar.

Ronny

Aber wenn man halt so ein bisschen darüber hinausgehen möchte und halt einfach mal irgendwo Daten schicken oder so, also mal Postdaten schicken, die Patterns habe ich noch nicht so ganz raus.

Ronny

Ich bin leider nicht ganz ohne JQuery rausgekommen.

Ronny

Das hat mich persönlich dann sehr geärgert, weil erstens jQuery und zweitens JavaScript.

Ronny

Aber ich glaube, wenn, also die Dokumentation lässt leider in meinen Augen ein bisschen zu wünschen übrig und googeln kann man auch nicht, weil Google immer denkt, man meint HTML.

Ronny

Das ist beides ein bisschen blöd.

Dominik

Genau, wie HTTPX ist auch mal doof.

Ronny

Ja, genau.

Ronny

Und ja, aber ich glaube, wenn, dass das sehr viel Potenzial hat.

Ronny

Es macht auf jeden Fall sehr viel Spaß, damit zu arbeiten.

Ronny

Und im Endeffekt die Idee ist halt einfach, dass man halt Custom JavaScript-Code durch Custom HTML-Tags ersetzt.

Ronny

Und das ist echt cool.

Ronny

Also ich habe da auch letztens meine Findings, wie man das mit Django verheiraten kann, auch dem kleinen Artikel zusammengeschrieben.

Jochen

Das habe ich mir noch nicht angeguckt, ich weiß nur, dass es gibt.

Jochen

Es gibt ein Paket von Adam Johnson, also der mit dem.

Ronny

Was tut das Paket denn?

Ronny

Weil das sind tatsächlich sind es eigentlich vier Zeilen Code, man muss den CSF beibringen und das war's.

Jochen

Ah, okay.

Jochen

Also das ist Django HMX ist das Paket, glaube ich.

Ronny

Ah, okay, ich weiß gar nicht, was das tut.

Weiß ich auch nicht.

Jochen

Weiß ich auch nicht, aber das ist auf jeden Fall, der Autor ist auf jeden Fall schon mal ein Hinweis darauf, dass man sich das mal angucken sollte.

Auf jeden Fall, ja.

Jochen

Und ja, genau.

Ja, muss ich echt mal machen.

Ronny

Aber wie gesagt, ich habe es halt einfach zu Fuß gemacht, wenn ich wusste, dass das Paketexten sind.

Ronny

Wenn man es halt mal einmal gefunden hat, es sind literally halt einfach vier Zeilen JavaScript, die man einbinden muss, dass man halt dem HTMX quasi den CSF-Token injectet.

Dominik

Ja, da muss auf jeden Fall einen oder nächsten Folgen hören, da werden wir da auch nochmal drauf eingehen.

Jochen

Ja.

Ja.

Dominik

Jochen.

Jochen

Ich weiß nicht so genau, was picke ich denn?

Dominik

Also ich picke Pendulum.

Dominik

Ich glaube, das hatte ich schon mal gepickt.

Dominik

Weiß ich nicht.

Dominik

Ich weiß immer, weil kann man ja immer nicht merken.

Dominik

Du musst immer so einfache Sachen picken.

Dominik

Ja, kennst du Pendulum?

Dominik

Nee.

Dominik

Nein.

Dominik

Das ist eine Datetime-Parsing-Bibliothek.

Cool.

Dominik

Ja, da kannst du so ein bisschen einfacher, so ein bisschen schöneres Interface, ein bisschen moderner.

Dominik

Früher hat man, glaube ich, Maya viel benutzt, Kenness Reeze irgendwie, jetzt halt ziemlich tot ist oder so.

Dominik

Und ja, aber da kann man so schöne Sachen machen, bei denen man Date Times irgendwie machen möchte.

Dominik

In Time Zone wechseln und so Strings umbauen und sowas.

Jochen

Okay, interessant.

Jochen

Ich bin letztens habe ich, äh, das war, nein, nicht letztens, das war gestern, glaube ich.

Jochen

Ich habe irgendwie so einen kleinen, da war ich, dass mich mit JavaScript beschäftigt und Zeit.

Jochen

Ich wollte eigentlich nichts kompliziertes machen.

Jochen

Ich wollte zum Beispiel einfach nur ein Date-Objekt einfach darstellen.

Jochen

Und da, da war ganz schrecklich.

Dominik

Ja, also Pendulum ist für Python für sowas, weil das auch immer nervt, meiner Meinung nach, sehr schön eigentlich.

Jochen

Ja, also da ist, also das JavaScript-Date-Ding, also das, das hatte, also sowas wie Surf Time gibt es da halt einfach nicht.

Jochen

Wenn man jetzt die Differenz zwischen zwei Dates bildet in JavaScript, ja, also du hast ein Date-Objekt, ein anderes, machst du eins minus das andere, was kommt dabei raus?

Wisst ihr das?

Ein Integer.

Jochen

Bei Python kommt so ein Time-Delta raus.

Jochen

Ja.

Jochen

Ja, bei, genau, bei JavaScript kommt die absolute Zeit in Millisekunden raus.

Ja, tatsächlich.

Jochen

Was natürlich ein bisschen blöd ist, wenn man jetzt Mikrosekunden braucht oder keine Ahnung oder was ganz anderes oder dann oder halt an den Tagen interessiert ist oder so.

Jochen

Ja, das hat mich gemacht.

Dominik

Ja, also ich kann es.

Dominik

JavaScript weiß ich jetzt nicht, aber Pendulum in Python macht genau das so ein bisschen schöner, so ein bisschen mehr moderner vielleicht.

Jochen

Okay, gut.

Jochen

Keine Ahnung, ich kann es nicht, wir mal angucken.

Jochen

Ja, vielleicht pick ich einfach Blue statt Black.

Jochen

Macht im Grunde das gleiche, nur halt mit einem einfachen Tick statt Doppel-Anführungszeichen.

Dominik

Wir hatten noch letztens irgendwas mit Black, was man.

Dominik

Also Darker.

Dominik

Darker war auch schön, ja.

Dominik

Weil Darker macht nämlich inkrementelles Black und zwar immer nur auf die neuen Änderungen.

Dominik

Was gut ist, wenn man halt ein neues Workshop hat.

Jochen

So dass es halt immer dunkler wird mit der Zeit.

Dominik

Und wenn man, weil das macht auch Sinn, dann halt als Skit-Commit-Hook irgendwie einzusetzen.

Dominik

Darker, weil dann nur die neuen Sachen halt tatsächlich gelintet werden und das ist

ganz schön.

Jochen

Okay, aber Blue ist ein bisschen.

Jochen

Oh warte, was ich auch noch picke, ist Pip Tools.

Jochen

Da habe ich letztens auf Twitter gesehen, auch jemand, ich habe für meinen.

Dominik

Dann wird angefangen, weil du mir das gezeigt hast, wollte ich gerade was mitmachen, ich komme immer nicht dazu.

Jochen

Weil ich habe nämlich auch, ich verwende ja sonst Poetry und genau, dann jetzt für das neueste Ding mit Fast API und View View und Frontend Dings da für meinen von meinem Deploy-Teil.

Jochen

Da habe ich jetzt auch Piptools verwendet, weil mich Poetry so genervt hat, weil es so lange braucht.

Also Piptools so richtig toll fand ich es jetzt auch noch.

Jochen

Und weil das halt oft auch irgendwie komisch kaputt geht und es gibt funktioniert.

Dominik

Pip Tools gibt eine Empfehlung von dir?

Jochen

Ja, also genau, heute auf Twitter meinte jemand so, also Poetry, eigentlich super sexy, sieht das aus und so, aber ich bin, ich bin durch.

Jochen

Ich nehme jetzt wieder Piptools, weil es funktioniert einfach nicht.

Jochen

Und da dachte ich so, ja, und dann habe ich dann in diesem Twitter-Stread, den muss ich nochmal aufverlinken, haben ganz viele Leute was ähnliches gesagt.

Jochen

Also da viele Leute sagen so, oh, furchtbar langsam, geht immer kaputt.

Dominik

Ja, also es geht auch bei mir ständig ständig kaputt und ich muss immer was manuell fixen, das nervt extrem.

Dominik

Aber es ist schon eigentlich eine gute Idee und eigentlich sollte es genauso aussehen.

Jochen

Nur was sollte es geben, tut halt nichts.

Dominik

Aber vielleicht solltest du uns einfach mal fixen, anstatt was Neues wieder zu machen, was noch nicht funktioniert.

Vielleicht.

Jochen

Gutes Schlusswort.

Dominik

Ja, vielleicht sollte man das mal refactoren.

Dominik

Danke, Ronne, dass du wieder da warst.

Jochen

Ja, vielen Dank für eure Aufmerksamkeit.

Ronny

Die Einladung.

Seid uns gewogen.

Dominik

Schalte uns gerne wieder ein.

Bis zum nächsten Mal.

Dominik

Bis dann mit Werbung.

Dominik

Tschüss.

Tschüss.

Ciao.