In den frühen Tagen war Excel mit einer sehr umständlichen, namenlosen Programmiersprache ausgestattet. Wir nannten sie einfach „Excel-Makros“. Es handelte sich um eine stark fehlerbehaftete Programmiersprache ohne Variablen (Werte mussten in Arbeitsblattzellen gespeichert werden), ohne lokale Geltungsbereiche und ohne Unterprogrammaufrufe – kurz gesagt, sie war nahezu unpflegbar. Sie besaß zwar fortgeschrittene Funktionen wie „Goto“, doch die zugehörigen Sprungmarken waren physisch unsichtbar. Das Einzige, was sie einigermaßen erträglich erscheinen ließ, war der Vergleich mit Lotus-Makros, die nichts anderes als eine Abfolge von Tastenanschlägen waren, die als lange Zeichenkette in einer Arbeitsblattzelle gespeichert wurden.
Am 17. Juni 1991 begann meine Tätigkeit bei Microsoft im Excel-Team als „Program Manager“. Meine Aufgabe war es, eine Lösung für dieses Problem zu finden, wobei die Annahme bestand, dass diese Lösung etwas mit der Programmiersprache Basic zu tun haben würde. Basic? Igitt!
Ich verhandelte einige Zeit mit verschiedenen Entwicklungsgruppen. Visual Basic 1.0 war gerade erst erschienen und unglaublich cool. Es gab eine fehlgeleitete Anstrengung unter dem Codenamen MacroMan und eine weitere Initiative zur Entwicklung eines objektorientierten Basics namens „Silver“. Dem Silver-Team wurde gesagt, dass sie nur einen einzigen Kunden für ihr Produkt hätten: Excel. Der Marketing Manager für Silver, Bob Wyman – ja, genau dieser Bob Wyman – musste seine Technologie nur einer Person verkaufen: mir.
MacroMan war, wie gesagt, fehlgeleitet, und es bedurfte einiger Überzeugungsarbeit, aber es wurde schließlich eingestellt. Das Excel-Team überzeugte das Basic-Team davon, dass wir wirklich eine Art Visual Basic für Excel benötigten. Es gelang mir, vier meiner „Lieblingsfeatures“ zu Basic hinzufügen zu lassen. Ich setzte Varianten durch, einen Union-Datentyp, der jeden anderen Typ aufnehmen konnte, da man sonst den Inhalt einer Tabellenkalkulationszelle nicht ohne eine Switch-Anweisung in einer Variablen speichern konnte. Ich erreichte die Einführung von Late Binding, das als IDispatch, auch bekannt als COM Automation, bekannt wurde. Der ursprüngliche Entwurf für Silver erforderte nämlich ein tiefes Verständnis von Typsystemen, um die sich Makroprogrammierer nicht kümmerten. Und ich brachte zwei syntaktische Features in die Sprache: For Each, von csh übernommen, und With, von Pascal gestohlen.
Anschließend machte ich mich daran, die Spezifikation für Excel Basic zu schreiben – ein riesiges Dokument, das auf Hunderte von Seiten anwuchs. Ich glaube, es waren am Ende 500 Seiten. („Wasserfall“, mögen Sie schnippisch bemerken; ja, ja, sei still.) Dies war ein entscheidender Schritt in der Excel VBA Entwicklung.
In jenen Tagen gab es bei uns sogenannte BillG-Reviews. Im Grunde wurde jedes wichtige Feature von Bill Gates persönlich geprüft. Mir wurde aufgetragen, vor dem Review eine Kopie meiner Spezifikation in sein Büro zu schicken. Es war im Wesentlichen ein Stapel Laserdruckpapier. Ich beeilte mich, die Spezifikation auszudrucken und schickte sie in sein Büro.
Später am Tag hatte ich etwas Zeit und begann herauszufinden, ob Basic genügend Datums- und Zeitfunktionen hatte, um all die Dinge zu tun, die man in Excel tun konnte. In den meisten modernen Programmierumgebungen werden Daten als reelle Zahlen gespeichert. Der ganzzahlige Teil der Zahl ist die Anzahl der Tage seit einem vereinbarten Datum in der Vergangenheit, der sogenannten Epoche. In Excel wird das heutige Datum, der 16. Juni 2006, als 38884 gespeichert, wobei der 1. Januar 1900 als Tag 1 zählt.
Ich arbeitete mich durch die verschiedenen Datums- und Zeitfunktionen in Basic und die Datums- und Zeitfunktionen in Excel, probierte Dinge aus, als mir etwas Seltsames in der Visual Basic-Dokumentation auffiel: Basic verwendet den 31. Dezember 1899 als Epoche anstelle des 1. Januar 1900, doch aus irgendeinem Grund war das heutige Datum in Excel dasselbe wie in Basic. Hä?
Ich suchte einen Excel-Entwickler, der alt genug war, sich an den Grund zu erinnern. Ed Fries schien die Antwort zu wissen. „Oh“, sagte er mir. „Schau dir den 28. Februar 1900 an.“ „Es ist 59“, sagte ich. „Versuch jetzt den 1. März.“ „Es ist 61!“ „Was ist mit 60 passiert?“, fragte Ed. „Der 29. Februar. 1900 war ein Schaltjahr! Es ist durch 4 teilbar!“ „Gute Vermutung, aber daneben“, sagte Ed und ließ mich eine Weile rätseln.
Ups. Ich recherchierte. Jahre, die durch 100 teilbar sind, sind keine Schaltjahre, es sei denn, sie sind auch durch 400 teilbar. 1900 war kein Schaltjahr. „Das ist ein Fehler in Excel!“, rief ich aus. „Nun, nicht wirklich“, sagte Ed. „Wir mussten es so machen, weil wir Lotus 1-2-3 Arbeitsblätter importieren können mussten.“ „Also, ist es ein Fehler in Lotus 1-2-3?“ „Ja, aber wahrscheinlich ein absichtlicher. Lotus musste in 640K passen. Das ist nicht viel Speicher. Wenn man 1900 ignoriert, kann man feststellen, ob ein bestimmtes Jahr ein Schaltjahr ist, indem man einfach schaut, ob die beiden rechtesten Bits Null sind. Das ist wirklich schnell und einfach. Die Lotus-Leute dachten wahrscheinlich, dass es keine Rolle spielt, für diese zwei Monate weit in der Vergangenheit falsch zu liegen. Es sieht so aus, als wollten die Basic-Leute diese zwei Monate penibel genau nehmen, also verschoben sie die Epoche einen Tag zurück.“ „Aargh!“, sagte ich und machte mich auf den Weg, um zu untersuchen, warum es in den Optionen ein Kontrollkästchen namens 1904 Date System gab.
Der nächste Tag war das große BillG-Review, der 30. Juni 1992. In jenen Tagen war Microsoft viel weniger bürokratisch. Anstelle der 11 oder 12 Managementebenen, die sie heute haben, berichtete ich an Mike Conte, der an Chris Graham berichtete, der an Pete Higgins berichtete, der an Mike Maples berichtete, der an Bill berichtete. Etwa 6 Ebenen von oben nach unten. Wir machten uns lustig über Unternehmen wie General Motors mit ihren acht Managementebenen oder was auch immer es war.
Bei meinem BillG-Review-Meeting war die gesamte Berichtshierarchie anwesend, zusammen mit ihren Cousins, Schwestern und Tanten, und eine Person aus meinem Team, deren einzige Aufgabe während des Meetings darin bestand, genau zu zählen, wie oft Bill das F-Wort sagte. Je niedriger die F**-Zahl, desto besser. Bill kam herein. Ich dachte darüber nach, wie seltsam es war, dass er zwei Beine, zwei Arme, einen Kopf usw. hatte, fast genau wie ein normaler Mensch. Er hatte meine Spezifikation in der Hand. Er hatte meine Spezifikation in der Hand! Er setzte sich und tauschte witzige Bemerkungen mit einem Manager aus, den ich nicht kannte und die für mich keinen Sinn ergaben. Ein paar Leute lachten. Bill wandte sich mir zu. Ich bemerkte, dass es Kommentare am Rand meiner Spezifikation gab. Er hatte die erste Seite gelesen! Er hatte die erste Seite meiner Spezifikation gelesen und kleine Notizen am Rand gemacht!*
Angesichts der Tatsache, dass wir ihm die Spezifikation erst etwa 24 Stunden zuvor gegeben hatten, musste er sie in der Nacht zuvor gelesen haben. Er stellte Fragen. Ich beantwortete sie. Sie waren ziemlich einfach, aber ich kann mich beim besten Willen nicht erinnern, was sie waren, weil ich nicht aufhören konnte zu bemerken, dass er die Spezifikation durchblätterte… Er blätterte die Spezifikation durch! [Beruhige dich, was bist du, ein kleines Mädchen?] … und ÜBERALL AM RAND WAREN NOTIZEN. AUF JEDER SEITE DER SPEZIFIKATION. ER HATTE DAS GANZE VERDAMMTE DING GELESEN UND NOTIZEN AM RAND GEMACHT. Er hat das ganze Ding gelesen! [OMG SQUEEE!] Die Fragen wurden schwieriger und detaillierter.
Sie schienen etwas zufällig. Mittlerweile war ich es gewohnt, Bill als meinen Kumpel zu betrachten. Er ist ein netter Kerl! Er hat meine Spezifikation gelesen! Er will mir wahrscheinlich nur ein paar Fragen zu den Kommentaren am Rand stellen! Ich werde für jeden seiner Kommentare einen Bug im Bug-Tracker öffnen und dafür sorgen, dass er sofort behoben wird!
Endlich die Killerfrage. „Ich weiß nicht, Leute“, sagte Bill, „schaut sich jemand wirklich alle Details an, wie man das macht? Zum Beispiel all diese Datums- und Zeitfunktionen. Excel hat so viele Datums- und Zeitfunktionen. Wird Basic die gleichen Funktionen haben? Werden sie alle auf die gleiche Weise funktionieren?“ „Ja“, sagte ich, „außer Januar und Februar 1900.“ Stille. Der F-Zähler und mein Chef tauschten erstaunte Blicke aus. Woher wusste ich das? Januar und Februar WAS? „OK. Nun, gute Arbeit“, sagte Bill. Er nahm seine markierte Kopie der Spezifikation … warte! Das wollte ich haben … und ging. „Vier“, verkündete der F-Zähler, und alle sagten: „Wow, das ist das Niedrigste, an das ich mich erinnern kann. Bill wird im Alter milder.“ Er war, wissen Sie, 36.
Später wurde mir erklärt: „Bill will deine Spezifikation nicht wirklich überprüfen, er will nur sicherstellen, dass du die Kontrolle darüber hast. Seine Standardvorgehensweise ist es, immer schwierigere Fragen zu stellen, bis du zugibst, dass du es nicht weißt, und dann kann er dich anschreien, weil du unvorbereitet bist. Niemand war sich wirklich sicher, was passiert, wenn man die schwierigste Frage beantworten kann, die ihm einfällt, weil es noch nie zuvor passiert ist.“ „Können Sie sich vorstellen, wenn Jim Manzi in diesem Meeting gewesen wäre?“, fragte jemand. „’Was ist eine Datumsfunktion?’ hätte Manzi gefragt.“ Jim Manzi war der MBA-Typ, der Lotus in den Ruin trieb.
Das war ein guter Punkt. Bill Gates war erstaunlich technisch versiert. Er verstand Varianten, und COM-Objekte, und IDispatch und warum Automation anders ist als VTables und warum dies zu Dual-Interfaces führen könnte. Er machte sich Sorgen um Datumsfunktionen. Er mischte sich nicht in Software ein, wenn er den Leuten vertraute, die daran arbeiteten, aber man konnte ihn keine Minute lang anlügen, weil er ein Programmierer war. Ein echter, tatsächlicher Programmierer. Microsoft 365 Programme haben sich seitdem stark weiterentwickelt.
Nicht-Programmierer dabei zu beobachten, wie sie Softwareunternehmen führen wollen, ist wie jemandem zuzusehen, der nicht surfen kann und es trotzdem versucht. „Es ist in Ordnung! Ich habe großartige Berater am Ufer, die mir sagen, was ich tun soll!“, sagen sie, und fallen dann immer wieder vom Brett. Der Standardruf des MBA, der glaubt, dass Management eine generische Funktion ist. Wird Ballmer ein weiterer John Sculley sein, der Apple fast in die Bedeutungslosigkeit trieb, weil der Vorstand dachte, dass der Verkauf von Pepsi eine gute Vorbereitung für die Führung eines Computerunternehmens sei? Der Kult des MBA glaubt gerne, dass man Organisationen führen kann, die Dinge tun, die man nicht versteht. Auch die Anwendung von beste Excel Formeln erfordert ein gewisses Verständnis.
Im Laufe der Jahre wurde Microsoft groß, Bill überdehnt, und einige zwielichtige ethische Entscheidungen machten es notwendig, viel zu viel Management-Aufmerksamkeit dem Kampf gegen die US-Regierung zu widmen. Steve übernahm die CEO-Rolle mit der Theorie, dass dies Bill ermöglichen würde, mehr Zeit mit dem zu verbringen, was er am besten konnte: die Softwareentwicklungsabteilung zu leiten. Doch das schien die endemischen Probleme nicht zu beheben, die durch diese 11 Managementebenen, eine Kultur permanenter Meetings, ein hartnäckiges Bestehen darauf, jedes mögliche Produkt zu entwickeln, egal was passiert (wie viele Milliarden Dollar hat Microsoft durch Forschung und Entwicklung, Anwaltskosten und Rufschädigung verloren, weil sie beschlossen, nicht nur einen Webbrowser zu entwickeln, sondern ihn auch kostenlos anzubieten?), und ein paar Jahrzehnte schlampiger, schneller Einstellung sorgten dafür, dass die Intelligenz des durchschnittlichen Microsoft-Mitarbeiters stark sank (Douglas Coupland in Microserfs: „Sie stellten allein 1992 3.100 Leute ein, und Sie wissen, dass nicht alle von ihnen Juwelen waren.“).
Ach ja. Die Party ist weitergezogen. Excel Basic wurde zu Microsoft Visual Basic for Applications für Microsoft Excel, mit so vielen (TM)s und (R)s, dass ich nicht weiß, wohin ich sie alle setzen soll. Ich verließ das Unternehmen 1994, in der Annahme, Bill hätte mich völlig vergessen, bis ich ein kurzes Interview mit Bill Gates im Wall Street Journal bemerkte, in dem er beiläufig erwähnte, wie schwer es sei, zum Beispiel einen guten Program Manager für Excel zu rekrutieren. Sie wachsen nicht einfach auf Bäumen, oder so ähnlich. Könnte er über mich gesprochen haben? Nein, es war wahrscheinlich jemand anderes. Trotzdem. Die Geschichte der Excel WENN DANN Funktion ist ein Beispiel für die stetige Weiterentwicklung von Funktionen.
Die Entwicklung von VBA in Excel ist ein faszinierendes Zeugnis dafür, wie technologische Notwendigkeit und individuelle Beiträge die Landschaft der Softwareentwicklung prägen können. Sie zeigt die Bedeutung von visionärer Führung, technischer Expertise und der oft unsichtbaren Arbeit derjenigen, die die Bausteine unserer digitalen Welt schaffen. Möchten Sie selbst tiefer in die Welt von Excel eintauchen? Starten Sie einen Excel Probemonat und entdecken Sie die Möglichkeiten, die diese mächtige Software bietet.
