Transcript: Python in der Wissenschaft
Full episode transcript. Timestamps refer to the audio playback.
Ja, hallo liebe Hörerinnen und Hörer, willkommen zum Python-Podcast.
Wir haben die elfte Episode heute und sind heute wieder in Jochens Winter-Sommergarten.
Wir haben gerade Sommer.
Ja, hey Jochen, und wir haben heute wieder einen tollen Gast dabei, das ist der Gerrit.
Heute ist unser Thema Scientific Python.
Ja, vielleicht darf er erst mal hallo, Gerrit, kurz, und dann...
Oder so Python in der Wissenschaft.
Hallo, Python in der Wissenschaft.
Genau, weil Scientific Python ist ja ein Paket und das wollen wir nicht verwechseln.
Wir reden eventuell auch über Scientific Python, aber...
Ja, vielleicht sag doch kurz auch deinen Hörern, wer du bist.
Ja, ich bin Gerrit, ich bin von Haus aus Physiker und beschäftige mich hauptsächlich mit komplexen Systemen
und deren Anwendung auf diverse Fachgebiete, Neurophysik, zum Teil auch Wirtschaft
und zurzeit Biologie und Ökosysteme aus Mikroben.
Mikrobeller-Analyst habe ich mir aufgeschrieben.
Das hast du dir aber ausgedacht.
Ja.
Wenn überhaupt, Mikrobiell.
Okay, Mikrobieller-Analytiker.
Ja, also.
Und, ja, nutze dafür Python, um Sachen zu simulieren, um Daten zu analysieren und manchmal auch, um ganz komische Sachen mit symbolischem Rechnen zu machen.
Und du spielst Golf.
Und ich spiele, ja, also zurzeit eigentlich nicht mehr so viel, aber ich habe Golf gespielt und, ja.
Ja, negativ.
Da reden wir mal, also, keine Ahnung, wollen wir direkt darüber, über Golf reden?
Die Code-Golf, ja, kommen wir gleich noch dazu.
Wir machen einmal kurz so ein bisschen News wieder, verpeisen, wie wir das irgendwie so kennen und dann kommen wir irgendwie so zum Topic.
Ja, ja, auf jeden Fall, weil dann mache ich hier schon mal die...
Erste Kapitel-Markt.
Erste Kapitel-Marke, äh, äh, alles klar.
Ähm, ja, was gab es denn so, also irgendwas wie PyOxidizer oder sowas, vorgestern so eine News raus.
Ja, das, äh, genau, äh, PyOxidizer ist irgendwie so ein, so eine Software, mit der es möglich sein soll, äh, ja, so eine Python-Applikation, äh, einen Standalone-Executable zu verwandeln, dass man dann einfach irgendwo hinschütten kann und dann läuft das da.
Und das halt auch, äh, auf unterschiedlichen Plattformen, das heißt auf Unix ganz genauso wie auf, äh, Windows.
Und, ähm, das ganze Ding ist irgendwie so Rust-basiert, also das, äh, packt den Python-Interpreter halt irgendwie in, äh, in, äh, in, in ein Rust-Programm.
Also das ganze Ding ist sozusagen irgendwie hinterher das, was auch dabei rausfallen würde, wenn man einfach ein, ein Rust-Programm kompiliert.
Ähm, und, ähm, ja, man kann alle möglichen Dinge noch mit dazu, man kann auch Rust-Code mit dazu...
Also so kann man tatsächlich Python irgendwo mit hinschippen, also man braucht halt Python-Maison mehr mitmachen, wenn man irgendwo was deliveren will, beendable oder sowas, auf den Server gehen, hat man das dabei.
Und dann läuft das dann direkt, oder auf Windows oder sowas, ne, für irgendwelche Nutzer, die halt damit nichts zu tun haben wollen, die...
Genau.
...können dann dieses PyOxygen aus und sind dann direkt...
Ja, also das ist, das hatten wir letztes Mal auch schon, äh, und auch darauf nimmt auch, äh, quasi der, dieses, ähm, Announcement, äh, der Announcement-Bog-Post, die ich da heute gesehen hab, äh, äh, Bezug,
dass es für Python keine so richtig konsistente, ähm, Story dazu gibt, wie das denn jetzt, äh, irgendwie installiert wird auf einer Maschine.
Also das wäre wie so ein Black Swan, also eine der großen Bedrohungen.
Wie so der Python-Community.
Und das ist, das ist tatsächlich genau, und da gab's einen, einen Vortrag, äh, der, also das war die Keynote von der diesjährigen, äh, äh, PyCon, irgendwie US, äh, von, von Russell Kies-McGee, der sagte, naja, das ist halt eine, eine potenziell fatale Bedrohung eigentlich für Python als Sprache, dass das irgendwann mal den Zugang halt abschneiden kann zu allem.
Also, auf, äh, mobilen Geräten ist es ja jetzt schon im Grunde so, da kommt man halt mit Python nicht drauf, und, ähm, ja, wenn man das halt, wenn man keine solche Story hat...
...dann ist das halt echt blöd unter Umständen, also es macht für Entwickler ja nicht so einen Unterschied, ne, und das ist ja auch die Hauptzielgruppe, da ist es dann egal, da macht man sich sein Virtual Environment und, äh, äh, benutzt Pip und, äh, vielleicht noch ein paar andere Tools und so und hat damit kein Problem, aber für, äh, wenn man jetzt einen Endanwender hätte draußen, der...
Ja, der will vielleicht gar nicht wissen, was für eine Sprache dahinter steckt, oder was?
Genau, dem interessiert das nicht, ob das Python ist oder nicht.
Ob das ganz funktioniert, machen wir schneller.
Genau, genau, der möchte einfach nur irgendein Problem gelöst haben und gar nicht, äh, ein Problem bekommen, zusätzlich.
Und das ist natürlich, äh, momentan so ein bisschen doof.
Gerade für Windows, also für, für Unix gibt's da ja schon was, ähm, das, äh, also ehrlich gesagt weiß ich davon auch nur, weil, ähm, äh, derjenige, der das, äh, entwickelt hat, hier auch in, in Düsseldorf oder...
PyRun.
Genau, die Düsseldorfer Python User Group, äh, irgendwie, ähm, gegründet hat oder, äh, betreut, äh, irgendwie, ähm, äh, Marc-André Lemberg und, ähm, der, äh, hat, genau, das ist uralt, das hat, das ist irgendwie schon 20 Jahre alt oder so.
Ja, ist noch ein 90er schon, kann man sagen.
Äh, und...
Und Python 1, was war das?
Und, äh, das ist ziemlich nett, äh, das ganze, äh...
Man kann da sogar noch so, so nette Dinge machen wie, ähm, äh, da das, äh, es beruht irgendwie darauf, dass man, glaube ich, das Modul, das irgendwie ausgeführt wird oder Entry Point ist halt irgendwie, äh, in einem Zip-File, das halt...
Ja, das hört sich jetzt gerade ein bisschen kompliziert an, also...
Ja, also, also, was, was man tun kann, ist, man kann halt, äh, eigene Sachen per Zip irgendwie einpacken, dann per Cut hinten an das Binary dranhängen und dann wird das halt ausgeführt, zum Beispiel, solche Sachen.
Ah, ja, cool, also, also unsere eigenen Pakete und, und so.
Ja, weil das, äh, weil halt das Binary...
...irgendwie selbst hinten dran irgendwie schon Zip ist oder ich weiß es nicht mehr genau.
Aber, also, also man kann damit sehr, sehr lustige Dinge tun und, äh, die, äh, von der Größe her, äh, wenn man das irgendwie so ein bisschen optimiert, dann ist das, glaube ich, irgendwie so knapp 5 MB groß oder sowas, aber rausfällt normalerweise und da ist halt die Standardbibliothek nicht komplett drin, aber zum großen Teil.
Ja, und, ähm, ich weiß jetzt nicht, hab hier...
Ja, aber jetzt kriegst du eine nette Alternative, das hört sich ganz nett an, ne?
Genau.
Dieses Hinterlohn-Single-File.
Der, der, genau, der Vorteil bei PyOxidizer ist halt, dass das auf Windows halt auch funktioniert.
Was sind PyRun halt?
Dass jemand von euch von der PyCon 2019, äh, irgendwelche Talks gehört, Talks gesehen, irgendwie was Interessantes noch mitgebracht.
Also, ich hatte einige Sachen gesehen, die ich mir natürlich wieder interessierte, war irgendwie, dass ein bisschen Musik wieder was dabei war mit Foxtot von Jessica Garson war ganz nett.
Ähm, ja, und...
Den hast du aber dann gesehen quasi tatsächlich, äh...
Ja, ja, ich hab irgendwie aber nur kurz reingeguckt, ich muss das immer noch auf meiner Liste zu Ende schauen, das gibt ja da irgendwie auf YouTube so ein bisschen.
Ja, und ich hab gehört, äh, Pinterest ist jetzt bald Python 3 oder so.
Ach, ich dachte, die werden schon längst irgendwie umgeschaltet.
Aber das war dann wahrscheinlich irgendwie Instagram oder so, da gab's so eine, äh, Riesendaten, die auch viel, äh, zu veröffentlicht, glaube ich, dass, wie sie da umgestiegen sind.
Hab ich auch nicht gesehen, aber ich...
Aber bei Pinterest, dass die auf Python 3 umsteigen, ist natürlich jetzt irgendwie so ein bisschen...
So wirklich angeben kann man damit jetzt...
Ja, ne, oder?
Ja, ja, klar.
Ich bin da für.
Äh, ja, irgendwas...
Wie lädt es an, die so umsteigen?
Ja, ich hab gehört, also, äh, Python 4, also der, äh, Niklas, der war jetzt auch schon einmal bei uns hier, ähm, die haben jetzt ein Tutorial für Python 2.7 und der Python 3.7.
3 veröffentlicht, das fand ich, äh, sehr lustig.
Ah.
Ja, und auch diese Woche.
Ja.
Ne, aber ansonsten hab ich auch tatsächlich im Grunde nix wirklich, was, äh, irgendwie an tollen Dingen passiert wäre.
Hm.
Ja.
Ja, dann...
Aber immerhin ist das schon so ein bisschen was.
Ja, so ein kleines bisschen.
Ja.
Sonst machen wir dann nächstes Mal einfach wieder eine große News-Section und fangen jetzt einfach an mit unserem, äh, Scientific-Thema.
Oder wollen wir erst mal was mit dem Golf spielen?
Also spielst du auch richtig Golf oder nur Code-Golf?
Ne, ich spiele, wenn überhaupt, Code-Golf.
Ja, okay, okay.
Ähm, zur Zeit auch ehrlich gesagt nicht mehr so viel.
Irgendwann, wenn man das so ein paar Jahre gemacht hat, hat man alles gesehen, was es zu sehen...
Jetzt erst mal für, für, für die, äh, ungewöhnliche Hörer, was ist das denn überhaupt, Code-Golf?
Also Code-Golf ist die Aufgabe, dass man versucht, irgendeine Programmieraufgabe, zum Beispiel Programmiere die Fakultät oder was auch immer,
mit möglichst wenig Zeichen zu lösen in einer gegebenen Programmiersprache in der Regel.
Oder man kann es auch allgemein machen, aber da wir jetzt über Python reden und für die meisten Leute ist es das Interessanteste, in einer Programmiersprache zu machen.
Und ja, ohne Rückschlüsse.
Man berücksichtigt auf irgendwelche Regeln, ähm, und das kann Spaß machen, offensichtlicherweise, dass man einfach mal alle Regeln fallen lassen kann und wild böse programmieren kann.
Ich kann mich noch daran erinnern, ich saß mal in so einem Talk von dir und da war ich immer noch ein absoluter Anfänger und ich habe mich nicht verstanden von dem, was du da...
Irgendwas funktionierte da und dann irgendwie, ja, okay, warum machen wir das jetzt? Keine Ahnung, ja.
Und, ja, also die zweite Sache, warum man es macht, wenn wir mal dabei bleiben, ist, ähm, dass man auch wirklich was über die Programmiersprache lernt oder das Programmieren am Allgemeinen,
drüber nachdenkt, gewisse Probleme mit ganz neuen Algorithmen zu lösen, zum Beispiel rekursive Algorithmen statt irgendwelchen Schleifen oder, oder, oder.
Und, ähm, ja, das macht einfach sehr viel Spaß, wenn man das ab und zu macht und man lernt auch viel.
Da gibt es auch so Wettbewerbe oder sowas, ne? Also richtig mit 18 Löchern oder wie? Wie spielt man das?
Äh, ne, also es gibt natürlich Webseiten, wo man dann seine Lösung veröffentlichen kann und dann sagen, okay, ich habe das jetzt kürzer gelöst als alle anderen oder zumindest kürzer in dieser Programmiersprache gelöst als alle anderen.
Hast du da eine Schonnot für uns?
Für, für eine Webseite?
Ähm, es gibt eine Stack-Exchange-Seite zum Thema CodeGolf. Das ist auch die, wo ich hauptsächlich aktiv bin oder war.
Ja.
Ähm, es gibt andere Seiten, aber da muss ich ehrlich gesagt sagen, weiß ich gar nicht so viel drüber.
Okay.
Und, jetzt schau doch mal mit Stack-Exchange vorbei für CodeGolfen.
Äh, ja, ich, wie gesagt, ich pack den Link da einfach dazu. Ähm, und was sind so deine, deine, hast du vielleicht Lieblingsaufgaben oder so oder was besonders, äh, irgendwie interessante, einen interessanten Lösungsweg hatte oder?
Ja, also, ja, also interessante Lösungswege, ja gut, ich bin, komme aus der Physik-Mathematik-Ecke, also kann man, finde ich immer froh, wenn ich Sachen mit komplexen Zahlen oder so lösen kann.
Also, klassisch sind irgendwelche Aufgaben wie, was weiß ich, irgendwer, irgendein Objekt bewegt sich in irgendeinem Raum oder irgendein, ähm, Robot oder was auch immer und man muss den steuern und das kann man natürlich machen, indem man zweidimensionale Koordinaten speichert.
Das ist in der Regel aber kürzer, wenn man das Ganze in komplexen Zahlen löst.
Ähm, und, ja, da gibt's dann einige Aufgaben, wo man das sehr lustig lösen kann und am Ende natürlich überhaupt nicht mehr, wenn man nicht eingeweiht ist, versteht, äh, was da eigentlich passiert.
Ähm, und, ja, also ansonsten, ich kann, keine Ahnung, ich glaube, das Interessanteste, was man jetzt so auf dem, diesem Medium überhaupt kommunizieren kann, ist, sind dann vielleicht so ein paar Tricks, die man nutzen kann, also, ein klassisches Beispiel ist natürlich, wenn ich,
wenn ich irgendwas habe, muss ich irgendwas in einer Schleife lösen, das kann man natürlich auch so machen, häufig ist es dann aber so, dass diese Schleife vielleicht nicht so spannend ist, also, dass da jetzt nicht so viele komplizierte Dinge passieren und dann könnte es zum Beispiel einfacher sein, den Befehl, den man in der Schleife ausführt, in einen String zu packen, diesen String zu multiplizieren, also mit dem Nikola getrennt, mal fünf oder so, weil ich das fünfmal ausführen möchte und dann ein Exek darüber zu jagen.
Ähm, ähm, ähm, ähm, ähm, ähm, ähm.
Ähm, ähm, ähm, ähm, ähm, ähm.
Ähm, ähm, ähm, ähm, ähm.
Ähm, ähm, ähm, ähm.
Ja, ist auch wirklich geil, es gibt diesen klassischen Sortieralgorithmus, ich, äh, nehme meine Daten, ich mische sie, ich gucke, ob sie sortiert sind, wenn nicht, mische ich sie nochmal.
Ja, ja, ja.
Solche Ansätze und, und, ja, wenn dann die Aufgabe nicht vorgibt, dass man das Ganze in einer endlichen Zeit lösen möchte, geht das natürlich.
Also, das ist auch immer eine, ja, ein Lieblingsansatz, dass man sagt, okay, wir versuchen das jetzt schön in, äh, Brute Force zu lösen, statt, weil...
Ja, war an der gewissen Wahrscheinlichkeit.
Ja, war an der gewissen Wahrscheinlichkeit, ist das dann sofort fertig.
Ja, ich hab, ich hab letztens, äh, auch irgendwo neun, äh, es gibt ja diverse, äh, lustige, äh, Sortierverfahren, ich hab letztens eins gesehen, das fand ich auch wieder sehr cool, äh, sehr schön, das, äh, besteht einfach darin, ich glaub, das nennt sich irgendwie Sleep Sort und, äh, wenn man halt Zahlen hat, dann, äh, macht man das mit, äh, mit, äh, mit Async Await Notation, halt, äh, man awaitet einfach die Zahl und, äh, das ist dann halt sortiert, weil, naja, je größer die Zahl, desto länger...
Ja, muss man natürlich, wartet man halt.
So, das ist auch sehr, sehr cool.
Also, mein Lieblings-Algorithmus ist der LSD Radix.
Das ist so schön, der hört sich auch besonders toll an, wenn man den so visualisiert.
Äh, auch defiziliert, wie nennt man das?
Wenn man so einen Algorithmus, es gibt ja so...
Vertont.
Ja, ja, ja, wahrscheinlich.
Vertont.
Gut.
Ja, wir vertonen für euch ja wieder heute eine neue Folge.
Ja, jetzt hab ich keine Ahnung, was LSD Radix macht, aber gut.
Ähm, der baut so Buckets auf.
Und sortiert dann die ganzen Sachen immer in so Buckets rein und gibt die dann immer wieder auseinander und dann...
Ah, okay.
Ja, also nach, von, von, äh, 0 bis 1, 9 oder sowas und dann gibt der die auseinander und dann funktioniert das für mich ganz gut.
Eine Sache, die mir jetzt noch gerade eingefallen ist, wo wir sagen, wir warten auf die Eingabe und wie lange es dauert.
Ähm, also auf, auf CodeGov StackExchange gab's dann auch, äh, zwischendrin mal so eine Kategorie von Fragen, die haben wir so auch ganz schnell ausgebildet und abgeschafft.
Äh, wir versuchen jetzt mal eine Programmieraufgabe möglichst schlecht zu lösen, also nicht schnell oder kurz oder was auch immer, sondern einfach schlecht.
Und dann haben wir die Aufgabe hinzufügen.
Und, äh, ja, meine Lösung war dann, ähm, wir nehmen, wir speichern einfach mal irgendwie irgendwo ein Bit ab, lassen einen Zähler hochlaufen und überprüfen nach jeder Zahl, ob das Bit sich eventuell geändert hat.
Und wenn sich das Bit ändert, durch Höhenstrahlung oder was auch immer, dann nehmen wir die Zeit und dann haben wir unsere Zufallszahl.
Das erinnert mich so ein bisschen an deinen Wart-Sortier-Algorithmus.
Ja, das klingt gut.
In einer besonders chaotischen Umgebung könnte das relativ schnell passieren.
Ja, äh, wie ist das eigentlich bei so, bei so CodeGolf-Community, macht die nur CodeGolf? Es gibt ja noch so andere lustige Programmier, ähm, weiß ich nicht, wie soll man sagen, so, äh, ja, Knubel-Ecken.
Ja, also die machen auch andere Sachen.
So Quines zum Beispiel oder, äh, also Programme, die sich selbst ausgeben.
Ja, oder auch CodeGolf mit Einschränkungen, also man kann natürlich immer CodeGolf machen, aber auch so lustige Sachen war so eine Aufgabe, äh, multiplizier jetzt mal bitte zwei Zahlen.
Aber verwenden im ganzen Code keine einzige Zahl.
Dann muss man erstmal die Zahlen irgendwie in römische Zahlen darstellen, also so i, i, i, i, i, ja, ist dann halt fünf.
Und dann kann man da auf Basis, basiert natürlich multiplizieren und am Ende kommt dann halt wieder eine Zahl raus.
Man muss halt irgendwie auch gucken, wie sieht man das mit der Darstellung macht, dass man das dann regelkonform macht, aber, ja.
I, i, i, i, i, i ist fünf, i, i, i, i.
Ja, römische Ziffern, Rechner mit römischen Ziffern, sehr, sehr böse.
Ja, ja, x, x, x.
Ich habe irgendwann mal auch, glaube ich, im Blogpost dazu gesehen, wie jemand irgendwie mit römischen Ziffern schriftlich dividiert hat und das war echt so, das war so, das war so, sagen wir mal so, es ist nicht so unmittelbar einleuchten, wie das funktioniert, das ist, ja, aber, ja, ähm, no.
Ja, so CodeGolf ist im Prinzip so eine Absatzionsebene, um mit der Sprache Schabernack zu treiben, also um irgendwie die Komplexität von Algorithmen zu ergründen und um vielleicht so ein bisschen die Geschwindigkeit da so rauszukriegen.
Ja, oder auch die gerade, also sich einfach so Gedanken zu machen, also sowas wie SlowSort oder SleepSort oder was auch immer sind ja Sachen, die einfach existieren, dass man sich, dass man überhaupt erstmal sieht, wie gut man es hat und wenn so echten Sortieralgorithmen und auch einfach das Konzept eines Algorithmus besser versteht und, ja, man, genau, man, ist es natürlich einfach, ja, also wie du schon sagst, man beschäftigt sich mit den Dingen und es ist einfach eine Möglichkeit, sich selbst dazu zu treiben, sich mit den Dingen zu beschäftigen und, ja, man lernt einiges über Algorithmen und Ähnlichem.
Ja, genau.
Also ich habe mich tatsächlich irgendwo mal dann, dem ich begegnet bin, auch tatsächlich später eingesetzt in echter wissenschaftlicher Arbeit und war dann sehr froh, dass ich ihn kannte, weil, ja, also man, ja.
Ja, also du hast jetzt das Thema, da hast du dich direkt fast schon wieder mit aufgemacht und ich glaube, es ist Zeit für den nächsten Chapter, Marc.
Ja, ja.
Wenn du jetzt sagst, du hast ihn jetzt scientific in der wissenschaftlichen Arbeit eingesetzt, was ist denn jetzt das Scientific Python, also das ist nicht SciPy oder was eben sagt das, sondern was bedeutet das und warum macht man das, was macht man da?
Warum ist das so nett oder doch nicht, oder?
Also erstmal natürlich als Wissenschaftler hat man in der Regel, oder nicht in der Regel, also viele Wissenschaftler müssen programmieren, zwangsläufig, weil sie sichern, simulieren oder Daten analysieren in großen Mengen und das nicht per Hand machen möchten, aus gutem Grund.
Also quantitative Analyse und keine qualitative Analyse, würdest du jetzt sagen, ist die wahre Kunst der Wissenschaft, oder?
Ja, also ich glaube, gibt es so richtig qualitative, rein qualitative Arbeit.
Gibt es zumindest in meinem Bereich kaum.
Ich kenne noch die alte Philosophische Fakultät an meiner Universität, die hat sich durchaus damit hervorgetan, mit qualitativ.
Ja, ja, gut, aber das ist ja auch nicht mein Bereich.
Also klar, es gibt natürlich Bereiche, in denen das gibt und das auch sinnvoll ist und schön und gut, aber ich glaube nicht, dass ich jemals irgendwas beruflich begegnet bin, das rein qualitativ war.
Okay, also ein ZDF, das ist Scientific Python, also Zahlen, Daten, Fakten.
Ja.
Ja, okay.
Es geht nicht unbedingt darum, also nicht nur darum, Zahlen auseinanderzunehmen, manchmal geht es auch um Zahlen zu produzieren oder irgendwie einfach etwas, was man mathematisch, theoretisch zumindestens, theoretisch aber, beweisen könnte oder verstehen könnte, aber zu kompliziert ist, dass man es mathematisch zerdröseln kann, zu simulieren und dann auf die Weise zu verstehen.
Also viele Sachen, die ich gemacht habe, würde ich als Experimentalmathematik bezeichnen.
Also ich stelle experimentell mathematische Aussagen.
Ja.
Ja, und dazu muss man natürlich programmieren und das macht man natürlich gerne in Python, also zumindest ich, anderen natürlich nicht, das muss man so ein bisschen Überzeugungsarbeit leisten, weil es zum einen häufig nicht um Geschwindigkeit geht, sondern eben darum geht, die Sachen möglichst schnell und anschaulich zu programmieren und zu verstehen, was man eigentlich tut.
Zum anderen natürlich manchmal geht es auch um Geschwindigkeit und da sind viele, viele Aufgaben, die man hart macht.
Mit solchen Tools wie NumPy lösbar, die die entscheidenden Sachen, die dann wirklich schnell laufen müssen, in einer hartgecodeten, schnell laufenden Variante machen.
In einigen Fällen gibt es da nicht und das war dann auch bei mir der Grund, warum ich so eine Sache dann selbst geschrieben habe, um nochmal irgendwie so eine Überleitung in den Raum zu einem gewissen Thema zu schweißen.
Ja, ja, ich wollte gerade noch auf die Experimentalmathematik, also ich weiß nicht genau, ob ich das jetzt irgendwie falsch assoziiere.
Aber Mathematik fand ich auch immer sehr interessant, weil ich fand, das war immer so eines der besten Argumente dafür, dass Mathematik unabhängig davon existiert, also nicht wirklich erfunden wird von demjenigen, der sie betreibt, sondern eher so auch entdeckt wird, dass man da halt, also wenn man jetzt einen Computer losrennen lässt und der würfelt halt so lange Gleichungen durcheinander, also bis er halt einen Pfad gefunden hat von dem, was man irgendwie zeigen möchte zu irgendwie einfachen Sachen, die schon bewiesen sind.
Also das kenne ich jedenfalls, da habe ich mal gehört, dass Leute so experimentieren.
Oh, da war ein Ding.
Ist wahrscheinlich auch nicht unzutreffend, weil der Begriff Experimentalmathematik ist nicht Kopiergeschütze oder Trademark von irgendwem, der sagt, das ist jetzt genau das.
Die Sachen, die ich mache, sind da schon gemacht habe oder auch noch mache, sind auch schon anders.
Da geht es dann eben um die Frage, wie verhält sich jetzt dieses Modell, wenn ich das lange laufen lasse.
Und dann hat man eben, also so klassische Beispiele für die Modelle, die meisten Modelle, Aufstellungen, kann man als Gleichung formulieren, das ist eine Differenzierung.
In der Regel oder ähnliche Sachen, also für die Leute, denen es was sagt, man hat eine Gleichung und die Lösung ist dann, wie verhält sich mein Objekt, mein System über die Zeit.
Das wäre die Lösung für meine Gleichung.
Und diese Lösung kann man in aller Regel nicht mit Stift und Papier finden, so wie was Leute normalerweise tun.
Man kann es schon machen, aber das dauert dann ein bisschen.
Also auch das ist dann nur eine Annäherung.
Auch die richtige Intuition für die Bewegung der Funktion.
Nee, im Zeitfall geht es wirklich nicht.
Wir haben zumindest seit 100 Jahren keinen Weg gefunden, das zu machen.
Man kann eben höchstens in Nährungsweise Lösungen machen und auch das will man nicht mit Stift und Papier machen.
Das ist dann sehr automatisiert.
Das macht man dann mit dem Computer und natürlich dann wieder mit Programmierung.
Und ja, dann kann man eben herausfinden, okay, wenn ich diese Sachen habe, dann verhält sich dieses System so und so.
Ich kriege so eine Lösung raus, das ist ein klassisches Beispiel, das ist chaotisch.
Und das ist meine Aussage.
Und die habe ich dann experimentell gefunden, in gewissem Maße, über Simulationen.
Und diese Aussage ist auch nicht so in Stein gemeißelt, wie es normale mathematische Aussagen sind,
sondern das kann immer noch schiefgegangen sein, weil ich gerade ganz komisch mein Programm laufen lasse,
habe mit genau den falschen Strafbedingungen oder was auch immer und mein Algorithmus.
Ja, weil man in irgendwelche numerischen Geschichteninstabilitäten gelaufen ist.
Ja, also das kann man sogar noch lösen, aber weil man einfach ganz, ganz viel Pech hatte zum Beispiel.
Natürlich, also.
Die meisten Aussagen, wenn man sagt, das ist jetzt Chaos, als Beispiel, sind schon sehr, sehr hieb- und stichfest.
Aber es ist kein formeller Beweis, wie Mathematiker ihn führen, in den meisten Fällen.
Natürlich gibt es dann auch die Leute, die sich hingesetzt haben und das mal für einen Fall wirklich bewiesen haben.
Das war dann auch eine Sensation oder so.
Hat auch ein paar Jahre gedauert.
Aber das ist nichts, was man praktisch machen kann.
Und das war auch dann nur für die einfachsten Systeme, die man schon vorher sehr gut verstanden hat.
Also diesen ganzen Absatzionslayer noch nicht so ganz begriffen.
Also man hat jetzt ganz komplexe, große, komplizierte Systeme.
Und wenn ich jetzt irgendwie das vorstelle, du sagst irgendwas von Chaos, du sagst sowas über Zeitstrahlen und Funktionen, die da irgendwie durchläuft.
Da denke ich irgendwie immer an sowas wie eine Häufigkeitsverteilung oder sowas, was da irgendwie rauskommt.
Was hat das, also wie kann ich das so real beschreiben, wenn ich jetzt irgendwie Mikrobialen...
Machen wir mal ein Beispiel.
Also ich habe, genau, ich habe Bakterien zum Beispiel.
Also ja, ich mache mal ein bakterielles Ökosystem.
Also ich habe meinen Topf, da schmeiße ich, da habe ich Nährstoffe drin.
Das heißt, Bakterien können da leben.
Genau, da schmeiße ich jetzt, was weiß ich was, fünf Escherichia coli oder zehn Pneumokokken oder was auch immer mir einfällt rein.
Irgendwelches ungesunde Zeug, genau, ja.
Haben wir aber übrigens überall nebenbei.
Also wir tragen mehrere Kilo Bakterien mit uns im Darm rum.
Und noch dreimal Karies.
Ich weiß gar nicht, ob das ein Bakterium ist, was ich gesagt habe.
Oder was das ist.
Karies.
Karies.
Ein Pulbaktus oder wie?
Ich habe keine Ahnung.
Das sah einmal bei einem Zahnarzt früher so aus.
Dann gab es dann diese Zahnarzt-Schiff.
Dann liefen dann irgendwelche Dinge.
Das sah so aus, wie ich mir Bakterien vorstelle.
Genau, ja.
Also die laufen dann auf jeden Fall da rum.
Und jetzt kann ich natürlich das einfach hinstellen und warten und gucken.
Aber das kann ich nur begrenzt häufig machen, da das Zeit kostet.
Und ich kann auch, habe dann Messfehler und Rauschen und so weiter und so fort.
Aber ich möchte das eventuell einfach mal allgemein verstehen.
Wie entwickeln sich solche Bakterienpopulationen?
Das hört sich jetzt doof an.
Also du hast das gerade gesagt, es gibt irgendwie so Sachen im Darm.
Das heißt, ihr macht dann so einen Auszug und stellt das in so ein Glas auf dem Balkon in die Hitze
und guckt, was da so passiert.
Ja, das wäre so die Karikatur des Ganzen.
Aber es ist gar nicht so falsch.
Also viel ist wirklich, wir haben einen Topf Flüssigkeit.
Da sind Nährstoffe drin.
Da schieben wir einen Backpakt Pakterien rein.
Das rühren wir dauerhaft um.
Und dann gucken wir mal, was passiert.
Also das ist schon sehr, sehr häufig.
Und danach macht ihr irgendeine Analyse.
Ihr klebt das Ganze auf Papier, kommt euch die Farbe an.
Oder zählt irgendwas mit irgendwelchen Sensoren.
Und packt das in eine Datenbank.
Und daraus schmeißt ihr dann einen Algorithmus.
Nein, das wäre das, was wir eigentlich modellieren wollen.
Also das ist unser reales System.
Da wissen wir, was passiert.
Da können wir das messen.
Das Problem ist, das hat natürlich diverse Nachteile.
Wie gesagt, wir können nicht alles messen.
Das ist nur ein Glas und nicht eine echte Haut oder sowas.
Ja, das ist der andere Nachteil.
Aber der Nachteil ist, wir müssen eben wirklich dieses Glas auf die Fensterbank stellen.
Und im Computer können wir das eventuell in einer halben Sekunde einfach mal durchrechnen.
Und dann können wir das noch schnell 10.000 Mal machen und besser verstehen.
Virtuelle Bakteriengläser, schön.
Genau.
Das heißt, wir haben die ganzen Bugs hergekommen.
Ja, genau.
Deswegen, ich bastle virtuelle Bakteriengläser.
Und diese virtuellen Bakteriengläser werden dann beschrieben durch Gleichung.
Zum Beispiel bei Differenzialreichen wäre die Frage,
okay, ich habe jetzt meine Bakterien, meinen Zustand.
Mein Zustand ist dann 5 von der Sorte, 6 von der Sorte, 7 von der Sorte,
so viel Nährstoff und so weiter und so fort.
Und die Frage ist, wenn ich jetzt eine Sekunde,
in die Zukunft gehe, wie sieht mein Zustand aus?
Vermehren sich einige von diesen Bakterien?
Werden einige Nährstoffe gefressen und so weiter?
Das kann ich dann machen oder ausrechnen.
Und dann mache ich das nochmal und nochmal und nochmal und nochmal.
Und die Frage, wie man das richtig macht, ist,
ja, da haben sich Menschen schon 100 Jahre lang mit beschäftigt
und gute Wege herausgefunden, das zu machen.
Und die kann man dann natürlich auch implementieren und das nutzen.
Also die haben quasi das Rezept, den Algorithmus schon entwickelt
und den wird dann in Python irgendwie übertragen,
auf das Modell angewandt und dann gibt es eine zufällige Verteilung,
die rauskommt.
Oder hast du dann immer konkrete Ergebnisse?
Es könnte zum Beispiel rauskommen, okay, diese Population schluckt aus
und diese Population geht auf genau diesen Wert und bleibt da.
Und du hast eine Zeit, in der das passiert ist.
Und ich habe die Zeit, in der das passiert ist.
Ja, das ist in vielen Fällen gar nicht mal so das Interessante,
aber es ist auch interessant.
Die andere Sache, die halt rauskommen kann, ist zum Beispiel,
okay, es geht nicht einfach auf irgendeinen festen Wert,
sondern es oszilliert wild rum, zum Beispiel chaotisch.
Und dann können wir eben das feststellen.
Okay, es oszilliert.
oder es ist was anderes, als wenn es konstant bleiben würde.
Und ja, wir können uns dann die Frage stellen,
okay, unter welchen Bedingungen oszilliert es rum?
Welch viele Bakterien-Spezies überleben?
Unter welchen Bedingungen?
Wovon hängt das ab?
Wie beeinflussen die Bakterien-Spezies einander?
Und ja, wie verhalten sich eben solche Systeme im Allgemeinen?
So ein geschlossener Game-of-Life-Kreislauf.
Ja, und ein bisschen realistischer.
Aber ja, Game-of-Life ist auch durch.
Echte zelluläre Automaten.
Ja, also zelluläre Automaten sind halt ein Typ von Simulation,
Differenzialgleichungen sind ein anderer Typ.
Dann können wir noch diverse andere Typen durchsprechen,
wie wir es lösen können, aber ja.
Und dann kann ich am Ende sagen,
ich weiß, wenn ich Bakterien so und so zusammen packe,
dann passiert wahrscheinlich sowas.
Das ist das Fernziel dieser ganzen Forschung.
Dass man eben besser versteht, wie sich solche Systeme entwickeln.
Und dann natürlich auch die Frage,
reagieren sie auf Aumwelteinflüsse?
Eine häufige Frage ist zum Beispiel Antibiotika.
Ich habe ein klassischer Fall,
wo wir kein Ökosystem haben im Körper.
Was die Ausnahme ist, ist die Blase.
Das ist normalerweise bakterienfrei,
soweit man das bisher weiß.
Steril.
Steril, ja, genau.
Aber wenn da was reinkommt, hat man ein Problem.
Und manchmal kommen da mehrere Dinge rein.
Und dann ist die Frage, begünstigen die einander?
Bekämpfen die einander?
Sind da verschiedene Bakterien,
die Fressfeinde oder was auch immer sind?
Fressfeinde.
Die Fressfeinde sind in dem Fall das falsche Wort eigentlich.
Also die umgleichen Währstoffe von Kurieren.
Und die Frage ist jetzt,
wenn ich ein Antibiotikum dazu kippe, was passiert?
Kann ich natürlich wieder im Reagenzglas austesten?
Dauert dann genauso lange wie im echten Menschen?
Ist ein Problem.
Also ein Fernziel der Anwendung wäre zum Beispiel,
dass man eben eine Probe hat,
feststellt, welche Spezies sind da drin,
wie verhalten die sich und dann direkt simuliert,
welches Antibiotikum muss ich geben
oder in welchem Takt, mit welchen Bedingungen,
damit ich diese Handwerksinfektion
möglichst effektiv wegkriege.
Also das heißt, ihr könnt tatsächlich auch sowas,
chemische Verbindungen tatsächlich simulieren,
da reinschießen und dann sagen, hey, vielleicht kommt da was raus.
Also wir simulieren nicht die chemische Verbindung
in dem Sinne, sondern wir wissen halt,
dass das Antibiotikum hat die Auswirkungen
auf das Bakterium, ganz grob.
Aber auch das ist alles nur das Fernziel.
Also wir sind eben, solche Ökosysteme
zum Beispiel zu simulieren, ist
verdammt schwierig.
Hört sich sehr nützlich an.
Ja, deswegen versuchen wir es ja auch.
Und deswegen gibt es hoffentlich Leute, die uns dafür bezahlen, das zu machen.
Ähm, ja.
Und das ist so eine...
Hier wird jetzt ein großer Sponsorenaufruf,
weil du falsch irgendwie...
Naja, aber ich meine, das klingt halt schon so ein bisschen danach,
wie man hat irgendwo einen umgekippten Weiher
und dann geht man da halt mit drei Gläsern
unterschiedliche Bakterien im Socken hinten,
füttert das da rein, wartet zwei Tage
und dann hat man eine Blümchenwiese da.
Oder so, das wäre schon gut.
Ja, das wäre schon nicht schlecht.
Wenn man das ausfinden könnte, wie das geht.
Ja, aber...
Und das geht alles mit Python, das ist ja wie das sollte.
Also mit der schönen Schlange mit der Abenteuer.
Naja.
Also, genau.
Und wie?
Genau, also
entweder sagt man, ich habe eine Simulation
und Zeit stört mich nicht.
Also Laufzeit.
Das kann schon mal sehr häufig passieren.
Dann
kann man es einfach wirklich rein in Python simulieren,
in vielen Fällen.
Ich habe auch Simulationswerkzeuge mal gebaut
aus so Nebenkriegsschauplätzen,
die wirklich rein in Python laufen
und auch da einigermaßen effizient sind noch.
Ein Hauptproblem mit vielen komplexen Simulationen
und jetzt mache ich jetzt wieder eine eigensinnige Überleitung
zu dem, was ich wirklich gemacht habe,
ist,
dass es,
nicht so einfach und schnell in Python geht
und dass es insbesondere auch nicht so schnell
und einfach mit NumPy geht,
weil es nicht vektorisierbar ist.
Jetzt muss ich wahrscheinlich kurz erklären,
was vektorisierbar ist.
Ja.
Das heißt, ich habe,
ein klassisches Beispiel ist,
ich addiere zwei Vektoren.
Ich habe ein großes Array mit Zahlen
oder Liste oder was auch immer man sich vorstellen möchte.
Ich habe eine andere, genauso lange Liste mit Zahlen.
Wenn ich jetzt sage,
addiere bitte mal die ersten beiden Elemente
und von jeder Liste
und füge das als erstes neues Element
in eine neue Liste
und dann mache ich das.
Dann mache ich das mit den zweiten Elementen
und so weiter und so fort.
Dann ist das eine vektorisierbare Operation.
Ich glaube, das hat jetzt niemand verstanden,
der nicht wusste, was vorher eine Vektoroperation ist.
Wenn du zwei Vektoren addierst,
dann machst du irgendwie sowas,
du erklärst irgendwie den Weg,
den du per Luftlinie kennst
und dem erzählst du,
ja, musst du links, dann musst du rechts
und dann kommst du irgendwann...
Nenn es nicht so sehr das, was es tut,
sondern die Art, wie es passiert.
Also es ist immer das Gleiche.
Ich mache einfach,
also das auch gleich für viele Sachen ist das so,
Moment, jetzt muss ich es gerade richtig hinkriegen.
Äh, Multiple Data,
Moment, Multiple Input, Single Operation,
Single Operation, Multiple Data.
Also ich mache...
Single Input, 7D, irgendwas?
Genau, also da geht...
Ja, also das Konzept ist auf jeden Fall klar.
Der Begriff ist nicht der übliche wahrscheinlich,
aber alle, die es kennen, wissen, worum es geht.
Also ich habe einen Datensatz
und ich mache damit 5000 Mal das Gleiche,
wenn ich jetzt 5000 Elemente in meinem Datensatz habe.
Und, oder der Datensatz,
der Datensatz wird halt ein Array.
Und das ist ein Problem,
was in vielen, vielen Simulationen auftaucht
und das ist auch alles schön und gut.
Und das kann man dann natürlich effizient
mit solchen Sachen wie NumPy gut lösen.
Also nicht 100% effizient,
aber schon sehr nah dran.
Da ich dann eben,
wenn ich mit NumPy zwei Arrays addiere,
funktioniert es eben so,
dass der sagt,
okay, ich erkenne,
das ist jetzt eine Addition
und dann geht er jetzt nicht
für jedes einzelne Element dieses Arrays hin
oder dieser paarweisen Arrays
und überlegt sich,
oh, guck mal,
was ist das für ein Objekt?
Ist das eine Zahl?
Aha, eine Zahl kann ich jetzt multiplizieren
mit einer Zahl.
Was passiert denn da?
Ah, da kommt wieder eine Zahl raus.
Und unter der Haube
findet dann die tatsächliche Multiplikation statt.
Das ist ja das,
was im normalen Python passieren würde.
Sondern der sagt,
okay, ah, das ist ein Array.
Das ist aus Zahlen.
Das ist noch ein Array aus Zahlen.
Und jetzt gehe ich mal unter der Haube hin,
lasse eine effiziente Schleife da durchlaufen,
die in C oder was auch immer geschrieben ist,
multipliziere die alle Elementweisen miteinander
oder addiere sie Elementweisen miteinander
und dann kriege ich das Ergebnis.
Und das ist schnell.
Und wenn ich jetzt mein Problem
ausschließlich aus solchen Operationen beschreiben kann,
dann kann ich das auch
schnell mit NumPy und Python lösen,
ohne dass ich da irgendwie selbst
in C programmieren muss oder so.
Ja, ich glaube,
ich weiß jetzt auch nicht,
ob ich mich da ganz komplett korrekt dran erinnere,
aber ich glaube, der Witz bei dem Vektorisieren ist eigentlich,
dass man, man hat ja mehrere Register
irgendwie und dann kann man das halt sozusagen
in gewisser Weise parallelisieren,
diese Additionen oder Multiplikationen
von Arrays, indem man das halt in
so viele Teile zackt und das halt alles
irgendwie gleichzeitig macht oder diese Dinger sind irgendwie
oder man kann mehrere Dinge in einen Register packen.
Ja, das ist noch ein Vorteil
bei Grafikkarten und in dem könnte ich das
dann tatsächlich parallelisieren. Stimmt.
Also gerade dieses Rechnen
auf Grafikkarten, wenn man das immer,
was man immer wieder hört, das ist genau solche
Sachen, wo man eben, ja, mehrfach
die gleiche Operation rechnet.
Aber das ist
auch schon eine Sache, die, wenn ich jetzt mit
reinem Python arbeiten möchte oder nicht,
wenn ich irgendwas Neues programmieren möchte in Python,
mir mein Leben deutlich einfacher mache, wenn ich
sowas nutze wie NumPy, denn NumPy,
das Hauptkonzept von NumPy ist eigentlich, wir haben
vektorisierbare Operationen
und stellen sie dem Python-Nutzer zur Verfügung,
ohne dass der sich darüber
kümmern muss. Also wir stellen sie zur Verfügung, wir stellen sie
in effizienter Form zur Verfügung, ohne dass der Nutzer
sich darum kümmern muss, da
irgendwie in C vortragen oder was auch
immer für niedrigeren Sprachen das zu machen.
So.
Ja, ja, ich glaube auch, ich habe
mal gehört, dass das halt irgendwie der Grund
ist, warum vortragen immer noch so eine große Rolle spielt,
weil vortragen, bei vortragen
diese Geschichten halt, die
Schleifen, glaube ich, auch automatisch vektorisierbar sind,
bei C halt nicht, weil, und das ist halt ein Problem,
also man muss es dem Compiler halt sagen,
weil man da so Seiteneffekte haben kann,
dass das Ergebnis
der, eine Addition von zum Beispiel
zwei Vektoren kann halt wieder irgendwie
Einfluss nehmen auf was davor und es ist halt
ja,
sozusagen nicht garantiert, dass
man das halt vektorisieren kann
oder sonst irgendwie parallelisieren kann, sondern das kann halt
dann an, das kann halt dann einem die Programmlogik
kaputt machen, wenn man das halt nicht
weiß, dass das geht und in Vortragen geht das halt nur so
und daher, aber ja, keine Ahnung.
Also mittlerweile stimmt das, glaube ich, nicht mehr,
oder nicht mittlerweile, ich glaube seit 15, 20 Jahren.
Oh, das kann sein.
Man kann dem Compiler sagen.
Restrict Keyword, ich hoffe, ich mache das jetzt
richtig.
Muss mich wahrscheinlich schämen, dass ich das nicht kenne, was eben genau das sagt,
okay, also das klassische Problem ist ja,
wenn ich,
um das, was du vorhin beschrieben hast, nochmal zu,
in anderen Worten zu beschreiben, dass der
Compiler nicht weiß, wenn ich
A und B addiere,
dass eventuell das
B, was ich da addiere, vorher schon
in einem vorigen Durchlauf
anders beschrieben wurde, an einem vorigen
Element der eigentlichen Schleife, also ich habe irgendwie mein,
nehmen wir wieder Vektoren, also es könnte sein,
dass ich die erste Komponente zur ersten Komponente addiere und dann kriege ich
eine Komponente raus, es könnte aber sein, dass ich das in die
zweite Komponente des Vektors schreibe
und das auch tatsächlich möchte, warum auch immer,
wenn ich C programmieren möchte, ist das anscheinend,
und
der Compiler geht davon aus, dass er das nicht weiß
und dass er sich das möchte,
und deswegen optimiert er es nicht weg,
wenn ich jetzt aber sage,
dieses Array ist restricted oder restrict,
dann passiert
das nicht, also man kann
das mittlerweile in C lösen,
aber
das ist auch wieder eine Wissenschaft für sich,
wie man das dann genau,
was man alles optimieren kann und wenn man es richtig schnell haben will,
dann muss man sowieso ein Assembly schreiben und
immer mit
GoTo-Schleifen immer hin und her springen.
Ja,
aber Assembly doch,
so.
Nee, Assembly ist glaube ich noch schlimmer, da gibt es
keine GoTo-Schleifen, da gibt es...
Ja, springe zur Adresse oder sowas.
Genau.
Ja.
Also auf jeden Fall,
das ist einem, ja,
auf die Weise kann man dann Python in vielen Sachen nutzen
und jetzt wieder gesagt,
die schamlose Überleitung nächster Versuch
zu meinem eigentlichen Sachen, die ich gemacht habe,
oder zu Sachen,
die ich selbst gemacht habe, ist, dass es
in vielen solchen Simulationssachen,
das Problem ist, dass man es eben
nicht vektorisierbar machen kann.
Also, was in meiner
vorigen Arbeit sehr häufig aufgetaucht ist,
ist zum Beispiel, dass wir uns komplizierte
Netzwerke von, man kann sich jetzt Neuronen
vorstellen, angeguckt haben,
die irgendwie miteinander verknüpft sind und
dann hat man das Problem,
dass die Verbindungen zwischen diesen
Knoten zufällig sind und dann ab dem Punkt kann ich es
nicht mehr sinnvoll vektorisieren.
Oder man kann sich auch vorstellen,
man hat komplexe metabolische
Modelle, wie irgendwelche Spezies,
irgendwelche Stoffe in andere Stoffe
überführen und so weiter und das ist
eben auch komplex und nicht vektorisierbar
in vielen Fällen und das
muss man dann,
möchte man natürlich auch irgendwie effizient haben
und das Interessante ist, nebenbei ist
auch, viele
Leute haben sich vorher immer die
vektorisierbaren Fälle angeguckt,
weil sie ja so schön einfach anzugucken sind,
weil man sie ja schön einfach programmieren
kann und viele Phänomene
zeigen sich eben erst, wenn es nicht vektorisierbar ist
oder wenn eben diese interessanten Fälle passieren.
Und da habe ich dann eine Software
geschrieben, die gerade das
für den Nutzer macht, dass man
irgendwelche komplizierten Gleichungen hinschreiben kann,
die das System beschreiben und die werden dann
für den Nutzer unter der Haube kompiliert,
nicht vektorisiert
oder nicht vektorisierbar und
trotzdem schnell in Python.
Ja, das
kam irgendwie...
Wo gibt es das zu finden oder ist das alles
private? Das gibt es zu finden,
das ist schöne, freie Software. Ich habe sie
also es ist eigentlich drei
Software, das erste ist JIT-Code, das steht für
Just-in-Time-Compilation for Ordinary
Differential Equations.
Also Ordinary Differential Equations sind gewöhnliche
Differenzialgleichungen. Just-in-Time-Compilation sagt
eventuell dem neigten Hörer was, das ist
dieser Aspekt, dass wir
irgendeine Eingabe hat und die wird
dann unter der Haube für den Nutzer kompiliert.
Und das gibt es dann auch mal
für sogenannte Delay Differential Equations
und Stochastic Differential Equations, aber
ich glaube, das ist ein Detail, auf den wir
jetzt nicht rumreiten müssen.
Ja, und das ist
ein Werkzeug, was dann
sich herausgestellt hat,
gut, ich habe es, als ich das gemacht habe,
konnte ich das natürlich schon irgendwo absehen, dass das für viele
Leute sehr nützlich ist.
Insbesondere, als wir uns damals
von der Forschung damit beschäftigt haben, genau solche
Probleme zu lösen.
Und ja,
eine Sache, die vielleicht auch noch interessant ist, also man
kann jetzt natürlich sagen, der Nutzer gibt
mir irgendwelche Gleichungen und die werden umgesetzt.
Das ist in Python
auch mit SymPy, also
Symbolic Python, das wird jetzt wahrscheinlich
noch ein Exkurs.
Eine schöne Möglichkeit gibt es, die Gleichung einzugeben.
Also SymPy macht was denn? Also das ist jetzt
wieder tatsächlich spannend, was für die Heurer, die das
noch nie gehört haben, was macht das? Also normales
Rechnen im Computer macht man ja
klassischerweise mit Zahlen.
Eins plus zwei ist drei.
Aber SymPy rechnet
mit Symbolen, also ganz
abstrakten Objekten wie X.
Und das Schöne an SymPy ist, dass es
oder auch generell an symbolischem Rechnen,
das hat jetzt SymPy nicht erfunden,
aber das Schöne ist, dass
es dann exakt gewisse Sachen
lösen kann. Zum Beispiel, wenn man sagt X plus
X, steht da nicht X plus X,
sondern steht da 2X. Oder wenn
man sagt X minus X, dann
steht da nicht 10 hoch minus 16
oder so, sondern 0.
Und das ist dann auch exakt 0.
Und
ja, es hat sich herausgestellt, dass
diese Library gibt es und die hat auch
direkt Interfaces, um Sachen
in C-Code zu übersetzen, wenn man wirklich Sachen
schnell machen muss, was genau das ist, was ich
brauchte.
Und sie kann auch viele Sachen, die ihnen jetzt noch
für mich wichtig waren, automatisieren,
solche Ausdrücke analysieren, welche Symbole
tauchen da eigentlich auf,
damit rechnen natürlich und eventuell
sogar Gleichungen lösen, wobei das eine Sache ist,
die ich interessanterweise kaum mache.
Auch wenn man sich irgendwie viele Leute vorstellt,
dass das Wichtigste ist, wenn man so ein symbolisches Rechnen
hat, dass man tatsächlich...
Ja, genau. Man kann irgendwelche komplizierten
Gleichungen lösen. Ja, kann man,
aber man kann es auch als Werkzeug nutzen,
um ganz schnell
dumpfe Routineaufgaben durchzurechnen
und
es einfach als Eingabe-Maske
zu nutzen oder
einfach auch solche Ausdrücke zu analysieren und zu gucken,
okay, ja, welche Verben tauchen dann eigentlich
auf? Also nichts, was ein Mensch nicht
auch könnte, aber eben automatisiert.
Kann man die auch... Ich meine, wenn man das
eine gute Methode gibt, die anzugeben,
das ist auch vielleicht ein bisschen...
Kann man dann auch irgendwie sowas sagen wie
printe mal das nett raus
oder latech dafür oder so?
Das wäre natürlich auch...
Ja, also...
Weil das mache ich nämlich sonst immer total mühselig von der Hand
und muss mir dann die Syntax zusammenklauben irgendwoher.
Das ist ja scheiße, wenn ich irgendwie sowas sage,
wo der x plus x gleich x²
oder sowas, dass man dann tatsächlich
ein latech-Rechte irgendwie kriegt.
Ja, ja, der hat einen latech-Printer.
Ich habe damit noch
nicht viel gearbeitet, insofern kann ich dazu nicht so viel sagen.
Ich bin ziemlich... Also, er existiert definitiv.
Was man halt aufpassen muss, ist die Frage,
ob man das dann wirklich
so dem geneigten Leser
verkaufen möchte, wie es da ausgegeben wird.
Die Sachen sind halt so sortiert,
wie Sympy das gerade für richtig hält.
Also, man kann das
wahrscheinlich modifizieren, aber dann
macht man sich mehr Arbeit, als es selbst zu schreiben.
Aber auch solche
Sachen gehen ja. Man kann es auch ausgeben,
wenn man ja unbedingt möchte.
Aber was natürlich so die Sachen sind, die
in vielen Anwendungen gar nicht auftauchen.
In dem Zusammenhang von
diesem Gleichung, du hast nämlich irgendwann mal über so ein
Programm gesprochen, das heißt irgendwie LP-Solver
oder sowas? Linear Programming
oder sowas?
Lineare Optimierung. Da gibt es
einige Softwarezungen.
Ich meine, da bin ich jetzt wenig der Experte. Ich glaube,
das ist dann wieder ein Fall, wo es numerisch gelöst wird.
Also mit Zahlen. Das Interessante
hier ist, dass wir wirklich mit abstrakten Symbolen
rechnen. Das ist ein bisschen was anderes. Also natürlich,
ja.
Okay, vielleicht könnte man das dann kombinieren
oder sowas.
Ich weiß nicht.
Ich glaube, das Standardpaket für so
konvexe Optimierung ist CVX-Opt
oder so. Da habe ich schon mal ein bisschen was gemacht.
Es gibt dann noch so ein paar mehr
Pakete, ja. Also, aber
ich glaube, das ist nochmal eine andere
Richtung.
Wahrscheinlich, obwohl das auch wahrscheinlich
alles in dem Scientific-Umfeld
irgendwie so existiert.
Es gibt sehr viele Standardprobleme
mit sehr vielen Lösungen dafür und schon allein die ganzen Probleme
alle mit Namen hinzuführen,
da ist man dann eine ganze Karriere mit beschäftigt.
Ich weiß nicht,
ob das bei dir noch eine Rolle spielt, aber ich habe
da so mal früher, da gab es irgendwie sowas wie Sage
oder so. Das war so eine Distribution von ganz
vielen Dingen. Ja, das ist
das, was heute noch gibt. Ich habe keine Ahnung.
Es gibt es, glaube ich, noch. Ich habe auch damit gearbeitet.
Also, ja, also was ist Sage?
Ich kann sowas, also das ist,
es ist sehr komisch. Es ist
weitestgehend Python
und ist speziell
dafür gemacht, so ein Ersatz für so Sachen
wie, ja, ich glaube, Mathematiker
hauptsächlich. Mathematik
und so weiter zu sein. Es ist ein
großer Klotz, den man
sich kompilieren oder runterladen muss.
Der ist dann 600 Megabyte
groß oder so.
Und funktioniert weitestgehend wie
Python, aber nicht
ganz. Also es gibt so
eigenwillige Modifikationen,
sage ich mal, die dazu
dienen, das ansprechender zu machen.
Ob das jetzt gut ist oder nicht,
sei dahingestellt. Also zum Beispiel ist
das, der Zirkum-Flex-Operator
Potenzierung macht, statt Sternchen,
Sternchen. Also Sternchen, Sternchen macht auch noch Potenzierung,
aber man kann es jetzt auch mit...
Okay, das wusste ich gar nicht, dass sie das geändert haben.
Also solche Änderungen
sind da drin. Es sind viele Sachen automatisch
geladen als Pakete
in so einem
Standard-Namensraum. Also es macht so ein paar
Sachen, ja, wie soll ich sagen,
komisch kaputt, die...
Nicht kaputt, aber
so Sachen, die in Python eigentlich ganz gut sind,
dass man den Standard-Namensraum eben nicht mit
10.000 Dingen vollgemüllt hat und die nicht
einfach aus Versehen überschreiben kann
und weiß, woher
die Dinge kommen,
wurden
dann wieder zu nicht gemacht. Warum der ein...
Warum man jetzt den Zirkum-Flex-Operator unbedingt
brauchte, dafür...
Ja, ob das so wichtig ist, gut, ja.
Weiß ich nicht.
Also ich habe damit gearbeitet, es
kann ein bisschen mehr, oder konnte
zu dem Zeitpunkt ein bisschen mehr als Sympathie,
andererseits eben Sachen Gleichung lösen.
Was, wie gesagt, die Sache ist,
die ich nicht mache, auch wenn sie irgendwie alle warten,
sondern ich nutze es wirklich eben, Gleichung zu verarbeiten
und damit einfache Sachen zu machen.
Deswegen habe ich das letzten Endes
nicht gebraucht.
Und es ist, wie gesagt, dieser große monolithische
Klotz, den man dann immer auch komplett updaten
muss oder wo man, ja...
Es war nicht sehr
handhabbar, aber nicht schön, fand ich.
Wo wir, aber noch ein kurzer Rückbezug,
ist super zum Code-Golfen, wie gesagt,
alles wird in die... Viele Dinge sind im Standard-Nahmensraum.
Das heißt, eine Lösung, ein
Python-Programm kompakter zu
machen in Code-Golfen, ist dann
mach es in Sage.
Auch nicht schlecht, ja. Ist natürlich keine Python-Lösung
mehr, aber, ja.
Ja, interessant. Also,
okay, aber SymPy scheint auf jeden Fall
dann, wenn man irgendwie so, ja,
Gleichungen symbolisch verarbeiten möchte, dann halt
so das Mittel der Wahl zu sein. Was gibt es denn noch
an Bibliotheken oder Software,
die so regelmäßig benutzt
werden und da eine wichtige Rolle spielen?
Also, ich glaube, NumPy ist
klar, SymPy ist,
stellt einem viele
Simulations und Statistik und sonst
was Tools zur Verfügung. Nutze ich
zum Beispiel auch unter der Haube, um gewöhnliche
Differenzialgleichungen zu integrieren. Für andere
Differenzialgleichungen dann nicht mehr, weil das komplizierter
ist. Da habe ich dann meine eigenen
Integratoren implementiert.
Ja, dann, gut, es gibt
viele Sachen für Datenfahr,
also, um wirklich große Datenmengen
und vor allem Daten zu verwalten. Ich glaube,
ihr hattet schon mal eine Folge zu Pandas, insofern werde ich
davon nicht zu viel erzählen. Kann ich auch gar nicht,
weil ich jetzt in der Regel nicht so viel mit Daten
zu tun habe, aber die Daten, die ich habe,
sind einigermaßen überschaubar.
Ja, und dann eben ganz viele
Bibliotheken, die gerade genau die
Spezialanwendung machen, die man braucht.
Und da ist
eben das Schöne an Python, denke ich, dass
es relativ einfach
ist, erstmal irgendwas,
wenn es nicht effizient sein soll, zu schreiben
und zur Verfügung zu stellen,
insbesondere auch Dinge zu nutzen und sie natürlich
auch mit anderen Dingen zusammen zu nutzen, weil man
am Ende eine vollwertige Programmiersprache
dahinter hat. Was immer
das Problem mit anderen Sachen ist,
die, also,
ja, dass man eben
irgendwann an die Grenzen stößt,
dass man, gut, häufig braucht man
die Sachen natürlich auch nicht, häufig braucht man nicht
also, wenn ich jetzt, was ich leute,
die Matlab oder was auch immer
nutzen, ja, die wollen damit natürlich auch keinen
Webserver betreiben, oder
was auch immer,
aber, ja,
man kann halt auch immer,
also, ich glaube, der Vorteil ist eher nicht, also weniger,
dass man solche Sachen wie Webserver
oder so weiter nutzen kann, sondern dass man
sagen kann, das hier ist eine universelle Programmiersprache,
die lernen wir jetzt mal bitte alle, und dann
können wir dann machen,
was wir wollen, und wenn man allgemeine Programmierkonzepte
nutzt, kann man sie verwenden,
ob man jetzt, also, muss jetzt gar nicht in Python sein,
aber, wenn man so etwas wie
objektorientiertes Programmieren einmal verstanden hat,
kann man das dann eben für Simulationen
nutzen, oder, oder, oder.
Was ist so die häufigste andere Sprache, die du
findest, dann in deinem wissenschaftlichen Umfeld,
mit der du dann auch arbeiten wollen würdest, oder sagst,
das gehört auch dazu? Also, arbeiten wollen würden,
das ist ja da so hingestellt, ich, ich musste,
sage ich mal,
äh, einen Kurs
Datenanalyse in Matlab für Biologen
unterrichten, ähm,
das heißt, ja, das ist so die andere Programmiersprache,
mit der ich viel zu tun hatte,
ich habe es aber geschafft, das
weitestgehend Matlab nie anzurühren,
also, es gibt ja eine freie Alternative namens
Octave, das macht schon mal, so für
freundefreie Software, äh,
etwas erträglicher, aus dem muss ich mich dann nicht irgendwie rumschlagen,
das zu installieren, und, ja,
ich habe es tatsächlich weitestgehend
geschafft, diesen Kurs zu lehren, ohne
das jemals anzurühren, ähm,
und, ja, also,
ich würde auch mit der Programmiersprache nicht arbeiten,
weil es gibt Sachen, das,
das Schöne ist, ich habe es irgendwie so dann zwei Monate vor
dem Kurs mich hingesetzt und das gelernt, und
wirklich
jede Sache, wo ich denke, okay, wer hat
sich das ausgedacht, das kann doch nur zu tausenden von
Fehlern und sonst was Problemen führen,
führte auch zu tausenden von Fehlern und Problemen.
Ja, gut, wenn dann, ja, okay, super, ja.
Also, es, ja,
es ist, es passt wirklich zum Teil, wie die Voraussetzung,
ich meine, ich habe ja auch, ja gut, das kann man jetzt wieder nicht
vorführen, aber so ein Beispiel, wo man
an einer Stelle,
also, ich hoffe, ich erzähle es doch nochmal ein bisschen,
äh, Matlab hat die großartige Idee gehabt,
dass man das Leerzeichen als Element,
Trennungsoperator in Arrays nutzt,
oder Lüften, ja, ja, ja,
genau, also, statt
Kommata, wie in Python,
und man kann auch
Kommata nutzen, man kann auch Semikola nutzen,
das ist dann eine neue Zeile, aber man kann auch Leerzeichen
nutzen, ähm, und dann gibt es
jetzt das Problem, wenn ich jetzt was tippe,
wie, eckige Klammer auf, was steht für Array,
okay, soweit so erwartet,
5 Leerzeichen plus Leerzeichen
3, dann ist das natürlich
8, wenn ich aber eintippe
5 Leerzeichen plus, kein Leerzeichen
Achtung, 3, ist das natürlich
das Array, was 5 und 3 enthält,
weil das Leerzeichen ja der
plus 3, ja, und das plus
gehört dann halt zu der Zahl und sagt einfach nur,
das ist jetzt plus 5 und nicht minus, genau,
ja, und das
hört sich so noch okay,
kann man auch verstehen, das Problem ist, wenn jetzt die Arrays etwas
größer und komplizierter werden und da komplizierte Ausdrücke
drinstehen, was manchmal tatsächlich der Fall ist,
dann kann einem die Formatierung
dieses Arrays dann die Probleme machen, also,
ja, das war der Fehler, wo wir
wirklich eine halbe Stunde gesucht haben, um zu verstehen, was
da überhaupt passiert ist.
Man startet da drauf und denkt sich so,
ja,
die Spare ist halt jetzt voll davon,
das wurde halt in den
80er Jahren entwickelt,
1987, 1986, keine Ahnung,
und seitdem gefühlt nicht mehr
weiterentwickelt.
Und ja, so bedient es sich auch.
Das erinnert mich so ein bisschen an Python, wenn du das Tupel machen
übergeben würdest, dass du dahinter noch ein Komma machen würdest, weil da sonst kein Tupel
macht, wenn du die Klammer einfach, ein Element nur drin hast.
Ja,
genau, das ist noch so, ja,
aber das passiert halt andauernd.
Bäh.
Und dann gibt es so zwischendrin gibt es R, das ist schon
ein bisschen besser.
Also, erstens ist es frei,
zweitens ist es nicht ganz so
irrsinnig, es hält sich noch ein bisschen an Programmierstandards,
aber
ja, damit habe ich noch
nicht so viel zu tun gehabt. Und es gibt natürlich auch diverse
andere Sparen, es ist
relativ ein Kompass für Simulationen oder
Sachen, die schnell laufen müssen, ist Julia,
wo ich
dann mich immer noch frage, okay,
wieso brauchen wir jetzt hier noch Klammern,
weil die Python ja zum Beispiel abgeschafft hat.
Und insbesondere, dass es hier eine Sprache ist,
die sich in vielen Fällen, so wie ich es verstanden habe,
an Python orientiert. Ja,
aber sehr viel mache ich zur Zeit in Python und wenn
es dann schnell gehen muss, mache ich es eigentlich in C.
Also das sind so die Sprachen, mit
denen ich direkt zu tun habe.
Dann direkt tatsächlich als
C-Extension oder nimmst du sowas wie
Saiten und
wandelt das dann halt
um in C?
Ich mache es tatsächlich als C-Extension, weil ich es einfach gelernt habe
und mich da auskenne. Zum einen
und zum anderen jetzt, um auf meine eigene Software
zurückzukommen, da ist ja wieder gerade das Problem,
dass ich es dann wirklich möglichst schnell haben möchte
und wenn ich den Nutzer
dann Siphon-Code eingeben lasse, habe ich
nicht so viel gewonnen.
Ja, klar. Dann kann ich auch direkt
C-Code machen und dann kann ich auch noch viele Sachen nutzen,
die eben so
in Siphon nicht drin sind.
Also doppelt verlinkte Listen
oder so, glaube ich, würden
Siphon nicht funktionieren.
Also, dann mache ich es
schon einmal Hardcore und
kann dann wenigstens die Sachen, die
wirklich schnell sein müssen, auch
radikal optimieren.
Du sitzt dann
mit der Stoppuhr-Time mit und dann
guckst du es dann wirklich an?
Ja, also in einigen Fällen wirklich
ja, zum anderen
bilde ich mir ein, ein bisschen Erfahrung
zu haben, wie man Dinge schnell macht.
Also, in vielen Fällen
schreibe ich die Dinge dann hoffentlich auch direkt so, dass sie
schnell sind. Also hintereinander direkt
den Speicher, dass der Teig ja nicht so schnell oder so
viel hin- und herspringen muss oder was es dann so ist.
Ja, okay, auf der Ebene bin ich noch nicht, aber dass man sich halt
schon mal überlegt,
ja, das könnte
ich jetzt,
dass man eben
hier diese gewisse Schleifen gar nicht braucht
oder
mit Zeiger-Arithmetik arbeitet
oder eben sich überlegt, okay, jetzt habe ich hier noch
einen Funktionsaufruf und das kostet Zeit
und
wie kann ich das vermeiden oder wie kann ich hier die Suche
also irgendwelche Suchoperationen, ja,
Okay, okay, das hört sich tatsächlich an, das wird ja tatsächlich
von der schwachen Hardware, die er noch zur Verfügung
stellt, in den Forschungsinstitutionen
so ein bisschen abhängig, aber ich dachte, die wären eigentlich
schon weiter. Ja, aber das ist
abhängig von dieser Komplexität,
dieser unheimlich großen Berechnungen.
Naja, also die Hardware kann
ja nur so viel leisten, wenn ich,
also erstmal, weil ich ja durch die,
in vielen Fällen gehe ich, indem ich von
Python auf C gehe, hole ich
einen Faktor von 1000 oder so raus
bei mir. Das,
ja,
da will ich jetzt nicht mehr mit der...
Das klingt jetzt ziemlich viel. Ja.
Natürlich, also ich könnte das in Python
wahrscheinlich auch noch, wenn ich mich wirklich, wirklich stark
hinsetze, besser machen, dass es
nur noch ein Faktor 100 ist, aber
gerade solche Probleme habe ich eben.
Das muss man ja auch, also das
für viele andere Probleme gilt das übrigens nicht. Also ich habe
jetzt schon meine exotischen Spezialprobleme,
die ich und vielleicht noch, ja, so
ein paar kleinere Communities auf der Welt
haben,
wo das wirklich einen riesen Unterschied macht
und wo ich dann eben auch Software geschrieben habe, die diese
Unterschiede dann weg macht, aber
für Python-Nutzer rausholt,
die,
so jetzt war ich, ja,
was war nochmal deine Frage?
Ja, es geht so ein bisschen darum, also wie das dann hinterher
aussieht, also warum du diese Geschwindigkeit dann
über C rausholen musst, warum das nicht irgendwie,
weiß nicht, andere Ideen dafür noch...
Großrechnung. Einfach mehr Hardware, ja.
Genau, mehr Hardware draufschmeißen. Genau, also
natürlich kann man immer mehr Hardware draufschmeißen,
aber diese Hardware muss ja dann auch erstmal, also gerade wenn ich einen Cluster
habe, muss ich mich erstmal damit auseinandersetzen,
wie ich meine Sachen clusterfähig mache.
Und in vielen dieser Fälle ist es auch so, ich möchte
das mal eben schnell laufen lassen, sofort das Ergebnis sehen
und dann darauf basierend
weiterdenken. Also ich habe viele
Fälle, da habe ich eine Simulation, ich möchte
jetzt verstehen, was passiert da, ich drehe an dem
Parameter, ich möchte verstehen, was der Parameter macht und dann
möchte ich sofort das Ergebnis sehen.
Da hilft mir ein Großrechner nicht
viel weiter, wenn ich das
jetzt erstmal auf dem Großrechner lagen muss und so weiter und so fort.
und dann irgendwann am Wochenende nachts gibt es dann mal Rechenzeit, wo man das dann durchläuft.
Das zweite Problem ist, ja, auch der Großrechner kann die Sachen nur hintereinander ausführen.
Viele Sachen, also gerade die Simulationen, sind eben, ich habe ein großes System,
ich simuliere das über die Zeit, es baut alles aufeinander auf.
Ich kann einfach nicht diese 500 Zeitschritte parallelisieren,
denn die brauchen die ersten Ergebnisse vom vorigen Zeitschritt.
Also das heißt, da kann ich auch mit dem Großrechner unbedingt viel rausholen.
Was ich natürlich machen kann, ist, ich kann diese ganzen Simulationen, die ich habe,
sage, okay, ich möchte jetzt 500 Simulationen laufen lassen, die kann ich dann parallelisieren.
Aber da bin ich natürlich aufgerufen, wenn es schneller geht,
weil wenn es schneller geht, kann ich eben 500 Simulationen laufen lassen statt nur 5.
Und ja, das macht halt in vielen Fällen auch schon wieder einen schönen Unterschied.
Also das klingt tatsächlich so, also wäre das ein großer Vorteil.
Also ich hätte jetzt nicht gedacht, dass man irgendwie das 100-fache da auch mit rausziehen kann,
weil ich hätte irgendwie gedacht, dass man die Sachen in Python dann irgendwie mit Python oder was,
dann irgendwie trotzdem so hinbiegt, dass das...
Ja, ich weiß nicht, wenn man sich jetzt hinsetzt und das mit Python hinbiegt,
dann hat man eventuell, keine Ahnung, Faktor 10.
Das hängt so ein bisschen vom Problem ab.
Aber ich habe, also ich habe wirklich Probleme, da habe ich, also was ich gemacht habe,
ist, weil ich bei diesen Sachen mache, ich schreibe immer erst die Sache komplett in Python.
Wenn ich meine eigenen Sachen baue, mache ich mir einen Kern aus Python,
von dem ich weiß, was er tut, der lesbar und so weiter ist.
Und wo ich erstmal lerne, den Algorithmus so ein bisschen zu optimieren und wie speichere ich Dinge
und so weiter und so fort.
Und dann gehe ich hin und schreibe das Ganze nochmal neu in C.
Was auch sehr schön ist, dann habe ich irgendwie eine Testmöglichkeit.
Ich habe einfach meine zwei Kerne, ich bombardiere die mit zufälligen Eingraben
und gucke, ob sie das gleiche tun.
Aber von dem, dafür habe ich halt dann auch einen guten Vergleich,
weil ich habe das einmal in Python geschrieben, genau dasselbe.
Vielleicht dann, ehrlicher gesagt, auch nicht optimiert darauf, dass es besonders schnell ist,
sondern eben auch, dass es lesbar ist und vergleichbar und dass ich verstehe, was es tut
und dass es gut testbar ist und so weiter und so fort.
Das muss ich dann schon eingestehen.
Aber es ist trotzdem, je nach Aufgabenstellung wirklich, sind es solche großen Faktoren.
Mit Python, ja, wenn ich das jetzt in Python programmieren könnte oder wollte
oder meinen Nutzer das vermuten würde, dass er das in Python programmiert,
ja, okay, dann wäre es vielleicht nur noch ein Faktor, keine Ahnung, 10, 5, was auch immer.
Aber dann geht natürlich auch sehr viel Programmierzeit drauf.
Wenn du jetzt sagst, so deine Nutzer, das heißt, du stellst tatsächlich so ein Programmierinterface
bereit und deine Nutzer machen ihre Dateneingabe oder die Schnittstelle dafür noch komplett selber oder also irgendwie...
Also meine Nutzer sind Programmierer.
Ja.
Das muss ich auch immer unterscheiden.
Das ist immer sehr lustig, wenn man dann auf diesem Python-Treffen sitzt mit allen möglichen Leuten,
die aus dem Web-Bereich und so weiter kommen und erstmal deren Nutzer natürlich keine Programmierer sind
und sich dann Gedanken und man ganz andere Vorstellungen darauf hat, wie man eine Fehlermeldung schmeißt.
Meinen Benutzer schmeiße ich einfach eine Fehlermeldung und die können die dann hoffentlich auch lesen.
Naja, manchmal.
Ja, also meine Nutzer sind Programmierer und die brauchen jetzt kein grafisches Interface zum Glück.
Du visualisierst dann auch gar nichts von den Lösungen irgendwie, sondern das schmeißt du dann irgendwo rein und dann kann man...
Ja, das kann der Nutzer dann mit einem Plotprogramm machen, das ist der Plotprogramm der Wahl oder was auch immer.
Gut, meistens ist es ein Matplotlib.
Aber das ist ja in modularer Denkweise nicht meine Verantwortung, da irgendwas zu visualisieren,
sondern mir geht es nur darum, die Lösung zu programmieren.
Also tatsächlich Python und C dann parallel und dann hast du dann eine schnelle und eine hübsche und effektive Lösung, deine Probleme so zu behandeln.
Und ich würde sagen, das, was du da machst, das hast du jetzt gesagt, das ist irgendwie sehr speziell auf so einer Insel.
Das kannst du auch übertragen oder könnte man übertragen auf andere Wissenschaften und andere Anwendungsfälle so ohne weiteres oder ist das...
Also so klein ist die Insel nicht, das Problem gewöhnliche Differenzialgleichung oder retardierte Differenzialgleichung und so weiter und so fort zu lösen.
Das ist jetzt...
Betrifft schon eine gewisse Menge, also nicht schon nicht wenig Leute, also ich könnte jetzt, es tut mir schwer eine Zahl abzuschätzen, wie viele Wissenschaftler und andere Leute sich mit so einem Problem beschäftigen.
Wir stinken halt nicht angegen die Leute, die partielle Differenzialgleichung machen, das sind diese klassischen vektorisierbaren Fälle,
was man so sagt, wenn Leute Wärmeleitungen simulieren oder irgendwie physikalische Verformung und solche Sachen, die machen alle partielle Differenzialgleichung.
Ja, also die Insel ist nicht so klein, aber sie ist kleiner als vielleicht andere größere Inseln, was jetzt wahrscheinlich keine sinnvolle Aussage ist.
Naja, also ich meine gut, ich kenne jetzt vor allen Dingen halt den ganzen Data-Science-Bereich da auch, das wissenschaftliche Umfeld, da gibt es halt, also mit Differenzialgleichung hat man da eigentlich nie so wirklich zu tun, auch nicht mit symbolischen, da wird immer eher so, da nimmt man halt, da packt man die große GPU aus und dann versucht man damit das Problem zu lösen.
Nee, aber das ist ja auch ein ganz anderer Ansatz, bei der heißt es nicht, ich habe Daten und ich will sie verstehen, bei Simulationen geht es darum, ich habe eine Idee, wie Sachen funktionieren, ich möchte jetzt mal gucken, was eigentlich passiert, wenn ich diese Idee in die Daten umsetze, ganz doof gesagt, weil ja, ich habe mein Modell und jetzt lasse ich es mal laufen.
Ja, aber da würde mich eigentlich auch mal interessieren, wie ist das denn, wie kann man das denn dann verifizieren, ich meine, woher weißt du, dass deine Simulation tatsächlich irgendwie das liefert, was du jetzt bekommen hättest, wenn du 500...
Also ich meine, das ist eine große Frage, da gibt es natürlich, also das ist dann wirklich, dass man sagt, okay, wir machen jetzt mal den gleichen Fall und lassen es laufen und vergleichen das wirklich, jetzt mit der Nährflüssigkeit, ich habe jetzt erstmal die Frage auf eine ganz andere Weise verstanden, die vielleicht auch interessant ist, nämlich, wie teste ich eigentlich solche Software?
Ja, zu bestimmen, was eigentlich rauskommt, das war auch sehr spaßig, insbesondere ein Fall, den ich jetzt noch nicht so angeschaut habe, das sind dann stochastische Differenzialgleichen, das ist so, ja, werden wir jetzt gleich, ich packe noch Zufall drauf und dann muss man, ja, dann gibt es ja noch nicht mal eine richtige Lösung, also jede Lösung, die ich prinzipiell kriegen könnte, könnte, oder die ich sehe, könnte richtig sein, für den richtigen Zufall, ich kann nur sagen, okay, diese Lösung ist jetzt eher unwahrscheinlich oder diese Lösung ist eher wahrscheinlich, aber ich kann ja gar nicht mal sagen, dass es eine
falsche Lösung anhand einer Lösung, ich kann also
Du müsstest ja vor allem erstmal die Verteilung kennen, deiner Zielfunktion,
damit du weißt, ob das wahrscheinlich ist oder nicht.
Genau, das, ja, genau, das heißt, ich kann
einfach nur, ich kann nicht mal eine Aussage über eine Lösung meiner
Software machen, ich kann nur eine Aussage über ein Ensemble
von Lösungen, also tausend Lösungen machen
und, ja, das sind dann
die sehr, sehr langlaufenden Tests, wo ich
erstmal tausend Lösungen berechne, dann irgendwelche
statistischen Verfahren darüber.
Ja, aber ich finde das jetzt das Interessanteste, ne, also jetzt
von meinem Gusto her, wenn
du so eine Verteilungswolke irgendwo hast,
die nähert sich ja dann oder verdichtet sich
ja dann an den Stellen, wo dann
doch, ne, die meisten Experimente
irgendwo in derselben Richtung
ausgehen und da hättest du, finde ich, so
die höchste Treffgenauigkeit, als wenn du jetzt einfach so
dieses Modell hast und sagst, oh, da kommt das
Also ich verstehe jetzt ohne Statistik,
ne, bei so Simulationen gar nicht, was dabei
rauskommt, also wie die Validität einzuschätzen
wäre. Wenn du jetzt sagst, du machst jetzt der Test
dazu, dann finde ich das sehr spannend.
Sorry, ich will jetzt vom Software-Test.
Ja, klar, aber ich meine, klar, aber
das hängt ja irgendwie zusammen, ne,
also der Software-Tester muss ja zwar dann
klar, dann muss das Programm funktionieren, weil sonst ist der Test ja Quatsch,
aber der ist ja dann auch irgendwie
die Basisvoraussetzung dafür, dass
das Modell, was du dir ausgedacht hast, dann wenigstens
gerade läuft.
Ich bin mir nicht sicher, ob ich das richtig verstanden habe, also ja,
natürlich muss das,
also einerseits muss das Modell die Realität,
am Ende wollen wir, dass das Modell die Realität beschreibt, klar,
aber die erste Schwierigkeit ist erstmal,
ich habe jetzt irgendwas programmiert, was mir
mein Modell löst, was es
behauptet und die Frage ist, macht es
wirklich die richtige
Lösung? Ja, ja. Also einfach wirklich nur
einen Software-Test schreiben, also einfach nur zu gucken, ich stecke
das rein, kommt das Richtige raus?
Und das ist halt, wenn es stochastisch ist,
ein bisschen blöd, weil dann kommt halt jedes Mal
was anderes raus. Genau, es könnte alles richtig
sein, also das ist so wie
Zufallszahlen-Generat-Testen, geht je nachdem
noch, weil ich einfach ganz
viel, ganz schnelle Zufallszahlen ziehe und dann weiß
ich genau, okay, die müssen dann vielleicht gleich verteilt sein
oder so, aber
bei, ja, dem Problem ist es dann
eben nicht so einfach, also letzten Endes sind da ganze
wissenschaftliche Arbeiten daraus entstanden, nur
auf die Frage
wie, also aus der Frage heraus, wie teste
ich das eigentlich richtig und so eine Differenz,
wo wir feststellen, okay, das, die
Theorie, die wir haben, zu dem, was da rauskommen muss, stimmt
nicht mit dem überein, was da rauskommt
und können wir das... Entweder stimmt die Theorie nicht oder das
Modell ist falsch. Ja, oder
das ist wohl ein Fehler, ne? Ja, genau.
Also am Ende haben wir festgestellt,
also erstens, ja, die
Theorie könnten wir erweitern, das haben wir auch gemacht und
da sind dann ganze Arbeiten und Paper
daraus entstanden, das war gut, also
Software-Testen ist was Gutes, produziert wissenschaftliche
Paper.
Die andere Sache ist, wir haben auf die Weise auch tatsächlich
Fehler im veröffentlichten Algorithmus
gefunden, wo
irgendwie in der großen Tabelle, die diesen Algorithmus
beschreibt, also solche Algorithmen werden mit Tabellen
beschrieben, ist leider so, dann irgendwo ein
Vorzeichenfehler war.
Den
haben wir damit gefunden und das, also insofern
ja, und hätten wir wahrscheinlich
sonst auch nicht gefunden, wenn wir uns diese Mühe nicht gemacht hätten
und dann hätten wir jetzt wahrscheinlich eine ganze Menge
fehlerhafter Rechnungen und wüssten es nicht
was.
Wir würden alles für bare Münzen verkaufen, wir würden damit
Geld verdienen und wir würden sich irgendwelchen großen
Papern veröffentlichen, alle Leute würden nicht zujubeln
und irgendwann würde einer sagen so, hm.
Ja, oder halt auch eben nie.
Und das ist halt, dass man noch viel mehr Sorgen
machen sollte, dass es eben einfach gar
nicht schief geht, sondern die Leute einfach...
Das passiert in der Wissenschaft leider viel zu häufig.
Ich denke auch, dass das oft passiert, ja.
Ja, die Erde ist vielleicht doch anscheinend
bei einem, man weiß es nicht so genau, ja.
Ja, nee, also ganz so schlimm ist es
nicht, aber, ja. Naja, also so ein paar
Paradigmen wechseln, bevor die mal passieren,
da muss ja so ein bisschen schon Arbeit passieren,
muss sich irgendjemand aus dem Turm stellen und was runterschmeißen.
Aber ihr verwendet auch
ganz normal PyTest oder so zum Testen
oder habt ihr da noch
speziellere Kniffe, die man da benutzen muss,
wenn man das irgendwie in den Griff kriegen will?
Also nee, als ich angefangen habe, habe ich glaube ich noch mit Unitest
gearbeitet. Achso, ja. Schande über
mein Haupt, ich weiß.
Wenn ihr jetzt gerade irgendwie lustig über
Tests nochmal einsteigen wollt, dann können wir gleich gerne noch ein bisschen
länger drüber reden, weil da sind noch einige
Fragen eingetrudelt.
Das ist vielleicht auch ein ganz anderes Thema, aber
nee, also
ich glaube, die
klassischen Software-Test-Tools,
das ist nicht so das Problem, die zu nutzen,
wenn man sie nutzen kann.
Das Problem ist eher die Frage, ich habe eben
so eine, sowas wie
eine stochastische Sache
und kann nur eine Aussage über das Ensemble
machen, wie mache ich das eigentlich?
Das ist dann eher eine wissenschaftliche Frage, als
eine Software-Frage oder
die Frage, eine Software-Lösung zu finden.
Ja, du musst mal so Stichproben ziehen.
Du musst ja gucken, ob die Stichproben irgendwie der
erwarteten Verteilung...
Ja, genau, aber das ist
nicht einfach, je nachdem, was man hat.
Die andere
Problematik,
eine andere Beispielproblematik, wenn wir gerade dabei sind,
ist sowas wie, ich habe ja gesagt,
ich habe eine symbolische Eingabe, ich übersetze das
in C-Code. Was ist jetzt
eigentlich der richtige C-Code? Also ich kann ja nicht
einfach sagen, okay, ich möchte genau diesen
C-Code haben, der ist dann richtig,
sondern ich könnte ja auch einfach mal, weiß ich was,
A plus B oder B plus A ist in der Stelle
gleich, in den allermeisten Fällen.
Wie entscheide ich,
was da richtig ist? Das kann ich
eigentlich nur machen, indem ich es ausrechnunglich
vergleiche.
Ein solches Späßchen.
Also das heißt, die Equivalenz von deinen
Experimenten ist schon fraglich dann.
Also wenn du die Experimente durchführst,
dass sie halt gleich durchgeführt worden sind.
Ich meine nicht bei Experimenten, wir sind jetzt bei Simulation.
Ist Simulation kein Experiment?
Also okay, Entschuldigung.
Ja, ist auch etwas, was ich gerade eben
Experiment genannt habe.
Als mathematisches Experiment beschrieben habe.
Ja, das könnte fraglich sein, aber es geht jetzt erst mal darum,
macht meine Software das, was sie soll.
Also ich kann jetzt eben nicht hingehen
und eine kleine Einheit von einem Code
Produktion, also Code-Drucker
oder wie die heißen, also einfach
eine Übersetzung von Symbolen in Code,
die ich zum Beispiel nutze, kann ich,
es ist gar nicht so einfach, die zu testen, da ich eben keine
ganz klare Aussage habe, was
da rauskommen muss. Da ich eben nicht
weiß, in welcher Reihenfolge zum Beispiel
sind jetzt diese fünf so
Mandeln in einer Addition.
Da gibt es keine Vorschrift,
was da richtig ist. Und wenn ich,
kann ich natürlich mich drüber hinwegsetzen und
sagen, ich zerteile das jetzt komplett und
mache da irgendwie einen Symbolbaum oder was auch immer,
aber dann muss ich es natürlich wieder zerlegen, ist auch nicht schön.
Also ein Problem mit der ganzen Software war, dass
es eigentlich nicht sehr einfach zu testen war.
Okay.
Und aber dafür habt ihr was veröffentlicht, wo sagt ihr, hey,
das ist so ein voller Fortschritt, das sollte man so tun.
Also nicht zum Testen,
also ja doch, nee, also das habe gar nicht ich gemacht, das haben
nur andere Leute, haben darauf aufgebaut und haben
wir haben, also
die Geschichte ist eigentlich, wir haben
ich habe dieses Problem entdeckt und dann haben wir
irgendwann uns hingesetzt und
eine Bachelorarbeit aufgesetzt
und machen lassen zu dem Thema,
okay, vermessen wir das doch mal bitte,
verstehen wir das ein bisschen besser und
hatte dann auch noch andere Anwendungen, nicht nur den Test,
muss man dazu gestehen. Und ja,
das war, wir haben, da wurden
neue Erkenntnisse gewonnen und
veröffentlicht. Aber das war
gar nicht so, also das war nur etwas, was ich, das ich
angestoßen habe, insofern kann ich dir jetzt auch recht
so viel zu erzählen.
Ja, klingt sehr spannend, also dass man
tatsächlich so echte Experimente
irgendwie begleitet und simuliert
mit Python oder
halt ein bisschen C, aber halt dann so in die Zukunft
damit ein bisschen gucken kann, was könnte denn dabei rauskommen
oder welche Lösung für
wirklich Probleme, also weiß nicht, ob das nur Medikamente
angeht oder kann man
andere denken, genau, damit
bauen kann, das ist natürlich schon spannend.
Also das ist das ganze Feld, so dynamisches System,
wie wir vorher sagen, ist
sehr vielfältig in Anwendung.
Was ich vorher gemacht habe, waren
Probleme mit,
oder eine Frage, mit der sich meine frühe Arbeitsgruppe
beschäftigt hat, war, wie sagen wir,
epileptische Anfälle voraus, können wir das
eventuell machen?
Oder wie sagen
wir Bevölkerung, plötzlich
Bevölkerungswachstumsheraus,
das Thema meiner, also meine
vorigen Forschungen war, wie sagen wir, extreme Ereignisse
heraus, oder verstehen, wie passieren extreme
Ereignisse, und extreme Ereignisse kann dann so sein, wie
epileptische Anfälle, kann dann auch so was sein, wie
Überpopulation, Artensterben, Erdbeben,
ähm,
all solche verschiedenen Dinge, und
Was war das Ergebnis? Gibt es so
einen entscheidenden Punkt,
den man irgendwie erreichen kann, die dann bestimmte Faktoren
identifizierbar sind, die sagen so,
hey, jetzt macht's gleich peng?
Äh, nee, so weit
sind wir leider nicht gekommen.
Also das Ergebnis war dann so was,
wie wir können, wir haben einen neuen Mechanismus
gefunden, wie solche Sachen entstehen können
in der Dynamik eines Systems.
Den können wir in einigen Fällen, hilft uns das ein bisschen
was vorherzusagen, aber insbesondere können
dann die Leute, die ein konkretes System haben,
mit einem konkreten System was vorhersagen, eventuell
besser verstehen, wie sie das machen.
Okay. Das ist leider nicht sehr
befriedigend für, aber
das ist eben Grundlagenforschung.
Das ist Wissenschaft.
Ich fürchte, das ist halt irgendwie so eine der
der blöden Eigenschaften, die da halt
so dabei sind, dass das extrem
seltene Geschichten halt, sondern
schlecht Statistik zu machen kann, weil es einfach nicht
so häufig auftritt, aber wenn die halt,
äh, stark genug sind, dann haben sie halt einen großen
Einfluss auf das, was passiert und dann ist es halt blöd.
Also Statistik ist die eine Sache und
die Faser können wir jetzt allein mit Statistik
vorhersagen. Wahrscheinlich nicht. Wir müssen verstehen, was
passiert da eigentlich. Ja.
Und wie kommt es eigentlich dazu?
Und dann geht das überhaupt. Das kann ja auch sein,
dass man das einfach gar nicht... Und was ist wichtig?
Also, und jetzt mal vielleicht auch nochmal
ein Beispiel, wozu Simulationen gut sind.
Was jetzt immer wieder die Frage war, ein
früher Kollege von mir, der hat
bei der ersten, hat wahrscheinlich die erste
Simulation geschrieben, die macht,
was aussieht wie ein epileptischer
Anfall. Ob es jetzt irgendwie
wirklich das damit zu tun hat, müssen wir dann nochmal
untersuchen. Aber was nicht
darauf basiert, dass wir an irgendeinem Kopf drehen und
irgendeinen Parameter ändern, also irgendwas,
irgendwelche Neurochemikalien oder so
im Gehirn ändern, sondern wir können
eine einfache Simulation machen, die macht einen epileptischen Anfall,
ohne dass wir was ändern müssen.
Was dann einfach, okay, was bringt
das Ganze jetzt? Naja, die
Leute, die ein paar Ebenen
in der Anwendung höher sind,
können jetzt hingehen und sagen, okay,
wir haben uns bisher immer darauf gestürzt, was ändert sich
da chemikalisch und so weiter, könnte
es vielleicht was anderes sein? Könnte es vielleicht
einfach sein, dass das Gehirn anders
verknotet ist, weil die Neuronen anders
verbunden sind in Gehirn, die epileptische
Anfälle produzieren und das ist das Problem.
Und die Frage ist
noch offen, aber solche Ansätze
stößt man dann eventuell mit Simulationen hervor.
Ja, fühlt man, dass man heilen kann,
dass man dafür sorgt, dass man irgendwie den Menschen besser geht.
Genau, das ist natürlich das fairen Ziel,
aber ja, leider ist es
ja, ich suche
es einfach, ja. Ja, ich weiß
halt, kann man aus diesem Elfenbeinturm, wenn ich das
mal so nennen darf, irgendwie so runtersteigen, wieder auf die
Straße und mit beiden
Händen wieder so das ausschütten, was man da so
fabriziert. Ja, ich meine,
manchmal passiert das ja einmal, sonst hätten wir ja keine Computer
und... Ja, genau, also manchmal ist da
jemand, so ein Magier irgendwo so in den Turm
und macht dann da bumm oder diese Kugel
leuchtet und auf einmal der Turm fängt an zu leuchten und dann
gucken alle, oh, was ist das denn? Und dann, ah,
guck mal hier, ich habe was Schönes gefunden.
Ich glaube, ja, aber ich fürchte, das kann man nicht wirklich
weil, ich würde nicht fürchten, dass es bei Wissenschaft noch
schlimmer als bei Firmen oder Startups
ist. Es ist ja auch schon irgendwie so, dass man das eigentlich
nicht wirklich voraussagen kann,
weil, naja, es hängt halt davon ab, wie sich
die Zukunft entwickelt, die lässt sich schon mal nicht so gut voraussagen
und dann sind so viele Faktoren dabei,
die man nicht unter Kontrolle hat, dass
und bei Wissenschaft
hast du jetzt, das ist ja noch übler, du weißt ja,
also... Das ist alles Alchemie.
Naja, oder so ein bisschen Glück
auch. Also ich meine, natürlich ist es so, du kannst kein Glück
haben, wenn das nicht auch irgendwie funktioniert oder wenn du nicht
das Richtige tust, aber ob das, was du da tust,
jetzt irgendwie eine sinnvoll
erfolgsversprechende Geschichte ist oder nicht,
das hast du halt, würde ich sagen, zum großen Teil
gar nicht unbedingt unter Kontrolle.
Also andersrum, wenn wir es unter Kontrolle hätten,
müssten wir es nicht machen. Wissenschaft geht ja darum,
irgendwie, dass wir neue Sachen herausfinden
und dass wir die Frage beantworten,
funktioniert diese Methode oder so und wenn wir wissen,
ob diese Methode funktioniert, müssen wir es nicht machen.
Jaja, ich finde das immer wieder beeindruckend, wie man dann,
also es ist ja schon, das hat ja so ein leicht,
also ich würde
da leicht in Defizitismus verfallen, glaube ich.
Man muss ja da sehr motiviert sein, das dann zu tun,
wenn man sich im Grunde
ausrechnen kann, dass man
wahrscheinlich Pech haben wird und das heißt,
man gibt sich viel Mühe, aber es kommt nichts mehr raus.
Obwohl, auf der anderen Seite, das, was man tut, macht natürlich auch
Spaß.
Ja, aber gut, es ist schon dieses klassische
Klischee, dass die Hauptsache, die man
mit einer Promotion kriegt,
ist eine riesengroße
Enttäuschungsresistenz
und
das ist so.
Was war das?
Das ist, ich verwende Apple
und
es kommuniziert untereinander
und mein Telefon hat gerade meinem Kugel gesagt,
das war Klingeln, was manchmal gut ist,
in diesem Fall war es nicht so toll.
Manchmal kümmert sich Jochen auch
vorher darum, dass er das alles abstellt.
Ja, diesmal habe ich es irgendwie verpennt.
Ich glaube, ich mache das gerade mal.
Die ganzen wissenschaftlichen Probleme, wir kennen die Antwort
doch eigentlich schon alle, oder?
Ja, kennen wir die?
42.
Ach so, stimmt natürlich.
Ja, aber das ist halt,
es ist da so ein
frustrierendes Potenzial dabei, das glaube ich
auch immer, wenn man
guckt, was die Politik da auch mal machen möchte,
die versucht das dann zu ignorieren, da macht man so
Forschungsprogramme. Ich habe da von einem gehört,
es gibt ein großes Forschungsprogramm,
man macht das dann so, man glaubt,
was war das irgendwie, man kann
irgendwie Chips bauen, also normalerweise
belichtet man irgendwie Chips
sozusagen top-down irgendwie, man überlegt
sich eine Architektur, könnte man das nicht auch umgekehrt
machen, also man hat irgendwie so eine Lösung,
irgendwie auch für, keine Ahnung, irgendeine
Art Nährflüssigkeit, ja, und dann
sorgt man dafür, dass die richtigen Bedingungen
existieren und dann
entstehen da Transistoren oder was auch immer,
Schalter, man braucht gerade quasi dann so bottom-up
automatisch, das wäre ja voll gut, wäre viel billiger.
Bräuchte man da
nicht so super ultra-Reihenräume
und diese ganzen teuren
Gerätschaften und da hat man irgendwie,
die Idee hört sich
wirklich total super an und dann gab es
irgendein großes Forschungsprojekt,
das da, wo da auch
hundert, das sind, glaube ich, hunderte
Millionen irgendwie Euro reingegangen
und das Problem ist natürlich, wenn jetzt so viele
Leute daran arbeiten, also das lief
dann ganz lange und irgendwie musste immer
noch ein Doktorand, ein Armer,
der musste dann geopfert werden, diesem Drachen,
der sagte, der muss tatsächlich
an diesem Problem noch arbeiten, damit man sagen kann,
dass man an diesem Problem arbeitet, aber in Wirklichkeit
wussten alle schon seit einigen Jahren,
naja, das funktioniert aus prinzipiellen Gründen
grundsätzlich nicht, aber man kann ja auch nicht sagen,
es funktioniert nicht, dann kriegt man kein Geld mehr, ist auch schlecht.
Also haben halt die anderen inzwischen,
also was anderes gemacht.
Heimlich.
Ja, okay.
Das große Problem ist, dass man einfach
nicht mal sagen kann, okay, wir haben
herausgefunden, es funktioniert nicht und hier
ist der Grund. Das ist manchmal ganz schön
haarig, also ich komme ja aus der VWL
eigentlich und da waren dann so Experimente schon
problematisch, weil
da hat man irgendwelche Modelle gebaut, die dann irgendwelche
Prognosen gemacht haben und dann ging
dann vor allen Dingen sowas wie der internationale
Währungsfonds dann hin und hat dann diese
Modelle ausprobiert,
mit irgendwelchen Entwicklungsländern
und so, guck, klappt das mal? Und das hat dann ab und zu mal
dazu geführt, dass dann irgendwie so in so einem Land das Gesundheitssystem
dann zusammenbrach oder sowas.
Ist das vielleicht so ein Mittelgut? Und das war aber eigentlich
das Modell hat dann eigentlich
vorhergesagt, das hätte gut funktionieren sollen. Die haben sich dann alle
so ein bisschen die Haare gerauft, die wollten eigentlich auch, dass
dem Land eher gut geht, also es war jetzt nicht nur irgendwie so Weltbankdruck
oder so. Und dann haben die gesagt, Mist, das haben die jetzt
ja falsch gemacht, haben es beim nächsten Mal
anders ausprobiert. Und dann, ja,
das ist halt das Problem, wenn du halt das so was
ausprobierst auf Systemen, die auch heterogen sind
und ein bisschen chaotisch reagieren und
du weißt nicht genau, was muss denn da jetzt eigentlich genau tun?
Und das ist schon, glaube ich, nicht so einfach.
Ja, und noch schon was ist, wenn man das System
selbst beeinflusst durch die Vorhersage.
Also das klassische Beispiel ist, ich kann Aktienkurse vorhersagen
und es gibt immer irgendwelche Leute, die
irgendeine neue Methode entwickeln, um
Aktienkurse vorherzusagen.
Du musst das nur gut verkaufen und die antitypische Strategie
fahren.
Ja, oder beziehungsweise,
wenn sie die dann veröffentlichen,
dann funktioniert es plötzlich nicht mehr.
Ja, genau, aber alle, die vorher sagen,
das ist doch super, dann kannst du antitypisch fahren.
So was raus, raus.
Ja, das ist, ja.
Schon interessant.
Ja, ja.
Ich finde das halt sehr, sehr spannend, wenn man
so Sachen digitalisiert, welche Parameter man überhaupt
in diese Modelle einbauen müsste und wie man
es schafft, so
Reagenzglasbedingungen, selbst wenn es jetzt nur
in Anführungszeichen so ein Glas mit einer
Kultur auf einem Fensterbrett in der Sonne
ist.
Hui.
Wobei, da musst du sagen, also
ich bin auch eher die, es gibt ja, also
es gibt zwei Spezies der Modellierung,
Arten der Modellierung. Der erste ist
der Ansatz, wir wollen es wirklich möglichst exakt
und so weiter hinbiegen, um wirklich
die genaue, perfekte Vorhersage für dieses Glas
auf der Fensterbank zu treffen.
Der andere Ansatz ist, okay,
wir können das eh nicht,
sondern die Frage ist,
okay, wir sehen dieses Phänomen oder so was
oder was sind die minimalen Sachen,
die wir brauchen, um dieses Phänomen zu kriegen. Also das, was ich eben
beschrieben habe, was ist das minimale System,
was uns sowas produziert, wie in einem epileptischen
Anfall oder irgendwas, um daraus
irgendwie zu verstehen, was sind eigentlich die Zutaten,
die ich brauche. Und
ich gehöre eher zu der letzten Spezies,
weil es,
ich denke, ja, man kriegt eher
interessantere Erkenntnisse und es ist
in vielen Fällen auch wahrscheinlich der
gesündere Ansatz.
Sozusagen, weil man
da dann immer weiß, was man eigentlich getan hat
sozusagen und das bei,
Phänomenen, die man beobachtet, da
sieht man halt nur, was man halt sieht.
Ja, man kann es auch im Zweifelsfall einfach mal machen.
Also ich mache mir gar nicht
die Illusion, das Gehirn komplett
zu demolieren zu können. Das kann ich nicht, das kann niemand.
Und, na gut, es gibt ja jetzt gewisse
Projekte, aber
ja, ich mache mir diese Illusionen
gar nicht, aber ich mache mir, eventuell kriege ich
es hin, einen Teil davon,
mal ein Konzept zu verstehen,
welche Auswirkungen gewisse Strukturen haben
oder, ja.
Das ist so die
größte Hoffnung da.
Ja, aber wie ist
das eigentlich mit dem
Wissenschaftsbetrieb und der
Digitalisierung? Das ist jetzt alles
inzwischen, ich meine,
im Grunde sollte man ja annehmen,
wenn das Steuergelder sind und
eigentlich ja schon auch irgendwie so
gemeinwohlmäßig
ausgerichtet sein sollte
oder allen zugänglich sein sollte, vielleicht zumindest,
die das bezahlt haben, dass dann halt
irgendwie alle Forschungsergebnisse digital veröffentlicht
werden und dass das halt irgendwie
ja,
keine Ahnung,
ich könnte mir das so vorstellen, dass halt
die Wissenschaft so ein bisschen funktioniert, wie so
eine große freie Software-Community
oder so, aber
real existieren
das so ein bisschen anders.
Also man kann mittlerweile sagen, dass
ein Großteil der wissenschaftlichen Software, zumindest
in den Bereichen, in denen ich unterwegs bin, zum Glück
frei ist,
also auch frei verfügbar und die Leute,
die sich das zu Nutzen gemacht haben,
der große Vorteil ist, kein Mensch hat irgendwas,
ich habe nichts davon gehabt, ich würde nichts davon haben,
meine Software zu verkaufen, ich habe
was davon, dass ich ein Paper über meine Software
schreibe,
Leute das zitieren und
falls ihr schon mal gehört habt, Zitate sind die wissenschaftliche
Währung und das nützt dann
eventuell, um meine Karriere voranzubringen.
Das ist schon mal
gut, aber auch da gibt es noch Bereiche, wo
es Leute gibt, die ihre
Software zwar gerne
allen zur Verfügung stellen, aber schreibt mir bitte vor,
eine E-Mail-Authentikette, die zugeschickt und zitiert
mich bitte natürlich.
So komplett
irre Sachen zum Teil, dass
es einfach extrem schwierig ist, da
an sinnvolle Sachen ranzukommen
und auch
die Sachen, also ja, es ist
digital, aber ist es vernünftig
digital?
Und das ist ja nur
die Software-Ebene. Du hast noch die ganzen Formulare
dazu, das kommt halt auch dann noch dazu.
Ja, nee, also das,
die eine Sache, der Software-Ebene funktioniert
funktionieren
Teile der Wissenschaft vielleicht doch eher so wie eine große
wissenschaftliche oder eine große
freie Software-Community. Ja,
kann man so sagen.
Es ist vielleicht nicht sehr wohl organisiert und durchdacht
und so weiter. Es wäre gut, wenn die Leute vielleicht
mal ein bisschen Ahnung davon hatten, wie man eigentlich Software baut.
Statt nur programmieren zu können, so ein bisschen.
Auf der anderen Seite, wenn jetzt die eigentliche Wissenschaft,
also die Wissenschaft, wenn man jetzt um die Erkenntnisse
der Wissenschaft
der Wissenschaft redet, ist es immer noch ein sehr großes
mein Sandförmchen,
dein Sandförmchen und
großer Neid, dass man
versucht, die eigenen Erkenntnisse
möglichst, die eigenen Daten
möglichst auszuschlachten und all solche Sachen.
Hängt so ein bisschen vom Feld ab, also
gerade die Mathematik, Informatik,
Physik sind da so ein bisschen besser, aber
in der Biologie so ein bisschen.
Und ja, da ist es immer noch
ja, da geht es ja auch
wirklich darum, okay, ich habe diese Daten und wenn ich
diese Daten habe, dann bin ich
ja, dann muss ich damit alles Mögliche
machen, möglichst auf einmal und das große
eine Ding landen, sonst
funktioniert es nicht.
Oder funktioniert es nicht für die Karriere.
Also leider ist es wahrscheinlich auch richtig,
dass es nur so geht.
Was natürlich dämlich ist.
Obwohl aus der Physik
habe ich das auch manchmal gehört, dass da
die Leute dann in Vorträgen sitzen und
Fotos machen von dem Experiment
gehabt, sodass sie dann die ersten Theoretiker
sein konnten, die dann die Theorie dazu, zu einem
Experiment oder so,
also irgendwie.
Ja gut, aber dann machen sie jetzt zumindest nicht
den Vortragenden den
Ja, also natürlich,
das gibt es in allen Bereichen wahrscheinlich irgendwo,
das wird man nicht vermeiden können, aber
es gibt da schon große Unterschiede. Also gerade
in der Physik und Mathematik gibt es ja diese
Preprint-Kultur, also man muss jetzt vielleicht für die Leute,
die es nicht kennen, sagen, in der Wissenschaft
zählen hauptsächlich
so
sogenannte Peer-Reviewed-Veröffentlichung,
also Veröffentlichungen, die andere Wissenschaftler
für einigermaßen gut befunden
haben. Das ist ein gewisser Prozess. Dieser Prozess
dauert
in einigen Feldern oder Fächern
und je nachdem, was man macht, bis zu Jahre.
Also vom Einreichen
des fertigen Manuskripts bis zur
Veröffentlichung. Und in der
Zeit kann natürlich alles Mögliche passieren und andere
Leute können das Gleiche erfinden und so weiter und so fort.
Und da gibt es zumindest, gerade
in Mathe, Physik, Informatik und so weiter,
die Kultur,
dass man sagt, okay, wir haben das Preprint-Server,
das bekannteste ist das
Archive, wo man sagt, okay,
ich reiche das jetzt ein und gleichzeitig
stelle ich das schon mal frei zur Verfügung und
das Journal, bei dem ich das einreiche,
ist auch, kann
damit leben, dass ich das frei zur Verfügung stelle
und sage mir, nee, das hast du schon veröffentlicht, machen wir nicht.
Und ja,
das ist so langsam im Kommen,
jetzt auch in der Biologie,
das ist auch definitiv gut
und das führt natürlich auch so ein bisschen dazu,
dass man
die Sachen
wirklich direkt nutzen kann, aber
andererseits in der Biologie dauert es halt auch
einfach immer noch ewig, bevor man die Sachen überhaupt
veröffentlicht und
ja, wird egal, aber das ist jetzt
vielleicht auch nicht so.
Ja, du hast noch ein paar
Tab-Termines, glaube ich, unterlassen.
Ja, das kann sein.
Das war so eine spannende Geschichte.
Ja. Was fällt euch noch dazu ein?
Habt ihr noch was zu dem Thema
zu erzählen?
Ich kann auch was erzählen, natürlich.
Ja, du wenn du noch was auf dem Herzen hast.
Was die Situation angeht.
Genau, wir haben, wir haben, genau,
da haben wir noch gar nichts zu bescheuen.
Wie gesagt, ich habe eine wissenschaftliche Software geschrieben.
Okay, soweit zu furchtbar.
Das Hauptproblem ist natürlich jetzt, ich möchte auch weiterhin
als Wissenschaftler bezahlt werden und das heißt,
ich muss zitiert werden, wie ich gerade schon gesagt habe
und dazu muss ich das Ganze veröffentlichen.
Andersrum, Veröffentlichung und Zitate sind Geld,
also muss ich veröffentlichen.
Und ja,
die meisten Veröffentlichungen in der Wissenschaft
sind natürlich immer noch über eigentliche Forschung
oder klassische Forschung.
Ich habe irgendwas herausgefunden,
hier ist es und nicht,
ich habe hier eine neue Software geschrieben,
die ich ihr erlaubt, das zu machen.
Das war's.
Und ja,
diesen Prozess habe ich durchlaufen,
ich habe ihn erfolgreich durchlaufen,
ich habe es geschafft, dieses Paper zu veröffentlichen.
Es war aber zum Teil sehr interessant.
Ja, wo fange ich mal an?
Höflich formuliert.
Ja, höflich formuliert, genau.
Also der erste Schritt ist erstmal,
dass man ein Journal finden muss,
das überhaupt sagt, okay, ich akzeptiere,
wir akzeptieren solche,
solche Veröffentlichungen,
wir finden das gut.
Der zweite Schritt ist dann zu sagen,
ein Journal, bei dem Journal auch,
ja, etwas, natürlich das Ganze zusammenzuschreiben,
was übrigens,
also für die Leute, jetzt wirklich für die Wissenschaftler
unter den Zuhörern, bedeutend einfacher war,
als klassische Forschungsarbeit zusammenzuschreiben.
Ukulele.
Ja.
Und ja, dann,
gab es, wie gesagt, den Peer-Review-Prozess,
das heißt, auch dieses Manuskript
ging an andere
Forscher, die dann sagen sollten,
ist das schön oder nicht, oder gut oder nicht.
Und da hat dann erstmal
einer der Reviewer, die nebenbei anonym sind,
also ich weiß nicht, wer es war,
gesagt,
ja, das ist ja alles
schön und gut, das ist auch besonders interessant
für diese spezifische
wissenschaftliche Community,
aber das ist
ja so irgendwie eigentlich kein,
kein richtiges Paper,
also lehne ich es ab.
Obwohl das Journal sagt, genau solche Dinge
würden wir auch gerne haben.
Und ja, ich weiß nicht genau, was da schiefgelaufen ist,
ob das Journal dem Reviewer nicht gesagt hat,
guck mal, das ist okay,
oder ob der Reviewer es nicht verstanden hat, oder
ja, es war auf jeden Fall
ganz komisch, also am Ende bin ich hingegangen und habe,
also man sagt dann natürlich nicht, okay,
ich akzeptiere das, ich werde abgelehnt worden, ich gehe woanders hin
oder so,
sondern,
man
kann dann
erst mal das Ganze erwidern
und sagen, ja, du sagst, mein Paper
ist doof, aber ich sage, es ist gut, weil...
Und ja,
mein Argument bestand dann daraus,
dieses Urteil
von diesem Reviewer, der halt
gesagt hat, ja, es ist relevant für die Community,
neben die Kriterien vom Journal
zu stellen, dass er gesagt hat, ja, wir akzeptieren solche
Paper, wenn, und dann kam
fast genau das Gleiche, was
der Reviewer dann gesagt hat, und ja,
und am Ende ist es, hat es
dann auch ohne große Probleme geklappt, aber
es war irgendwie schon lustig.
Dann kommt das nächste Problem, also wenn man das alles
geschafft hat, also wenn quasi die
Wissenschaftler sagen, das ist okay, dann muss das
noch
in eine druckbare Form gebracht werden,
was sich jetzt erstmal ein bisschen albern
anhört, denn ja, gut, wir sind jetzt hier in
der Physik, Mathematik und ähnlichem, da sprechen alle
Leute latech und können
in der Regel selbst sehr gute
Sachen produzieren,
die man auch drucken kann, aber
ja, einige
ähm
Wobei, kurze
Abschweifung, ich glaube, für die, für diese
Physics Review Letters oder so, das ist
irgendwie ganz wichtig in der Physik, da gibt's
ein Word Template, das man benutzen muss,
die, äh... Nein, ziemlich sicher.
Also für Physical Review Letters
kann man definitiv auch Technik einreichen.
Und auch, also es geht
mittlerweile, es ist schon, es ist sehr weit verbreitet, man kann
latech einreichen, die Fahre ist halt, wird es eins zu eins
verwendet, also
das Einreichen ist die eine Geschichte, die
andere Sache ist, was macht das Journal
dann, was machen am Ende die Schriftsetzer damit?
Sie könnten natürlich, also im Prinzip könnte man
eigentlich hinsehen, wir haben einen Standardstil und den
wenden wir einfach an und dann braucht man gar keine Schriftsetzer
mehr. Das ist aber nicht der Fall.
In den meisten Journalen,
zumindest in meinem Feld, und das heißt,
irgendein Schriftsetzer hatte dann zum ersten Mal
in seinem Leben Computercode vor sich
und musste den
setzen. Oh, diese blöden
tabulatorischen Eindrückungen, das sieht aber doof aus.
Ja, also
das würde ja noch,
das würde ja noch, das würde ja noch, das würde ja noch,
das würde ja noch, das würde ja noch, das würde ja noch,
das würde ja noch, das würde ja noch, das würde ja noch,
das würde ja noch, das würde ja noch,
das würde ja noch, das würde ja noch,
das würde ja noch, das würde ja noch,
also, ja, das wäre auch ein Problem,
aber, also ja,
der Code war an verschiedenen Eindrückungsebenen,
unterschiedliche Codeblöcke waren an unterschiedlichen
Eindrückungsebenen, ja, das war auch ein Problem,
aber das war nur der Anfang, das hätte man noch
über, oder darüber hätte man noch hinwegsehen können.
Da gab es auch zum Beispiel, also was,
nach so drei Iterationen,
also, ich habe
ein,
das Resultat der Schriftsetzer
bekommen, ich habe gesagt, nee, das geht so nicht,
die haben es neu versucht, ich habe es bekommen, ich habe gesagt, nee, das geht so nicht,
und so weiter und so fort, nach drei Iterationen
hatte ich ungefähr raus, was da eigentlich
vor sich geht, und zwar haben die
versucht, meinen Code wie
Formeln zu interpretieren, und den
nach Formelregeln gesetzt.
Und Formeln gibt es halt zum Beispiel solche,
also für den Formelsatz gab es die Regel,
wenn die erste, die innerste Klammer,
die man macht, ist rund,
die nächste Klammer ist eckig, und danach
kommt geschweift.
Das haben die auch
radikal auf den,
das ist ein Formelsatz,
das kann man drüber schreiben,
das haben die aber radikal auf den Code angewendet.
Tja.
Und dann steht halt Sinus, eckige Klammer auf,
F von I, eckige Klammer zu.
Ja.
Ja, das
wäre jetzt
natürlich dann auch wieder irgendwie eine Anwendung
für CodeGolf,
ob man das dann so transformieren könnte,
dass es irgendwie,
am Schluss hat man dann halt noch so ein kleines CodeGolf-Ding,
dass das eine wieder in die andere Form
übersetzt wird, dass es halt dann
irgendwie ausführbar wird.
Ich mache eine Exkursion, ist das glaube ich okay?
Das war auch,
das war jetzt nicht CodeGolf, aber so eine
Programmieraufgabe,
das war, ich versuche es jetzt gerade aus dem Gedächtnis
zu reproduzieren, sagen wir es so wie
A, Klammer auf, B plus C
gleich, gleich
AB plus
BC, also das
Assoziativgesetz, und zwar
hingeschrieben, so wie man es auf Papier schreiben würde.
Das heißt, ohne mal,
mal Zeichen.
So, also man hat jetzt
diesen Code, das könnte man ja in Python machen,
und die Aufgabe ist jetzt, davor
etwas zu machen, dass dieser
Code, dass das wahr ergibt.
Okay.
Und man darf,
ja, ich glaube mit der Bedingung, dass man
ja A und B nicht einfach durch Nullen
ersetzen darf oder so,
und ja, also
mein Ansatz dafür, es war leider nicht
der schnellste oder der kürzeste,
war, dass man sagt, okay, wir machen erst mal
A, B und C zu Symbolen, dann funktioniert
schon mal symbolisches Rechnen, also mit Symbol.
Und dann überschreiben
wir noch für A, oder fügen wir
A eine
Call-Funktion hinzu,
die Call-Methode für A,
und sagen halt, dass sie das macht, was dann
rechnisch rauskommen müsste. Das heißt,
dieses A, Klammer auf, B plus C würde wie ein
Funktionsaufruf ähnlich interpretiert werden,
und dann funktioniert so das.
Was auch eine sehr schöne Sache in Python
ist, wenn man das einfach weiß, dass man
einfach alle Operatoren irgendwie beliebig
definieren kann, wenn man möchte,
und das auch für sehr viele Sachen nutzen kann,
ja,
und eben um die Säse zu lösen.
Plus mit O überschreiben oder so,
was machst du auch mit True, wenn du ein Bohl draufwirfst?
Wenn du das Pluszeichen
mit einem O überschreibst oder sowas,
also dann
könnte das vielleicht funktionieren.
Ja,
ich glaube, es musste vereinigt,
man durfte irgendwie A, B und C nicht überschreiben.
Ich müsste es nochmal raussuchen, was genau die...
Ja, deswegen das Plus.
Und dann den Bolian draufwerfen, dann
stimmt das schon.
Ja, gut.
Also ich hatte dann sehr viel Spaß mit den Schriftziffern eben.
Ja, das war auf jeden Fall schön.
Die Klammern anpassen,
einrücken, eben entfernen.
Ich habe auch irgendwie den Unterstrich per Hand gezeichnet,
das heißt, wenn man den Code kopiert hat, war der Unterstrich plötzlich weg.
War es irgendwie kein Unterstrich.
Das Bild war innerhalb von dem PDF dann
nicht mehr Text.
Genau, es war Text,
und anstatt des Unterstrichs, der auch irgendwie
unterschiedlich lang war, war da halt...
ein Leerzeichen, und da war eine Linie.
Also so per Hand
reingeseinigt.
Ein Wörter- und Zeichenobjekt.
Ja, genau. Aber wenn man den Text kopiert hat,
war das halt nicht da.
Dann hat jemand die Taste auf der Tastatur nicht gefunden.
Dann wurden die auch schön typografische Anführungszeichen
im Code.
Sieht einfach viel besser aus.
Ja, ich meine, es sieht tatsächlich viel besser aus,
es funktioniert leider halt auch nicht.
Aber gut, da kann ich jetzt...
Ja, aber das ist...
Das ist halt gut.
Das fand ich eben je nach Community so unterschiedlich,
weil jetzt so was in der Informatik oder so,
Pseudocode wird ja schon oft
in Papers auch reingeschrieben, aber...
Naja, ich war halt...
Was heißt leider?
Ich meine, es war ja...
Es gab Sinn, dass ich mich in eine Community
gewandert habe, die das nicht macht,
und die haben irgendwie so
ein solches Paper pro Jahr.
Und ja, das ist
nicht viel.
Ja.
Naja, aber das ist...
Also, ich weiß nicht, diese ganze Publikationspraxis,
dass man halt Dinge halt nur publizieren kann.
Oder ich meine, in der Informatik ist es halt auch so,
dass...
Ich meine, es gibt Ausnahmen, aber überwiegend zu der Zeit,
wo ich viel Papers gelesen habe, war es halt so,
dass die Leute...
Naja,
dass man eigentlich nur
mathematische Sachen veröffentlichen konnte.
Also Code und so eigentlich eher nicht.
Man kommt an den Code auf Anfrage
dann immer ran, wenn man die Leute anschreibt.
Aber
ist es halt nicht Teil der Veröffentlichung.
Ähm, dann
war halt... Also, ich meine, es führt halt
auch so ein bisschen dazu,
quasi, dass man...
Ich meine, an dem Paper, ob das jetzt stimmt oder nicht,
kann man den Paper halt nicht mehr ansehen.
Also, wenn man nur das überprüft, dann weiß man überhaupt nicht,
ob das jetzt funktioniert oder nicht.
Und wir haben dann halt auch teilweise
versucht, Sachen
ja, halt
sozusagen zu reproduzieren.
Und die Quote der Sachen,
die so wirklich überhaupt gar nicht...
Also, manchmal kann man vielleicht auch Sachen nicht richtig
reproduzieren, weil man es nicht verstanden hat oder selber
zu blöd ist, es hinzukriegen oder so.
Aber manchmal ist es relativ offensichtlich, dass das nie
funktioniert haben kann. Und die Quote
von den Sachen war recht hoch. Also, das war
schon erschreckend. Und dann denkt man sich so schon,
okay, ja, und das waren alles
ordentlich peer-reviewte Sachen,
die durchgegangen sind, die irgendwo veröffentlicht wurden und so.
Also, ja.
Ja.
Aber da muss man sagen, die Informatik hat es noch gut,
wenn man einfach so sagt, okay, ich hab hier das...
Man könnte zumindest mal hingehen und diese Standard-Einführung,
es gibt ja auch Tendenzen in die Richtung zum Glück,
dass man sagt, okay, hier ist jetzt bitte die Software,
ein Programm, was das macht, und wenn ich das ausführe,
das Programm verstehe,
und das Programm ist verständlich, dann
kommt das raus. Mit anderen
experimentellen Sachen geht das nicht.
Du kannst halt eben nicht einfach mal
ein Jahr ins Labor sitzen, da rumpipitieren
und welche Bakterien
wachsen lassen und gucken, ob das gleich rauskommt.
Also, kann man schon.
Das ist aber deutlich schwieriger.
Stimmt, ja. Stimmt, bei anderen ist es noch viel übler.
Ja, oder hat er O.
Das war jetzt das Land.
Hm, was machen wir jetzt?
Nächstes Mal.
Welche Länder haben wir denn noch?
Welche haben noch nie etwas von uns gehört?
Und was sind unsere bisherigen Ergebnisse?
Wir lassen das Modell einfach nochmal rechnen.
Ja.
Ja, dann haben wir ein paar so Programme eingeführt.
Das musste man dann so machen.
Sie haben dann tatsächlich das Modell nicht geändert.
Sie waren davon überzeugt, das Modell war richtig,
nur die Umstände waren bei zwei oder drei anderen
Informatikern auch nicht funktionieren.
Also, ja, da war ein bisschen Resistenzgang
gegen gute...
Ja, das ist halt...
Das ist halt so, wenn man einmal weiß, dass man richtig liegt,
ich meine, dann muss man einfach nur das häufig genug probieren
und irgendwann wird es schon funktionieren.
So viel zählt das doch, oder?
Ja, ja, ja.
Ja, SAP war das, aber das Structural Adjustment Program.
Tja.
Ja, ja.
Ja.
Aber sozusagen, also,
ich weiß nicht, wie arbeitest du
üblicherweise? Also in Notebooks oder
eher...
Ich versuche mir mittlerweile
angewöhnt, so ein bisschen anzugewöhnt in Notebooks zu arbeiten,
einfach, weil es gerade für, wenn man mit
Plots zusammenarbeitet, ist es halt
irgendwie einfach, ja, ganz praktisch.
Also, ich muss dazu sagen, ich komme ursprünglich,
ich bin, habe
sehr früh genug Plot gelernt und
das auch, was jetzt ein
Plotting-Programm ist, was nichts
mit Python zu tun hat, weil es
eine eigene Programmiersprache ist und
bin damit sehr zufrieden gewesen
und beziehungsweise bin auch in der Lage gewesen, alles zu machen.
Ich kannte einfach alle Kniffe und
habe mich deswegen sehr lange
geweigert auf Python,
Plots umzustellen, was natürlich
gewisse Vorteile hat, da man eben
nicht erstmal die Programmiersprache wechseln muss, um was
zu plotten und nicht erstmal ein Interface
schreiben muss und so weiter und so fort.
Insofern, ja, hink ich da so
ein bisschen hinterher, denke ich,
aber mittlerweile, ja, ist mein...
Also, ich schreibe die meisten
oder Sachen, die ich mehrfach verwende,
definitiv ganz normal mit
ja...
meiner Entwicklungsumgebung,
die da Unix heißt, also
Text-Editor und Konsole und was auch immer.
Genau, was für ein Editor bist du?
Ich nutze NeoWim.
Ja, ja, ein Wim hat auch immer rum.
Und, ja.
Und dann, wenn
die Sachen einigermaßen stehen und es wirklich nur noch darum geht,
entweder
schöne Plots zu produzieren oder
rumzuspielen in dem, was man jetzt
an Simulationen geschrieben hat,
dann wechsle ich mittlerweile dann auch
doch mal ins Notebook.
Andererseits,
also wenn es jetzt wirklich darum geht, Software
zu schreiben, die andere nutzen sollen,
findet das immer noch...
Ja, was heißt, findet das nicht im Notebook statt, aber
dafür ist es, glaube ich, auch nicht gemacht.
Ja.
Ja, ja, das ist auch etwas, was man
jetzt immer zunehmend hört, dass Leute das
halt benutzen. Und, ja,
ich finde es eigentlich relativ
einleuchtend, dass das jetzt sich so durchsetzt.
Was halt auch schade finde, ist, dass es irgendwie noch
immer keine so richtig
schöne,
schön bedienbare oder intuitive
Plot-Umgebung irgendwie
überhaupt gibt.
Also, es gibt ja so ein paar, die hast du
bestimmt schon alle ausprobiert. Also, in Matplot, du hast ja selber schon gesagt,
Alter, ihr oder sowas.
Mal reingeschaut, für Python.
Ich glaube, das ist für Scientific-Sachen gar nicht so
verkehrt, gerade für so statistische Plotting nochmal.
Habe ich aber selber auch noch nicht so viel benutzt.
Ja, gut. Vielleicht muss ich da auch nochmal reingucken.
Also, mich stört halt noch so dieses,
ich glaube, das wurde mal Plotting by Side-Effect
genannt von Matplotlib.
Ja, das stimmt.
Also, wahrscheinlich,
ja, vielleicht gibt es mittlerweile,
aber ich meine, ich habe noch nichts
davon gehört, dass irgendwas eben die
ganze, das ganze
Repertoire mitbringt, was man eben auch braucht.
Ich möchte halt, das Hauptproblem ist, wenn ich
jetzt irgendeine Plotting-Sprache
lerne oder irgendein Plotting-Interface lerne oder was auch immer,
möchte ich, dass es wirklich alles
kann. Irgendwann werde ich
dazu kommen, dass ich das brauche, dass ich
dieses Detail einstellen muss und wenn ich das nicht kann...
Plotly Express, das ist, glaube ich, noch ganz nett.
Und das heißt,
das ist so ein bisschen auch ein Problem,
dass natürlich normalerweise,
kann man irgendwie ein kleines Tool schreiben und dann
wird das immer größer und so weiter, aber
gerade bei Plot-Sachen, man muss
eigentlich schon mit etwas anfangen, was fast alles kann,
bevor man irgendwie eine Chance hat,
was anderes sich durchzusetzen.
Ja.
Ja, es gibt da, ich weiß nicht,
inwiefern Gnuplot das auch
übernommen hat, das gab ja dieses sehr einflussreiche
Wort, obwohl das, glaube ich, gar nicht so
furchtbar alt, Grammar of Graphics
irgendwie.
Und unter R
hat man ja mit ggplot2 irgendwie da so eine
Umsetzung von im Grunde.
Und das ist eigentlich ja schon sehr nett, aber ich
fürchte auch, in Python gibt es da nichts, was
irgendwie...
Es gibt
irgendwie Adaptionen davon
in Python, aber ob das jetzt
wirklich genauso gut ist, weiß ich auch nicht.
Es ist immer noch aktiv irgendwie unter Entwicklung.
Ich meine, so furchtbar schlecht ist
Matplotlib auch nicht, aber...
Nee, nee, nee, es ist...
Ich möchte jetzt einfach mal eine Parabel plotten.
So. Und jetzt...
Ja, und so hast du
die Gnuplot, was eine rein plot-orientierte
Programmiersprache ist, ist das eine Zeile.
Und ja, Matplot
muss ich... Ich weiß gar nicht, was ich...
Wie ich das am schnellsten hinbekommen würde.
Plotplot?
Ja, den müssen wir schon ein bisschen rumbasteln,
glaube ich, aber wenn du es einmal definiert hast,
so dann ist das auch so.
Wenn mir irgendjemand einfach für fünf Jahre Geld geben sollte oder so,
würde ich mich daran setzen, dass
ich einen komplett neuen Album in der Sitzung habe.
Cool.
Ja, wir haben noch
den Lieblingspick natürlich, der Pick,
der Folge oder sowas.
Was wäre denn deine Wahl,
dein bester Pick für ein zweites Modul?
Ich glaube, eigene Module sind wahrscheinlich
ausgeschlossen.
Oh, wenn du so dein eigenes Modul da
ein bisschen umschmachst, würde ich...
Jetzt musst du das aber kurz erzählen, was ist denn dein
eigenes Modul? Nee, nee, nee, mach ich nicht.
Das war jetzt...
Ich habe ja auch schon die ganze Zeit darüber geredet.
Ja, ich glaube,
das Lieblingsmodul ist wahrscheinlich immer noch
Numpal, weil es einfach...
enorm mächtig
die Sachen bringt, die
gerade
ja, in
Rechnen von großen Datenmengen
und auch ansatzweise, also nicht mal
sehr großen Datenmengen, aber auch kleineren Datenmengen
Dinge bringt, die
Standard Python nicht hat
und das, ja,
ich kann mir, glaube ich, kaum...
Es gibt sehr wenige Fälle, wo ich es nicht importiere.
Mhm.
Und was wäre dein Pick der Woche?
Ist das auch Numpal?
Ja, oder?
Was ist der Pick der Woche?
Ich weiß es auch nicht.
Ja, ja, fast.
Ja, aber ich wollte mir so eine kleine Kategorie einführen.
Pick der Folge oder sowas, ja.
Pick der Folge, ja.
Also, was macht es für mich zum Pick der Folge?
Das ist das, was ich diese Woche genutzt habe oder was ich diese Woche neu gelernt habe?
Ja, oder vielleicht irgendwas Aktuelles.
Das ist ja irgendwas, was so in letzter Zeit als cool aufgefallen ist.
Du musst nicht gar nichts Aktuelles, da kann doch was ganz Altes sein.
Einfach was so nochmal so.
Irgendwas Neues, aber...
Was soll der Standard-Tipp sein?
Ihr stellt Fragen.
Ich kann doch schon mal überlegen.
Ja, ja, ich habe nämlich auch noch nicht gefragt.
Also, was ich neulich zum ersten Mal verwendet habe, was ich dann wieder nicht verwendet habe,
weil es mich dann doch nicht glücklich gemacht hat, war NameTupel.
Ich habe aber gehört, es gibt jetzt Data Classes.
Da muss ich mich dazu unbedingt einlesen.
Ja.
Ich will nicht dazu sagen, aber es ist wahrscheinlich genau das, was ich...
Ja, ich glaube schon.
Ja, beziehungsweise es gibt halt für ältere Python-Versionen auch ein Modul,
das man einfach so installieren kann.
Also, es ist jetzt natürlich in der Standard-Python-Bibliothek mit drin,
beziehungsweise in Python selber, aber das Ding heißt Atris oder so.
Und das kann sogar noch deutlich mehr als die Data Classes.
Aber ich glaube auch, dass das Data Classes, da gab es auch in den letzten paar PDF-Treffen einen Talk zu,
wo halt auch von der Geschwindigkeit wurde gesagt,
das ist halt alles deutlich besser als NameTupel und so.
Im Grunde gibt es keinen wirklich tollen Grund mehr,
außer man braucht jetzt die Indizierbarkeit oder so,
um NameTupel zu verwenden,
weil man das mit Data Classes oder Atris halt deutlich besser hinkriegt.
Ja.
Ja, das ist auf jeden Fall eine interessante Geschichte.
Und dein Weg dahin?
Ja, ich würde tatsächlich...
Also, was ich in letzter Zeit nochmal angeguckt habe aus unterschiedlichen Gründen
und dann doch wieder gar nicht so schlecht fand,
ist Django Guardian.
Ist halt eine Weckentwicklung, was völlig anders ist.
Also, da geht es einfach darum, dass man halt häufig das Problem hat,
dass man Berechtigungen verwalten möchte auf bestimmte Zeilen in der Datenbank.
Und auf Tabellenebene ist es in Django schon eingebaut,
dass man da halt Berechtigungen vergeben kann
und dann halt auch diese Berechtigungen benutzen kann,
um irgendwie Zugriff darauf zu regeln.
Aber für Objekte, Einzelobjekte oder Zeilen geht das halt nicht.
Und Django Guardian erweitert halt das Django-Permissions-Modell darum,
dass das halt dann doch geht.
In dem da zwei zusätzliche Tabellen eingeführt werden.
Ja, der rammt sich dann relativ wüst aus, wenn man das macht.
Aber es ist...
Also, man denkt zuerst, das kann nicht gehen oder das ist halt furchtbar.
Aber nee, es funktioniert tatsächlich.
Und zwar sieht es ziemlich gut aus.
Und ja, genau.
Also, wenn man dieses Problem hat, sollte man sich vielleicht das mal genauer angucken.
Weil das sieht doch nach einer halbwegs vernünftigen Lösung aus.
Cool, kann man die Permission in dem Webzug endlich lösen.
Das ist irgendwie jeder darauf zugreifen, was er will.
Ja, ich picke Embedded.
Das habe ich irgendwie zwischendurch entdeckt.
Das ist so ein Anfänger-Security-Hinweis, was so alles sicherheitsrelevant sein könnte
in einem Code, den man so in Python geschrieben hat.
Da habe ich noch eine Sache, die mich überhaupt nicht interessiert.
Nicht ganz viel zu machen.
Das ist auch nicht so, glaube ich, so ganz tiefgehend.
Aber so für die ersten Sachen, dass man so ein bisschen was versteht, was man da tut.
Fand ich das ganz spannend.
Erst mal so reinzugucken.
Ja, cool.
Ich weiß nicht.
Haben wir noch irgendwas?
Ich weiß ja auch nicht.
Es ist ja ein Geschlossener.
Ich kann noch was erzählen.
Ich kann immer noch was erzählen.
Also ich meine, wahrscheinlich, wenn ihr mich lasst,
wir gehen nicht einfach fünf Stunden lang an die Schule.
Ja, klar.
Das ist ja richtig schlecht.
Aber vielleicht noch eine lustige Sache zum Thema, was kann man alles...
Ich glaube, ich habe mein Mikrofon vorgestellt.
Sorry.
Kann das sein, dass ich irgendwie lauter bin oder so?
Okay, gut.
Super das.
Genau.
Was ich auch noch gemacht habe, was vielleicht so,
weil es jetzt furchtbar schwer zu erklären sein wird, ist,
ich habe mich ja auch mit der Frage beschäftigt.
Also wir bauen Ökosystemmodelle, haben wir ja schon geredet.
Und irgendwann bin ich auf die Frage gekommen,
wie macht man das eigentlich richtig,
beziehungsweise wir sind auf ein Problem gestoßen mit einem Modell,
dass wenn ich jetzt, ich habe meine Spezies,
die da irgendwas machen, also von Tieren oder Bakterien oder was auch immer.
Und es ist keines passiert.
Also nehmen wir mal an, wir haben Elefanten und Giraffen
oder was auch immer, was da einfach vorzustellen ist.
Und, ähm,
jetzt,
mein Modell sagt immer, eine Spezies ist eine Variable,
also die Menge an Individuen einer Spezies.
Ähm,
und darauf baue ich ein ganzes Modell auf.
Und, ähm,
einfach weil ich diese Vereinfachung,
die Vereinfachung, die ich mache, dass ich sage,
alle diese, alle Elefanten sind gleich,
alle Giraffen sind gleich, was auch immer.
Und, ähm,
ja, eine Sache, die wir dann festgestellt haben,
ist, dass gewisse Modelle die Eigenschaften haben,
dass ich jetzt irgendwie aus Versehen,
es nicht hinkriege, alle Elefanten korrekt
in eine Spezies zuzuordnen.
Angenommen, die Hälfte davon sind blau und rot angemalt.
Nashörner.
Ja, nee, also Nashörner auch,
aber eigentlich sind es wirklich alles Elefanten.
Sie haben genau die gleichen Eigenschaften,
es sind nur die Hälfte von ihnen sind halt rot.
Rosa, nehmen wir rosa Elefanten,
ist immer gut, über rosa Elefanten zu reden.
Ähm,
und dann haben wir festgestellt, dass gewisse Modelle
dann andere Ergebnisse produzieren,
wenn wir das machen.
Also wenn wir irgendwie eine Spezies nehmen und die aufteilen,
künstlich.
Was nicht gut ist, denn ich möchte natürlich,
dass ein Modell, wenn ich dieselbe Situation
zweimal beschreibe, da soll auch tunlich dasselbe
rauskommen.
Und, ähm, okay,
was hat das jetzt mit Python zu tun?
Ich bin dann irgendwann hingegangen und habe
festgestellt, wir haben dieses Problem,
jetzt wollen wir verstehen, wann taucht dieses Problem auf?
Und dann habe ich mit Python und SymPy
automatisierte Tests
geschrieben für Modelle.
Ähm, das heißt, ich konnte eben einfach
ein Modell geben, hatte einige Rechnungen gemacht,
hatte dann eben die Hälfte der Elefanten blau,
angemalt und
mir automatisch gesagt, das ist jetzt ein gutes Modell
und das ist ein schlechtes Modell.
Also das ist auch eine, ja, eine etwas
exotischere Sache, die ich dann mit Python oder mit
genöst habe,
wo man auch sowas wie SymPy eben
benutzen kann, dass man solche Rechnungen
automatisieren kann, die man sonst,
sonst würde ich wahrscheinlich heute noch da sitzen
und das Ganze auf dem Papier durchrechnen.
Dann starten sich dann die Blöcke irgendwann, ja.
Ja, also das ist,
ich meine, und ich habe jetzt immer noch,
ich habe trotzdem einen Block nur vollgeschrieben
mit irgendwelchen Formeln.
Tja.
Ja, aber ist
dann sozusagen rausgekommen, woran das
lag, oder ist das irgendwie, das liegt
dann am Modell selber wahrscheinlich irgendwie?
Ja, also am Ende habe ich eine Regel gefunden für Modelle,
die genau das machen.
Das ist jetzt auch so gerade meine aktuelle
Arbeit, wo ich noch irgendwie gucken muss,
dass ich das veröffentlicht kriege,
oder beziehungsweise, dass die Leute das wertschätzen.
Und dann am Ende braucht man den Test nicht mehr.
Das,
eigentlich wäre es natürlich lustig gewesen,
wenn man sagen würde, wir finden es nicht heraus, verdammt, scheiße.
Aber hier ist eine Software, die euch zur Frage
annähernd beantwortet.
Hätte was für sich gehabt, aber nein, wir haben am Ende
eine Regel gefunden, wann genau es der Fall ist
und jetzt braucht man es dann nicht mehr.
Aber natürlich hat es enorm geholfen,
irgendwie ein Gefühl dafür zu kriegen, wann das passiert.
Ja, klar. Unter welchen Bedingungen,
warum und, ja.
Das erstmal so da ein bisschen rumzuspielen.
Ja.
Das war irgendwie...
Ja, eine Sache, wo ich dann simpel
wirklich gelernt habe, wertzuschätzen.
Ah.
Cool.
Ja, würde ich sagen,
dann sind wir doch schon so quasi durch, ne?
Ja, ich würde auch sagen, dann sind wir doch mal tatsächlich durch.
Vielen Dank, dass du da warst, Gerrit.
Ja, Gerrit, vielen Dank, dass du da warst.
Ja, vielen Dank.
Hat mich auch gefreut, hier zu sein.
Einfach über mich selbst reden,
zwei Stunden lang, nenn ich ganz...
Ja, ja.
Fast.
Ja.
Ja.
Das schaut doch hier aus, auch in längeren Sachen, ja.
Und wir haben es tatsächlich geschafft, so ein bisschen wie der Luft,
der Wind ist gerade aufgekommen, vielleicht könnt ihr euch erinnern,
wenn wir uns heute aufgenommen haben.
Ich bin sehr gespannt, wie das mit den...
Ja, also es ging nicht. Wir mussten Ventilatoren aufstellen.
Nachdem wir in der letzten Episode das Audio schon versaut haben,
dachte ich mir so, gut, vielleicht können wir noch einen draufsetzen.
Ja, ja.
Nicht alle die Verzweiflung treiben mit Ventilatoren-Geräusch,
aber hoffentlich...
Ich kann noch mal fächern.
Hoffentlich wird das irgendwie einer der Post-Processing-Algorithmen
irgendwie magisch beseitigen.
Ja, wenn sie sonst beschwert euch bei uns und...
Ja, wisst ihr, ihr könnt immer E-Mails schreiben an
hallo-at-pison-podcast.de
und ihr könnt auch gerne kommentieren.
Auf der Webseite gibt es eine schöne Kommentarfunktion.
Ihr könnt uns überall abonnieren,
wo ihr gerade lustig seid, bei uns gewogen,
erzählt weiter, was es uns gibt und...
Ja, wo ihr auch immer gerade seid, was auf der Tageseite ist auch,
Tagessnachtzeit...
Schnappt nicht an Hitzschlag.
Ja, bisschen warm.
Ja, wir hören uns. Viel Spaß und bis später.
Tschüss.