Folge 25 - Today I learned

Was lernen wir eigentlich so ganz nebenbei, während wir Software entwickeln? Die heutige Folge dreht sich rund um das Thema Lernen. Katharina und Martin erzählen, was sie in letzter Zeit so Neues gelernt haben. 

Martin stellt die Frage, wann man eigentlich ausgelernt hat und empfiehlt das Buch „Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages" von Bruce A. Tate. Außerdem gibt Katharina Einblick in ihre Arbeit als Softwareentwicklerin bei Exply (exply.io) und den Herausforderungen, denen sie in neuester Zeit so begegnet ist. 

Zu guter Letzt lernen wir, woran man eigentlich breaking changes erkennt und dass das eigene Wissen am besten die Form eines „T“ haben sollte. T-shaped skills - Wikipedia

Falls ihr Fragen oder Anregungen habt, immer her damit:

Martin auf Twitter: @felbit

Sandstorm auf Twitter: @sandstormmedia 

Oder schreibt uns eine Mail an kontakt@sandstorm.de

Das Sandpapier ist ein Podcast der Sandstorm Media GmbH. Wir erzählen aus unserem Alltag, was wir versuchen, anders zu machen und welchen Herausforderungen und Experimenten wir uns auf unserem Weg stellen.

Die Folge zum Lesen

Martin
Ja, hallo. Wir versuchen uns hier heute mal einen neuen Format. Ich habe mich mal mit Katharina zusammengesetzt und wir wollen mal darüber sprechen, was wir aktuell so lernen, während wir Software entwickeln. Hey Katharina!

Katharina
Fein!

Martin
Du bist ja nun auch länger als ich bei Sandstorm und du bist auch Softwarearchitekt, so wie wir alle, aber du fühlst dich nicht ganz so. Erzähl doch mal, was machst du denn bei Sandstorm so?

Katharina
Also ich bin jetzt seit anderthalb, ah, schon länger als anderthalb Jahre bei Sandstorm, also im Juli werden es zwei Jahre. Ich bin praktisch direkt nach der Schule zu Sandstorm gekommen, zuerst als duale Studentin. Ich habe das dann ziemlich, ja, fast ein Jahr auch gemacht, habe das Studium aber abgebrochen, weil mir das mit der Berufsakademie, also ich bin ja hier in Sachsen, deswegen ist die duale Hochschule praktisch die Berufsakademie, das hat mir dort nicht so gut gefallen und ich hatte auch noch andere Gründe, sodass ich gesagt habe, ich möchte das nicht mehr studieren dual, sondern ich möchte nur noch arbeiten und zum Glück bin ich bei Sandstorm und da ging das auch, sodass ich dann, ja, direkt als Softwareentwicklerin angefangen habe, zuerst als Trainee, bis wir dann beschlossen haben, den Trainee-Status abzuschaffen und deswegen bin ich jetzt, kann ich mich jetzt nur noch Softwareentwicklerin nennen.

Martin
Okay, wie fühlst du dich denn damit, dass der Trainee-Status abgeschafft ist?

Katharina
Auf der einen Seite ist es ein gutes Gefühl, irgendwo gleichberechtigt zu sein, dass wir nicht mehr diesen Unterschied machen zwischen, das ist jetzt ein richtiger Software-Entwickler sagen wir mal oder ein richtiger Sandstormer, Business-Business-Business-Sandstormerin und das ist ein Trainee. Also den Unterschied gibt es jetzt nicht mehr und ich fühle mich schon sehr wohl damit. Auf der anderen Seite hat dieser Trainee-Starter doch irgendwie so eine gedankliche Ausrede als okay ich bin Trainee, ich muss das noch nicht können oder es ist jetzt okay, wenn ich ein bisschen langsamer bin, weil ich bin ja nur Trainee, also diese gedanklichen Ausflüchte gibt es jetzt gefühlt nicht mehr so.

Martin
Und stell dich das vor neue Herausforderungen. Also hast du das Gefühl jetzt mehr Stress zu haben dadurch?

Katharina
Nein, im Moment nicht, weil ich in dem Projekt, in dem ich bin, also Exply, das ist unser eigenes Produkt, das wir entwickeln, da habe ich keinen Faktorierungsdruck, also ich muss da die Stunden, die sind ja nicht billig, nicht abrechenbar und habe von der Seite weniger Druck, außerdem kenne ich das Projekt recht gut. Ich bin da jetzt auch seit einem Dreivierteljahr drin und kann dort produktiv mitarbeiten, also ich kenne das Projekt auswendig, deswegen brauche ich, sage ich mal, keine Ausflüchte, um irgendwas zu rechtfertigen, weil ich kann da ganz mal mitarbeiten wie die anderen auch.

Martin
Ich habe auch das Gefühl, also Ausflüchte ist ein krasses Wort. Ich habe das Gefühl, also ich entwickle nun schon echt lange Software. Und mir geht es aber immer noch wie dir. Also ich habe immer wieder, komme ich an den Punkt, wo ich denke, oh, jetzt brauche ich aber gerade sehr lange dafür oder wieso verstehe ich das nicht? Das müsste ich längst verstanden haben. Das müsste doch längst fertig sein. Und ich komme auch immer wieder an den Punkt, wo ich denke, fuck, es gibt so viel zu lernen in diesem Feld. Und irgendwie komme ich da nie zu Rande. Und wann bin ich denn endlich mal ausgelernt, als Softwareentwickler? Und das irgendwie nach jetzt, keine Ahnung, also auf jeden Fall 15 Jahren professionell in dem Feld ist das irgendwie immer noch so. Und das ist ja genau der Grund, warum wir heute zusammensitzen, uns mal darüber zu unterhalten, wie das eigentlich so ist, was wir gerade so lernen und wie man das einordnet. Und ich glaube, auch so ein bisschen darüber uns auszutauschen, wie viel cool neue Dinge lernen eigentlich ist. Ich habe gerade noch so ein Buch gelesen über, oder durchgeflogen, das heißt Seven Languages in Seven Weeks. Und der Autor hat quasi dieses Buch nur geschrieben, weil er mal, er hat irgendwie die ganze Zeit Java gemacht und dann hat er ein bisschen Ruby gemacht und hat festgestellt, voll eine neue Sprache lernen macht irgendwie auch Spaß. Was?

Katharina
Also es geht schon am Probieren.

Martin
Ja, ja, genau. Es geht um Programmsprachen. Und der hat also sich dann einfach hingesetzt und hat gesagt, okay, ich lerne jetzt einfach mal sieben Sprachen in sieben Wochen und schreibt das, schreibt meine Erkenntnis dazu in ein Buch. Und das ist ziemlich cool. Also es zeigt einfach nochmal, dass das Lernen auch unglaublich wichtig für unsere, also eigentlich dafür ist, dass wir, dass wir glücklich sind in dem, was wir tun, in unserem Job, weil es uns neue Horizonte eröffnet und uns davor schützt, dass wir, ja, ausbrennen. Also so sehe ich das zumindest, deswegen finde ich Lernen halt echt cool.

Katharina
Außerdem hat es auch gesundheitliche Vorteile. Es ist nämlich in gewisser Weise eine Prävention gegen dann degenerative Krankheiten fürs Gehirn, also Altheimer und so. So habe ich mal gelesen, dass wenn man viel weiß und ein gut trainiertes Gehirn hat, ist der Weg nach unten natürlich länger. Und deswegen geht es nicht so schnell, wenn man im Alter Altheimer bekommt, dass man vergesslich wird und so was.

Martin
Das ist ziemlich cool. Also, immer mehr lernen. Du hast ja als du neu bei Sandstorm warst, du hast da so eine Anwendung auch geschrieben. Ich weiß gar nicht, ob die Idee ursprünglich von dir war oder ob die, wo die herkam. Die ist Today I Learned. Vielleicht magst du dich mal ganz kurz beschreiben, was man da macht.

Katharina
Das ist eine simple Crud-Application, also man konnte kurze Textbeiträge, fast wie so Twitter-Tweets, erstellen und man hatte praktisch dann ein Feed, wo man sehen konnte, was die anderen an Beiträgen erstellt haben, was sie gelernt haben, das hatte, also es war ganz simpel, einfach nur eine Überschrift und ein Body, wo man z.B. Markdown Supported auch seinen Text eingeben könnte, was man gelernt hat. Und das ist jetzt auch bei uns intern vielleicht noch produktiv, also es war mal produktiv und wir haben es auch genutzt, aber wir haben letztens auch die Infrastruktur umgezogen. Ich meine, irgendwas gehört zu haben, dass es dabei vielleicht auch untergegangen ist, aber da haben wir doch inzwischen einiges drin gesammelt an Dingen, die wir gelernt haben.

Martin
Ja, ich habe das auch, also gerade als ich neu war bei Sandstorm, habe ich das sehr, sehr viel benutzt. Ich glaube, es ist ein bisschen eingeschlafen. Also auch bei mir ist es eingeschlafen tatsächlich. Was ich schade finde, weil gerade das rekapitulieren über das, was wir so lernen, finde ich total spannend. Also ich habe mir auch mal einfach durchgelesen, was die anderen so reingeschrieben haben, weil auch davon lernt man ja wieder.

Katharina
Ja, das stimmt.

Martin
Erzähl doch mal über Exply, was machst du denn da gerade? Was ist denn da gerade deine Aufgabe?

Katharina
Also bei Exply geht es erstmal um Datenauswertung, Datenvisualisierung und wir haben das praktisch für unseren internen Anwendungsfall entwickelt und da geht es um die Auswertung von Zeitbuchungen. Also wie viele Stunden habe ich jetzt an dem Tag gearbeitet, wie viele Stunden wurden auf dieses und dieses Projekt gebucht, wie viel davon man will oder will, also einfach nur Controlling von Zeitdaten, das war der ursprüngliche Anwendungsfall. Und dementsprechend ist auch der Hauptfokus auf dem Aufsummieren von Daten, also die Operationen, die auf den Daten ausgeführt sind, um sie sich dann anzeigen zu lassen, ist im Moment hauptsächlich Aufsummieren, weil das das ist, was einen bei Zeitbuchungen interessiert. Wie viele Stunden habe ich insgesamt auf dem Tag verbracht oder auf dem Projekt oder an dem Tag oder pro Person aufgegliedert und sowas alles. Und da wir Exply auch für andere Anwendungsfälle öffnen wollen, zum Beispiel jetzt ganz konkret für Verkaufsdaten, möchte man da idealerweise noch andere Auswertungen machen können, zum Beispiel in den Durchschnittbilden. Also es ist gerade für Verkaufsdaten gleich total interessant zu sehen, okay, wie ist die durchschnittliche Stellsumme pro, keine Ahnung, für eine Person oder pro Region, ich weiß auch nicht, steckt da.

Martin
Verkaufsdaten heißt also, du hast einen Online-Shop zum Beispiel und du hast halt bestimmte Warenkörbe und du hast deine Nutzer, die diese Warenkörbe auschecken und dann quasi Waren geliefert bekommen und dafür Geld bezahlen. Und was du wissen willst, stelle ich mir das jetzt vor, ist, was du jetzt sagst Durchschnitt ist zum Beispiel der durchschnittliche Artikelpreis pro Warenkorb oder der durchschnittliche Warenkorb-Gesamtpreis pro Kunde oder...

Katharina
Ja, was immer einem auch in den Sinn kommt. Also ich hab selber keinen Onlineshop, betreibe keinen Onlineshop selber. Nein, du nicht? Nein, absolut nicht. Und deswegen kann ich mich schlecht in die Seite des Controllings reinversetzen. Also auch mit dem neuen Feature, mit dem Durchschnitt, das wir jetzt gebaut haben, habe ich es mit Anwendungsfällen für Zeitbuchungen im Kopf getan. Also extra ist ja auch ein Add-on für Jira, da Projektmanagement, und insbesondere für Tempo-Time-Sheets. Und da geht es ja auch um Issues und Zeitbuchungen, oder wie viele Stunden man arbeiten soll. Und auch da ist Durchschnitt durchaus, gibt es Anwendungsfälle dafür. Und habe ich das eher mit diesem Beispiel in dem Kopf entwickelt, als jetzt mit den Verkaufsdaten.

Martin
Also Durchschnitt im Sinne von wie viel billable hours pro Monat habe ich dann im Schnitt in meinem Unternehmen pro Nutzer oder so.

Katharina
Ja, zum Beispiel.

Martin
Mhm, okay. Und was ist da aktuell die Schwierigkeit? Was hat dich da herausgefordert?

Katharina
herausgefordert hat uns in der, sage ich mal schon, in der Konzeption von dem, von dem Feature ist, dass man oft, bevor man den Durchschnitt bildet, die Daten noch irgendwas mit denen machen möchte. Also ich gebe einfach mal ein Beispiel. Ich habe eine ganz normale, bei uns heißt es eine Metric-Teile, ich habe eine Kachel, die zeigt irgendein Gesamtergebnis an, die macht keine, keine Kategorisierung oder sonst was. Und in der möchte ich mir anzeigen lassen, okay, wie viele Stunden arbeite ich durchschnittlich pro Tag? Als Beispiel, wenn ich eine 8-Stunden-Woche habe, tue ich dann durchschnittlich auch diese 8-Stunden-Arbeiten.

Martin
Mhm.

Katharina
Und das ist das Problem, dass ich, wenn ich jetzt dort in meiner Konfiguration den Durchschnitt einstelle, möchte ich ja nicht sehen, wie viel Durchschnitt ich für jede Zeitbuchung habe, sondern ich möchte die Zeitbuchung erst aufsummieren auf die Tage und dann über die Tage den Durchschnitt bilden, weil ich möchte den Durchschnitt pro Tag sehen.

Martin
Mhm, ja.

Katharina
Das heißt, wir haben da praktisch zwei Operationen auf den Daten, bevor wir sie visualisieren, nämlich einmal aufsummieren und danach den Durchschnitt zu bilden. Und das ist in sehr vielen Anwendungsfällen der Fall, dass wir gesagt haben, okay, nur das Average-Feature zu implementieren, ohne dieses vorherige Aufsummieren zu ermöglichen, bringt nicht so viel Mehrwert. Deswegen wir das direkt mit mit reingenommen haben und das umzusetzen war herausfordert, aber auf eine gute Art und Weise herausfordert natürlich, weil also wir machen die ganzen Datenauswertungen und Datenhaltung mit Elasticsearch. Das wäre euch auf jeden Fall wichtig zu wissen. Und die bisherigen Auswertungen, sag ich mal einfach aufsummieren und gruppieren, das war mit ziemlich simplen Aggregations möglich. Also mit Elasticsearch ermöglicht schon viel an Aggregations usw. out of the box. Und mit diesen mehrere Operationen auf den Daten hintereinander ausführen wollen, sind wir praktisch ein neues Feld reingekommen, was wir bisher nicht benutzt haben. Das waren diese die heißen Pipeline Aggregations, bin ich auf jeden Fall sehr dankbar für das Elasticsearch, das kann, aber war...

Martin
Kannst du das ein bisschen beschreiben, was da passiert?

Katharina
Also Pipeline Aggregations ermöglichen es praktisch eine Aggregation aufzuführen aus Daten, die aus einer anderen Aggregation kommen, also praktisch genau diese Aggregation hintereinander auszuführen. Also wenn ich jetzt beispielsweise, ich habe eine Aggregation, die mir verschiedene Buckets bildet nach dem Tag zum Beispiel, also ich habe für einen Tag jeweils ein Bucket, wo meine ganzen Zeitbuchungen drin liegen. Also ich muss die Daten erst nach den Tagen sortieren und dann habe ich erstmal eine Matrix Aggregation heißt es, die das aufsummiert und dann möchte ich aber auf den Ergebnissen von dieser Aggregation eine andere Aggregation ausführen und dazu braucht man dann diese Pipeline Aggregations.

Martin
Also eine Aggregation an der Stelle ganz kurz ist quasi eine Zusammenführung von statistischen Daten, die gemeinsam bearbeitet werden.

Katharina
Ja, also es kann alles Mögliche an Operationen auf den Daten sein. Also entweder eine Kategorisierung zum Beispiel oder eben aufsummieren. Es gibt ganz viele Möglichkeiten. Fällt mir gerade schwer, das zu erklären.

Martin
Okay, das ist ja kein Problem. Also ich habe Aggregation immer so verstanden, dass du deine Daten, also deine Daten musst ja irgendwo schneiden in einzelne Einheiten. Also beispielsweise du hast verschiedene Produkte und du hast verschiedene, die haben halt, jedes Produkt hat einen Preis und dann könntest du zum Beispiel eine Aggregation über den Preis machen und könntest sagen alles bis 100 Euro ist halt irgendwie, ist eine Unit und alles zwischen 100 und 200 Euro ist irgendwie eine Unit und das sind dann Range Aggregations quasi. Das kannst du dann gemeinsam behandeln. Oder habe ich das richtig verstanden?

Katharina
Ja, das ist ein Beispiel für eine Aggregation. Also es gibt da wirklich sehr unterschiedliche Typen. Zum Beispiel kannst du es auch nach Datum, zum Beispiel nach Datum in verschiedene Buckets unterteilen. Also dass du die Daten praktisch nach einem Erstellungsdatum zusammengruppierst oder nach einem bestimmten Feld. Also hier zum Beispiel nach dem Bill-Level-Status ist es Bill-Level, ist es Mann-Bill-Level.

Martin
Ja.

Katharina
Aber eben direkt dieses Aufsummieren von Daten, also das Berechnen von neuen Ergebnissen, ist auch eine Aggregation. Eine andere Art von Aggregation aber auch.

Martin
Okay, also wir haben Aggregation ist quasi eine Zusammenführung von einzelnen Daten unter einem oder mehreren Gesichtspunkten und die behandeln wir dann gemeinsam und daraus wirst du zum Beispiel in Average bilden. Okay, also nehmen wir nochmal das Beispiel, du hast zum Beispiel deine Daten, also anhand der Daten geschnitten, du sagst jetzt, Aggregation sagt, zum Beispiel deine täglichen, also du hast eine Aggregation, die sagt, ich habe meine Tagestaten an Zeiten, die reingekommen sind und darüber ein Average ist ja relativ, also einen Durchschnitt zu bilden, ist ja relativ einfach, indem du quasi die Tage aufsummierst und dann durch die Tage teilst, die du hast.

Katharina
Ja.

Martin
Okay, das habe ich verstanden. Und was ich noch nicht so ganz verstanden habe ist, was ihr jetzt noch also dieses Aufsummieren war der Teil, den ihr noch hinzugefügt habt? Oder was ist mit der Summe passiert? Warum war das wichtig?

Katharina
Also der Unterschied liegt darin, dass wir bisher gesagt haben, okay, es gibt, man kann die Daten kategorisieren, zum Beispiel eben nach dem Status oder nach wer das gebucht hat, etc. pp. Und dann kann man eine Operation darauf ausführen, wie zum Beispiel aufsummieren, in unserem Fall auch aufsummieren. Und jetzt kommt eben ein zweiter Schritt dazu. Man möchte die Daten erst aufsummieren und dann das Ergebnis, was da rauskommt nach der tagesweisen Aufsummierung, möchte man zusammen den Durchschnitt bilden.

Martin
Okay.

Katharina
Und das war halt im Elasticsearch-Kontext ist es möglich mit Pipeline-Aggregations. Und da dieses Feature neu war, mussten wir uns zum ersten Mal damit beschäftigen. Also das Feature gab es in der Anwendung einfach bisher noch nicht. Und deswegen war das etwas Neues, wo natürlich dann auch entsprechend Herausforderungen mit sich gebracht hat. Zum Beispiel... ...das ist aber ein Feature...

Martin
Das ist aber ein Feature, das Elasticsearch selbst mitbringt.

Katharina
Ja, okay, so geht's.

Martin
Zum Glück. Also, weißt du, ob das ein neues Feature ist oder ob das schon länger ein Elastic Search ist?

Katharina
Ich glaube, das gibt es schon eine Weile. Also, genau wissen tue ich es nicht, ich habe nicht extra geguckt, wann diese Feature eingeführt wurde, aber ich denke, das gibt es schon eine Weile, wir haben es nur bisher nicht benutzt.

Martin
ist ja nicht gebraucht. Okay. Ich gucke gerade mal 2016 ist das dazu gekommen.

Katharina
Ja, das ungefähr.

Martin
Elasticsearch 2.0 hat das mit eingeführt.

Katharina
Ah, doch, dann gab's tatsächlich auch in der äh also als die aktuelle Exply-Version geschrieben wurde auch schon hätten verwenden können. Also wir haben bis jetzt vor kurzem noch glaube ich Elasticsearch 2.5 oder so verwendet. Ich hab das Update auf Elasticsearch äh bei welcher Version sind wir jetzt? Sieben? Ja, 7.5 glaube ich. Äh erst jetzt vor ein paar Wochen gemacht.

Martin
Das war wahrscheinlich auch eine gute Aktion von Version 2 Punkt auf Version 7.

Katharina
Ja, wobei Elasticsearch auch ein paar Versionen übersprungen hat. Also ich glaube, es gab weder vier noch fünf. Irgendwie so. Also die haben da einen ziemlichen Sprung hingelegt. Also hört sich größer an als es war, denke ich.

Martin
Das ist spannend. Okay, das wusste ich nicht. Total erläutert. Diese Pipeline Aggregations, ich stelle mir das jetzt so ein bisschen vor, wie tatsächlich Komposition von Funktionen. Das heißt, kann ich die beliebig hintereinander wegschachteln? Also könnte ich da mit den Daten jetzt weiter rechnen in oder wie stelle ich mir das vor?

Katharina
Ja, ich denke schon. Mir fällt jetzt kein Argument ein, das dagegen sprechen würde. Also ich kann theoretisch auch die normalen Aggregationen beliebig schachteln, aber wenn ich halt einem, so dass praktisch jede innere Aggregation auf den Daten der äußeren Aggregation operiert und der Trick mit den Pipeline Aggregations ist halt, dass sie von der Schachtelung neben den normalen liegen. Es ist ein komplexes Thema.

Martin
Auf jeden Fall. Deswegen sprechen wir ja darüber.

Katharina
Also, wenn ich jetzt, sag ich mal, in Melissa Search eine ganz normale Terms Aggregation definiere, eine Terms Aggregation tut mir die Daten aufteilen nach einem bestimmten Feld. Wie ich sage, ein Feld ist der Projektname. Und dann werden die Daten aufgeteilt, je nach Projektname. Meine ganzen Zeitbuchungen auf Projekt Exply bekommen ein Bucket, auf Projekt, muss der Projekt 1 bekommen, ein Bucket und so weiter und so fort. Und dann bleibt praktisch da drin wieder eine Aggregation-Schachtel, die sagt, okay, und jetzt tun wir für jeden Bucket die Summe bilden.

Martin
Hmhm

Katharina
Das Problem ist dann, dass das Ergebnis, also ich kann, dann habe ich eine Summe. Das ist ein Endergebnis, was will ich auf dieser einen Summe noch für eine Aggregation machen? Nein, für eine Pipeline Aggregation brauche ich praktisch die Summe aus jedem dieser Buckets. Das heißt, die Pipeline Aggregation muss nebendran liegen und nicht drinnen geschachtet.

Martin
Okay, das klingt jetzt für mich wie in MapReduce.

Katharina
Ja, ich hab...

Martin
Also ich mappe quasi über meine, ich mappe quasi über meine, also ich erstelle die Summe eines jeden Buckets und dann reduziere ich auf das Average beispielsweise.

Katharina
Ja, kann man so sehen, auf jeden Fall.

Martin
Cool, also WebReduce in Elasticsearch mit Pipeline Aggregations.

Katharina
Ja, das ungefähr. Cool.

Martin
Okay, und was hat das jetzt, dass du das gelernt hast, für dich ermöglicht? Was ist jetzt neu möglich in Exply?

Katharina
Ich denke, dass das neue Average-Feature Mehrwert bringen wird für Kunden und es eventuell auch ermöglicht noch neue Felder, Kundenfelder zu erschließen. Also deswegen bauen wir es letztendlich auch, weil wir eben noch mehr Funktionalität ermöglichen wollen. Für mich persönlich hat es natürlich meine Kenntnis von Elastic Search und was alles möglich ist, ziemlich ausgeweitet. Auch allgemein, wie die Queries zusammengebaut werden und zusammengebaut werden müssen. Und mir macht das Spaß, mich in einem Thema mal zu vertiefen. Also wir haben ja bei Sandstorm diese T-Shape-Theorie, also dass jeder praktisch von seinem Kenntnisstand dieses T-Shape aufweisen soll. Also der Strich nach unten, dass man sich praktisch in irgendeinem Thema spezialisiert. Und auf der anderen Seite den waagrechten Balken von allem so ein bisschen eine Ahnung hat.

Martin
Njep.

Katharina
Ich habe da das Gefühl, dass ich gerade dabei bin, halt den senkrechten Strich voranzutreiben und das fühlt sich gut an, dass ich da ein bisschen...

Martin
Dein segrechter Strich geht hauptsächlich auf Elasticsearch.

Katharina
Naja, es geht auf die Technologien, die Exply verwendet. Das ist zum großen Teil Elasticsearch und als Sprachname erhält Java und Groovy darin. Außerdem haben wir Spring. Ja. Und mit dem Datenbankwissen sammle ich auch noch, weil unsere Datenimporter, die Daten müssen ja irgendwo herkommen in den Elasticsearch Index, auf Datenbanken gehen und deswegen kann ich auch ein bisschen Datenbankwissen sammeln.

Martin
Das ist quasi die perfekte Überleitung zu meinem Learning der Woche.

Katharina

Martin
Was sagst du?

Katharina
Dann erzähl mal, was hast du denn gelernt?

Martin
Also für mich, das Learning der Woche, also eigentlich jetzt der letzten Wochen, ich habe mich in einem Kundenprojekt, durfte ich mich mal wieder richtig mit PostgreSQL auseinandersetzen und ich bin ja großer Fan von PostgreSQL, so meine Lieblingsdatenbank, aber ich habe tatsächlich das erste Mal im Produktiv-Einsatz mich mit der Full-Text-Search beschäftigt, also auch hier suche, das zieht sich heute durch die Episode, also PostgreSQL bietet die Möglichkeit, bestimmte Felder, also über bestimmte Felder quasi ein Vektor zu bilden, d.h. die Daten in diesem Feld zu tokenisieren und darin dann zu suchen und das ist ziemlich mächtig, also das hätte ich gar nicht erwartet. Einfaches Beispiel ist, du hast ein Modell und das hat halt einen Titel und eine Beschreibung und irgendwie verschiedene Eigenschaften noch und sag mal mal, der Titel ist ein kurzer String, die Beschreibung ist halt irgendwie ein Text, also irgendwie ein längerer String und die Eigenschaften sind, das ist quasi ein Dictionary aus einzelnen Keys, die wiederum Strings sind, auf wieder Text und die Felder könntest du jetzt quasi, darüber kannst du ein Vektor bilden, was er macht in der allerersten naiven Nutzung ist, dass er quasi an Leerzeichen trennt, d.h. er baut aus dem Satz, ich bin eine naive Implementierung, dann nimmt er halt die ganzen Wörter, ich bin eine naive usw. und dann kannst du darauf suchen und kannst quasi einen Query bauen und sagst, ich suche jetzt in meinen Feldern nach dem Wort naiv, dann würde der dir quasi sagen, das habe ich in der und der Zelle gefunden, da gibt es dieses Wort, also diesen Token quasi, den habe ich gefunden und gibt dir dann quasi die Zelle mit der Zeile in deiner Datenbank und der tatsächlich gehörenden Tabelle zurück, sodass du quasi genau das an der Hand hast, was du auch eigentlich haben möchtest, nämlich den Datenbank Eintrag, der für deine Suche erfolgreich war und du kannst mit relativ wenig Aufwand ziemlich coole Sachen damit machen, z.B. was out of the box funktioniert, ist das sogenannte Stemming, d.h. wenn du, du hast z.B. als Wort, sagen wir mal, wir haben jetzt das Wort Workspaces, beispielsweise irgendwo in unseren durchsuchenden Daten und ich suche nach dem Wort Workspace, dann findet er das, weil er versteht, was sozusagen der Stamm ist und was jetzt die Pluralendung ist und das kann man auch weitertreiben, nicht mehr ganz so out of the box, geht das halt wirklich auf Stemming, d.h. wirklich auf den Stamm des Wortes, also er findet dann sogar, also du hast jetzt das Wort, keine Ahnung, Wars, also ich war quasi und du suchst nach Is, dann müsste er das auch finden, das ist jetzt gerade ein ganz konkretes Beispiel, das ich nicht probiert habe, aber grundsätzlich sollte das so funktionieren und рад sein.

Katharina
Ja, da geht's ja dann schon, also wie sich das anhört, ziemlich krass ins NLP, also Natural Language Processing. Hätte ich nicht gedacht, wie Postgres das einfach so drauf hat.

Martin
Also Postgres ist da ziemlich mächtig tatsächlich, also es ist eine super mächtige Datenbank und die Fulltext Search ist irgendwie seit, also zumindest in die erste Dokumentation, darüber habe ich jetzt in der Version 9 irgendwas gefunden, 9.5 glaube ich, seitdem ist die auf jeden Fall sehr, sehr mächtig. Wir setzen in dem Projekt 10 irgendwas ein.

Katharina
Was ist denn die Wahlprobe? Was hat denn da? Hauskreis habt ihr gar nicht so den Plan?

Martin
Was sagst du?

Katharina
Ach, das ist die aktuelle Version von Postgres?

Martin
Oh, keine Ahnung, ich glaube 14 oder so was.

Katharina
Okay.

Martin
Also ich glaube mit 12 habe ich schon mal gearbeitet, die aktuelle Version, was sagt denn Wikipedia?

Katharina
Okay.

Martin
Nee, es ist tatsächlich 12.2, siehst du? Da habe ich mir fast die neuesten Versionen gearbeitet. Genau, also die ist diese Suche, die ist tatsächlich ziemlich super und jetzt kommt noch ein eigentlich so eines meiner Lieblingsfeatures. Du kannst nämlich mit nur einem einzigen Konfigurationswort, in dem du nämlich einfach nur hinschreibst, German. Also an den Anfang deines Queries schreibst, also an deiner Tokenisierung schreibst du halt German. Dann versteht die Datenbank, dass es sich hierbei um German, also um deutsche Tokens handelt, dass du also deutsche Text erwartest. Das war für uns sehr, sehr wertvoll, weil wir hier einen Kunden haben, der sehr stark, also sehr stark in seiner Domäne, Sprache, das Deutsche einsetzt. Das heißt, die haben kaum englische Wörter. Das heißt, gerade in dem gesamten Suchkontext musst du also deutsche Wörter finden, dann bringt dir das überhaupt nichts, wenn der versucht irgendwie aus Englischen Plural quasi, also dieses englische Plural auf deutsche Wörter anzuwenden, das funktioniert halt nicht. Und mit dem einfachen Schalter auf German kannst du es halt komplett auf Deutsch umstellen und das war super, das war mindblowing.

Katharina
Ja, das finde ich auch ganz schön beeindruckend, weil also das Postgres bei dem Stamming nicht nur Englisch kann, sondern auch Deutsch. Ich erinnere, dass ich ziemlich am Anfang meiner Software-Entwicklungslauf waren, habe ich auch mal Natural Language Processing machen müssen. Und da habe ich nach einer Library gesucht, die genau das kann, also die mir tokenized, dann die Wortstämme bildet. Und ich musste noch irgendwas anderes machen. Ich habe vergessen, wie es heißt, aber da praktisch taggen, was für eine Art Wort das ist, ob das ein Nomen ist oder ein Verb und so weiter. Ich habe gerade vergessen, wie das professionell heißt, aber das ist mir ganz schön schwergefallen für Java eine Library zu finden, die mir das alles machen kann und zwar mit deutscher Wortstammbildung und mit deutschem taggen praktisch von den Wortarten.

Martin
Hättest du einfach Postgre genommen.

Katharina
Ich habe damals tatsächlich auch Elasticsearch verwendet, weil Elasticsearch baut ja auch einen Suchindex auf und so weiter und da das ja auch mit Volltextsuche ist, machen die genau das.

Martin
Also ich denke, dass Elasticsearch auch noch wesentlich mächtiger ist als das, was PostgreSQL kann, weil die einfach sich darauf spezialisiert haben. Aber ich bin ziemlich erstaunt, also wir hatten ein sehr schmales Budget um das hier umzusetzen und der Kunde hat ganz explizit gesagt, er will kein Elasticsearch, er will irgendwas ganz, ganz einfaches und PostgreSQL hatten wir halt schon, die Daten liegen halt in dem Format bereits da und wir haben tatsächlich nichts anderes machen müssen, also die Queries sind auch sehr, sehr schmal, das sind quasi ein Zeiler, die wir da eingebaut haben und haben in der GraphQL API, gegen die das da spricht, das ist halt ein Query, der gibt mir halt ein Subwoofer drunter, das ist übersetzt in eine Zeile SQL und die durchsucht die Datenbank und liefert ein Ergebnis zurück, aus dem wir sozusagen das volle Objekt zurückbauen können, also das, was wir dann als Dokument wieder zurückgeben und das funktioniert erstaunlich gut. Und übrigens, ich hatte allerdings einen Stolper, es steht auch tatsächlich in der Doku, man muss sie nur gut lesen, wenn du Nullable Values hast, also Felder, die Null sein können in deiner Datenbank, dann bricht dir das ganze Ding unterm Hinteren weg, außer du sagst quasi, also er kann dann einfach nichts mehr finden, da zerbricht die Suche einfach und du kannst aber beim Tokenisieren sagen, diese Spalte enthält, kann übrigens Nullwerte enthalten, also da musst du einfach nur sozusagen eine Funktion um deinen Vektor, also deine Spaltenbezeichnung drum machen, die heißt Koalis, keine Ahnung, wie man das ausspricht, wie Coal und dann E-S-C-E, das hat wahrscheinlich auch eine sinnvolle Bedeutung und ich kenne das auch in der Google, aber naja, die Bedeutung ist, etwas zu einer Masse oder zu einem Ganzen zusammenzubringen, das ist wohl tatsächlich irgendwie Standard SQL, siehst du mal, da war ich tatsächlich.

Katharina
das Wort auch schon ein paar Mal gehört. Ich glaube, auch in unserem Test-Jira-System, immer wenn ich irgendein neues Jira aufsetze mit irgendeiner Datenbank, kriege ich das nie richtig hin, die richtig zu konfigurieren, so wie es sein soll für Jira-Systemen. Da bekomme ich auch mal solche Meldungen, dass das Chor liest oder wie das heißt, nicht passt und dass ich doch da bitte noch mal ran soll.

Martin
Also Koa Glees, also wir schlachten quasi gerade richtig schön das Wort, aber grundsätzlich was es tut in SQL, in reinem SQL ist, es nimmt eine Liste von Parametern und gibt dir den ersten Nicht-Null-Wert zurück. Das ergibt total Sinn. Also wenn du eine Liste hast, die halt Null sein kann, wo alles Null sein kann oder wo Werte Null sein können, überspringt dir die dann wahrscheinlich einfach. Das ist sehr sinnvoll. Genau, aber das war mein Learning der Woche. Das fand ich ziemlich cool. Also zum einen, die Suche ist super cool. Ich werde mich da noch ein bisschen rein vertiefen. Ich hoffe, dass der Kunde hier vielleicht Spaß dran hat und das noch ein bisschen ausweitet, das Projekt, so dass wir da noch ein bisschen Zeit und Hirn reinstecken können. Und was ich auch definitiv gelernt habe, mal wieder das Doku lesen.

Katharina
Und auch dieses schöne, ich weiß nicht ob Alpenbüro hatten, es war auf jeden Fall dieses schöne, diese Postkarte, wo drauf stand READ THE FUCKING MANUAL?

Martin
Ja, genau, das ist...

Katharina
oder irgendwo hinhängen, das ist einfach immer so hilfreich.

Martin
Das lerne ich einmal alle sechs Monate wieder.

Katharina
Ja, ich habe noch eine Frage zu dem Postgres Fulltext Search und zwar nach Waschbecken. Also wenn angenommen, es werden mehrere Dokumente gefunden, mehrere Zeilen, die zutreffen, wie wird das sortiert? Wie werden die Suchergebnisse sortiert?

Martin
Das kannst du mit deinem Query einfach angeben, wie du es halt auch machen würdest, wenn du einfach einen normalen Select-Query hast, dann gibst du halt an, wie er das sortieren soll. Also bei uns jetzt ganz speziell haben wir halt nach bestimmten Fremdschlüsseln sortiert, nach der Reihenfolge von Fremdschlüsseln, also gruppiert bei Fremdschlüsseln und dann nach einfach nach absteigend, also.

Katharina
Okay, also sind wir da wieder ganz im SKL, im Datenbank.

Martin
Das ist pures SQL, das ist tatsächlich rein. Also auch die gesamte Suche ist komplett in SQL implementiert.

Katharina
Ja.

Martin
Das ist tatsächlich also du hast quasi ein Select Query, wo du anstatt, also wo du in deiner Where-Klaus, also da wo du theoretisch halt reinschreibst, irgendwie ID ist gleich irgendwas, da schreibst du halt rein, ich hätte gerne jene Felder als als Vektoren, also vektorisiert und in denen suche ich dann quasi mit meinem Query-Word und das sozusagen steht einfach in deiner Where-Klaus mit drinne und dann kannst du hinten dran einfach anhängen, sortier bitte nach x, y, z so wie das in deiner normalen Select Query, also es ist ein normales Select Query, nur dass du in deinem Where quasi diese Fulltext Search mit einbaust.

Katharina
Okay. Ja, ich glaube, das passt für mich ins Bild, das kann ich so einordnen.

Martin
Ja, ist ziemlich cool. Also es gibt auch noch die Möglichkeit, ein Index aufzubauen, also PostgreSQL selbst den Index für deine Fulltextsearch aufbauen zu lassen, dann wird die Suche noch mal schneller. War jetzt bei uns nicht notwendig, dafür haben wir nicht genug Daten, aber das geht also auch, dass du sagst, ich suche dann quasi nicht mehr direkt auf den Tabellen, sondern durch suche halt meinen Index, dann finde ich das schneller und habe dann die Referenz auf die jeweilige Spalte, jeweilige Zeile in meiner Tabelle.

Katharina
Jetzt haben wir zwei ganz interessante Themen. Das eine Mal Elasticsearch, das zweckentfremdet wird, um Datenauswertungen zu machen statt Volltextsuche und auf der anderen Seite Perfektuche, aber mit Postgres.

Martin
Ja, am Ende ist das doch irgendwie normal in der Softwareentwicklung. Du kannst eigentlich jedes Tool für alles benutzen, oder?

Katharina
Ja, gerade wenn es richtige Tools sind, wie Postgres oder Elasticsearch, das sind ja...

Martin
Ja, genau.

Katharina
Sehr umfangreich.

Martin
Es ist wahrscheinlich auch ein bisschen schade, dass wir in 99% der Fällen solche Tools überhaupt nicht in ihrem vollen Potenzial ausschöpfen.

Katharina
Das stimmt, ja, aber wenn ich mir überlege, wenn wir in Exply auch noch das volle Potential der Volltextsuche ausschöpfen wollten, wäre Exply selber am Ende auch eine eierlegende Wollmilchsau.

Martin
Ja, das stimmt. Du hast noch was, das hast du in unser Dokument geschrieben als als Learning. Da steht einfach nur Accidental Breaking Changes. Ich glaube, da steckt eine ziemlich coole Story dahinter. Was ist denn passiert?

Katharina
Das war ein kleiner Schockmoment, um ehrlich zu sein. Das war, ich glaube, das war am Donnerstag, jetzt letzte Woche Donnerstag, so kurz vor dem Feierabend. Ich war gerade dabei, fertig zu machen. Und dann kommt der Leon, ein Arbeitskollege, kommt eben zu uns in den Discord-Chat. Also wir haben ja die Kommunikation über Discord und fragt, naja, ob ich mal ein paar Minuten Zeit hätte. Er hätte in unserem internen Exply, das wir also zur Datenauswertung verwenden für unser Internet-Controlling, so ein paar komische Ergebnisse und er weiß nicht, macht er was oder ist vielleicht gerade irgendwas, irgendein Backend-Exply. Da habe ich gesagt, klar, können wir drauf schauen. Und da habe ich wieder drauf geschaut und da waren wirklich ein bisschen lose Ergebnisse. Aber zum Glück, ich wusste dann eigentlich sofort, woran es liegt, weil wir hatten gerade erst ein Feature gemerged. Da ging es um das Filtern von Daten über eine Zeitauswahl praktisch. Und ich glaube, da müssen wir gar nicht so in die Tiefe gehen, auf jeden Fall als Feature geführt, dass auf den Dashboards halt nicht mehr das zu sehen ist, was die Leute normalerweise gewöhnt waren, sondern halt einfach mehr Daten bzw. andere Daten.

Martin
Ja, mehr Daten ist erstmal nicht schlecht.

Katharina
Naja, ich glaube, der Kunde freut sich nicht so, wenn er auf einmal 3-mal so viele Stunden in Rechnung gestellt bekommt, weil er einfach mehr...

Martin
Ach so, also nicht mehr zu sehen, sondern tatsächlich akkumulierte.

Katharina
Ja, also ich meine, im Sinne von, es wurden weniger Dokumente rausgefiltert durch die Filter und deswegen mehr, also größer, ja, in dem Sinne meine ich, die Werte wurden unter Umständen größer.

Martin
und das direkt in Production.

Katharina
Zum Glück nur bei uns intern, also Firmeninternen in Production. Also wir haben... Also bei uns, Firmenintern ist in Production immer der aktuelle Master. Das und releasen tun wir, ist dann nochmal extra natürlich. Und das ist immer sehr praktisch auf jeden Fall, weil uns dann sowas natürlich auch auffällt, weil wir den aktuellen Master natürlich benutzen. Also wir verwenden sozusagen...

Martin
Man nennt das ja dieses Eating-my-own-Dog-Food. Wir sind quasi unsere eigenen Bittertester was Exply angeht und das auch sehr heftig. Also ich glaube jeder Sandstormer verwendet Exply in seinem Alltag.

Katharina
In fast jeder Jahr, denke ich. Das ist... Ja, wir brauchen praktisch ganz selbst und so ein bisschen als Quality Assurance-Abteilung, naja.

Martin
Ich bin ja ein großer Freund von Produktentwicklung.

Katharina
Also ich bin auf jeden Fall sehr froh, dass wir das nicht, dass es jemandem aufgefallen ist, dass wir das nicht released haben. Das wäre ziemlich, ziemlich furchtbar gewesen, wenn das dann erst beim Kunden auf dem Dashboard aufgetaucht wäre, wenn die schon keine Ahnung, aufgrund von Fehlinformationen, irgendwelche Entscheidungen für so ein Unternehmen getroffen haben. Das wäre ganz schön, ganz schön heavy gewesen. Das haben wir dann auch ganz schnell den Commit reverted und also einfach einen Rollback gemacht. Und da muss man nochmal drüber nachdenken, wie wir das Feature umsetzen wollen, damit es möglichst kein Breaking Change ist.

Martin
Was hast du denn gelernt aus der Episode, also aus dem accidental breaking changes?

Katharina
Ich nehme auf jeden Fall für mich mit, dass Breaking Changes nicht unbedingt aufgrund eines riesen Features oder eines riesen Umbaus oder sonst was sein müssen. Also das war die Vorstellung, die ich bisher immer so im Kopf hatte. Na ja, Breaking Changes heißt, man wechselt von einer Version 4 auf eine Version 5, also man macht halt einen Major Update, Upgrade praktisch und das bedeutet für mich im Kopf immer irgendwelche riesen Änderungen oder Umbauten oder sonst was und vielleicht war es auch per Zufall für uns im X-Bike-Kontext halt gerade immer so und ich mir ist auf jeden Fall hängen geblieben, dass es auf keinen Fall sein muss, also die Änderungen müssen überhaupt nicht groß sein, damit sie Breaking sind.

Martin
Mhm.

Katharina
Das war wirklich eine winzige Erinnerung, die wir gemacht haben. Aber wenn die der Sports hinterher anders aussehen, es ist halt Breaking. Also ich habe auf jeden Fall gelernt, dass Breaking Change ist immer auf Sicht der Kunden gemeint, dass wenn für den Kunden irgendwas anders ist als vorher, er irgendwas umstellen muss, irgendwas machen muss, das Update nicht reibungslos verläuft, dann ist es ein Breaking Change und nicht nur, wenn ich bei der Entwicklung übelst viele Migrations schreiben muss oder sonst was.

Martin
Das klingt nach einem super Schlusswort für die heutige Folge. Katharina, das hat sehr viel Spaß gemacht.

Katharina
Freut mich. Mir auch.

Martin
Dann sag ich mal, tschüss, bis nächste Woche zu den Türen und vielen Dank fürs Einschalten.

Katharina
Ja, schließe ich mich an.