Anmerkungen zur Automation
Caroline Dubois (Magazin Nr. 3) hat gefordert, daß die Computerstudenten einmal die Vorzüge der von ihnen bedienten Gerätschaften ausführen. Dies insbesondere, um den Geisteswissenschaftlerinnen vor Augen zu führen, daß es auch Studiengänge gibt, die nicht ersatzlos streichbar sind, aber auch um einige Voraussetzungen ins Gedächtnis zu rufen, die die von dieser Zeitschrift prätentiös angekündigte ‚kommende Umwälzung‘ betreffen. Statt aber auf die Möglichkeiten der Computer und der durch sie ermöglichten Automation der Produktion einzugehen, will ich lieber darlegen, wie diese seltsamen Kästen in Grundzügen funktionieren, da es mit so scheint, als das die recht schnelle und zumindest in den reichen Ländern auch flächendeckende Einführung dieser Geräte die Masse eher überfordert. Statt also darüber zu schreiben, wie man die Maschinerie dem Management entreißt, um vernünftige Bedingungen zu schaffen, in denen der Mensch sich seine Welt so einrichten kann, wie er sie ihm gemäß befindet, soll in der Hauptsache die technische Seite der Automation berührt werden. Die wichtige Seite der tatsächlichen Umgestaltung dieses Sektors wird dagegen nur kurz am Ende angedeutet.
I. Einführung
Nach einer Definition des Computers befragt, gibt das freie Lexikon an, dieser sei „ein Apparat, der Informationen mit Hilfe einer programmierbaren Rechenvorschrift verarbeiten kann.“ Die zu verarbeitenden Informationen sind innerhalb des Computers (zumindest in der aktuellen Generation) Ketten aus Nullen und Einsen, welche allerdings nach bestimmten Regeln codierte menschliche Information vorstellen. Diese Ketten werden vom Prozessor manipuliert und erzeugt, wobei dieser Verarbeitungsprozeß auf Grundlage von Daten ausgeführt wird, die wahlweise schon in einem Speicher vorliegen oder von außen durch einen Sensor, eine Tastatur oder sonstwie hineinkommen. Wichtig ist dabei, daß die Resultate der einzelnen Manipulationen den weiteren Ablauf der Manipulation beeinflußen. Ein Computer hat ferner die Fähigkeit, die manipulierten Daten auszugeben, sei es auf einen Monitor, Drucker, an die Steuereinheit eines Robotorarmes oder auf einer Festplatte. Genauer besteht er also wesentlich aus einer Datenverarbeitungsvorrichtung (Prozessor), einem Datenspeicher (RAM und Festplatte) und diversen Schnittstellen, welche zwischen Computer und anderen Maschinen oder dem Benutzer vermitteln.
Es ist damit aber nur eine formelle Definition angegeben worden, welche in ihrer Allgemeinheit ihren Nutzen haben mag, aber für unseren Zweck so unbrauchbar ist, wie die moderne Definition der Mathematik als eines „Spiels mit Symbolen, nach gewissen formell festgehaltenen Spielregeln“ oder – wieder die freie Enzyklopädie – „als eine Wissenschaft, die selbst geschaffene abstrakte Strukturen auf ihre Eigenschaften und Muster untersucht“. Man wird nicht unmittelbar schlau aus solchen Definitionen. Vielleicht kann man die gegebene Sache Computer über seine Anwendung begrifflich einzugrenzen.
Dem Wort nach heißt Computer schlicht Rechner, was allerdings nur der Trägheit der menschlichen Begriffsbildung geschuldet ist, als der Computer den alten – oft nur auf dem Papier konstruierten – Rechenmaschinen entsprungen ist. Hier ist aber trotzdem der ursprüngliche Nutzen der Computer enthalten, welche schlicht aus einer Menge Eingangswerte einige Ausgangswerte berechnen sollten. Ihre ersten Anwendungen waren statistischer Natur. Z.B. erhob die amerikanische Regierung einige Daten über ihr Menschenmaterial, indem sie zahlreiche Lochkarten stanzen und durch mechanische Computer verarbeiteten ließ. Privat wurden die großen Rechner der frühen Computerzeit in der Hauptsache von Banken und Versicherungen genutzt. Dazu kamen bald auch wissenschaftliche Berechnungen, welche in großer Zahl schnell und exakt von den neuen Maschinen bewältigt wurden. Für solche Zwecksetzungen war schnell auch die Verwaltung von Daten in sog. Datenbanken notwendig, welche heute aus sämtlichen Betrieben nicht wegzudenken sind.
Verrechnung und Abfragen von Daten spielen hier selbstverständlich ineinander. Das Finden eines kürzesten Weges in einem in einer Datenbank codierten Gleisnetz kann nur durch algorithmische Verarbeitung der hierzu notwendigen Daten gelingen. Hierbei geht man letztlich schon zur digitalen Simulation einer in der Welt tatsächlich vorhanden Struktur über, als der kürzeste Weg schlicht durch Ausprobieren aller möglichen Wege gesucht wird, so daß man quasi virtuell Züge fahren läßt, um dann per Versuch und Irrtum die gewünschte Verbindung zu finden. Auf im Prinzip gleiche Weise kann man kosmologische Prozesse, Wetterentwicklung, chemische Verbindungen simulieren und manchmal zukünftige Entwicklungen ablesen. Solche Simulationen von bestimmten Aspekten der materiellen Welt ist dabei eine Hauptanwendung der Computer. Es handelt sich hierbei schon um keine bloße Rechenanwendung.
Eine weitere wesentliche Anwendung der Computer ist die Steuerung von anderen Maschinen. So kann jede mit ein wenig Übung Dateien erstellen, die einen Drucker veranlaßen, das Gewünschte auf Papier zu bringen. Analog kann man auch Schweißgeräte, Bohrmaschinen, Greifarme, Bagger etc. steuern, um so den Naturstoff diffizil zu formen, ohne selbst Hand an den zu formenden Gegenstand anzulegen. Es ist dabei das Wesen der Maschine, daß durch sie die elementaren Naturbewegungen benutzt werden, die Natur zu formen: Der Mensch spannt die elementaren Naturkräfte ein und lässt sie aufeinander wirken. Er bringt so die äußere Natur dazu, sich selbst zu formen wie er es will; indessen kann der Mensch – nachdem er den Prozeß begonnen hat – zurücktreten und abwarten, bis die Natur ihre Dienste erledigt hat. Zur Maschine gehören daher drei Komponenten: Erstens das Werkzeug, z.B. die Spindeln einer Webmaschine; zweitens eine Bewegungsquelle, welche die Maschine zum tanzen bringt, z.B. das Feuer sich verzehrender Briketts; drittens ein ausgeklügelter Mechanismus, der die ursprüngliche elementare Bewegung in die filigrane Bewegung der Werkzeuge transformiert. Dabei kann dieser Mechanismus auch durch in Bahnen gelenkte Auflösung einer elektrischen Spannung gesteuert werden. Durch die Benutzung von Computern aber werden solche elektrischen Steuerprozesse der durch die Naturkräfte betriebenen Werkzeuge sehr anpassungsfähig kontrollierbar. So kann man schon heute die Natur zu Autos formen und zusammensetzen, ohne das der Mensch in den wesentlichen Produktionsschritten überhaupt benötigt wird.
Diese universelle Vermittlung zwischen Mensch und Maschine scheint mir die interessanteste Nutzung der neuen elektrischen Kästen zu sein, insofern hier die generalisierte Automation der Produktion angelegt ist, so daß die Menschen sich in Zukunft zunehmend den feinen Arbeiten widmen können oder – der Muße. Daneben gibt es noch einige sadistische Nutzungen, etwa das Optimieren von Produktionsabläufen, Dienstplänen etc. – was allerdings ebenfalls unter besseren Produktionsverhältnissen wieder zum Vorteil der Gattung ausschlagen kann. Ferner natürlich die Überwachung durch den Staat, indem z.B. die automatische Verarbeitung von Kamerabildern den Kriminellen einige Schwierigkeiten zumutet. Nicht zu unterschätzen ist aber auch die durch Computer vermittelte Kommunikation zwischen Menschen, welche nun über das Internet allerlei Daten austauschen können und es auch tun, wenn sie auch bislang noch keinen geeigneten Inhalt der Kommunikation gefunden haben. Hier ist den Individuen sogar die Möglichkeit gegeben, unkompliziert Sexualpartner zu finden oder mit fremden Menschen zu reden, jeweils ohne sich zu schämen.
Außerdem eignen sich Computer relativ gut dazu, diese Welt zu verlassen. Ein Amokläufer fand für das Leben hier das schöne Kürzel S.A.A.R.T. (1), welches zahlreiche Schüler akzeptieren, indem sie die lächerliche Welt von World of Warcraft dem real life auf der Erde vorziehen und so ihre Verachtung über die ihnen von ihren Eltern hinterlassene Welt zum Ausdruck bringen. Es fragt sich hier nur, ob diese Spielwütigen herausfinden, daß im realen Leben noch einige Aufgaben auf sie warten, die an Spannung den simulierten Quests der Spielwelten überlegen sein dürften, als bei der Umwandlung der alten Welt sicher einige Überraschungen passieren, von denen heute noch niemand auch nur eine Ahnung besitzt. Ein Teil der Spielsucht rührt dabei natürlich auch daher, daß die Kinder anders als ihre Eltern durchaus merken, daß die in den 3D-Spielen dokumentierte Fähigkeit zur Datenmanipulation faszinierend ist.
II. Rechenmaschinen
Die Bezeichnung Computer ist, wie schon gesagt, einer der zahllosen Begriffe, die einmal verworfen werden. Sie drückt nur die Unfähigkeit der Gattung aus, mit dieser diffizilen Steuerungseinheit umzugehen. Ein Computer kann zwar u.a. auch Rechnen und kein Programm der Welt würde laufen, wenn er dies nicht könnte, aber eine Rechenmaschine ist trotzdem so wenig ein moderner Computer, wie eine Dampfmaschine eine Dampflok. (Obwohl natürlich die Dampflok eine Dampfmaschine beinhaltet, wie der Computer eine Rechenvorrichtung.) Trotzdem ist es unabläßlich, über Rechenmaschinen zu reden, um die Funktionsweise eines modernen elektronenbasierten Computers zu erläutern.
Die erste Voraussetzung für die Entwicklung von Rechenmaschinen ist die Mathematik selbst und ihre zunehmend mechanische Behandlung. Sämtliche Rechungsarten müssen auf ein einfaches System von Regeln gebracht werden: Hat man es geschafft, das ganze mathematische Gebäude aus einigen Axiomen streng induktiv abzuleiten, so kann man leicht sämtliche Operationen durch Zusammenschaltung einiger Zahnräder oder elektrischer Bausteine von der Natur ausführen lassen. Schon das Zahlensystem eignet sich hierfür gut, da es die Anzahl in Einer, Zehner, Hunderter usf. aufteilt, so daß man nicht für jede Zahl einen eigenen Begriff braucht, vielmehr mit wenigen Ziffern auskommt. Auf diese Weise gelingt es spielend, mit beliebig großen Quantitäten zu rechnen, indem man einfach stur die erkannten Regeln anwendet. Die heute übliche schriftliche Multiplikation führt beispielsweise diese Operation auf einige Elementaroperationen zurück. Man kann sie ausführen, wenn man nur die entsprechenden Regeln des kleinen Einmaleins kennt. Diese Reduktion der Mathematik auf leicht anwendbare Kalküle – letztlich auf die natürlichen Zahlen und die Addition – ist für heutige Schüler und Studenten eine Zumutung, indem diese darauf konditioniert werden, mathematische Regeln mechanisch auszuführen. Diesem üblichen Sadismus der Lehrer zum Trotz ist diese von Descartes, Leibniz, Cauchy und Weierstrass vorangetriebene Arithmetisierung der Mathematik für Rechenmaschinen höchst brauchbar: Hat man es einmal bewerkstelligt, die Ziffern Null bis Neun darzustellen, kann man sofort alle Zahlen darstellen. Hat man eine Addiermaschine geschaffen, kann man im Prinzip sofort zu umfangreicheren Mechanismen übergehen, die die Multiplikation, Division etc. ausführen. Man kann also die moderne Axiomatik – welche die sogenannte Arithmetisierung der Mathematik vollendete – nicht genug würdigen. Sie hat nicht nur – wie es ein beliebtes Vorurteil will – aus zahllosen Menschen Computer gemacht, sondern überhaupt erst den Computer ermöglicht. (2)
Ist die induktive Behandlung der Quantitäten erst einmal gelungen, muß man diese Regeln in einem zweiten Schritt technisch umsetzen, damit der geformte Naturstoff sie selbstständig vollzieht. Erstes Problem ist die Speicherung oder Repräsentation von Zahlen im Naturstoff. Zweites Problem die Manipulation dieser Zahlen nach bestimmten Regeln. Es spielt dabei – beim Betrachten der Funktionsweise einer Rechenmaschine – keine Rolle, ob man für die Manipulation Zahnräder, Relais oder Siliziumkristalle benutzt, bzw., zum Darstellen der Zahlen, Löcher in Karten stanzt, spiralförmig angeordnete Kerben in eine Art Plastik brennt (DVD, CD) oder Ferritkerne unterschiedlich magnetisiert. Ebensowenig spielt es eine prinzipielle Rolle, ob man Einer, Zehner, Hunderter, Tausender oder Einer, Zweier, Vierer, Achter etc. verwendet, um die Quantitäten zu kodieren. Allerdings eignet sich das Binärsystem momentan deutlich besser als das Dezimalsystem und auch die elektrischen, magnetischen und optischen Phänomene erwiesen sich den Zahnrädern der ersten Rechenmaschinen überlegen. Zunächst hatte man aber nur das Dezimalsystem – wenn auch schon Leibniz das binäre System bevorzugte – und Zahnräder.
Um eine Zahl zu repräsentieren, ordneten die Konstrukteure der ersten mechanischen Rechenmaschinen jeder Zacke eines zehnzackiges Zahnrad eine Ziffer zu und ferner jeder Ziffer einer darzustellenden Zahl ein eigenes Zahnrad. Auf diese Weise kann man auch die Ausgabe anzeigen, indem man auf jede Zacke jedes Ziffernrades die zugeordnete arabische Ziffer schreibt und kennzeichnet, an welcher Position die gerade gültige Ziffer erscheint. Hierzu kann man z.B. eine runde Messingplatte mit einem Loch auf das Ziffernzahnrad montieren, und so dafür sorgen, daß überhaupt nur die gültige Ziffer nach außen lesbar ist. So für die Ausgabe modifizierte Zahnräder ordnet man nebeneinander an, so daß schließlich das Resultat schlicht als Zahl erscheint.
Um jetzt zum Resultat z.B. die Zahl 400 zu addieren, musste man nur das für die Hunderter zuständige Zahnrad der Ausgabe um vier Zacken weiter drehen. Dreht sich ein Zifferrad von 9 auf 0, so muß die nächste Ziffer eine Zacke weiter gedreht werden (Übertrag). So funktionierte bei den berühmten Rechenmaschinen von Pascal und Leibniz die Addition. Das Rechenwerk reduziert sich letztlich schlicht auf das Weiterdrehen der Ziffernräder um die gerade benötigte Anzahl der Stellen.
Es fehlt noch die Realisierung der Eingabe etwa eines Summanten. Um die zu addierende Zahl einzustellen, war es nötig, Zahnräder herzustellen, bei denen die Zahl der pro Umdrehung greifenden Zacken verstellt werden kann. Dies gelang durch die Staffelwalze (Fig. 1), bei der durch Verschiebung die Zahl der greifenden Zacken verstellt werden kann und alternativ durch das Sprossenrad (Fig. 2), welches durch einen filigranen inneren Mechanismus in der Lage ist, einige Zacken ein- oder auszuklappen. Mithilfe dieser speziellen Zahnräder war es dem Benutzer möglich, die Eingabe einzustellen, welche zugezählt werden soll. Stellt man beispielsweise die Zahl 23 ein, so hat das Zahnrad für die Einer drei Zacken und das Zehnerrad zwei Zacken, welche jeweils ins entsprechende Ziffernrad des Ergebnisses greifen. Dreht man nun diese einstellbaren Zifferräder einmal um sich selbst, veranlaßt man also das Rechenwerk seine Arbeit zu tun, indem man z.B. eine Kurbel dreht, so werden die entsprechenden Ziffern des Resultats um drei bzw. zwei gedreht und – sofern auf den Übertrag geachtet wurde – 23 zur Ausgabe hinzugezählt.
Die hier skizzierte Maschine war kaum programmgesteuert. Allenfalls konnte man per Hebel einstellen, ob man Addieren oder Subtrahieren will. (Wobei man für die Subtraktion schlicht dafür sorgen muß, daß die Räder des Resultates sich in die andere Richtung drehen.) Wir haben hier aber von den oben angeführten Bestandteilen des Computers immerhin schon die Ein- und Ausgabe sowie das Rechenwerk. Bislang kann unsere Rechenmaschine allerdings nur vorwärts und rückwärts zählen. Im oben angerissenen induktiven bzw. axiomatischen Aufbau der Mathematik reduzieren sich aber zahlreiche Rechnungsarten auf das Zählen in beide Richtungen, welche beiden elementaren Operationen gewissermaßen die Atome der Mathematik darstellen. Daher kann man auf Grundlage der beschriebenen Zählmaschine im Prinzip sämtliche Rechnungen ausführen lassen, wenn man nur die verschiedenen Zählvorrichtungen geschickt durch Zahnräder verbindet. Die Realisierung solcher Maschinen scheiterte zunächst weniger an technischen Gründen als an der Finanzierung, da der Staat in dieser Zeit noch nicht die Vorteile eine umfassenden Datenerhebung über seine Untertanen einsah und die keimende private Wirtschaft noch nicht genug Reichtum angehäuft hatte, um die Herstellung solcher Maschinen zu finanzieren.
III. Recheneinheit
Es ist uns hier aber nicht um eine Geschichte der Rechenmaschinen, sondern um die Erklärung ihrer Funktionsweise zu tun. Wie schon erwähnt, erwies sich das binäre Zahlensystem dem dezimalen überlegen. Hier werden pro Ziffer nur zwei physische Zustände benötigt, welche die Null und die Eins repräsentieren. Dies ist leicht durch Löcher, Kerben, Strom, Magnetisierung oder einen Schalter technisch umzusetzen. In einem Stromkreis kann eine sechzehnstellige Binärzahl durch sechzehn parallele Drähte – je einem pro Ziffer – repräsentiert werden, wobei man sich darauf geeinigt hat, daß ein fließender Strom in einem Draht eine Eins und ein abwesender Strom eine Null darstellt. Mit diesen Strömen kann man beinahe unmittelbar rechnen, indem man einige Schaltkreise entwarf, die wie logische Bausteine funktionieren. Sie sind alle unter dem Begriff Gatter zusammengefasst, werden aber nach ihrer näheren Funktion in AND-, OR-, XOR- oder NEG-Gatter unterschieden. Ein elektrisch realisiertes Gatter unterbricht oder schließt einen Stromkreis in Abhängigkeit von zwei Steuereingängen. Es hat dementsprechend drei Eingänge – zwei für die Steuerung und einen generellen Stromanschluß – und einen Ausgang. Die Frage ist, ob das Gatter Strom vom generellen Stromeingang zum Ausgang weiterleitet, also ob es den Stromkreis an seiner Stelle schließt oder nicht. Im Fall des AND-Gatters geschieht dies genau dann, wenn an beide Steuereingänge ein Strom angeschlossen wurde. Entsprechend schaltet das OR-Gatter, wenn wenigstens an einem der beiden Steuereingänge ein potentieller Strom angeschlossen wurde. Das XOR-Gatter (exklusives Oder) schaltet dagegen nur, wenn entweder am einem oder am anderen Steuereingang Strom fließt. Das NEG-Gatter hat nur einen Steuereingang. Es schaltet, wenn dieser nicht angeschlossen ist und umgekehrt, es schaltet nicht, wenn dort ein Strom angeschlossen ist.
Nimmt man nun einen fließenden Strom für eine Eins und einen abwesenden Strom für eine Null, kann man die Funktionsweise der Gatter logisch so interpretieren, daß sie auf jeweils bestimmte Weise zwei Ziffern (Bits) verknüpfen. Ein AND-Gatter gibt z.B. Eins aus, wenn beide zu verknüpfenden Bits jeweils Eins sind und sonst Null. Man kann nun elektrische Rechenschaltungen ersinnen, ohne sich um die technische Umsetzung dieser Schaltungen im Einzelnen überhaupt zu kümmern. Da die Gatter schlicht die von dem englischen Mathematiker George Boole entwickelte Logik ausführen, kann man auf der Ebene dieser zweiwertigen Logik bleiben und den Rest einigen Technikern oder Robotern überlassen. (Dabei muß die Realisierung solcher logischen Bausteine nicht notwendig elektrisch geschehen, wenn diese filigrane Naturbewegung auch sehr effizient und klein ist, und man Millionen von den skizzierten Gattern auf einem Quadratzentimeter unterbringen kann.)
Als Beispiele für die so automatisierbaren Rechnungen sollen die Summenbildung und die Multiplikation dienen. Die binäre Addition eines Computers funktioniert im Grunde wie die schriftliche Addition. Man setzt wie in Figur 3 zunächst einen sog. Volladdierer aus den eben skizzierten logischen Bausteinen zusammen. Dieser addiert die zwei Ziffern der zu summierenden Zahlen und den Übertrag der letzten Ziffer (Drei Eingänge) und gibt die Ergebnisziffer und den nächsten Übertrag aus. (Zwei Ausgänge). Man kann durch die Hintereinanderschaltung von n solcher Volladdierer zwei n-stellige Binärzahlen addieren (Fig. 4).
Die Multiplikation wird z.B. durch folgenden Trick schnell elektrisch ausführbar. Zunächst mache man sich klar, daß im Binärsystem ein Multiplikation mit einer Zweierpotenz schlicht einer Verschiebung der Ziffern nach Links und dem Auffüllen der entstehenden Leerstellen mit Nullen gleichkommt. (Im Zehnersystem kann man Analog eine Zahl mit 10n Multiplizieren, indem man n Nullen Anhängt) Es ist auf diese Weise z.B. die Multiplikation mit 64=26 Durchführbar, indem man sämtliche Bits um 6 Stellen nach links verschiebt. Da alle Multiplikationen als Summe solcher einfach zu berechnenden Multiplikationen mit einer Zweierpotenz darstellbar sind, kann man mithilfe der Linksverschiebung von Bits und der Addition sämtliche Multiplikationen schnell durchführen. Soll z.B. 1045 in die Zahl n multipliziert werden, zerlegt man Einfach 1045 in die Zweierpotenzen: 1045 = 1024 + 16 + 4 + 1. Der Term n * 1045 läßt sich dann in 1024 * n + 16 * n + 4 * n + 1 * n umformen und mit den benannten Methoden elektrisch ausrechnen. Es ist diese Methode schlicht die schriftliche Multiplikation zweier Binärzahlen, so daß hier der Nutzen des mechanisch-mathematischen Kalküls deutlich wird.
IV. Universalrechner
Ein binäres Rechenwerk macht aber noch keinen modernen Computer aus. Die Verrechnung oder richtiger und allgemeiner die Manipulation von Daten wird im Computer programm- und benutzergesteuert vollzogen, sprich es kann genau vorgeben werden, in welchen Bahnen sich die Naturbewegung vollziehen soll. Den groben Rahmen gibt dabei das Programm vor. In der Regel kann man aber die genaue Bewegung des Computers durch zahllose Eingaben beeinflußen, etwa die Eingabe einer Buchstabenkette in einem Schreibprogramm wie Open Office. Die Programmsteuerung von Maschinen hat ihren Ursprung schon bei den Webmaschinen der Industrialisierung, bei denen einige verschiedene Muster weben konnten, je nachdem, welche Lochkarte man in sie einführte. Theoretisch ausgeführt wurde dieses Konzept aber erstmalig durch den Engländer Charles Babbage und weitere hundert Jahre später durch den Deutschen Konrad Zuse und den Wahlamerikaner John von Neumann technisch realisiert.
Babbages analytic machine – welche erst 1991 aus Anlaß seines 200. Geburtstages gebaut wurde – umfasst bereits alle Komponenten der modernen Computearchitektur. 1. Einen Prozessor. Nämlich eine mechanische Mühle, die Differenzen und Summen bilden, Multiplikationen, Divisionen ausführen und Wurzeln ziehen konnte. 2. Einen erweiterbaren Speicher für Variablen und Daten. 3. Die Möglichkeit, mittels Lochkarten Operatoren und sogar Programme einzuspeisen. 4. Die Möglichkeit, einen Lochkartenstanzer, Kurvenzeichner, Kupferstechapparat oder auch nur einige Ziffernachsen als Outputdevice anzuschließen. Die Programmierung umfasste dabei auch schon die Möglichkeit, einen Befehl nur bedingt auszuführen und andernfalls an eine bestimmte Stelle im Programm zu springen, so daß Schleifen möglich waren und so die Ergebnisse einer Rechnung wieder in den Rechenvorgang eingespeist werden konnten. Babbages Rechner war so eine „Maschine, die sich selbst in den Schwanz beißt“ (Charles Babbage). Solche Schleifen in der Programmausführung sind dabei überhaupt die Grundlage der Programmierung, da zahlreiche Programme zunächst eine Hauptschleife benötigen, in der bei jedem Durchlauf die Eingabe abgefragt und entsprechend reagiert wird.
Babbage hat also 100 Jahre vor der ersten Realisierung einen universell programmier- und einsetzbarer Computer theoretisch erschaffen. Dessen allgemeine Funktionsweise soll nun skizziert werden, wobei als Grundlage weder die Maschine vom Babbage und noch ein moderner PC genommen wird. Vielmehr ein Computer der Zwischenzeit, wie der PDP-11, welcher technisch im Grunde mit den aktuellen Computern identisch, aber dafür viel einfacher aufgebaut ist, als etwa ein Intel Pentium. Diese Generation eignet sich daher für Lehrzwecke am Besten.
Das Herz des Computers ist der Prozessor, welcher die Programme ausführt, Eingaben verarbeitet und Ausgaben veranlaßt. Zunächst aber ein paar Zeilen zum Speicher, von dessen erfolgreicher Manipulation die ganze Maschine abhängt. Er ist einmal in eine Anzahl Wörtern zergliedert, die jeweils eine bestimmte Zahl Bits zu einem Block zusammenfassen. Ein Wort ist also zunächst nichts anderes als eine Folge von Nullen und Einsen, welche in irgendeiner Form durch den Stoff repräsentiert werden. Die Interpretation eines Wortes muß durch den Menschen gegeben werden. Interpretiert man eine Menge Computerwörter als einen ASCII-Text, so nimmt man für alle 256 möglichen Kombinationen eines Bytes ein bestimmtes Zeichen. (Z.B. 65 = 00100001 für ein A) Ferner wird der Speicher aber in einen Datenspeicher und einen Programmspeicher unterteilt. Der Datenspeicher dient der Niederlegung und dem Abrufen von Variablen oder Informationen, indessen der Programmspeicher die Anweisungen zur Datenmanipulation enthält, die der Prozessor sukzessive ausführt. Der Prozessor muß natürlich in der Lage sein, ein bestimmtes Wort des Speichers in sich herein zu laden, wie er umgekehrt ein Wort an eine bestimmte Stelle des Speichers schreiben können muß. Jedes Wort bekommt daher eine eineindeutige Zahl (Adresse) zugeordnet und kann vom Prozessor so benutzt werden. Ebenso muß der Prozessor mit den Anschlüssen kommunizieren können, an welche Eingabe- und Ausgabegeräte angeschlossen werden können.
Das Herz des Computers, der Prozessor, nimmt also Daten von den Eingabegeräten und aus dem Speicher auf, verarbeitet sie und gibt sie an den Speicher oder die Ausgabegeräte aus. Das ist im Grunde alles, was ein Computer kann. In seinem Inneren besteht ein Prozessor im wesentlichem aus einer Steuer- und einer Recheneinheit, sowie einigen ‚Register‘ genannten Speicherstellen für je ein einzelnes Wort, etwa eines Faktors oder eines Ergebnisses. Schließlich eine Speicherstelle für die Position (Adresse) des nächsten Befehls im Programmspeicher, der Instructionpointer (IP) und eine Sammlung paralleler Kabel (Bus), welche den aktuellen Befehl oder das Ergebnis – durch Strömchen binär kodiert – speichern. Die Abarbeitung eines Befehls im Prozessor wird in einige Schritte unterteilt (Befehlsholphase, Decodierphase, Operandenholphase, Ausführungsphase, Rückschreibphase, Adressierungsphase) und funktioniert grob wie folgt: Zunächst wird ein Befehl aus dem Programmspeicher geholt, wobei die Speicheradresse im Instructionpointer steht. (Befehlsholphase) Die eigentliche Ausführung des Befehls übernimmt die schon beschriebene Recheneinheit mit ihren logischen Gattern und anderer in ICs zusammengefaßter Elektronik. Dieser Prozeß muß allerdings gesteuert werden. Insbesondere muß in der Recheneinheit der für den jeweiligen Befehl richtige Schaltkreis geschlossen werden und eventuell Parameter, wie Faktoren, Divisor und Divident, Summanten etc. in Form von Strömen in die Recheneinheit eingespeist werden. Diese Steuerung übernimmt die Steuereinheit, welche den aktuell auszuführenden Befehl interpretiert und veranlaßt, daß er korrekt ausgeführt wird (Decodierphase). Hierzu müssen eventuell weitere Daten aus dem Speicher geholt werden (Operandenholphase), eine Rechnung ausgeführt, ein Vergleich zweier Zahlen durchgeführt werden, um in Abhängigkeit vom Ergebnis an eine andere Stelle im Programm zu springen etc. Soll z.B. eine Division ausgeführt werden, muß die Steuereinheit dafür sorgen, daß Divident und Divisor geladen werden und in der Recheneinheit der für die Division notwendige Schaltkreis geschlossen wird (Ausführungsphase). Das Ergebnis wird schließlich in den Speicher oder an ein sonstiges Gerät ausgegeben (Rückschreibphase) und abschließend der Instructionpointer um 1 erhöht oder im Fall eines Sprungs auf die entsprechende Stelle im Programm gesetzt (Adressierungsphase). Dann kann der nächsten Befehlszyklus beginnen. Die Taktfrequenz eines Prozessors ist dabei die Zeit für einen solchen Zyklus.
V. Programmierung
Wir sind jetzt soweit, die oben angeführte Definition einzuholen, wonach der Computer ein Apparat ist, „der Informationen mit Hilfe einer programmierbaren Rechenvorschrift verarbeiten kann.“ Tatsächlich macht ein Computer nichts anderes als die Wörter seines Speichers in Abhängigkeit von diesem selbst zu manipulieren und ggf. an eine seiner Schnittstellen auszugeben. Allerdings ist die Bewegung des Prozessors recht konfus, indem dort tatsächlich Milliarden kleiner Elementarbefehle ausgeführt werden, welche isoliert so wenig bedeuten wie der einzelne Farbstrich eines Gemäldes. In ihrer Gesamtheit ergeben sie aber ein komplexes Programm. Man programmiert natürlich inzwischen nur noch selten solche elementaren Befehle, sondern fügt eher Module zusammen, welche für sich schon komplexere Funktionen ausführen (Ein Fenster erzeugen, ein Text ausgeben, eine Rechnung ausführen etc.). Letztlich fügt man also selbst geschriebene oder von anderen zur Verfügung gestellte Elementarprogramme zu einem neuen Programm zusammen und kann so gut den Ablauf einiger Milliarden Befehle überblicken. (3) Dieser im folgenden angedeutete Prozeß der Vereinfachung der Programmierung ist noch nicht abgeschlossen und die Programmierer sind häufig immer noch gezwungen, sehr partikulare Befehle zusammenzusetzen. Er ist aber doch so weit vorangeschritten, daß die Hürde, etwa eine Webapplikation zu schreiben, schon heute sehr gering ist und die Arbeitsteilung in diesem Bereich sehr leicht aufgehoben werden kann.
In der Informatikfakultät der Humboldt-Universität aufgefundenes Comic
eines unbekannten Programmierers.
Der Prozessor selbst verarbeitet nur Wörter, also endliche Folgen von Nullen und Einsen. Diese werden aber intern zerlegt in einen Befehlsteil und einen Parameterteil, so daß der erste Schritt der Programmierung ist, den Maschinecode aus sog. Assemblerbefehlen zu generieren. Statt die Ketten von Nullen und Einsen z.B. über einen Stapel von Lochkarten in den Computer einzugeben, schreibt man in einem Schreibprogramm z.B. ADD ax, 20 um 20 zum Register ax zu adieren oder JZ dx, 4000 um das Programm an die Stelle 4000 zu fortzusetzen, wenn der Inhalt von Register dx Null sein sollte. (Bedingter Sprung. JZ steht dabei für Jump Zero) Für so geschriebene Programme braucht es aber bereits einen Compiler, welcher ein besonderes Programm ist, das automatisch aus einer Textdatei einen ausführbaren Maschinencode erzeugt. Man wandelt mit ihm die Assemblercodierung in eine Maschinencodierung um. Diese Umwandlung ist bei allen Programmiersprachen notwendig, da diese nur eine Schnittstelle zwischen der menschlichen Weise zu denken und der Weise des Computers zu arbeiten darstellen.
Nach der Entwicklung des Assemblers ging man dann sukzessive dazu über, die in Maschinencode zu übersetzenden Befehle dem Menschen adäquater zu machen. Der nächste Schritt war die Einführung intuitiverer Schleifen- und Sprungprogrammierung, die Benennung der Variablen (welche zunächst einfach durch eine Adresse im Speicher charakterisiert sind) mit dem Menschen verständlichen Namen und die Zusammenfassung eines Blocks schon geschriebener Befehle zu einer stets mit einem Wort aufrufbaren Methode, welche Werte übernehmen und zurückgeben kann. Hat man nun einmal eine Methode geschrieben, die eine Folge von Buchstaben auf den Monitor schreibt, kann man diese immer wieder verwenden. Auf diese Weise wird es möglich, die eigenen Programme auf der Arbeit anderer aufzubauen. Überhaupt baut die Entwicklung neuerer Computerprogramme immer auf älteren Programmen und Programmfragmenten auf, wodurch allein die Komplexität moderner Programme möglich wurde.
Die Entwicklung von Computersprachen ist nur die eine Seite dieses Prozesses. Die andere ist die Programmierung von sog. Betriebssystemen, welches umfangreiche Programme sind, die beim Start des Computers geladen werden und die Aufgabe haben, die auszuführenden Programme, sowie die Ein- und Ausgabe zu verwalten. Die aktuellen Betriebssysteme können z.B. zahlreiche Prozesse/Programme nebeneinander ausführen und so – obwohl der Prozessor streng sequentiell arbeitet – den Anschein von Parallelität erzeugen. Auch die einzelnen Programme sind in der Lage, verschiedene Prozesse (Threads) nebeneinander auszuführen, so daß der Webbrowser Firefox z.B. mehrere Dateien aus dem Internet auf die Festplatte laden, sowie einige Animationen und ein Musikstück abspielen kann, ohne daß der Benutzer in der Regel daran gehindert würde, über Tastatur und Maus weitere Programmabläufe zu bestimmen.
Die Voraussetzung solcher Systeme – zumal wenn sie einige ihrer Programme in Fenstern mit Menüs und allerlei Schaltelementen darstellen – ist die sog. objektorientierte Programmierung, welche der gegenwärtige Höhepunkt der Programmierentwicklung ist. (4) Es würde leider zu weit führen, diese für den gegenwärtigen Produktionsprozeß sehr bestimmende Methode befriedigend zu erläutern und so muß hier der Hinweis genügen, daß man beim Programmieren nun dazu übergeht, allgemeine, ‚Objekt‘ genannte Blaupausen zu benutzen oder zu schreiben. Ein Objekt ist dabei letztlich durch einige Variablen und diese verarbeitenden Methoden definiert. Insbesondere kann es aber auch selbst andere Objekte beinhalten und verwalten. Von diesem Objekt kann der Programmierer beliebig viele Instanzen bilden und verwenden. Einige Leser werden noch das Spiel Lemmings kennen. Jeder Lemming ist intern eine Instanz eines solchen Lemmingobjekts. Es beinhaltet u.a. zwei Positionskoordinaten, einen Richtungsvektor und einige Parameter für den spezifischen Charakter des Lemmings (Ob es sich um einen kletternden, grabenden etc. Lemming handelt) als Variablen und einige Methoden, wie Lemming.walk() oder Lemming.draw(), um die Figur zu malen oder die Position zu ändern. Auf diese Weise kann das Programm spielend auch 80 Lemminge verwalten, welche alle nach bestimmten, vom Benutzer über die Maus verstellbaren Regeln über den Bildschirm laufen. Ein bekannteres und nützlicheres Beispiel für die gegenwärtige objektorientierte Programmierung ist die graphische, auf Fenstern basierende Oberfläche etwa von Linux (KDE) oder MS-Dos (Windows). Man mußte hier nur einmal ein Objekt schreiben, welches verschieb- und verstellbare Fenster erzeugt. Jeder Programmierer kann diese allgemein erzeugte Fensterblaupause für sich benutzen und seinen individuellen Inhalt in ihm darstellen. Analog ist es einfach, in diese Fenster Menus, Buttons oder Eingabefelder zu setzen, da diese auch als Objekte vorgegeben sind und so spezifiziert und benutzt werden können, indem der Programmierer eine Instanz erzeugt und die näheren Parameter – wie Position, Inhalt, Verweis auf die im Interaktionsfall zu tätigenden Programmanweisungen etc. – festlegt.
VI. Bedingungen einer Revolte in diesem Sektor
Bei aller technizistischen Beschreibung der aktuell den Produktionsprozeß maßgeblich bestimmenden Maschine ist bislang außer Acht gelassen worden, daß die Gattung dieselbe ebenso wenig vernünftig bedient, wie sie sie nicht versteht. Wenn die Gattung insgesamt dazu kommen muß, die aktuellen Verkehrsformen zu überdenken, so heißt dies natürlich für die Produzenten der verschiedenen Sparten, daß sie jeweils ihren besonderen Bereich revolutionieren müssen. Zunächst müssen daher die spezifischen Probleme der verschiedenen Sektoren benannt sein.
Die Computerprogrammiererei krankt ihrem Inhalt nach einmal daran, daß sie ungezählte unsinnige Anwendungen hervorbringt, die man einfach löschen und vergessen kann: Programme zur effizienteren Verwaltung des Menschenmaterials, Banken-, Börsensoftware und Versicherungssoftware, Polizei- und Militärsoftware etc. Zum anderen ist diese Arbeit im wesentlichen redundant; die Programmierer schreiben beständig Programmteile, die längst geschrieben, aber niemals veröffentlicht wurden. Dabei werden die Informatiker zu viel zu viel Arbeit gezwungen, stehen oftmals unter Zeitdruck und sind schlecht und höchst einseitig ausgebildet. Es versteht sich von selbst, daß alle diese Probleme dem Umstand entspringen, daß die Gattung diese notwendig gesellschaftliche Produktivkraft im bornierten Rahmen der Privatwirtschaft entwickelt hat. Dies führte einerseits dazu, daß die Entwicklung viel zu schnell vonstatten ging und die Computernerds ständig dem Stand der Produktivkräfte hinterher sind. Andererseits sind die Produktivkräfte in diesem Sektor eher ein konfuses Flickwerk, da die verschiedenen mit der Erstellung der Computer sowie ihrer Software beauftragten Teams nicht nur höchst schlecht koordiniert sind, sondern sie oft sogar gegeneinander um die Wette arbeiten.
Die Revolte der Informatiker muß daher darauf abzielen, zunächst eine Auszeit aus der Entwicklung neuer Programme zu bewirken, um den lästigen Zeit- und Konkurrenzdruck zu überwinden und dann dazu übergehen, den anarchisch entstanden Berg von Programmen und Programmmodulen zu sortieren, vernünftig zu dokumentieren (also endlich einmal eine Sprache für diesen Produktionsaspekt erfinden, die diesen Namen mit recht trägt) und in den meisten Fällen einfach löschen und gegebenenfalls neu schreiben. Man kann so leicht einen Zustand erreichen, der nicht mehr die ständige Fortentwicklung benötigt. Natürlich müssen die Arbeiter der diversen Computerkonzerne dabei fraternisieren und zunächst sämtliche Codierungen ordnen und freigeben. Dadurch würde auch das leidige Problem der zahlreichen Standards gelöst, indem diese frei zur Verfügung der Programmierer stünden. Diese würden sich außerdem in diesem Prozeß als Klasse auflösen, weil natürlich schnell jeder Mensch mit geringer Einarbeitungszeit Programme erstellen kann, sollte dies nötig werden. (Die Existenz einiger vernünftiger Bücher zum Thema vorausgesetzt.)
Allerdings sind die Informatiker, wie überhaupt alle Techniker, in die alte Welt integriert und es wurden kaum die Möglichkeiten einer organisierten Rebellion in Betracht gezogen oder gar mit ihnen experimentiert. Einige lobenswerte Ausnahmen bestehen aber.
Zum einen haben sich zahlreiche Hacker lose zusammengetan, um den Kopierschutz kommerzieller Kodierungen etwa von Filmen, Spielen oder Programmen zu knacken (z.B. www.crackspider.net). Es ist heute daher jedem Benutzer möglich, sich sämtliche Programme zu klauen. Allerdings müssen auch die Hacker Geld verdienen. Im harmlosen Fall setzen sie einige Pornographieanzeigen auf ihre Seiten und hoffen, daß die Computerjungs sich von einigen Titten, Mösen, Pimmeln ablenken lassen, wofür die Hacker dann etwas Geld einstreichen. Andererseits versuchen sie auch oft e-mail-Adressen auszuspionieren oder einen beliebigen Computer dafür zu benutzen, Spam in die Welt zu versenden. Besser sind daher die Versuche von Angestellten der Filmkonzerne und Softwarefirmen, ihr Produkt illegal zur Verfügung zu stellen. (So wurde z.B. das bekannte Spiel Gothic III schon eine Nacht vor dem offiziellen Release illegal ins Netz gestellt.) Die Barbarei der kommerziellen Programme ist dadurch im Privatbereich bereits abgeschafft, indem jeder Privatmensch InDesign, Premiere Pro, Doom III, Grand Theft Auto etc. benutzen kann, ohne dafür manchmal tausende Geldäquivalente spendieren zu müssen. Eine andere Möglichkeit der impliziten Subversion ist die illegale Weitergabe von Musikstücken oder zunehmend auch Filmen über Filesharingnetzwerke wie Frostwire. Hier besteht die Möglichkeit, bequem sowohl die Musik-, wie Filmindustrie loszuwerden.
Weiter existiert die freie Softwarebewegung. Wenn diese auch einiges zur Entwicklung des Internets beitrug, ist hier insbesondere das Betriebsystem Linux interessant. Dieses wird von einem Heer von Freiwilligen programmiert, welches sich informell in konzentrischen Kreisen um Linus Torwalds organisiert, welcher Nerd die wichtigsten Grundsteine legte und für die Zusammenführung der Komponenten zuständig ist. Neben der Tatsache, daß hier bewiesen wurde, daß man ohne die übliche Hierarchie und Lohnsklaverei vernünftige Produkte erzeugen kann, ist hier interessant, daß das Dogma der Ware von diesen Leuten an einem Punkt in Frage gestellt wurde. Ihre Software und Programmiermodule kosten kein Geld. Dagegen akzeptiert diese Bewegung dasselbe Dogma der Ware in allen anderen Produktionszweigen. (Schon die Hardware selbst, aber oft auch der Support sollen weiter gegen Geld getaucht werden.) Es ist klar, daß so aus dieser Geschichte nichts werden kann, da die Linuxprogrammierer dadurch gezwungen bleiben werden, sich das Geld für ihre Lebensmittel anderweitig und durch ehrliche Lohnarbeit zu beschaffen, während sie sich in den freien Stunden selbst ausbeuten. Wenn diese Bewegung nicht dazu kommt, das Prinzip der freiwilligen Arbeit für das Gemeinwesen zu generalisieren, wird sie an diesem zentralen Selbstwiderspruch zu Grunde gehen. Insbesondere ist die marktliberale Haltung einiger Programmierer ein Hindernis, für die Linux wesentlich ein Mittel zu Abschaffung des Betriebssystemmonopols von Microsoft ist und als solches mittlerweile von Firmen wie SAP, Netscape oder Google benutzt wird. Stattdessen wäre es nötig, sich klar zu machen, daß man selbst zum Monopol werden will und die Arbeiter von Microsoft ihre Arbeit sein lassen können, um sich der freien Entwicklung des universellen Betriebssystems zu widmen, sei dieses nun Linux oder ein neues System.
Trotz ihrer selbstverschuldeten Unmündigkeit und Isolation sind die Hackerbewegung wie die freie Softwarebewegung als die ersten Revolten der Informatiker anzusehen. Diese neigen momentan nicht zu Betriebskämpfen, haben aber außerhalb und losgelöst der offiziellen Betriebe einen Keim zur Abschaffung der privaten Wirtschaft gelegt, wenn sie es auch nicht wissen wollen. Dies war möglich, weil anders als in so ziemlich sämtlichen Sparten der Produktion hier jeder sein Arbeitsmittel selbst besitzen kann, da nur ein funktionierender Computer notwendig ist. Ferner weil die Assoziation bequem über das www besorgt werden konnte, teilweise selbst ohne die Asozialität zu überwinden. (Die frühen Arbeitsverbände der Linuxgemeinde waren dann recht erstaunt, wenn sie sich auf einem Kongress zum ersten Mal persönlich sahen.)
Der Preis dieser Entwicklung ist aber die Trennung von der eigentlich zu erobernden Wirtschaft, welche weiter in ihren schlechten Formen funktioniert. Die Abdrängung der widerständigen Bewegung in den privaten Sektor kann dabei nur überwunden werden, wenn die Programmierer dazu kommen, der übrigen Gesellschaft das ernsthafte Angebot zu machen, im Fall einer generellen Revolte (z.B. einem Generalstreik wie 1968 in Frankreich) ihre Arbeit, Kenntnisse und Maschinen frei zur Verfügung zu stellen, wenn sie im Gegenzug sämtliche Lebensmittel kostenlos gestellt bekommen. Es ist in diesem Sektor bestellt, wie in allen anderen Sektoren: Solange die Individuen gezwungen werden, ihre Arbeitskraft gegen die elementaren Lebensmittel zu tauschen, können sie nicht an eine vernünftige Organisation ihrer Arbeit denken. Es müssen also zunächst die Kassen der Warendepots, die Mieten für Wohnraum sowie die Gebühr für Strom, Gas und Transport abgeschafft werden, mit allen Konsequenzen, die dies für die Arbeiter von Vattenfall, Bewag, Gasprom etc. bedeutet. Die hierfür notwendigen Umstrukturierungsmaßnahmen der Produktion erscheinen schwieriger als sie sind, weil durch sie schließlich zahlreiche Menschen aus den parasitären Sektoren (Werbeindustrie, Verkäufer, Bankangestellte etc.) freigestellt würden, wie auch das Heer der Arbeitslosen dann effektiv und jenseits der Zwangsarbeit daran denken könnte, aus ihrer Passivität zu erwachen. Umgekehrt könnte die momentan zu hohe Wochenarbeitszeit derjenigen, die Lohnarbeit verrichten, ad hoc gesenkt werden.
Aber lassen wir das. Wenn es hier gelungen ist, einigen Leserinnen die Funktionsweise einer der zentralen (Steuerungs-)Maschinen des gegenwärtigen Produktionsapparates dargelegt zu haben, ist genug getan. „Wie sich die zeitliche, empirische Gegenwart aus ihrem Zwiespalt herausfinde, wie sie sich gestalte, ist ihr überlassen und nicht die unmittelbar praktische Sache und Angelegenheit der Philosophie.“ (Hegel)
FRANZ HAHN
Der Autor studiert Informatik an der HU zu Berlin und arbeitet als studentische Hilfskraft im Fachbereich Komplexität und Kryptographie.
(1) Schule, Ausbildung, Arbeit, Rente, Tod
(2) Analog ist auch die Konstruktion von Fließbändern wesentliche Voraussetzung, schließlich Roboter anstelle von Menschen zu benutzen, da hier bereits durch strenge wissenschaftliche Planung des Produktionsablaufes die Produktion in zahlreiche leicht ausführbare Schritte unterteilt wurde. Der Mensch – welcher zunächst der Sklave des Fließbandes ist – kann es schließlich laufen lassen und den von ihm konstruierten Maschinen die Verarbeitung des Naturstoffes aufbürden.
(3) Analog ist auch der Speicher – zunächst nur eine Kette von Nullen und Einsen – in Wörter zergliedert, welche ihrerseits in Dateien zusammengefaßt werden, deren innere Struktur jeweils bestimmten unterschiedlichen Regeln gehorchen, je nachdem sie ein Bild, ein Video oder einen Datensatz beinhalten. Auch hier muß der Programmierer sich nur noch selten überhaupt darum kümmern, wie im Einzelnen solche Dateien aufgebaut sind, da schlicht Kommandos zum Speichern und Laden der diversen Informationen existieren. Diese Kommandos – welche eine Summe von Befehlen zusammenfassen – liegen entweder schon vor oder aber sie werden einmal vom Programmierer geschrieben, so daß dessen Eingeweide einmal geschrieben auch wieder vergessen werden können.
(4) Wenn auch seither der Programmieraufwand selbst für komplizierte Programme stark sank, blieben doch aller Neuerungen bislang auf dem Boden der objektorientierten Programmieung.