Der erste Programmierer der Welt
Der britische Mathematiker Charles Babbage hat im neunzehnten Jahrhundert im Alleingang den ersten Computer der Welt entworfen (jedoch nicht zu Ende gebaut)
Charles Babbage (1791-1871) war Nachfolger von Isaac Newton auf den berühmten Lucasian Professorship of Mathematics in Cambridge. Über die Jahrhunderte haben andere illustre Wissenschaftler wie Airy, Stokes, Dirac und Hawking diese Professur bekleidet.
Am Anfang seiner Karriere hat sich Babbage mit abstrakten mathematischen Fragen beschäftigt, später hat er sich mehr und mehr für den Bau von Rechenmaschinen interessiert. Mit seiner Analytical Engine lieferte er bereits im neunzehnten Jahrhundert den Entwurf für das, was wir heute einen Computer nennen würden. In der Analytical Engine gab es einen Prozessor und einen Zahlenspeicher für Dezimalzahlen. Der Prozessor konnte die vier Grundrechenarten ausführen. Das Programm wurde über Lochkarten, wie bei mechanisierten Jacquard-Webstühlen, gelesen. Der bedingte Sprung gehörte zu den erdachten Kontrollflussbefehlen, womit u.a. auch Programmschleifen implementiert werden konnten.
Die Maschine konnte jedoch nicht vollständig gebaut werden. Die notwendige Mechanik war zu anspruchsvoll für die damalige Zeit -- das erforderliche Detailengineering überschritt die Kräfte des Entwicklers, der den ganzen Mechanismus praktisch im Alleingang und nur mit Unterstützung von ausgebildeten Mechanikern, ersonnen hatte.
Zweifellos war Charles Babbage der erste, der Programme für seine Maschine schrieb. Bis zu vierundzwanzig solcher Programme sind überliefert. Bis zur Entwicklung der frei verdrahtbaren Hollerith-Maschinen schrieb niemand mehr Programme, als Babbage es zu seiner Zeit getan hatte.
Die mathematische Arbeit von Babbage
Charles Babbage war Student an der Universität Cambridge, als er sich bereits, als einer der augenfälligeren Verfechter der Leibniz- statt der Newton-Notation, für die Integral- und Differentialrechnung einen Namen machte. Auch in seiner späteren mathematischen Karriere hat Babbage immer Gelegenheit gehabt, sich mit Problemen der wissenschaftlichen Notation zu beschäftigen. Er wusste, wie wichtig diese für die Entwicklung von abstrakten Gedanken (und später für die Programmierung) sein kann.
In gewissem Sinne hat Babbages mathematische Karriere ihn direkt zur Entwicklung des Computers geführt. Seine ersten Arbeiten, ab 1815, beschäftigen sich mit der sogenannten Funktionalanalysis. Hier rücken Funktionen in den Mittelpunkt der Betrachtung: Gegeben gewisse Eigenschaften bzw. Einschränkungen geht es darum, alle Funktionen zu finden, die die gestellten Bedingungen erfüllen. Differentialgleichungen z.B. sind ein Teilgebiet der Funktionalanalysis. Mathematiker wie Euler und Lagrange haben auf dem Gebiet Pionierarbeit geleistet.
Nach und nach wechselte jedoch Babbages Interesse von der bloßen abstrakten algebraischen Darstellung von Funktionen zu deren Berechnung in Tabellen über. Dafür gab es die sogenannte Differenzmethode, die bereits mit Papier und Bleistift für die Erstellung von komplexen Tabellen erfolgreich angewandt worden war.
Die heutige Generation von Studierenden mit dem Taschenrechner in der Hand braucht sich nicht mehr mit Logarithmentafeln und trigonometrischen Tabellen quälen. Noch bis in die siebziger Jahre mussten Ingenieure lernen, geschickt mit solchen Tabellen umzugehen. Ein Heft mit den Logarithmentafeln, für die schnelle Erledigung von Multiplikationen und Divisionen, durfte in keiner Studentenausrüstung fehlen (d.h. bei Ingenieuren und Naturwissenschaftlern). Die Erstellung von dicken Bänden mit mathematischen Tabellen war sogar eine durch den Staat finanzierte Angelegenheit, da diese z.B. für die maritime Navigation und für die Astronomie sehr wichtig waren.
Vor Babbage hatte bereits Gaspard Riche de Prony ab 1792 in Frankreich die industrielle Anfertigung von Tabellen von Funktionen erdacht. De Prony entwarf eine wahre mathematische "Fabrik", in der die Formeln von Mathematikern wie Lagrange an eine zweite Abteilung übergeben wurden, die diese dann in einer Form auseinandernahm und so "programmierte", dass am Ende die dritte Abteilung von "Computern" (Menschen, die mit Papier und Bleistift arbeiteten) nur die arithmetischen Grundoperationen auszuführen brauchten, um Endresultate zu erhalten. So konnte die zweite Abteilung wiederum die Ergebnisse gruppieren und in die Tabellen eintragen. De Pronys "Fließband" für die Produktion von Tabellen war ein Computer aus Fleisch und Blut, bei dem die Berechnungskomponenten Menschen waren.
Vor Babbage war also die minutiöse Zerlegung von Rechenverfahren in elementare und gestaffelte Grundoperationen von den Franzosen zur Virtuosität entwickelt worden. Babbage besuchte Paris im Jahr 1819 und konnte dort de Pronys Tabellen und die Zerlegung von Rechenverfahren in Elementarschritte studieren. Deswegen reden einige Autoren heute von "Software, bevor es Computer gab"1, da Ende des 18. Jahrhunderts bereits Rechenprogramme von Menschen am Fließband ausgeführt wurden.
Die Differenzmaschine
Die erste von Babbage für die Berechnung von Tabellen von Funktionen erdachte Maschine war die sogenannte "Difference Engine". Die Idee dafür entstand um 1820/1821, als Babbage und sein Freund John Herschel die Ergebnisse von zwei unterschiedlichen "Computern" (d.h. Menschen die unabhängig voneinander gerechnet hatten) verglichen und viele Fehler entdeckten.2 Spontan schlug Babbage vor, eine Maschine dafür zu bauen, um Flüchtigkeitsfehler zu vermeiden. Für die Berechnung wollte er die Differenzmethode verwenden.
Die Grundidee lässt sich anhand einer Tabelle der Quadrate von Zahlen erläutern. Nehmen wir an, ich will die Tabelle der Quadrate der ganzen Zahlen ab 1 rechnen. Ich kann per Hand eine kleine Tabelle erstellen, wie in den ersten drei Zeilen von Abb. 2 gezeigt, wo die erste Spalte die Quadrate enthält. Man kann dann manuell die "erste Differenz" zwischen benachbarten Zahlen errechnen (z.B. Quadrat von 2 minus Quadrat von 1) und das Resultat kann in Spalte 2 eingetragen werden. Die Differenz dieser Differenzen ergibt Spalte 3. Ab Spalte 3 sind die Differenzen konstant, man braucht nicht weiter Differenzen zu berechnen (da diese nur Nullen wären).
Jetzt kann man allerdings ab der Zeile für die Zahl 4 das Verfahren invertieren und die Differenzen sukzessiv addieren, wie die Pfeile in Abb. 2 andeuten. Das Ergebnis auf Spalte 1 ist eine Tabelle der Quadrate der ganzen Zahlen, die Zeile für Zeile wächst. Die einzige Operation, die man braucht, ist die Addition, die sich Zeile für Zeile wiederholt.
Heute könnte man so etwas ohne weiteres von einem Tabellenkalkulationsprogramm berechnen lassen. Man braucht nur Addition und Subtraktion, falls einige Differenzen negativ wären. Beliebige Polynome lassen sich auf diese Weise unter Verwendung einer Tabelle berechnen, lediglich die Anzahl der Spalten wächst mit dem Grad des Polynoms.
Aus Abb. 2 erkennt man sofort, dass für diese Art der Tabellenberechnung nur eine Kette von Addierern/Subtrahierern (einer pro Spalte) notwendig ist. Und das war genau das, was Babbages Differenzmaschine leisten sollte.
Babbage konnte 1822 an die Royal Society melden, dass er einen kleinen Prototyp für die Berechnung von Polynomen bis Grad 2 gebaut hatte. Seine Absicht war, eine größere Maschine zu bauen. Die Finanzierung dafür erhielt Babbage von der Regierung. Nur kurz danach hat sich Babbage aber zunehmend für kompliziertere Funktionen interessiert (solche bei denen die n-te Differenz nicht konstant ist).3
Babbages erste Idee war die Resultate in die Maschine als n-te Differenz zurück zu koppeln. Dafür könnte man die Addierer im Kreis platzieren und so "beißt sich die Maschine am Schwanz". Babbage hat solche Rückkopplungen studiert und verallgemeinert. So ist bei ihm nach und nach die Idee gereift, eine Maschine für die Behandlung von beliebigen Funktionen aus der Analysis zu bauen. Daher der Name der neuen Erfindung: Sie sollte Analytical Engine heißen.
Die Analytische Maschine
Die Arbeit an der Differenzmaschine endete, wie beim Berliner Flughafen, mit einem großen Streit zwischen den am Bau beteiligten Parteien. Im Sommer 1834 konnte Babbage die Architektur der neuen Maschine jedoch in großen Zügen formulieren. In den weiteren Jahren erstellte er Blaupausen für die verschiedenen Teile des Geräts, das im Grunde ein echter Computer sein sollte.
Die Analytische Maschine sollte so wie die Differenzmaschine mit Dezimalzahlen arbeiten, weil ein Zahnrad durch seine Rotation leicht zehn Ziffern darstellen kann. Vierzig gestapelte Zahnräder könnten auf diese Weise Dezimalzahlen mit 40 Ziffern anzeigen. Das war eine naheliegende Entscheidung, obwohl wir heute Binärmaschinen bauen. Der Prozessor sollte vom Speicher getrennt werden. Eine Verbindungsstrecke konnte Zahlen aus dem Speicher zu zwei Registern im Prozessor bringen, wo anschließend die vier arithmetischen Grundoperationen durchgeführt werden konnten. Das Ergebnis wanderte zurück zum Speicher.
Die Maschine sollte am Anfang numerische Lochkarten lesen, um Dezimalzahlen in den Speicher zu bringen. Die Position des Dezimalkommas in der Sequenz von Dezimalziffern konnte in der Maschine eingestellt werden.
Das Programm wurde aus zwei Strängen von Lochkarten gelesen: die Operationskarte gab an, ob eine Addition, Subtraktion, Multiplikation oder Division auszuführen war. Die Variablenkarten aus einem zweiten Strang gab an, welches die Argumente waren und wo im Speicher das Resultat zu speichern war. Ein Programm für die Analytische Maschine (ohne den Kommentar) könnte so aussehen:
Der Strang von Operationskarten konnte beliebig lang sein. Auch für den Strang von Variablenkarten war keine Obergrenze gesetzt. Man hätte ohne Weiteres eine Differenzmaschine simulieren können, da Babbage auch die Möglichkeit des Druckens der Ergebnisse vorsah. Dafür würde die Maschine die Druckplatten selber erstellen und selbsttätig die notwendigen Ziffern aus einem Setzerkasten holen.
Ein arithmetischer Rechner ohne bedingten Sprung oder ohne Schleifen ist kein vollwertiger Computer. Babbage hat für seine Maschine aber den bedingten Sprung vorgesehen: Wäre ein Resultat im Prozessor null oder zu groß (Overflow), konnte dies getestet werden. Anschließend konnten die Operationskarten, falls gewünscht, zurückgerollt werden, um eine Schleife zu implementieren. Die Sprünge konnten bei den Operationskarten auch nach vorne getätigt werden. Solche Sprünge sollten mit "combinatorial cards" bearbeitet werden, die im Strang der Operationskarten an geeigneter Stelle platziert werden sollten.
Nur um sich die gedankliche Leistung von Babbage beim Entwurf der Analytical Engine vor Augen zu führen sollte man dies berücksichtigen:
- Weder die Harvard Mark I noch die ENIAC, d.h. Maschinen, die mehr als 100 Jahre später gebaut wurden, haben Prozessor vom Speicher getrennt.
- Weder die Z3 (1941) noch die Z4 (1945) von Konrad Zuse hatten den bedingten Sprung im Befehlssatz. Der bedingte Sprung wurde bei der ENIAC durch einen Trick nachgerüstet.
- Die heute so genannte von-Neumann-Architektur war bei der Analytical Engine vorhanden.
Außerdem hatte Babbage an einen grafischen Plotter für die Maschine gedacht, an Fehlertoleranz bei den Berechnungen, an die Möglichkeit, Zwischenergebnisse in Lochkarten unterzubringen (wie später bei der ENIAC) und sogar an Verfahren, mit denen die Richtigkeit der erstellten Druckplatten überprüft werden konnte.
Bei der Konstruktion stieß Babbage allerdings wieder auf ähnliche bauliche Probleme,wie bei der Differenzmaschine, so dass von der Analytical Engine nur einige Teile vervollständigt werden konnten. Das Design an sich war aber "sound", d.h. korrekt, und zwar so, dass das Londoner Wissenschaftsmuseum bereits an einen möglichen Nachbau innerhalb der nächsten Jahre arbeitet4, um den 200. Jahrestag der Analytical Engine gebührend feiern zu können.
Die Programme von Babbage
Wer kann deswegen daran zweifeln, dass der Erfinder der Analytical Engine nicht die ersten Programme für die Maschine selbst erstellte? Es gibt aber solche Zeitgenossen, wie man leicht im Internet überprüfen kann. Man kann jedoch selbst einige der Programme von Babbage durchsehen und feststellen, dass alle Elemente, die später in anderen wenigen veröffentlichten Programmen für die Maschine auftauchten, bereits von Babbage benutzt worden waren.
Abb. 5 zeigt ein Programm von Babbage. Es geht um die Berechnung der Multiplikation der Koeffizienten (A, B, C,...) eines Polynoms mit den Koeffizienten (a,b,c,...) eines anderen Polynoms. Man braucht eine Oberschleife, die alle Koeffizienten mit Großbuchstaben durchläuft, und eine Unterschleife für die Koeffizienten aus der zweiten Gruppe, d.h. zwei eingebettete Schleifen. In Babbages Programm finden wir also den bedingten Sprung (immer wenn eine volle bzw. gestrichelte horizontale Linie gezogen wird) und Schleifen, auch eingebettet.
Nun, ein "pet problem" von Charles Babbage war die Berechnung der Bernoulli-Zahlen. Diese sind bei der sogenannten Differentiellen Analyse wichtig, weil sie bei der Expansion von vielen Funktionen immer wieder erscheinen. Das besondere an den Bernoulli-Zahlen ist jedoch, dass ihre Tabelle sich nicht mit einer Differenzmaschine erstellen lässt. Die Bernoulli-Zahlen wachsen schneller als eine geometrische Folge und so liegen sie jenseits der Möglichkeiten einer Differenzmaschine.
Babbage wollte aber einen Rechner für die ganze Analysis haben. Dazu gehören die Berechnung von solchen Zahlen und die von Grenzwerten in Folgen von Zahlen. Deswegen musste er die Möglichkeit für Schleifen einbauen, und deswegen musste er sein Design erweitern, um auch mit nicht konstanten Differenzen rechnen zu können. In den Collected Works von Babbage kann man im Band II fast Schritt für Schritt verfolgen, wie er immer kompliziertere Fälle untersucht bis er die Differenzmethode schließlich fallen lässt.
Wie oben erwähnt, hat Babbage zwischen den Jahren 1837 bis 1840 vierundzwanzig verschiedene Programme für die Analytische Maschine erstellt, die heute im Babbage Archiv in London aufbewahrt werden. Einen Teil davon nahm er im Jahre 1840 mit nach Turin, wo er die Analytische Maschine und seine Programmierung vorstellte. Ein wichtiger Teil der Erläuterungen betraf die Benutzung der bedingten Sprünge in den Programmen. Im Jahr 1842 erschien eine Zusammenfassung der damaligen Vorträge (in Französisch) aus der Hand eines jungen Mathematikers, Luigi Menabrea, der drei Programme in den Bericht eingebaut hat. Die englische Übersetzung erschien ein Jahr danach.
Dies bedeutet, dass Babbage um 1840 seine Programme bei diversen Anlässen gezeigt und erläutert hat. Er wusste von der Mächtigkeit seiner Maschine, da er bereits im Jahre 1841, d.h. ein Jahr bevor Menabreas Bericht überhaupt erschien, in einem Brief an Alexander von Humboldt gerade die Berechnung der Bernoulli-Zahlen als Beispiel der Rechenstärke der Analytical Engine erwähnte.5
Als Experte für Differentielle Analyse war Babbage in vollem Umfang mit den Bernoulli-Zahlen und deren numerischer Berechnung vertraut. Er wusste genau, wie man die iterative Berechnung durchführen konnte und es würde verwundern, wenn er seine Behauptungen gegenüber von Humboldt nicht vorher auf dem Papier geprüft hätte.
Schlussbetrachtung
Abschließend kann man anmerken: Hätte Babbage seine Analytical Engine bis zum Ende gebaut, würde diese Maschine als erster Computer der Welt gelten. Sie enthielt alles, was wir heute von einem Computer erwarten. Deswegen ist die angedachte Rekonstruktion in London das wichtigste aktuelle Vorhaben auf dem Gebiet der Geschichte des Computers. Man kann sich nur fragen, wie die Wissenschaftsgeschichte anders verlaufen wäre, wenn bereits im neunzehnten Jahrhundert Computer zur Verfügung gestanden hätten.
Es ist auch klar, dass Babbage die richtigen Ideen in Bezug auf Rechnerarchitektur hatte. Bis 1945 übertrifft kein Rechner die Architektur der Analytischen Maschine. Nur Zuses Z3 und Z4 waren innovativer, wegen der binären floating-point Architektur. Der bedingte Sprung war aber nicht vorhanden und wurde erst um 1950 bei der Z4 nachgerüstet.6
In den Collected Works von Charles Babbage7 kann man den Entwicklungsprozess Schritt für Schritt nachvollziehen, der ihn von der Differenzmaschine bis zur Analytical Engine brachte.8 Sie bezeugen auch, welche Rolle Grenzwerte und Funktionen ohne konstante n-te Differenz dabei spielten. Man muss sich aber die Mühe machen, diese wunderbare Sammlung, die von Martin Campbell-Kelly 1989 fertig gestellt wurde, in der Bibliothek zu erforschen.
Babbage hat sogar an die Möglichkeit der symbolischen Berechnung durch Programme gedacht, die die Operationskarten für andere Programme erstellen würden, ohne Kenntnis der Variablenwerte zu besitzen. Bereits 1836 hat er dies eine "developing engine" genannt (heute würden wir sagen Interpreter), die er freilich nie entwarf.9 Seine Zuversicht, dass die Analytische Maschine auch in Zukunft symbolisch rechnen könnte, haben freilich andere in seiner Umgebung aus seinen Ausführungen aufgeschnappt, ohne wirklich zu verstehen, wie er dies bewerkstelligen wollte.
Charles Babbage war also der erste Computererfinder der Welt. Er war zweifellos auch der erste Mensch, der Computer programmiert hat. Sein Output als Programmierer blieb Jahrzehnte lang unübertroffen. Seine Programme hat er öffentlich gezeigt und zur Verfügung gestellt, z.B. 1840 in Turin. Niemand anderes hat im neunzehnten Jahrhundert mehr Weitblick in Bezug auf Rechenmaschinen und ihren Fähigkeiten besessen. Er hat keine Fantasien schwärmerisch und poetisch beschrieben, sondern Handfestes in Prosa erfunden. Anderslautende Ansichten stützen sich nur auf Märchen und Ignoranz der tatsächlichen Geschichte des Computers.