Wie wurde der Computer programmiert?
Also, ich habe eine Frage.
Irgendwann haben es Menschen geschafft einen Computer zu bauen. Aber wie? Wie will man einen Computer programmieren ohne vorher einen anderen Computer zu besitzen mit dem man den anderen programmiert? Und wie will man überhaupt eine Programmiersprache ohne Programmiersprache programmieren?
Ich würde mich auf baldige Antworten freuen.
12 Antworten
Man hat sie Mechanisch gesteuert, Kabel umgelegt... und später durch Binärcode also Strom aus(0), Strom an(1)
Die Hardware hatte bereits eine bestimtme Befehlstabelle eingebaut, die bestimmt hat, dass eine bestimmte Reigenfilge von 0 und 1 einen bestimmten Befehl darstellt
Erstens man hatte damals lochkarten und hatt die direkt mit den OP codes beschreieben. Und man hat dann irgendwann einfach nen compiler in OP codes geschrieben der von Menschen lesbaren text in OP codes umwandelt. Und der darauf folgende compiler wurde dann mithilfe dises cimpilers compeliert. Und dadurch haben sich auch neue Programmiersprachen entwickelt weil eine programmier Sprache meistens immer am Anfang in einer anderen Programmiersprache geschrieben wird.
Als erster elektronischer Computer überhaupt wird gerne der ENIAC erwähnt. Der war ursprünglich gar nicht programmierbar, man hat ihn aber später so erweitert, dass er auch programmierbar war.
Am Anfang war es aber so, dass der Computer immer nur den Rechenschritt, der grade eingestellt war, mit tausenden Datensätzen durchrattern konnte und man dann für jeden weiteren Rechenschritt wieder die Verkabelung an die neue Rechenoperation anpassen musste. Die Zwischenergebnisse wurden auf Lochkarten gestanzt und mussten nach jedem Schritt wieder in den Lochkartenleser eingelegt werden. Später kam dann noch ein Magnettrommelspeicher dazu, auf dem die Zwischenergebnisse gespeichert wurden. Und am Ende konnten die Ergebnisse auf Lochstreifen gestanzt werden, um sie in Tabellen abzudrucken oder mechanische Rechenhilfen daraus herstellen zu können.
Der erste programmierbare Rechner war wahrscheinlich der Z1. Bei dem wurde ein Filmstreifen von einem Kinofilm benutzt, um Befehle zu speichern. Die mussten per Hand gelocht werden. Allerdings war der Computer noch nicht "turing-vollständig", also er konnte noch nicht für alle Berechnungen verwendet werden. In erster Linie hat ihm die Möglichkeit für Verzweigungen und Schleifen gefehlt. Er konnte also nur eine Liste von Rechenoperationen nacheinander abarbeiten, aber z.B. nicht "Mache x so oft, bis y kleiner als 0 ist" oder so.
Einer der ersten Computer "Von der Stange", den sich auch mittelständische Unternehmen leisten konnten, war wahrscheinlich der LGP-30. An dem war eine spezielle Schreibmaschine angeschlossen, die Lochstreifen lesen und stanzen konnte und auch Ein- und Ausgaben für den Computer drucken konnte. Der Computer hatte Tasten, mit denen man direkt in den Akkumulator (also das Datenregister des Prozessors) schreiben konnte, den Inhalt des Akkumulators in das Befehlsregister übertragen konnte und einzelne Befehle per Hand ausführen konnte. Dadurch war es möglich, direkt mit der Schreibmaschine in den Speicher des Computers zu schreiben. Die Maschinensprache des Computers war so aufgebaut, dass sie im Prinzip eine einfache Assemblersprache war. Man konnte immer einen Buchstaben für den Befehl (z.B. A = Addieren, S = Subtrahieren, M = Multiplizieren etc.), gefolgt von vier hexadezimalen Ziffern für die Speicheradresse eingeben. Programme wurden in der Regel auf Papier entworfen, dann mit der Schreibmaschine auf Lochstreifen gestanzt und von den Lochstreifen in den Computer eingelesen.
Der erste Computer für zu Hause war wahrscheinlich der Altair 8080. Der hatte auch Schalter, mit denen man Daten direkt in den Arbeitsspeicher schreiben konnte und dadurch ein kurzes Programm eingeben konnte, was den Computer in die Lage versetzt hat, einen Lochstreifen einzulesen, wo dann z.B. ein einfacher Basic-Interpreter zum programmieren drauf war.
Die Grundfunktionen eines Prozessors sind "physisch" in Form von Leiterbahnen umgesetzt. Daran hat sich auch bis heute nichts geändert.
Das ist auch der Grund, warum Computer in Binär arbeiten - denn durch Binärcode ist es möglich, z.B. Zahlen in Form von elektrischen Signalen (0 = Kein Strom, 1 = Strom) zu repräsentieren.
So konnte man durch das umstecken von Kabeln oder Umlegen von Schaltern auch frühen Computern entsprechend Input geben.
Etwas später konnte man dann Lochkarten oder Nummernfelder benutzen, um die entsprechenden Zahlencodes einzugeben.
Jede Funktion eines Prozessors hat eine Nummer, bei x86-Prozessoren (Intel/AMD) ist beispielsweise die 83 "Addieren". Also sendet man dem Prozessor die Zahl 83, eine Zahl, die angibt wo der Startwert gespeichert ist, sowie der Wert, der draufaddiert werden soll. Die elektrischen Signale, die diese Zahlen repräsentieren, lösen dann im Prozessor quasi eine Kettenreaktion aus, die bewirkt, dass der angegebene Startwert um den angegebenen Wert erhöht wird. Bei modernen Prozessoren sind für diese Kettenreaktionen primär die Transistoren zuständig. Das sind praktisch Schalter, die selbst durch ein elektronisches Signal ein- und ausgeschaltet werden. Das bedeutet, verschiedene Leiterbahnen können sich gegenseitig schalten. Das ermöglicht diese komplexen Kettenreaktionen, die am Ende zu mathematisch korrekten Ergebnissen führen. In frühen Computern hatte man statt Transistoren allerdings Elektronenröhren, die die gleiche Funktion erfüllen, aber viel, viel größer sind.
Grace Hopper gilt als die Erfinderin der Programmiersprachen. Diese hatte die Idee, diesen Zahlencodes jeweils Worte zuzuordnen, und schrieb ein Programm, das ebendiese Worte zurück in die für den Computer verarbeitbaren Zahlencodes übersetzt - das war der erste Compiler und die erste Programmiersprache und im Prinzip macht man es heute auch nicht anders, nur, dass moderne Compiler noch viele Optimierungen vornehmen und keine 1:1 Übersetzung vorgenommen wird.
Wie will man einen Computer programmieren ohne vorher einen anderen Computer zu besitzen mit dem man den anderen programmiert?
Mit der Hand - wortwörtlich.
Das ganze fing sehr einfach an, z.B. mit Lochkarten, die man sehr einfach herstellen könnte - also quasi eine Art "Programmierung".
Etwas modernere Computer wurden per Hand zusammen gelötet/gesteckt, die Leitungen waren somit die "Programmierung".
Noch später wurde dann mit Schaltern gearbeitet, um nicht immer alles umbauen zu müssen.
Und so ging das weiter, bis "per Hand" zu aufwändig und komplex wurde.
Und wie will man überhaupt eine Programmiersprache ohne Programmiersprache programmieren?
Die erste "echte" Programmiersprache war der Maschinencode, den der Computer direkt ausführt. Also quasi die digitale Lochkarte, der Computer sieht ein Byte und führt eine Funktion aus und geht zum nächsten Byte - sehr einfach ausgedrückt.
Vor der ersten Programmiersprache hat man genau diesen Maschinencode "per Hand" geschrieben. Und ja, das war extrem aufwändig und fehleranfällig.
Und so ging das weiter, bis jemand Assembler und somit quasi den ersten sehr einfachen Compiler (das Programm heißt eigentlich auch "Assembler") entwickelt hat. Der Assembler-Code wird dann 1zu1 in den Maschinencode übersetzt und ja, auch dieses Programm wurde per Hand im Maschinencode geschrieben, hat danach aber vieles vereinfacht.
Und danach kam dann weitere low-level Programmiersprachen wie C und dann komplexere Programmiersprachen wie C++ und irgendwann Programmiersprachen wie C#, die die Aufgabe hatten, die Programmierung noch weiter zu vereinfachen und viele Fallstrickt abzunehmen.