Wie ich schon vor ein paar Tagen schrieb: Ich unterrichte WissenschaftlerInnen aus nicht-IT-affinen Wissenschaften in Programmierung mit C++ und Python (und shell-Programmierung, etc.). Und das macht Spaß, ich hoffe sehr darauf, dass ich im Spätsommer oder Herbst die Kurse wieder in einem Kursraum mit lauter motivierten TeilnehmerInnen halten kann. Es wird eine große Erleichterung sein, bei den Übungen durch die Reihen zu gehen und unmittelbar Hilfestellung zu geben, wenn es irgendwo klemmt.

Und das es beim Programmieren klemmt, wird unweigerlich vorkommen. Wer irgendwann mal den Versuch unternahm das Programmieren zu lernen, kennt dies ebenso gut, wie professionelle ProgrammierInnen. Der Unterschied ist natürlich, dass Profis – gleich in welchem Bereich – eher wissen, wie man sich selber hilft oder Hilfe sucht. Deshalb kommen zu Anfang interaktive Oberflächen sehr zu pass: Wenn Anfängerinnen einen Befehl eingeben können (oder eine Funktion deklarieren) und dann gleich sehen, was dieses Bisschen Code tut (und ob das Erwartete herauskommt), dann ist dieser unmittelbare Feedback ein Riesenvorteil. Das Prinzip, was man hier nutzen kann, nennt man REPL – read eval print loop – und ist genau das, was ich gerade beschrieben habe. Hier ein Beispiel mit dem Python-Interpreter:

>>> 42*7*6
1764

Hierbei ist das ‘>>>’ der sogenannte Python-Prompt. Alles was nach einem “Prompt” kommt wird interpretiert. Hier haben wir den Python-Interpreter als Taschenrechner verwendet. Das Schöne ist, dass man sehr viel mehr interaktiv testen kann als nur dies Bisschen Grundschulmathematik: Alles was die Sprache bietet. Und dann kam vor ein paar Jahren Ipython auf und sehr früh auch das Iypthon-Notebook. Das Ipython-Notebook, später aufgegangen im Jupyter-Notebook (ab hier, kurz: “Notebook”), ist eine Browseranwendung: Ihr könnt darin auch Textfelder mit freien Kommentaren schreiben. Das ist einfach, aber ziemlich cool, wie wir gleich sehen werden. Das Notebook erlaubt es außerdem auch andere Sprachen, z. B. shell, R oder Julia, auszuführen – daher auch der Name “Jupyter”: Julia, Python und R.

Das Jupyter-Notebook in der Lehre

Viele LehrerInnen nutzten die Möglichkeiten des Notebooks. Neben einem Unterrichtseinsatz mit hohem interaktiven Anteil – man kann wunderbar in diese Notebooks Aufgabenstellungen und Vorbereitungen (Modulimporte, Beispieldaten) einflechten und vor Stundenbeginn verteilen – kann man natürlich auch Demonstrationen bieten und komplexe Sachverhalte visualisieren. Und das alles mit einem Werkzeug:

 

Am Ende meines Pythonkurses – der nicht wissenschaftliche Software-Bibliotheken zum Inhalt hat – gebe ich einen Ausblick auf die Möglichkeiten dieser Pakete: Lösen von Differentialgleichungen / einfaches Integrieren, Fouriertransformationen, spezielle Funktionen (wie z. B. Besselfunktionen) oder auch das Beispiel vom Doppelpendel, das hier gezeigt ist. Wie man sieht (drei Screenshots nebeneinander), erlaubt das Notebook auch mathematische Gleichungen mittels LaTeX sauber auszuschreiben und so einzuführen, wie man sie aus den Lehrbüchern kennt. Man darf es nicht übertreiben – auch programmierende WissenschaftlerInnen sind irgendwann müde und es fehlt die Motivation Gleichungen an der “Tafel” durchzukauen, aber hier geht es ja nur darum den Funktionsumfang des Jupyter Notebooks zu demonstrieren – soweit das in einem Blog überhaupt möglich ist. Man kann auch von den Funktionen verführt werden und eine Bleiwüste präsentieren (so wie hier am Ende meiner Veranstaltung). DAS ist aber nicht eine Frage des Lehrmittels, diesen Fehler kann man immer machen.

Das Notebook ist also für LehrerInnen bzw. DozentInnen ein verführerisches Werkzeug, erlaubt es doch in sauberer, strukturierter Form komplexe Sachverhalte mit verschiedenen didaktischen Kniffs zusammenzufassen und Aufgaben bearbeiten zu lassen. Herz, was willst Du mehr?

So ist es wenig verwunderlich das auch Informatikfachbereiche, die gestern noch Java als Eingangsprache unterrichteten, auf Python umsteigen oder umgestiegen sind und dabei auch auf das Jupyter Notebook setzten. In wieweit sich der Trend fortsetzt oder ob er gar schon wieder rückläufig ist, kann ich an dieser Stelle nicht sagen. Wir können aber aktuell tausende Webseiten rund um das Thema “Jupyter Notebook in the Classroom” finden.

Nach der Lehre

Vor knapp drei Jahren schrieb Jeffrey Perkel in Nature ein Kommentar mit dem Titel “Why Jupyter is data scientists’ computational notebook of choice“. Er beeilt sich die ganzen Vorteile aufzuzählen, die ich auch sehe: Vor allem kann man als DatenanalystIn nicht bloß Ergebnisse in ein Laborbuch kleben, sondern Code, Daten und erklärenden Text in einem Dokument zusammenfassen. Man erhält so ein “computational narrative“, kann aber auch interaktive Tutorials für eigene Software weitergeben. Vor allem lassen sich auf diese Weise auch leichter Veröffentlichungen vorbereiten. Und nicht zuletzt sind die vielen Sprachen, die man nutzen kann und die graphischen Ausgaben und die Möglichkeiten der Anpassung an den eigenen Bedarf sehr nützlich und überzeugend.

Einen Vorteil, den Perkel sieht führt in meinen Augen zu einem riesengroßen Problem: Da es auch möglich ist diese Notebooks mittels “Binder” in der “Cloud” zu nutzen kann man so gleich seine Software veröffentlichen.

Gefahren der Notebooks für die Reproduzierbarkeit

Das Software in der Cloud als Service für Jederfrau/-mann publiziert wird, halte ich für besonders problematisch – und wie der Link zeigt, kommt das inzwischen durchaus vor. Und wissenschaftliche Daten, auch die nicht personenbezogen, haben in “der Cloud” einfach nichts verloren. Sie sind dort nicht sicher vor Verlust. Bei personenbezogenen Daten – auch wenn pseudonomisiert – ist das besonders kritisch, auch wenn einige Staaten das Abladen von personenbezogenen Daten (z. B. menschliche Gensequenzen) nicht verbieten (in Deutschland ist wenigstens dies untersagt und wenig sinnvoll ist es immer). Nicht verschwiegen sei, dass dies viele Menschen anders sehen und die Anleitungen und Hinweise immer mehr häufen (z. B. dieser Artikel mit dem Untertitel “Don’t Just Read it! Do it!  … nun denn, des Menschen Wille ist sein Himmelreich).

Notebooks verleiten auch zu schlechten Codegewohnheiten, so ist meine Wahrnehmung und Joel Grus vom Allen Institute for Artificial Intelligence, der im Nature-Kommentar zitiert wird, sieht dies ebenso. Grund ist, dass man nicht wie üblich Code logisch ordnet, sondern “einfach” irgendwie weitermacht. Vor allem wird Code nicht in wieder zu verwendende Module gespeichert – oft werden Notebooks wiederverwendet, statt Code sauber zu Wiederverwendung zu versionieren. Konsequenz ist dann auch, dass die Dokumentation vom Vorprojekt nicht mehr passt und sich leichter Fehler bei der Dokumentation einschleichen. Wer notiert denn immer(!) fehlerfrei, kleine Änderungen in den Experimenten, wenn im kopierten Notebook nur wenige Details des Experimentes verändert wurden?

Außerdem sollte ab und an der Kernel des Notebook (also der Interpreter da drin) neu gestartet und der gesamte Code, der in sogenannten Zellen organisiert ist) von oben nach unten ausgeführt werden – nur diese manuelle Überprüfung garantiert, dass sämtlicher Code nach allen Änderungen auch noch funktional ist. Zwar gibt es obendrein Module, welche sämtlichen Änderungen aufzeichnen. In jedem Fall aber ist manuelle Sorgfalt gefragt. Automatisch per default dokumentiert wird da nichts. Reproduzierbare Ausführung und Dokumentation sind so Illusion.

Zu guter Letzt ist interaktive Ausführung in der Datenanalyse immer auch langsam. Während das “Auskundschaften” von Daten und Finden der optimalen Analyseparameter im interaktiven Programmen (nicht nur Notebooks) durchaus angebracht sein kann, sind vielschrittige Analysen mit lang laufen Teilschritten unbedingt zu automatisieren. Sonst passiert ist, dass man in die Mittagspause geht, um zurückzukommen und dann “weiter” zu drücken und erneut zu warten. Produktiv ist anders.

Fazit

Der Einsatz von Jupyter-Notebooks verletzt so ziemlich alle Prinzipien des Software Engineering. Das ist nicht weiter tragisch, doch es entstehen deshalb erhebliche Risiken bei Reproduzierbarkeit der Resultate:

  1. Es ist nahezu unmöglich gut zu versionieren: Je in einem Team am selben Notebook gearbeitet? Weil die Notebooks nichts anderes als riesige JSON-Strings sind, wenn sie abgespeichert werden, wird das Mergen (=Zusammenfassen via Softwaremanagementsystem) ein Ding der Quasiunmöglichkeit. Darüber hinaus kann man zwar einzelnen Notebooks oder Bündeln davon eine Version verpassen, sie sind jedoch zum Editieren geschaffen: Jeder neue Input, braucht mindestens eine Veränderung.
  2. Man kann Code beliebig schlechter Qualität schreiben – Jupyter wird sich nicht beschweren. Hauptsache syntaktisch korrekt. Es gibt kein Linting, keine Kontrolle, kein Nichts. Zusammen mit dem nächsten Punkt wird das relevant.
  3. Jupyter notebooks sind extrem schwer zu testen. Es ist schwer den Code vernünftig zu strukturieren. Und test driven development (TDD) wird unmöglich. Okay, die TDD-Pille ist kein Allheilmittel! Aber eine Umgebung, die TDD erschwert wird auf lange Sicht große kolloborative Projekte verunmöglichen: Wie sonst soll man verschiedene Entwicklungsstränge zusammenführen? Ach ja, die kann es bei Notebooks ohnehin nicht geben, sie sind nicht modularisierbar.
  4. Nicht-lineare Ausführung kann zu nicht reproduzierbaren Experimenten führen. Da es möglich und oft notwendig ist, zwischen den Zellen des Notebook zu springen, z. B. um einen Irrtum zu korrigieren oder einen neuen Zustand herbeizuführen, hängt der korrekte Zustand eines Notebooks somit manchmal vom fehlerfreien Vorgehen des Anwenders ab.
  5. Meine Beobachtung ist: Wissenschaftliche Arbeitsgruppen, die Jupyter-Notebooks nutzen, haben mitunter hunderte davon, die für alle möglichen Zwecke, teils redundant, erstellt werden. Sie wandern von Druidencomputer zu Druidencomputer – via EMail, USB-Stick, Gruppenlaufwerk – als Ganzes oder in Teilen. Zusammen mit den Punkten oben ergibt sich: Es ist vielleicht möglich, den Problemen zu begegnen – wird aber nicht einmal versucht.
  6. Bei langen, asynchronen Aufgaben wird es wirklich problematisch. Big Data bedeutet große Aufgaben. Man fängt häufig an, die Aufgabe in kleine Teile zu spalten, die gut in den Speicher passen. Irgendwann kommt der Punkt, wo das nicht mehr geht. Wer da mit einem Notebook angefangen ist, kann auf Werkzeuge wie Spark zurückfallen. Ich rate dringend davon ab: Besser ist es gleich mit dem parallelen Ansatz anzufangen. Ausbessern, wenn es nicht mehr funktioniert, ist mehr Aufwand und läuft immer mit einer Krücke herum, die fordert: “Jetzt, die nächste Zelle ausführen.”

Da Lernende dazu tendieren dem Beispiele der Lehrenden zu folgen und weil das Notebook eine Sackgasse darstellt, werde ich versuchen davon los zukommen – und es nicht mehr in der Lehre zu verwenden.

flattr this!

Kommentare (16)

  1. #1 Joachim
    14. Mai 2021

    Ui, das Urteil ist schon hart. Aber gerecht.

    Es gibt noch zwei Punkte, die für Jupyter sprechen.

    Ähnlich wie mit Papier und Taschenrechner (oder auch anderen Interaktiven Systemen, sogar mit Tabellenkalkulation und Office) kann man ausprobieren und Teil-Prototypen entwickeln. Manchmal hilft das extrem beim Verständnis. Gerade auch (nicht nur) Kindern kann es helfen, Ergebnisse praktisch sofort zu sehen, interaktiv zu ändern und so wörtlich zu “entwickeln”.

    Die Prototypen selbst müssen sowieso weggeworfen (genauer, in die Doku überführt) werden. Die richtige Implementierung kann a) bei Bedarf jemand Anders machen und b) wird die, weil es die Zweite ist, praktisch immer besser.

    Der andere Punkt ist git. Das kann mit Einschränkungen auch mit Jupyter. Freilich kann man json ohne genaue Kenntnisse (und auch mit) schlecht mergen. Aber die Version von gestern findet man. Funktionierende Versionen können “getagged” werden. Die Weitergabe eines Notebooks wird auch einfacher. Die Zusammenarbeit aber nicht unbedingt. Git kann bei den im Blog genannten Problemen auch nicht immer helfen…

    Fazit: ich kann in keinem Punkt widersprechen. Im Gegenteil. Der Artikel ist definitiv etwas für meine Kollegen. Dankeschön!

    • #2 Christian Meesters
      14. Mai 2021

      FYI: Mir ist nicht klar, wieso Du immer in der Moderationsqueue landest. Dafür gibt es kein von mir eingestellt Setting.

      Zur Sache: Ja, ist klar, dass es immer Wege aus einem Schlamassel gibt (deshalb benutzte ich ja Wörte wie “Quasiunmöglichkeit”) ;-).

  2. #3 Christian Meesters
    14. Mai 2021

    auf Twitter gab es noch die Antwort:

    Im letzten Workshop habe ich deshalb explizit das Herausziehen eines #Python Package mit eingebaut und gezeigt wie man es im Notebook nutzt. Bonus: Mit dem Package können wir jetzt auch nützliche Extratools bauen

    Hm, ich finde man muss sich immer klar machen, dass es Mittel und Wege gibt, Probleme einer Software X zu lösen. Man könnte sich aber klar machen, dass ein Weg Y best. Probleme nicht hat (dafür vielleicht andere). Teilmotivation dieses Artikels ist: Die Probleme von Jupyter-Notebooks sind vielen nicht klar. Sie meinen so geht Scientific-Computing, weil ihr Horizont genau beim Notebook aufhört.

  3. #4 user unknown
    https://demystifikation.wordpress.com/
    14. Mai 2021

    Hi Christian,
    Ich habe selbst noch nie mit so einem Jupyterbook gearbeitet. Kann man die auch offline betreiben, oder funktioniert das nur über eine Wolke?

    Wenn man da seinen Code hostet, aber die Sprachen, die man benutzt, Updates erfahren – kann man dann am Ende mit einem Code dastehen, der nicht mehr läuft, weil inkompatibel?

    Ich habe mal die jupyter-Seite aufgerufen und einen Test mit einer Shell gemacht, schon weil ich wissen wollte, was sich denn jetzt hinter “shell” verbirgt. Dos.exe ist auch eine Shell und ksh, zsh, fish und bash sind alles unterschiedliche Shells. Also, sie halten dort den quasi-Standard, bash, vor.

    Für Windowsuser, die keine Parallelinstallation von Linux wünschen, auch keine VM mit Linux und kein WSL mag das hillfreich sein.

    • #5 Christian Meesters
      14. Mai 2021

      Kann man die auch offline betreiben, oder funktioniert das nur über eine Wolke?

      Ja, das geht “offline”.

      Wenn man da seinen Code hostet, aber die Sprachen, die man benutzt, Updates erfahren – kann man dann am Ende mit einem Code dastehen, der nicht mehr läuft, weil inkompatibel?

      Im Extremfall ja, aber die Sprachen sind i.d.R. sehr API-stabil. Da mache ich mir eher Sorgen über die verwendeten Bibliotheken – aber das ist ein Problem, dass mit jeder Software besteht und hier nur ausgeprägt ist, weil Notebook-Projekte keine langlebigen sind, wo Updates eingespielt werden.

  4. #6 Spritkopf
    14. Mai 2021

    Da Lernende dazu tendieren dem Beispiele der Lehrenden zu folgen und weil das Notebook eine Sackgasse darstellt, werde ich versuchen davon los zukommen – und es nicht mehr in der Lehre zu verwenden.

    Die Gefahr besteht natürlich, dass die Lernenden irgendwann doch Kontakt mit Jupyter erhalten, womöglich als Empfehlung von Dritten, und dann denken: “Wow, tolles Tool. Das hätte ich in den Lehrstunden beim Meesters gut gebrauchen können.” Und sie benutzen es dann (und machen genau die befürchteten Fehler), ohne je den Grund zu erfahren, warum du auf den Einsatz des Tools verzichtet hast.

    • #7 Christian Meesters
      14. Mai 2021

      Och, beim Design von Veranstaltungen wird schon nachgedacht …

  5. #8 Joachim
    14. Mai 2021

    @Spritkopf: Vorweg, das kommt jetzt was schippig rüber. Ist aber nicht so gemeint. Sei bitte ein wenig nachsichtig mit mir.

    Na und? Das ist ein tolles Tool, wenn man von Octave kommt, mit “Notepad” Python-Scripts schrieb oder bei gnuplot immer wieder help plot irgendwas tippen musste, vielleicht vorher sogar nur Excel kannte.

    Wenn man sie richtig nutzt sind das alles tolle Tools.

    Der Kontakt zu Jupyter ist nicht schädlicher, als der zu Excel. Gerade weil es sich hier um unvergleichbare Äpfel und Birnen handelt, bedeutet das:

    “always use the right tool”.

    Die Probleme mit Jupyter hat Christian Meesters sehr genau und (IMHO) korrekt beschrieben. Deshalb bin ich sehr sicher, dass der das auch korrekt vermittelt.

  6. #9 Spritkopf
    15. Mai 2021

    @Joachim
    Keine Sorge, das kriege ich schon deswegen nicht in den falschen Hals, weil ich mir meines Unwissens in Sachen Python und Jupyter bewusst bin.

    Christian Meesters’ Screenshot lässt ja auch erahnen, warum Jupyter so beliebt ist und welche didaktischen Vorzüge dieses Tool bieten kann. Und warum man darüber schnell übersehen kann, dass zur Softwareentwicklung eben auch Dinge gehören, für die Jupyter weniger gut geeignet ist, wie z. B. eine vernünftige Versionierung oder Reproduzierbarkeit beim Testen des Codes.

  7. #10 Joachim
    15. Mai 2021

    @ Spritkopf 🙂
    Hab geade einen relativ langen Post „sozusagen für dich“ in die Queue gelegt (zurück gehalten).
    Vielleicht möchtest du ja mal sagen, was so deine Anforderungen/Ziele sein könnte oder warum dich das interessiert?

    Versionierung oder Reproduzierbarkeit beim Testen ist vielleicht für den Profi wichtig. Aber es braucht nicht immer das ganz große Besteck. Es kommt eben immer darauf an.

    TL;DR: frag ruhig, was immer du wissen willst. Wenn ich es nicht weiß, dann vielleicht jemand Anderes.

  8. #11 Spritkopf
    16. Mai 2021

    @Joachim

    Vielleicht möchtest du ja mal sagen, was so deine Anforderungen/Ziele sein könnte oder warum dich das interessiert?

    Hm, bin mir nicht sicher, ob ich deine Frage richtig verstehe. Meinst du mit “deine Anforderungen/Ziele” das, was ich an Christian Meesters’ Stelle lehren würde oder das, was tatsächlich an Anforderungen in meiner täglichen Arbeit an mich gestellt wird?

    Für den ersteren Fall könnte ich das gar nicht sagen. Wie schonmal an anderer Stelle geschrieben bin ich nicht im Wissenschaftsbetrieb drin und mein Interesse ist da mehr vom Wunsch nach einem unverbindlichen Blick über den Tellerrand getrieben.

    In meiner Praxis hingegen ist Versionierung und ihre Dokumentation das A und O. Ich betreue eine größere technische Anwendung, die in unterschiedlichen Versionen und auch mit unterschiedlichen Versionen der Zusatzbibliotheken im Einsatz ist. Bei sämtlichen Kunden immer das neueste Update einzuspielen ist aus verschiedenen Gründen nicht möglich. Zudem kann es passieren, dass für einzelne Kunden eine Spezialversion der Software erstellt werden muss, was ich natürlich versuche zu vermeiden wie der Teufel das Weihwasser. Da bin ich gezwungen, das “große Besteck” zu verwenden, wie du es so schön ausdrückst, oder ich komme über kurz oder lang in Teufels Küche.

  9. #13 Joachim
    16. Mai 2021

    @Spritkopf
    Solche Situationen mit verschiedenen Softwareversionen kenne ich auch. Auf der Entwicklerseite hilft mir da natürlich git.

    Der “heiße Scheiß” ist jedoch Virtualisierung mit Docker (oder deren Verwandte). Ich mag das gar nicht, doch wenn ich an Systeme denke, die möglichst 24/7 in der Woche und überall laufen sollen und Windows/Linux basiert sind, dann möchte ich die OS- und Konfigurationsabhängigkeit doch verringern.

    Telefonsupport mit “dann klicken sie mal da” oder “installieren sie den MS-Dingensbums… wie die URL bei MS stimmt nicht?” und so: nein Danke. Da helfen Container massiv, wenn man sie denn anwenden kann(!).

    Docker verwenden wir auch für CI (salopp gesagt: “automatisiertes Testen”) weil hier Reproduzierbarkeit natürlich das A und O ist. Es geht gar nicht, dass ein Test fehlschlägt, bloß weil der Rechner ausgetauscht und “Boost” vergessen wurde.

    Reproduzierbarkeit ist mit solchen Methoden wohl mit am Besten erreichbar.

    Wie gesagt, als Purist mag ich Containerlösungen gar nicht. Aber “always use the right tool” geht vor. Ich kann mir auch gut Anwendungen in Forschung und Lehre denken. Vielleicht kann Christian Meesters dazu was sagen? So wie “Nein, ganz dumm. Geht nicht weil…” 😉 vielleicht in ganz kurz? Würde mich interessieren.

    • #14 Christian Meesters
      16. Mai 2021

      Aber “always use the right tool” geht vor.

      Ja, und Container für CI – klar doch. Docker zum Deployment verwenden wir nicht, wenn dann Singularity – die Containeralternative für HPC-Systeme und andere Multiusersysteme, wo Sicherheit eine Rolle spielt. Aber ich mag sie auch nicht. Für den Moment soll auch gelten: “Weil ich Purist bin”! ;-). Vielleicht schreibe ich mal einen Artikel über die Nachteile von Containerlösungen im wissenschaftlichen Bereich.

      Und ja, Jupyter zum Ausprobieren, warum nicht? Obwohl, Python und R werden überhaupt zu viel verwendet, “superschnell” wird dran geschrieben und dann soll der Mist auf riesige Studiendaten angewendet werden, hat aber nie einen Softwaretest, der über “works-on-my-system” hinausgeht gesehen. Von Optimieren bei Python/R im Vgl. zu C/C++/Rust/… mal abgesehen. Aber das Fass müssen wir jetzt ja nicht wieder aufmachen, oder?

  10. #15 Joachim
    16. Mai 2021

    Nein, das Fass Jupyter müssen wir nicht noch einmal aufmachen. Deshalb hatte ich ja Spritkopf auch gefragt.

    a) In der Queue liegen aber trotzdem Gedanken über die History der Notebook-Idee, verschiedene Lösungsansätze und Gedanken über (existierende Software-) “Laborbücher”, die rechnen können.

    Der Heftrand hier ist leider zu klein für den “Beweis”. Okay, lassen wir das.

    b) Singularity kannte ich nur von Namen. Wieder so’n Container-Ding, dachte ich. Beim Nachschauen ist mir u.A aufgefallen, dass es da ein contiki-Beispiel gibt. Sehr interessant… IoT ist ja auch so ein aktueller “heißer Scheiß” (übersetzt: in aller Munde, doch niemand versteht es wirklich).

    c1) Die Forschungs- und Lehre-Idee zu Containern bezog sich darauf, 100 Studenten mit dem selben System auszurüsten, wo nix kaputt gehen kann, alle identische Voraussetzungen trotz verschiedener Betriebssysteme haben.

    c2) Und es bezog sich darauf, eine Software z.B. für ein Messsystem (aber auch für c1), zusammen zu schnüren und mittels Container sicherzustellen, dass der Kram auch mit dem neuen Laborrechner funktioniert und es einfache Updates geben kann. Manchmal. In der Theorie.

    Bestimmt habt ihr da aber euere Lösungen schon.


    Nun komplett off Topic. Das bedeutet, es ist alles gesagt bis hier. Der Rest ist … keine Ahnung, der Kaffe ist noch nicht alle:

    Ich habe es “erlebt”, dass ein Win95 Rechner in einem Labor einzig für eine spezielle Messaufgabe “die gefühlten Jahrhunderte” überdauerte. Der “Kram” lief einfach sonst nirgendwo. Und der war nicht einfach zu portieren (typisches MS-Basic-Klumpen) oder neu zuschreiben. Zugegeben, bei notwendiger alter Hardware, etwa HPIB oder SCSI, hilft auch kein Container.

    Wo ich gerade dabei bin mit alten Geschichten, aus dem Nähkästchen zum Thema „Lächeln als Softwareentwickler“:

    Bei Basic fällt mir da ein, wo ich mal gezwungen wurde, ein größeres Programm aus einem seltenen Basic-Dialekt nach C unter Windows zu portieren. Meine Lösung sah dann auch aus wie Windows aus (Menü, Accelerator, Fenster, Dialoge usw.) und die Hölle brach los. Was ich mir da erlauben würde, ob ich dächte, der Author (Chef) hätte sich die Bedienung nicht überlegt und so weiter. Nun, es war sein Laden und ich nur klein und dumm. Also flux einen primitiven Basic-C Konverter geschrieben, ein paar Libs (Grafik, IO) für Windows gebaut, einen Teil hatte ich ja schon aus dem funktionierendem Vorgänger und das „Original“ lief unter Windows in einer DOX-Box. Natürlich sah das aus wie ein DOS-Programm. Das war es ja schließlich auch. Der Chef fand das optisch “doch nett”, die Bedienung sei „ganz gut“, wollte noch Vollbild (omg) und sieht sich dann den Quelltext an. Die Hölle brach los. Was ich denn die ganze Woche (!!) getan hätte. Das sei ja nur sein unveränderter Code. Tja, wie man es auch macht, es ist immer verkehrt.

    Das Ende der Geschichte, ich wies dem Chef nach, dass sein Code mehrfach fehlerhaft war. Denn klar, diese Fehler sind natürlich auch bei mir aufgetreten. Diese seine Fehler wurde nur in meiner Version (im Basic-Quelltext auf meiner Festplatte!) korrigiert. Aber das gelangte nie in das „Original“. Versionskontrolle? Merge? Softwarepflege? All so’n neumodischer Kram. Kenn ich nicht. Will ich nicht. Und Fehler? Ich? Nie! Das Programm wurde genau zweimal verkauft.

    Aber bitte nicht falsch verstehen, der Chef damals war klar kompetent in seinem Bereich, nicht einmal ein so schlechter Programmierer und ganz sicher kein „böser Mensch“. Eigentlich gilt sogar das Gegenteil. Und sporadisches Temperament hat ja auch mal was.

    So, die Tasse ist nun leer.

    • #16 Christian Meesters
      16. Mai 2021

      ad a) dazu ist was in der Pipeline.

      Ich habe es “erlebt”,

      Ich auch. :-/