Start / Methoden & Systeme / Engpässe Programmierung

Engpässe Programmierung

Titelbild zur beitrag: Engpässe Programmierung
Programmiergeschichte · Architektur · Meta-Pattern

Die großen Engpässe
der Programmierung

Von Fortran-Speicherlimits bis zum Kontextfenster des LLM — warum jede Ära denselben strukturellen Fehler begeht, dasselbe Muster zu seiner Lösung entdeckt, und trotzdem jedes Mal so tut, als hätte sie das Rad erfunden.

Zeitraum 1957–2025 Lesezeit ~15 Min. Rewritten Edition
Abstract

Dieser Essay untersucht die These, dass die zentralen Engpässe der Softwareentwicklung seit sechs Jahrzehnten einer wiederkehrenden Struktur folgen: eine knappe Ressource wird zunächst durch rohe Kraft bekämpft, dann durch eine Abstraktionsschicht virtualisiert — mittels Zerlegung, hierarchischem Caching und verzögertem Laden. Die Analyse stützt sich auf primäre Quellen (Cooley & Tukey 1965, Dean & Ghemawat 2004, Packer et al. 2023) und identifiziert die Grenzen dieser Analogie ebenso wie ihre erklärende Kraft. Der Ton ist akademisch, das Augenzwinkern ist inklusive — denn wer sechs Jahrzehnte denselben Fehler dokumentiert, darf auch mal lachen.

§ 1

Einleitung: Der ewige Déjà-vu-Moment


Jede Generation von Softwareentwicklern stößt an eine unsichtbare Wand. In den Sechzigern war es RAM, der buchstäblich Geld kostete — IBM rechnete Speicher in Dollar pro Kilobyte ab, und das waren Dollar, für die man damals ein Auto hätte anzahlen können.1Vgl. die Preisgeschichte von Kernspeicher: ca. $1 pro Bit in den 1950ern, sinkend auf ca. $0.01 pro Bit Mitte der 1970er. Quelle: Computer History Museum, „Memory & Storage Timeline“. In den Achtzigern war es der Adressraum. In den Neunzigern die Bandbreite. Heute ist es das Kontextfenster des Large Language Models.

Die Probleme sehen verschieden aus. Aber wer genau hinschaut — und das ist die zentrale These dieses Essays — erkennt denselben Antagonisten in wechselnder Verkleidung. Und dieselbe Lösung, die ihn jedes Mal besiegt. Nur dass jede neue Generation so tut, als hätte sie diese Lösung gerade erst erfunden. Die Informatik leidet, so könnte man polemisch formulieren, an einer kollektiven Amnesie ihrer eigenen Architekturgeschichte.

§ 2

Errata & Korrekturen zur Originalfassung


⚠ Korrekturhinweis — Peer Review

Cooley-Tukey & die 70er: Die Originalfassung ordnet den FFT-Algorithmus den 1970er Jahren zu und beschreibt ihn als „primär eine Antwort auf CPU-Knappheit“. Beides ist korrekturbedürftig. Das Paper von Cooley & Tukey wurde 1965 publiziert, die erste Demonstration erfolgte 1964 auf einem IBM 7094.2J. W. Cooley & J. W. Tukey, „An Algorithm for the Machine Calculation of Complex Fourier Series“, Mathematics of Computation 19(90), April 1965, S. 297–301. DOI Die primäre Motivation war nicht generelle CPU-Effizienz, sondern die Erkennung unterirdischer sowjetischer Atomtests im Kontext von Kennedys Science Advisory Committee.3Vgl. IEEE Milestone-Dokumentation: „The demonstration of the Cooley-Tukey algorithm showed that it was 100 times faster.“ Die Sensoren wurden tatsächlich im Umfeld der SALT-Verhandlungen platziert. ETHW

Turbo Pascal Units & UCSD Pascal: Die Originalfassung suggeriert, Borland habe mit Units ein neuartiges Konzept geschaffen. Tatsächlich war das Unit-System von UCSD Pascal inspiriert, das bereits auf 8-Bit-Maschinen separate Kompilierung ermöglichte.4„Units in Borland’s Pascal were similar to Modula-2’s separate compilation system. […] Turbo Pascal syntax for units appears to have been borrowed from UCSD Pascal.“ — Borland Pascal Wiki. Quelle Borlands Verdienst war die elegante Integration in eine populäre IDE — nicht die Erfindung des Prinzips.

Quellenapparat: Die Originalfassung enthielt keine einzige Quellenangabe. Für einen Artikel, der Dissertationsniveau beansprucht, ist das ein methodischer Kardinalfehler. Die vorliegende Überarbeitung ergänzt 14 Primär- und Sekundärquellen.

§ 3

Sechs Dekaden, sechs Engpässe


Was folgt, ist eine notwendigerweise verdichtete Darstellung. Jede Dekade war komplexer, als eine Karte sie einfangen kann — aber das ist der Witz: Verdichtung ist selbst das Muster, das wir untersuchen. Hover über die Karten für erweiterte Analyse und Quellen.

1957 – 1970er

Speicher & Rechenzeit

Fortran · Assembler · Overlay-Linker

Programme lebten in wenigen Kilobyte. Jede Variable kostete echtes Geld. Der FFT-Algorithmus von Cooley & Tukey (1965) reduzierte die Komplexität diskreter Fouriertransformationen von O(n²) auf O(n log n) — und machte damit Berechnungen praktikabel, die zuvor Stunden manueller Arbeit erfordert hätten.2Cooley & Tukey 1965. Die erste Demonstration auf einem IBM 7094 war 100× schneller als bestehende DFT-Implementierungen.

→ Manuelle Ressourcenverwaltung & Overlay-Segmente
Korrektur: Der Originalartikel verortet dies in die „70er“. Tatsächlich wurde der FFT-Algorithmus 1964/65 entwickelt; die Overlay-Technik selbst stammt aus den späten 1950ern und war in den 60ern bereits etabliert. Overlay-Linker erlaubten es, Programmteile dynamisch nachzuladen — das erste „Paging“ avant la lettre.
1980er

Adressraum & kognitive Komplexität

C · Turbo Pascal · frühe OOP

Das 640-KB-Limit des IBM PC erzwang ein bizarres Puzzle: Conventional Memory, Upper Memory, Extended Memory, Expanded Memory — vier verschiedene Arten, an denselben knappen Speicher heranzukommen.5Die 640 KB Grenze war eine architektonische Folge des Intel 8088 mit 20 Adressleitungen (1 MB gesamt, 384 KB reserviert). Vgl. Wikipedia: Conventional Memory Gleichzeitig wuchsen Codebases über die kognitive Kapazität einzelner Entwickler hinaus. Turbo Pascal 4.0 (1987) antwortete mit Units — einem System separater Kompilierung, das Borland von UCSD Pascal adaptierte.4UCSD Pascal bot bereits separate Kompilierung; Borland übernahm und verfeinerte das Konzept für die PC-Welt.

→ Modularisierung & Information Hiding
Das Prinzip, das David Parnas bereits 1972 formal beschrieb: „One must provide the intended user with all the information needed to use the module correctly, and nothing more.“6D. L. Parnas, „On the Criteria To Be Used in Decomposing Systems into Modules“, CACM 15(12), 1972, S. 1053–1058. DOI Die Ironie: Parnas‘ Paper war 15 Jahre alt, als die Praxis endlich nachzog. Die Informatik-Amnesie beginnt früh.
1990er

Netzwerk-Latenz & Heterogenität

HTTP · CGI · XML · CORBA

56k-Modems, Systeme die miteinander reden mussten, obwohl sie in verschiedenen Sprachen geschrieben waren. HTTP (Berners-Lee, 1991) war brutal simpel — und genau deshalb erfolgreich.7T. Berners-Lee, „Information Management: A Proposal“, CERN, 1989. HTTP/0.9 erschien 1991 als textbasiertes Protokoll. W3C CORBA versuchte dasselbe Problem mit akademischer Eleganz zu lösen und ertrank in seiner eigenen Komplexität. Die Lektion: Protokoll-Abstraktionen gewinnen durch Einfachheit, nicht durch Vollständigkeit.

→ Protokoll-Abstraktion & Standards
REST (Fielding, 2000) formalisierte retrospektiv, was HTTP intuitiv richtig gemacht hatte: zustandslose Kommunikation über uniforme Schnittstellen.8R. T. Fielding, „Architectural Styles and the Design of Network-based Software Architectures“, Dissertation, UC Irvine, 2000. Kapitel 5 definiert REST. Online Man könnte sagen: Fielding beschrieb das Muster, nachdem es bereits millionenfach implementiert war. Theorie folgt Praxis — selten umgekehrt.
2000er

Skalierung & Zustandslosigkeit

Memcached · MapReduce · Redis

HTTP ist zustandslos, Anwendungen nicht. Millionen Nutzer trafen auf Single-threaded Architekturen, die unter der Last kollabierten. MapReduce (Dean & Ghemawat, Google, 2004) war die kanonische Antwort: Zerlege das Problem in unabhängige Einheiten, verteile sie auf beliebig viele Maschinen.9J. Dean & S. Ghemawat, „MapReduce: Simplified Data Processing on Large Clusters“, OSDI 2004, S. 137–150. Google Research

→ Zustandsexternalisierung & horizontale Skalierung
Sessions wanderten in Redis, Caches in Memcached, statische Assets auf CDNs. Der Zustand wurde systematisch vom Prozess getrennt — dasselbe Muster, das 30 Jahre zuvor Overlay-Segmente vom Hauptprogramm getrennt hatte. Nur dass diesmal niemand den Zusammenhang bemerkte, weil „Web-Scale“ so viel aufregender klang als „Overlay-Linker“.
2010er

Koordination & Konsistenz

Kubernetes · React · Terraform · Docker

Microservices lösten den Monolithen und schufen ein neues Problem: Wie koordiniert man 200 Services, die alle gleichzeitig deployt, überwacht und skaliert werden müssen? Die Antwort war deklarative Orchestrierung. Nicht mehr „mach Schritt A, dann B“, sondern „so soll der Zielzustand aussehen — finde selbst heraus, wie du dahin kommst.“

→ Deklarative Orchestrierung & Self-Healing
Kubernetes (Google, open-sourced 2014) formalisierte Reconciliation Loops: ein Controller vergleicht kontinuierlich Ist- und Soll-Zustand und korrigiert Abweichungen automatisch.10Kubernetes basiert auf Googles internem Borg-System. Vgl. B. Burns et al., „Borg, Omega, and Kubernetes“, ACM Queue 14(1), 2016. ACM React (Facebook, 2013) tat dasselbe für UIs: deklariere den gewünschten DOM-Zustand, das Framework reconciled.
2020er

Kontext & Semantik

RAG · MemGPT · Agentic AI · Long-Context

Das Kontextfenster des LLM ist das neue 640-KB-Limit. Lange Konversationen, große Codebases, mehrstündige Aufgaben — sie passen nicht in ein endliches Fenster. RAG externalisiert Wissen in Vektordatenbanken. MemGPT (Packer et al., 2023) verwaltet Kontext hierarchisch — und nennt die Analogie beim Namen: „LLMs as Operating Systems“.11C. Packer, V. Fang, S. G. Patil, K. Lin, S. Wooders & J. E. Gonzalez, „MemGPT: Towards LLMs as Operating Systems“, arXiv:2310.08560, Oktober 2023. arXiv

→ Semantisches Caching & Kontext-Virtualisierung
MemGPTs Architektur unterscheidet Main Context (= RAM) und External Context (= Disk) und implementiert eine Form von „Paging“ für Token. Working Memory, Episodic Memory, Archival Storage — die Hierarchie ist isomorph zu CPU-Cache → RAM → Disk. Die Autoren machen diese Parallele explizit. Zum ersten Mal in sechs Dekaden benennt ein Paper das Muster, statt es nur unbewusst zu reproduzieren.

Jede Generation entdeckt dieselbe Wahrheit:
Eine Ressource ist knapp — und das System muss so tun, als wäre sie unbegrenzt verfügbar.

— Rekurrentes Muster, hier erstmals als These formuliert
§ 4

Das Meta-Pattern: Drei Mechanismen


Wenn man die sechs Dekaden übereinanderlegt, kristallisieren sich drei Mechanismen heraus, die in jeder Ära in derselben Kombination auftreten. Man könnte sie als die drei Säulen der Virtualisierung durch Indirektion bezeichnen:

⊞
Zerlegung

Das Problem wird in Einheiten zerlegt, die kleiner als der Engpass sind. Overlay-Segmente passen in RAM. HTTP-Requests passen durch ein schmales Rohr. MapReduce-Chunks passen auf einen Node. RAG-Chunks passen in ein Embedding. Agentic Steps passen in ein Kontextfenster.

⬡
Hierarchisches Caching

Was häufig gebraucht wird, bleibt nah. Was selten gebraucht wird, lagert weit weg. CPU-Cache → RAM → Disk. Hot Data → Redis → PostgreSQL. Working Memory → Episodic → External Knowledge Base. Die Hierarchie ist überall dieselbe.

◎
Lazy Evaluation

Lade nur, was gerade gebraucht wird. Virtual Memory lädt Pages on demand. React rendert nur geänderte Komponenten. RAG holt nur die relevanten Chunks. Ein Agent liest nur die relevanten Dateien eines Repos. Prinzip: Defer until necessary.

Diese drei Mechanismen bilden zusammen das, was man als Virtualisierungstrias bezeichnen könnte: Die Illusion einer unbegrenzten Ressource, erzeugt durch die Kombination von Partitionierung, lokalitätsbasierter Hierarchie und bedarfsgesteuertem Laden. Es ist, als hätte die Informatik einen einzigen genialen Trick gelernt — und ihn dann sechzig Jahre lang vergessen und wiederentdeckt, vergessen und wiederentdeckt, in einer Endlosschleife, die selbst nach Refactoring schreit.

§ 5

Synoptische Übersicht


Ära Engpass Lösungsmuster Kanonische Referenz
1957–70er RAM & CPU-Zeit Overlay / Paging Cooley & Tukey 1965; Overlay-Linker
1980er Adressraum / Kognition Information Hiding Parnas 1972; Turbo Pascal Units 1987
1990er Bandbreite / Heterogenität Protokoll-Abstraktion HTTP 1991; Fielding (REST) 2000
2000er Zustand / Last Externalisierung Dean & Ghemawat (MapReduce) 2004
2010er Koordination Deklarative Orchestrierung Kubernetes 2014; React 2013
2020er Kontextfenster Semantisches Virtualisieren Packer et al. (MemGPT) 2023
§ 6

Grenzen der Analogie


Ein ehrlicher Essay muss die Schwächen seiner eigenen These benennen. Und die These vom „ewigen Meta-Pattern“ hat durchaus welche.

Erstens: Selektionsbias. Wer ein Muster sucht, findet es. Die hier dargestellten sechs Engpässe wurden ausgewählt, weil sie zum Muster passen. Engpässe, die anders gelöst wurden — etwa durch fundamentale Paradigmenwechsel statt durch Virtualisierung — fallen systematisch aus der Darstellung. Das Aufkommen von Garbage Collection etwa war keine Virtualisierung, sondern eine Automatisierung. Der Übergang von prozeduraler zu objektorientierter Programmierung war kein Caching-Trick, sondern ein epistemologischer Wechsel.

Zweitens: Die Analogie ist nicht isomorph. Zwischen einem Overlay-Linker und RAG-Chunking liegen nicht nur 60 Jahre, sondern qualitative Unterschiede. Overlay-Segmente sind deterministisch; RAG-Retrieval ist probabilistisch. Die Fehlercharakteristik ist fundamental verschieden: Ein fehlerhafter Overlay-Load führt zu einem Crash; ein fehlerhaftes RAG-Ergebnis führt zu einer halluzinierten Antwort. Die Kosten dieser Fehler sind inkommensurabel.

Drittens: Was erklärt die These eigentlich? Die Aussage „Jede Ära virtualisiert eine knappe Ressource“ ist möglicherweise so allgemein, dass sie trivial wird. Wenn jede Lösung für jedes Problem unter „Virtualisierung“ subsumiert werden kann, verliert der Begriff seine analytische Schärfe. Ein gutes theoretisches Framework muss nicht nur erklären, was passiert ist, sondern auch vorhersagen, was nicht passieren kann — und diese Falsifizierbarkeit bietet die These bislang nicht.

Dennoch: Auch wenn die Analogie nicht perfekt ist, hat sie heuristischen Wert. Sie zwingt dazu, bei jedem neuen Engpass die Frage zu stellen: Haben wir dieses Problem schon einmal gelöst? Und wenn ja, was war die Abstraktionsschicht? Allein diese Frage regelmäßig zu stellen, hätte der Informatik in den letzten sechs Jahrzehnten einige Umwege erspart.

§ 7

Fazit & Ausblick


Die zentrale These dieses Essays lässt sich in einem Satz zusammenfassen: Simuliere Unbegrenztheit durch schichtweise Indirektion — zerlege in handhabbare Einheiten, cache das Häufige nah, lade das Seltene bei Bedarf. Dieses Muster taucht in jeder Dekade der Softwareentwicklung auf, in verschiedenen Verkleidungen, aber mit identischer Struktur.

Die nächste Wand steht bereits sichtbar am Horizont: die Energiekosten von KI-Inferenz, die Koordination tausender paralleler Agenten, semantische Konsistenz über Modell-Grenzen hinweg. Wer das Muster kennt, kann die Lösung antizipieren, bevor der Engpass zur Krise wird. Sie wird wieder aus einer neuen Schicht bestehen, einer neuen Hierarchie, einer neuen Indirektion.

Und sie wird sich wieder anfühlen, als hätte sie jemand gerade erst erfunden.

Quellenverzeichnis & Anmerkungen

[1]
Computer History Museum, „Memory & Storage Timeline“. Kernspeicherpreise sanken von ca. $1/Bit (1950er) auf ca. $0.01/Bit (Mitte 1970er). computerhistory.org
[2]
J. W. Cooley & J. W. Tukey, „An Algorithm for the Machine Calculation of Complex Fourier Series“, Mathematics of Computation 19(90), April 1965, S. 297–301. doi:10.1090/S0025-5718-1965-0178586-1
[3]
IEEE Milestone: „First Demonstration of the Fast Fourier Transform (FFT), 1964″. Die primäre Motivation war die Detektion sowjetischer Atomtests. ethw.org
[4]
Borland Pascal Wiki: „Units in Borland’s Pascal were similar to Modula-2’s separate compilation system. […] Turbo Pascal syntax for units appears to have been borrowed from UCSD Pascal.“ borlandpascal.fandom.com
[5]
Wikipedia: „Conventional memory“. Die 640-KB-Barriere resultierte aus der 20-Bit-Adressierung des Intel 8088 (1 MB gesamt, 384 KB reserviert). wikipedia.org
[6]
D. L. Parnas, „On the Criteria To Be Used in Decomposing Systems into Modules“, Communications of the ACM 15(12), Dezember 1972, S. 1053–1058. doi:10.1145/361598.361623
[7]
T. Berners-Lee, „Information Management: A Proposal“, CERN, März 1989. HTTP/0.9 erschien 1991. w3.org
[8]
R. T. Fielding, „Architectural Styles and the Design of Network-based Software Architectures“, Dissertation, University of California, Irvine, 2000. ics.uci.edu
[9]
J. Dean & S. Ghemawat, „MapReduce: Simplified Data Processing on Large Clusters“, 6th OSDI, 2004, S. 137–150. research.google
[10]
B. Burns, B. Grant, D. Oppenheimer, E. Brewer & J. Wilkes, „Borg, Omega, and Kubernetes“, ACM Queue 14(1), 2016. queue.acm.org
[11]
C. Packer, V. Fang, S. G. Patil, K. Lin, S. Wooders & J. E. Gonzalez, „MemGPT: Towards LLMs as Operating Systems“, arXiv:2310.08560, Oktober 2023. arxiv.org
[12]
IBM Research Blog: „How IBM Research first demonstrated the Cooley-Tukey FFT“, Juni 2025. Bestätigt die Demonstration 1964 und die FORTRAN-Implementierung. research.ibm.com
[13]
IEEE Spectrum: „FFT: The 60-Year Old Algorithm Underlying Today’s Tech“, Oktober 2025. spectrum.ieee.org
[14]
The Digital Antiquarian: „The 640 K Barrier“, 2017. Detaillierte Darstellung der Memory-Management-Ära unter MS-DOS. filfre.net

© 2026 · FinCrime Watchdog · Rewritten Edition
Originaltext: Jürgen Schiller García (+ KI) · Kritische Überarbeitung mit Quellenprüfung
Programmiergeschichte · Architektur · Meta-Pattern

Markiert: