Es gibt einen Ruhepol für mich, an dem ich konzentriert sein kann, ohne größere Ablenkung. Beschäftigte Hände, die mechanisch Dinge tun, ohne dass ich groß aufpassen muss; Jedenfalls nicht mehr, als es Aufmerksamkeit beim Umgang mit einem Messer erfordert. Kochen ist eindeutig eine Art von Meditation; Ich steh gerne in meiner Küche.Neues ausprobieren fetzt zwar auch hier, zum meditieren und einfach nur das Mittag für morgen fertig kriegen taugt das aber nicht. Ich gehöre zu den Leuten die »wieviel braucht man davon?!« nachgucken, die Zutat und das Messer in die Hand nehmen und sich »wieviel wars?!!« fragen. Nee. Rezepte, die Pi mal Daumen funktionieren, das entspannt. Am liebsten habe ich Gerichte, die mich linear Zutaten zerschnippeln und in Topf oder Pfanne werfen lassen. Manchmal hab ich noch eine Idee mittendrin, nichts wildes. Am Ende kommt dann etwas genießbares raus, das kann nicht schief gehen.Programmieren hat für mich mal so angefangen. Und der Reiz war, dass es nicht nur einen Weg zum Ziel gab. Ein bisschen Kreativität auf dem Weg war erlaubt. Ab durch den Compiler & Linker und gucken, was geht; Freude.

In letzter Zeit ist es einfach nur schwierig geworden, auf Arbeit sichtbar etwas zu schaffen. Vieles an Software da draußen ist einfach kaputt. Nicht unbedingt vom Code her: Die Infrastruktur ringsrum! Was da vorausgesetzt wird, das es zu installiern und in Betrieb zu nehmen gilt! Man arbeitet sich durch Dokumentationen und nimmt die Anleitungen, um nachzuvollziehen, was und wie da etwas benutzt wird. Und dann stellt man fest, dass die wichtigen Details fehlen. Es ergibt keinen Sinn aus dem Schritt heraus, wo man gerade steht und was man jetzt tun soll.Überhaupt wird oft genug vergessen einfach mal einen Abriss zu schreiben, was da eigentlich zusammengeflanscht wird und wie das miteinander spielen soll. »Klick mich, ich bin eine Anleitung.« aber ich sag Dir nicht, wie ein Fehler oder Erfolg nach diesem Schritt aussieht. Nee, ich bin so cool, ich funktioniere immer (auf der Maschine des Entwicklers, höhö). Ich baller Dich jetzt mit einer unglaublichen Menge an Ausgaben zu, aber ob das jetzt gut oder schlecht ist, geklappt hat oder ein Fehler aufgetreten ist: Finds doch raus ^^Besten Falls sind die Anleitungen löchrig, oft genug basieren sie zur Hälfte auf intrinsischem Wissen des Entwicklers, der sie schrieb. Manchmal findet man sogar nur eine Linksammlung nach dem Motto „da“ und „dort“ und „hier“ steht was dazu, wie’s es geht und nu‘ mach. Sowas funktioniert natürlich überhaupt nicht. Sobald Schritte nicht klar erklärt sind und man sich in jenem System nicht so sehr auskennt, steht man im Fehlerfall wie der Ochs vorm Berg. Und wie gesagt: Der Embedded-Kram funktioniert in den allerseltensten Fällen auf Anhieb. Inzwischen sind wir ja nicht mehr bei einem einzelnen Buildsystem, immer ist irgend ein Metakram drüber gebügelt, der den unterschiedlichsten Tool-Zoo bündelt und vor allem das Rad gern neu erfindet.Ich wüsste gern, warum sich Programmierer oft für so viel schlauer halten, als alle anderen. Und vor allem wie sie auf die Idee kommen, alles auch so viel besser zu machen, als die anderen! Tut ihr nicht, ihr vergrößert nur den Zoo abartiger Tools. Nehmt was da ist. Was auch super ist, wenn jeder auf seine eigene Programmiersprache besteht. Komplexe Systeme bestehen plötzlich aus wilden Mixturen von C, C++, Java Script und dem unvermeidlichen Pyhton. Ein beschissenes Paket, das in einer neuen Version daherkommt und schon fällt der ganze irre Bootstrap-Prozess aufs Maul, spuckt meist eine wenig hilfreiche Meldung aus.Es ist unglaublich, was ich allein an Zeit für mein letztes Projekt verbraten habe, nur um überhaupt eine Umgebung zu haben, in der ich Firmware entwickeln kann! Docker hat mir in dem Fall tatsächlich geholfen, mit auf Versionen festgepinnten git commits/tags und Tool-Versionen am Ende alles da drin zu haben, sodass ich Firmware für einen Microcontroller bauen kann. Wiederholbar und zuverlässig. Aber die Zeit bis das ging! Das darf ich gar niemandem erzählen…Aber der Kunde, für den ich das mache, ist ja nun auch nicht auf der Wurschtbrühe daher geschwommen. Und die einzige Rechtfertigung ist, dass ich ihm etwas in die Hand drücke, was er in 20 min auf seinem Rechner installieren kann, und womit er die Firmware warten und weiter entwickeln kann. Dafür ist die ursprüngliche Deadline für die eigentliche Aufgabe aber nicht mehr zu halten. Sie ist glücklicher Weise nicht hart, es drängen keine Messen und Produktionsstarts. Aber soll einen das trösten? Entschuldigen? Weil’s anderen ja auch so geht? Kann man den Status Quo so akzeptieren?Die Komplexität des ganzen Krams und wozu er dient steht sowieso in keinem Verhältnis mehr. Ich bin nur froh, dass bei mir so direkt keine Menschenleben dran hängen; Dann wäre es mit meinem ruhigen Schlaf jedenfalls definitiv vorbei. Zeug programmieren, an das Leute ihr Leben hängen? Nachdem ich gesehen habe, was da unter der Haube steckt? Niemals! Es ist aus meiner Sicht unmöglich harte Garantien für irgendwas abzugeben, was über Bitgeschubse auf einem einfachen Controller hinaus geht. Ich möchte das jedenfalls nicht, reinen Gewissens könnte ich das gar nicht! Das ist dafür alles deutlich zu Komplex und liefe beim Versuch einer Garantie nur auf »eigenen Arsch bedecken« und »Compliance Theater« hinaus; „Wir haben ja so und so nach den und den Regeln getestet!!“ Jo und? *Bumm* hat’s offenbar trotzdem gemacht, sonst müsste man sowas ja nicht derart rechtfertigen.Nachdem mein Docker-Container funktionierte, hatte ich sowas wie Hoffnung: Das Dockerfile für das Image war doch nicht so lang, möchte sagen: überschaubar. Aber die ersten Versuche, Firmware-Beispiele zu bauen und auf einen Controller zu laden: Nö. Vielleicht ist es vom Kunden nicht die Beste Idee gewesen, ein neues System auf einem Controller entwickeln zu wollen, bei dem »Preliminary« fett über alle Seiten der PDF-Dokumentation des µC gestempelt ist. Bei dem ich auf dem Dev-Board eine Beta-Version des µC fand, der im aktuellsten SDK des Herstellers selbstredend nicht mehr unterstützt wird, sondern nur noch die Mass-Production-Version…Man kann das alles als »Verkettung unglücklicher Umstände« titulieren, aber ich fühle mich bei sowas dann doch wie die Pressestelle: Nicht ganz die Wahrheit aber immerhin knapp an einer dreisten Lüge vorbei. Ich würde gern dahin zurückkehren kommen, wo ich Code schreibe, Funktionalität einbaue, tatsächlich etwas erschaffe. So ein bisschen Kreativität und deutlich weniger Tool-Zoo- und Infrastruktur-Albtraum, dafür mehr aktuelle Dokumentation + Anleitungen, das wäre nett. Dann fände ich sogar Zeit, saubere Doku zu schreiben, mir sinnvolle Tests für meinen Kram zu überlegen und nicht nur das offensichtliche automatisch testen zu lassen.Ich wüsste ganz gern, wieviele Entwickler sich an solchem Kram schon verbrannt und dann einfach abgewendet haben. Vieles macht den Eindruck, nur gerade genug Zeit bekommen zu haben, die Funktionalität hinzukriegen. Beim Testen sieht’s schon dünn aus und die Dokumentation ist zwar da, bezieht sich aber auf einen längst veralteten Stand. Und der nächste frickelt dran rum und glaubt am Ende ein bisschen zu blöde zu sein: Muss doch laut Anleitung funktionieren!

Es wird leicht vergessen, was notwendige Pflicht und was Würze ist; Warum wir tun, was wir tun. Dafür brauchen wir Zeit. Wir ersparen sie damit dem nächsten. Ich will meine jedenfalls nicht an unvollständiger Dokumentation verbrennen.Was ihr am Ende nicht sehen konntet ist, dass ich Ras el-Hanout und ein bissschen Tomatenmark beim Anbraten der Zwiebeln dazugegeben habe, und nachdem alles andere wieder in der Pfanne war: Salz, Pfeffer und meine selbst gemachte Gemüsebrühe. Gleich nach dem Duft der in der trockenen Pfanne schmorgelnden Champis waren das die wichtigen Momente. Für mich.

Guten Appetit.

(swg)