Kurs-Review: “Build a Modern Computer from First Principles: Nand to Tetris Part 1”
09.04.2024
Zusammenfassung
Review zum Coursera-Kurs „Nand to Tetris“: Man baut einen Computer von Grund auf – von NAND-Gattern über ALU, RAM und Maschinensprache bis zum Assembler – und lernt dabei die zentralen Prinzipien der Computertechnik.
Einführung
Vor kurzem habe ich Coursera für mich endeckt, eine Plattform, auf der man Kurse zu nahezu jedem beliebigen Thema belegen kann. Basierend auf meinem wachsenden Interesse an Informatik und Computern entschloss ich mich den Kurs "Build a Modern Computer from First Principles: Nand to Tetris Part 1” zu beginnen, um ein grundlegendes Verständnis der Funktionsweise moderner Rechner und ihrer fundamentalen Komponenten (First Principles) zu erlangen.
Kurzer Überblick über moderne Computer
Bevor wir in die konkreten Inhalte eintauchen, lass uns einen Blick auf die Architektur moderner PCs werfen, die sogenannte Von-Neumann-Architektur. Diese wurde bereits 1945 von dem Mathematiker John von Neumann eingeführt und dient bis heute als Basis für nahezu alle modernen Computer. Es lohnt sich definitiv vorab einen Blick auf ihre Komponenten zu werfen.
Die Architektur besteht aus vier fundamentalen Komponenten:
- Der Prozessor (CPU) stellt das Gehirn des Rechners dar, er führt alle Berechnungen durch.
- Der Arbeitsspeicher (RAM,) dient dazu Programme und Daten zu speichern, auf welche die CPU zugreifen und auf die sie schreiben kann
- Ein- und Ausgabegeräte erlauben es dem Nutzer mit dem Rechner zu interagieren, darunter fallen beispielsweise Maus, Tastatur und Monitor
- Das Bus-System dient als Kommunikationsweg zwischen den Komponenten, damit eine reibungslose Zusammenarbeit möglich ist

Woche 1: Grundlegende Logikgatter
Du weißt vielleicht schon, dass Computer nur mit zwei Zuständen arbeiten: 0 und 1. Aber wie schaffen es diese zwei simplen Zustände, komplexe Aufgaben zu lösen und sogar Videos zu generieren? Die fundamentale Antwort liegt in den sogenannten Logikgattern.
Stell dir vor, man kombiniert diese Bits wie Bausteine. Logikgatter - etwa das AND-Gatter - nehmen zwei Bits als Eingabe und folgen festen Regeln. Das AND-Gatter liefert nur dann eine 1, wenn beide Eingaben 1 sind, quasi ein digitales „sowohl als auch“.
Der Kurs behandelt verschiedene Gatter wie das AND-Gatter, die später wichtig für das Verständnis der ALU (Arithmetic Logic Unit) werden. Im Zentrum steht dabei ein besonderes Gatter: das NAND-Gatter - der Namensgeber dieses Kurses.
Das NAND-Gatter kehrt die Logik des AND-Gatters um: Es gibt nur dann eine 0 aus, wenn beide Eingaben 1 sind. Ansonsten liefert es eine 1. Das praktische daran: Aus NAND-Gattern lassen sich alle anderen Logikgatter bauen. Deshalb gilt NAND auch als universelles Gatter und ist der fundamentale Baustein der digitalen Logik.
Kurz gesagt: Mit nichts weiter als 0, 1 und der Macht von NAND-Gattern führen Computer komplexe Berechnungen durch und betreiben die Programme, die wir täglich nutzen.
Woche 2: Die ALU
Aufbauend auf den Logikgattern der erstren Woche geht es diese Woche um das Herzstück der CPU: die ALU (Arithmetic Logic Unit). Die ALU ist das Arbeitstier der CPU, sie führt Berechnungen und Vergleiche aus. Sie nimmt zwei binäre Eingaben (in diesem Kurs jeweils 16 Bit) und führt eine vordefinierte Funktion (z. B. Addition) aus, um ein Ergebnis zu erzeugen. Stell dir vor, du gibst das Binärformat von 12 (00001100) und 8 (00001000) ein, wählst „addieren“ als Funktion – und die ALU spuckt das Binärformat von 20 (00010100) aus! Die eigentliche Magie liegt darin, wie die ALU verschiedene Logikgatter kombiniert, um diese Operationen effizient durchzuführen.
Woche 3: Der RAM
Diese Woche dreht sich alles um eine weitere zentrale Komponente: den Arbeitsspeicher (RAM – Random Access Memory). Im Gegensatz zu Festplatten steht beim RAM die Geschwindigkeit im Vordergrund. Er verwendet spezielle Flip-Flop-Gatter, um Daten zu speichern. Diese Gatter funktionieren wie winzige Schalter mit zwei Zuständen (0 oder 1) und zwei Eingängen. Einer der Eingänge nimmt neue Daten auf, während der andere auf clevere Weise den aktuellen Ausgang des Gatters zurückführt, eine Rückkopplungsschleife, die den Zustand beibehält, bis ein neuer Wert eintrifft.
Ein weiteres zentrales Konzept, das eingeführt wird, ist die CPU-Taktfrequenz. Diese sorgt dafür, dass der Datenfluss zwischen CPU und RAM synchronisiert ist – also dass Informationen genau zum richtigen Zeitpunkt gelesen und gespeichert werden. Indem man viele Flip-Flops kombiniert (in diesem Kurs 16 Stück), entsteht ein Register, das genau einen 16-Bit-Wert speichern kann. Moderner RAM besteht aus einer riesigen Anzahl solcher Register, jedes mit einer eindeutigen Adresse für schnellen und gezielten Datenzugriff.
Woche 4: Die Maschinensprache
Diese Woche dreht sich alles um Maschinensprache – die grundlegende Sprache, die CPUs verstehen. Du lernst, wie man mit Registern, Speicher und grundlegenden Programmierkonzepten wie Variablen, Schleifen, Zeigern und Ein-/Ausgabe (I/O) arbeitet. Diese Auseinandersetzung zeigt, wie moderne Programmiersprachen auf niedriger Ebene mit der CPU interagieren. Es ist ein echter Aha-Moment, der die inneren Abläufe von Computerprogrammen und das Wesen des Programmierens offenlegt.
Woche 5: Computerarchitektur
Das Ziel dieser Woche war es, ein vollständiges Computersystem aus den Einzelkomponenten zu bauen, die du in den vorherigen Wochen entwickelt hast. Der Kurs führte die Von-Neumann-Architektur ein – das grundlegende Strukturprinzip der meisten modernen Computer.
Auf Basis der Von-Neumann-Architektur und des Fetch-Decode-Execute-Zyklus hast du einen funktionsfähigen Computer gebaut: den sogenannten Hack-Computer, entworfen vom Kursleiter. Der Hack-Computer enthält die zentralen Bestandteile eines Computersystems – darunter Speicher, CPU und Ein-/Ausgabe (I/O).
Woche 6: Assembler
Der finale Abschnitt des Kurses dreht sich um die tatsächliche Steuerung von Computern mit der sehr maschinennahen Programmiersprache Assembler. Die Programme fungieren dabei als Übersetzer: Sie nehmen den für Menschen lesbaren Assemblercode (also textbasierte Anweisungen) und verwandeln ihn in den rohen Maschinencode (also Nullen und Einsen), den die CPU versteht. Es ist, als würde man der CPU klare Anweisungen in ihrer eigenen Sprache geben.
Das interessante dabei ist der Bau einen eigenen kleinen Assemblers. Das ist zwar anspruchsvoll, aber extrem lehrreich. Indem du dein eigenes Übersetzungswerkzeug entwickelst, bekommst du ein tiefes Verständnis dafür, wie jedes Programm, das wir heute nutzen, letztlich in eine für die CPU ausführbare Sprache zerlegt und übersetzt wird. Ein faszinierender Einblick in das Innenleben von Computern – und die „Magie“ hinter jeder Software.
Fazit
In einer Welt voller 100-Stunden-Python oder 80-Stunden-JavaScript Programmier-Tutorials sticht Nand2Tetris hervor. Der Kurs geht in die Tiefe und fokusiert sich tatsächlich auf die fundamentalen Prinzipien hinter der modernen Abstraktion. Der Fokus dabei liegt nicht hauptsächlich konkret programmieren zu lernen, vielmehr zielt der Kurs darauf ab, einen Computer von Grund auf und versteht dabei und eine Intuition zu bekommen, warum Programmiersprachen so funktionieren, wie sie es tun.
Schlusswort
Ich hoffe, dir hat dieser Artikel gefallen.
Wenn du Fragen oder Anmerkungen hast, kannst du dich gerne bei mir melden.
Mario 💚