Des Königs neuer Toaster
Es war einmal ein König, der herrschte gütig und weise über ein Königreich nicht weit von hier. Eines Tages rief der König seine zwei klügsten Ratgeber zu sich. Er zeigte ihnen einen glänzenden Kasten, in dessen Oberseite zwei längliche Öffnungen geschnitten waren, und aus dessen Seite ein Drehknopf und ein Hebel herausragten.
„Erkennt Ihr diese Gerätschaft?“
Einer der Ratgeber, ein Ingenieur, antwortete zuerst. „Das ist ein Toaster.“ sagte er.
Der König sprach: „Es ist mein Wille, daß dieser eine Computer-Steuerung erhalte. Wie wollt Ihr diese Aufgabe lösen?“
Da gab der Ingenieur zur Antwort: „Wir nehmen am besten einen 4-Bit-Mikrocontroller. Auf dem lassen wir ein kleines Programm laufen, welches die Winkelstellung des Drehknopfes ausliest und in 16 Stufen quantisiert. Diese ihrerseits entsprechen 16 Bräunungsgraden, von schneeweiß bis kohlschwarz. Das Programm benutzt dann den Bräunungsgrad als Index für eine Tabelle mit 16 Zeitintervallen. Durch Herunterdrücken des Hebels, der die Brotscheibe absenkt, wird die Heizwicklung eingeschaltet, und eine Kurzzeit-Schaltuhr wird mit dem Zeitintervall aus der Tabelle initialisiert. Nach Ablauf der Schaltuhr wird die Heizwicklung ausgeschaltet und der Toast ausgeworfen. Nächste Woche kann ich Euch einen Prototyp vorführen, wenn es Eurer Majestät beliebt.“
Der zweite Ratgeber, ein Informatiker, erkannte sofort die Torheit solch engstirniger Sichtweise.
Er sprach: „Ein Toaster soll nicht nur Weißbrotscheiben in Toast verwandeln, er wird auch - unter Anderem - dazu benutzt, um tiefgefrorene Waffeln aufzutauen. Was Ihr hier vor Euch seht, ist in Wahrheit ein Nahrungsmittel-Gargerät für den Frühstückstisch. Da die Untertanen Eurer Majestät ihre Lebensart ständig verfeinern, werden sie bald eine erweiterte Funktionalität verlangen. Sie werden ein Gargerät wollen, welches in der Lage ist, Würstchen zu wärmen, Speck zu braten, und Rühreier zuzubereiten. Ein Toaster, der nur Brot rösten kann, wird sehr schnell veraltet sein. Wenn wir nicht vorausschauend handeln, müssen wir den Toaster in wenigen Jahren völlig überarbeiten. Im Lichte dieser Erkenntnis können wir nunmehr eine intelligentere Lösung des Problems formulieren. Zuerst führen wir eine Klasse von Frühstücks-Nahrungsmitteln ein. Diese Klasse spezialieren wir in Unterklassen: Getreide-, Schweinefleisch- und Geflügelprodukte. Die Spezialisierung betreiben wir weiter: Getreideprodukte werden eingeteilt in Toast, Brötchen, Pfannkuchen und Waffeln; Schweinefleischerzeugnisse in Würstchen, Rippchen und Speck; und Geflügelprodukte in Rühreier, harte Eier, Eier im Glas, Spiegeleier und die verschiedenen Klassen von Eierkuchen.“
„Der Eierkuchen mit Schinken und Käse verdient besondere Beachtung, denn er muß Eigenschaften aus Schweine-, Molkerei- und Geflügelerzeugnis-Klassen erben. Damit wird unmittelbar einsichtig, daß das Problem ohne Mehrfach-Vererbung nicht sauber lösbar ist. Zur Laufzeit muß das Programm das entsprechende Objekt erzeugen und ihm eine Mitteilung schicken, die lautet 'Gare Dich'. Die Semantik dieser Mitteilung hängt natürlich von der Instanziierung des Objekts ab - sie hat für ein Stück Toast eine völlig andere Bedeutung als für Rühreier.“
„Lassen wir das Gesagte noch einmal Revue passieren. In der Spezifikationsphase haben wir als Grundanforderung das Garen von Frühstückslebensmitteln identifiziert. In der Entwurfsphase haben wir weitere, davon abhängige Anforderungen herauskristallisiert. Insbesondere zeigt sich die Notwendigkeit für einen Objekt-orientierten Ansatz mit Mehrfach-Vererbung. Natürlich wollen die Benutzer nicht, daß ihnen die Eier kalt werden, während der Speck gebraten wird. Also brauchen wir auch die Fähigkeit zur Parallel-Verarbeitung.“
„Dabei dürfen wir die Benutzeroberfläche nicht aus dem Auge verlieren. Der Hebel, mit dem das Nahrungsmittel abgesenkt wird, ist nicht vielseitig einsetzbar, und der Bräunungsknopf ist nicht intuitiv. Niemand wird das Produkt kaufen, wenn es keine benutzerfreundliche, graphische Bedienoberfläche hat. Wenn das Frühstücks-Gargerät ans Netz angeschlossen wird, sollte der Benutzer auf dem Bildschirm eine Ikone - vielleicht einen Zündschlüssel - sehen, die er anklicken kann. Dann erscheint die Mitteilung 'Windows 13 startet - bitte warten'. (Bis wir mit dem Produkt auf dem Markt sind, wird es Windows 13 sicher geben.) Wenn das System betriebsbereit ist, kann der Benutzer ein Menü aufziehen und das Nahrungsmittel anklicken, das er zu garen wünscht.“
„Da wir die weise Entscheidung getroffen haben, die Software in der Entwurfsphase als Erstes zu spezifizieren, bleibt nur noch übrig, eine angemessene Hardware-Plattform für die Implementierungsphase auszuwählen. Ein 3.4 GHz Intel® core™ i7 mit 6 Prozessorkernen, 32 GB Arbeitsspeicher, 5 TB Festplatte und einem 1920 x 1080 HD-Monitor sollte ausreichen. Wählt man eine objekt-orientierte Sprache, die sowohl Multithreading - besser noch Multitasking - als auch Mehrfach-Vererbung unterstützt, und die im Sprachumfang eine graphische Benutzeroberfläche enthält, sollte die Programmierung ein Klacks sein. (Majestät stelle sich nur die Schwierigkeiten vor, die wir hätten, wenn wir uns auf eine einfältige Hardware-orientierte Entwurfsstrategie eingelassen hätten, die uns auf einen 4-Bit-Mikrocontroller festlegt!)“
Der König ließ den Informatiker in den Burggraben werfen, und wenn sie nicht gestorben sind, dann toasten sie noch heute.
1 Als ich das Original dieses Textes vor etwa 15 Jahren zum ersten Mal fand, stand dieser Name darunter. Wahrscheinlich war es aber nur der Name des Usenet-Posters...