- Rückblick auf eine 25-jährige Programmierreise, die seit der Studienzeit andauert und den Fokus weniger auf Technik selbst als auf Menschen, Beziehungen und Erfahrungen legt
- Zehn Minuten „View Source“ im Computerraum der Universität, eher zufällig gelernt, wurden zum Ausgangspunkt einer langen Zeit des Erstellens und Pflegens einer persönlichen Website
- Ein kleines Experiment, bei dem über den Reset-Vektor des 8086-Prozessors ein Systemneustart ausgelöst wurde, prägte einem Kommilitonen eine von Neugier ausgehende Haltung zum Lernen ein
- Debugging von Spaghetti-Code, das realistische Scheitern von Set-Top-Box-Animationen und eine Spitzenplatzierung bei einem CTF-Wettbewerb zeigen wiederholte Phasen von Versuch, Irrtum und Wachstum
- Mit der Zeit wurde spürbar, wie Problemlösungskompetenz nicht mehr als Talent, sondern als Ergebnis von Erfahrung verstanden wird; am Ende bleiben Fachlichkeit, Ethik und der Umgang mit Menschen
Der Anfang des Webs: den Quelltext ansehen (Viewing the Source)
- Kurz nach dem Studienbeginn im Jahr 2001 begegnete der Autor dem Web zum ersten Mal, als er abends im Computerraum surfte und
susam.com in die Adressleiste eingab
- Ein älterer Student, dem er über die Schulter geschaut hatte, öffnete im Internet Explorer das Menü View > Source und erklärte, dass eine Website aus in HTML geschriebenem Text besteht
- Er öffnete Notepad, schrieb selbst einfaches HTML wie
<BODY><FONT COLOR="RED">HELLO</FONT></BODY> und demonstrierte, wie es im Browser dargestellt wird
- Damals war das
FONT-Tag weit verbreitet, und es war üblich, HTML-Tags in Großbuchstaben zu schreiben
- Er zeigte kurz, wie Schriftgröße und Farbe geändert, Inhalte zentriert und die Hintergrundfarbe angepasst werden können, und erklärte so knapp die Funktionsweise des Webs
- Die Erklärung dauerte nur etwa zehn Minuten, doch das World Wide Web wirkte plötzlich weit weniger geheimnisvoll und deutlich interessanter
- Nach seiner Erklärung gab der ältere Student den Platz nicht zurück, sondern nutzte den Rechner einfach weiter; wegen Platzmangels musste der Autor zurück ins Wohnheim gehen
- Die Domain
susam.com war bereits von einem Unternehmen aus dem Bereich türkischer Küche belegt, daher fiel die Wahl später auf eine .net-Domain
- Diese kurze Begegnung wurde zum Ausgangspunkt einer langen Reise, auf der der Autor seine persönliche Website erstellt und gepflegt hat
Der Reset-Vektor (The Reset Vector)
- Während der Studienzeit schrieb der Autor im Computerraum ein Aufzugsteuerungsprogramm in Assemblersprache auf einem MS-DOS-Rechner auf Basis des Intel 8086
- Dabei erinnerte er sich an den Stoff aus der Vorlesung, dass beim Reset des 8086 CS:IP auf FFFF:0000 gesetzt wird
- In
DEBUG.EXE fragte er sich, was passieren würde, wenn man an genau diese Adresse springt, und probierte es direkt aus
- Unmittelbar nach Ausführung des Befehls
C:\>DEBUG -G =FFFF:0000 startete das System sofort neu
- Ein Kommilitone, der das beobachtete und jedes Semester Jahrgangsbester war, war völlig verblüfft und fragte, wie man überhaupt auf so eine Idee komme
- Eine Woche später kam er ins Wohnheim und gestand, dass er zwar immer die besten Noten habe, ihm aber die Neugier fehle, sich an kleine Fakten zu erinnern und sie selbst auszuprobieren
- Er erklärte, nicht länger auf den Spitzenplatz hinzuarbeiten, sondern künftig so zu lernen, dass er Gelerntes erforscht, ausprobiert und mit Freude vertieft
- Auch danach blieb er unter den Besten, wurde aber tatsächlich nie wieder Erster
- Ein einziges Experiment mit dem Sprung zum Reset-Einstiegspunkt des Prozessors wurde so zum Anlass, die Lernhaltung eines anderen von Wettbewerb auf Entdeckung zu verschieben
Man-in-the-Middle und die erste Engineering-Rolle (Man in the Middle)
- Nach dem Studienabschluss wurde der Autor in seinem ersten Job dem technischen Support-Team für ein E-Banking-Produkt zugeteilt und war dort für das Ausführen eines Installers zur Auslieferung einer bestimmten Komponente zuständig
- Der in Python geschriebene Installer scheiterte häufig, weil seine Annahmen über die Zielumgebung zu fragil waren; in der ersten Woche stabilisierte der Autor den Installer und schrieb eine schrittweise Benutzeranleitung
- Die Benutzeranleitung fand mehr Anklang als Verbesserungen am Code
- Da ihm die Grenzen wiederholter Support-Arbeit bewusst wurden, bat er mehrfach um einen Teamwechsel, um stärker in die eigentliche Entwicklung zu kommen
- Schließlich erhielt er die Gelegenheit zu einem Vorstellungsgespräch beim Archie-Team in einer anderen Stadt
- Das Archie-Team war für das Web-Framework und zentrale Architekturkomponenten zuständig, die das gesamte E-Banking-Produkt trugen
- API-Routing, Authentifizierung und Autorisierung sowie Cookie-Verwaltung wurden intern mit Java Servlet und JSP umgesetzt
- Die Struktur war entstanden, bevor Open-Source-Frameworks wie Spring oder Django aufkamen
- Da das System in Bankumgebungen eingesetzt wurde, waren strenge Sicherheitstests und regelmäßige Audits unverzichtbar
- Im Telefoninterview 2006 konnte der Autor Sicherheitsfragen zu SQL-Injection und XSS beantworten, gab aber offen zu, den Begriff MITM (Man-in-the-Middle-Angriff) noch nie gehört zu haben
- Der Interviewer erklärte: „Lernen Sie PKI und MITM gründlich. Wir wollen in unser Produkt für Corporate Banking eine Funktion für digitale Signaturen einbauen.“
- In den folgenden Wochen arbeitete sich der Autor intensiv in RFC-Dokumente, die Public Key Infrastructure (PKI) und Materialien zu Public-Key-Kryptografie-Standards ein
- Anfangs wirkte das schwierig und einschüchternd, mit der Zeit erschien es jedoch zunehmend intuitiv und als ausgefeiltes System
- Etwa einen Monat nach dem Umzug in die neue Stadt stellte er die Funktion für digitale Signaturen mithilfe der Open-Source-Bibliothek Bouncy Castle fertig
- Danach entwickelte er weitere zentrale Teile des Produkts und sammelte die Erfahrung, dass eigener Code in ein ausgereiftes System einfließt, das von Hunderten Banken und Millionen Nutzern verwendet wird
- Sein Manager war ein hervorragender Mentor, und dessen Unterstützung bildete lange Zeit eine wichtige Grundlage seines Selbstvertrauens
- Auch rund 20 Jahre später ist das Produkt noch im Einsatz; öffnet der Autor gelegentlich als Kunde die Browser-Entwicklertools, entdeckt er Spuren des damals geschriebenen Codes
Spaghetti-Code (Spaghetti Code)
- Um 2007 bis 2008 arbeitete der Autor an einem Proof of Concept (PoC) für die Widget-Entwicklung auf OpenTV-Set-Top-Boxen
- Beim Schreiben von Code in einer extrem eingeschränkten C-Umgebung trat das Problem auf, dass die Widgets gelegentlich abstürzten
- Durch komplex ineinander verschachtelte Logik und wahllose Pointer-Operationen geriet der Code in einen Zustand von Spaghetti-Code, den selbst der Autor kaum noch verstand
- Er übergab den Code als Tarball an den Architekten, der zugleich Teamleiter eines vierköpfigen Teams war
- Ein Problem, das er über Stunden nicht lösen konnte, lokalisierte der Architekt bereits fünf Minuten nach Erhalt des Codes exakt als Pointer-Bug in einer bestimmten Datei
- Nach der Korrektur dieser einen Zeile verschwand der Absturz sofort
- Diese Erfahrung machte deutlich, dass er sich zwar für ziemlich gut gehalten hatte, aber bis zu einem wirklich guten Softwareentwickler noch ein weiter Weg vor ihm lag
- Über die folgenden Jahre wuchs er weiter und kann heute mit Softwarekomplexität unvergleichlich besser umgehen als damals
Animierte Fernseh-Widgets (Animated Television Widgets)
- In einem anderen Projekt aus derselben Zeit war der Autor für die Entwicklung von Widgets auf einer Java ME (Micro Edition)-basierten Set-Top-Box-Plattform zuständig
- Das Projekt lief in einer Struktur mit drei beteiligten Parteien
- das eigene Unternehmen als Softwareanbieter
- ein großer Telekommunikationsanbieter mit einer Marke für DTH-Fernsehdienste
- ein Set-Top-Box-Hersteller, der Hardware und Plattform bereitstellte
- Von Seiten des Telekommunikationsunternehmens kam die Frage, ob sich auf die Widgets Animationseffekte wie Hinein- und Hinausschieben anwenden ließen
- In einem Partnertreffen erklärte der Set-Top-Box-Hersteller entschieden, die betreffende Box unterstütze keine Animationen und dies sei nicht möglich
- Der Autor kam zu dem Schluss, dass Animationen möglich sein müssten, wenn Widgets gezeichnet werden können, indem man ihre Position schrittweise verändert und sie wiederholt neu zeichnet
- Nach diesem Prinzip implementierte er eine Demo, die im Emulator korrekt funktionierte
- Als die Demo im nächsten Meeting gezeigt wurde, reagierte der Set-Top-Box-Hersteller verärgert und verlangte einen sofortigen Arbeitsstopp
- Begründung: Das widerspreche der offiziell vertretenen Position, dass dies unmöglich sei
- Ein Vertreter des Telekommunikationsunternehmens griff ein und tadelte scharf, dass der Hersteller sein eigenes Produkt offenbar nicht kenne, wenn eine Funktion, die angeblich unmöglich sei, von diesem Team umgesetzt werde
- Bei späteren Tests auf echter Hardware zeigte sich jedoch, dass die im Emulator flüssigen Animationen auf dem Fernseher deutlich ruckelten
- Über mehrere Wochen wurden Framerate, Buffering-Verfahren und Rendering-Loop optimiert
- Dabei wurde sichtbar, dass die begrenzte Leistung der Embedded-Hardware Rechenaufwand und Rendering nicht bewältigen konnte
- Am Ende entschied der Telekommunikationsanbieter, dass gar keine Animation besser sei als eine schlechte, und verwarf die Funktion vollständig
- Im Ergebnis bestätigte sich, dass die Einschätzung des Set-Top-Box-Herstellers praktisch betrachtet richtig gewesen war
Gute Segnungen (Good Blessings)
- 2009 arbeitete der Autor nach etwa einem Jahr bei RSA Security auf der Suche nach intellektuell anspruchsvollerer Arbeit mit stärkerem Fokus auf Mathematik und Algorithmen
- Der leitende Wissenschaftler der RSA Laboratories, Dr. Burt Kaliski, bot persönlich ein Gespräch an und gab Ratschläge zur beruflichen Ausrichtung
- Auf Grundlage dieses Rats wechselte der Autor in ein neues Team und blieb dort sechs Jahre
- Arbeit an Parser-Generatoren, Spezifikation und Implementierung formaler Sprachen
- Entwicklung von Indexierungs- und Query-Engines für Datenbanken im Petabyte-Maßstab
- Fast täglich etwas Neues zu lernen machte diese Zeit zur erfreulichsten seiner Laufbahn
- Jahre später wurde ihm bewusst, dass dieses kurze Gespräch seinen Karriereverlauf verändert hatte, und er schickte eine dankbare E-Mail
- In Dr. Kaliskis Antwort stand unter anderem
- dass es sein Ziel sei, Menschen in ihrer Entwicklung zu ermutigen, so wie andere zuvor in seine eigene Karriere investiert hätten
- gute Segnungen von einer Generation an die nächste weiterzugeben
Das CTF-Scoreboard (The CTF Scoreboard)
- Im Jahr 2019 war der Autor längst kein Berufseinsteiger Anfang zwanzig mehr, sondern ein erfahrener Staff Engineer, der über Jahre hinweg Low-Level-Netzwerk- und Datenbanksysteme in C/C++ entwickelt hatte
- Seine Karriere ging in eine neue Phase über, in der er die Entwicklung von Microservices auf Basis von Go und Python leitete
- Da er Python und Go bereits in privaten Projekten genutzt hatte, verlief der Wechsel vergleichsweise natürlich
- Im Oktober, dem Monat des Cybersecurity-Bewusstseins, wurde unternehmensintern ein CTF-Wettbewerb (Capture the Flag) veranstaltet
- Er bestand aus technischen Rätseln unterschiedlicher Art, darunter SQL-Injection, schwache Kryptografie, Binary Reversing und Stack-Overflow-Exploits
- Trotz seines Unbehagens gegenüber kompetitivem Problemlösen unter Zeitdruck nahm der Autor teil und löste in etwa acht Stunden rund 90 % der Aufgaben, was Platz 1 bedeutete
- Während des Wettbewerbs kamen Kollegen immer wieder vorbei, schauten auf den Fortschritt und zeigten sich überrascht, sodass es im Büro zum Gesprächsthema wurde
- Zufällig hörte der Autor ein Gespräch zwischen zwei jüngeren Ingenieuren mit, die er sehr respektierte
- Als einer seine Leistung sehr hoch einschätzte, antwortete der andere: „Klar, er arbeitet doch seit über zehn Jahren mit C.“
- In jüngeren Jahren wäre solches Problemlösen als „Intelligenz“ gesehen worden; nun spürte der Autor die Veränderung, dass es ganz selbstverständlich als Ergebnis von Erfahrung gelesen wird
- Selbst wenn technische Leistungen als Folge von Erfahrung gelten, möchte er künftig vor allem durch Fachlichkeit, Ethik und den Umgang mit Kolleginnen und Kollegen einen guten Eindruck hinterlassen
Gesamtrückblick
- Die 25-jährige Reise durch die Welt des Computings beginnt mit Neugier und führt über Experimentieren, Zusammenarbeit, Dankbarkeit und Reflexion
- Mehr als auffällige technische Erfolge bleiben die Beziehungen zu Menschen und zum Lernen, die in diesem Prozess entstanden sind
- Die Erfahrungen der einzelnen Phasen greifen ineinander und verdichten sich zu kontinuierlichem Wachstum und einer Haltung der Demut
- Im Kern einer Laufbahn in der Softwareentwicklung stehen letztlich nicht der Code selbst, sondern die Geschichten der Menschen, mit denen man gelernt und gearbeitet hat
1 Kommentare
Hacker-News-Kommentare
Früher gab es dieses Vertrauen, dass Leute gute Arbeit leisten, wenn man ihnen eine Aufgabe überträgt.
Heute verlangt man von Junior Engineers dagegen Architekturentwürfe auf Twitter-Niveau und lässt sie Leetcode-Aufgaben auswendig lernen.
So etwas war früher ein nutzloses Verfahren, und man hofft, dass LLMs diese Kultur wieder abschaffen werden.
Ich habe ganz ähnlich angefangen.
In der 3. Klasse sah ich auf einer Schulbuchmesse das Buch „Make Your Own Web Page! A Guide for Kids“ und bat meine Mutter, es mir zu kaufen.
Damals dachte ich, das Internet sei quasi nur etwas für Unternehmen, und als ich merkte, dass ich selbst Webseiten bauen konnte, war ich völlig begeistert.
Beim Lernen von HTML hatte ich das Gefühl, ein Hacker zu sein, und meine Lehrerin war so erstaunt, dass sie sogar meine Eltern anrief.
Danach lernte ich Programmieren mit „Sams Teach Yourself C in 24 Hours“, einem ActionScript-Buch für Flash MX 2004 und einem C++-Buch.
Heute habe ich dadurch eine ganz ordentliche Karriere aufgebaut und musste kürzlich lächeln, als ich das Buch bei eBay noch einmal fand und gelesen habe.
Ich musste laut lachen bei der Stelle, an der der Mitarbeiter des Telekommunikationsanbieters dem Zuständigen für die Set-Top-Box sagte: „Halten Sie einfach den Mund.“
Die ganze Situation war absurd und gleichzeitig komisch. Menschen verbeißen sich oft in unnütze Dinge und bringen sich damit selbst in Schwierigkeiten.
Stattdessen ließ er sich wie ein Idiot wirken. Trotzdem war es wirklich ein sehr unterhaltsamer Text.
Ich konnte den Teil nachvollziehen, in dem ein in Python geschriebener Installer wegen falscher Annahmen über die Umgebung immer manuelle Eingriffe brauchte.
Ich habe selbst einen halben Tag damit verbracht, eine SDR-Entwicklungsumgebung aufzusetzen. Dependency Hell gibt es immer noch.
Am Ende lief es zwar, aber es war wirklich ein einziges Chaos.
Auf der Server-Seite, wo man die Umgebung mit Containern kontrollieren kann, ist es gut, aber außerhalb davon möchte ich es absolut nicht verwenden.
Dort war alte kommerzielle Software mit vernachlässigten OSS-Projekten vermischt, und alle paar Monate ging irgendetwas zufällig kaputt, sodass die Entwicklung stillstand.
Eine Firma entschied sich schließlich sogar dafür, für jeden Entwickler AMI-basierte EC2-Instanzen bereitzustellen, aber selbst die CLI zu deren Verwaltung ging häufig kaputt.
Das waren wirklich „interessante“ Zeiten.
Ich gehe jetzt auch auf 20 Jahre Berufserfahrung zu, aber weil ich nur Webentwicklung gemacht habe, habe ich wohl keine besonders interessanten Anekdoten.
Je älter man wird, desto weniger sind Leute beeindruckt, selbst wenn man technische Probleme löst.
Wenn ich aber eines Tages als alter Mensch immer noch code, wirkt das vielleicht wieder beeindruckend.
Bei dem Satz „er sprang zum Reset-Vektor des Prozessors“ dachte ich, dass nicht nur die CPU, sondern auch die Lernhaltung dieser Person zurückgesetzt wurde.
Wenn man sich für DevOps interessiert, kann ich Davide Bianchis "Tales from the Machine Room" empfehlen.
Es hieß, die Domain „susam.com“ sei damals nicht zu bekommen gewesen, aber jetzt ist sie zum Verkauf verfügbar.
Vielleicht bekommt man sie sogar unter dem Listenpreis. Natürlich ist .net auch okay, aber wenn eine emotionale Bindung daran hängt, wäre ein Versuch vielleicht sinnvoll.
Danke fürs Teilen der schönen Geschichten.
Erfahrung aus der Softwarebranche vor den LLMs ist etwas, das man nur versteht, wenn man es selbst erlebt hat.