Bitburner: das Cyberpunk-Spiel, das Architekten TypeScript lehrt
Cyberpunk-Game mit echter TypeScript-API, Doku direkt aus .d.ts. Erste Schritte und die Zürich-Büro-Story.
Es gibt ein kleines, hartnäckiges Resultat in der Lernforschung, das lange übersehen worden ist: Menschen lernen eine Programmiersprache schneller, wenn die Rückmeldung eine Konsequenz statt einer Note ist. Das Media Lab des MIT hat Scratch auf dieser Prämisse gebaut, und die konstruktivistische Linie zu Seymour Paperts Logo-Arbeiten seit den späten 1960er Jahren sagt das Gleiche — wer eine Schildkröte debuggt, die in eine Wand gelaufen ist, führt einen anderen kognitiven Akt auf als jemand, der falsch bewertet wird. Papert nannte das kaputte Programm „eine Chance zu lernen”. Das ist der frontale Ankerpunkt für diesen Beitrag, und der Weg zu deinem Schreibtisch ist kürzer, als er aussieht.
Denn das, das vielen arbeitenden Architekten endlich echtes TypeScript beibrachte, war kein Kurs. Es war ein Spiel übers Hacken.
Das Werkzeug: Bitburner — das Open-Source-Repository unter bitburner-official/bitburner-src — ist, in den Worten seines eigenen README, „ein programmierbasiertes Incremental-Game, das sich um Hacken und Cyberpunk-Themen dreht”. Das README nennt genau drei Wege, es zu starten: der Release-Build unter bitburner-official.github.io, der Entwicklungs-Build unter bitburner-official.github.io/bitburner-src, und ein Steam-Install — mit der ehrlichen Warnung, dass die Release-Build-Location „sich in naher Zukunft ändern kann”. Es nennt auch genau zwei Arten von Dokumentation, und die zweite ist der Grund, warum das einen Architekten-Nachmittag wert ist: der In-Game-Documentation-Tab, den das README als den besten Ort für aktuelle Informationen nennt, und die NS-API-Referenz, die „von den TypeScript-Definitionen generiert” wird. Du schreibst nicht Spielcode in einer erfundenen Sprache. Du schreibst echtes TypeScript gegen eine real typisierte API, in einem Editor mit echter Autovervollständigung, und das Spiel weigert sich, dein Skript zu laufen, wenn die Typen falsch sind. Das Projekt wird von der Community gebaut und gepflegt — CONTRIBUTING hat einen ganzen „As A Documenter”-Abschnitt, es heisst Leute, deren erster Beitrag ein Tippfehler ist, ausdrücklich willkommen, Beitragende behalten vollständiges Urheberrecht auf das, was sie schreiben (mit einer noch zu erstellenden formalen Contributor’s License Agreement), und jeder, der als Mitarbeiterin oder Mitarbeiter arbeiten will, wird auf #suggestions oder #development auf dem Projekt-Discord verwiesen. Das ist keine Nebensächlichkeit. Das ist der Grund, warum es das Projekt noch gibt.
Der Mechanismus ist alt und gut. Ein Incremental-Game gibt dir einen Loop, der sich in Minuten auszahlt; eine typisierte API gibt dir einen Compiler, der mit dir diskutiert; die Kombination gibt einem Anfänger zwei Dinge, die ein Dienstagabend-Tutorial nie bietet — Konsequenzen und sofortige Rückmeldung. Vor fünf Jahren hätte das eine Kuriosität sein können. Jetzt ist es ein seriöses Lehrinstrument, weil das Ökosystem darunter gereift ist: TypeScripts Language Server ist gut genug, dass Hover-Dokumentation und Typ-Fehler eintreffen, bevor du irgendetwas ausführst — das Spiel läuft also stillschweigend die gleiche Feedback-Loop wie eine professionelle IDE.
←HEUTE: Ein Open-Source-Browser-Spiel bringt eine vollständig typisierte TypeScript-API mit und generiert seine eigene Dokumentation aus den .d.ts-Definitionen. →3012: In Zürich-3012 ist das Scripting-Wissen des Büros Infrastruktur, wie Entwässerung — unsichtbar, bis zum Tag, an dem es fehlt. Fulcrum: Die billigste Weise, ein Atelier zu lehren, eine typisierte API zu lesen, ist, ihm ein System zu geben, wo Fehler Folgen haben und niemand zusieht.
Setup
Setup: Du kannst es einfach im Browser spielen. Aber im Repository lernst du etwas, denn die gleiche Node-Toolchain, die das Spiel baut, ist die, die dein Büro für alle zukünftigen Web-Skripte braucht.
# Node 20 oder neuer
git clone https://github.com/bitburner-official/bitburner-src.git
cd bitburner-src
npm install
npm run start:dev
# die URL im Terminal öffnen (Vite dev server)
# im Spiel: Terminal-Tab öffnen, dann tippen:
# nano hello.js
# das Skript aus „First steps" einfügen, Ctrl+B zum Speichern, dann:
# run hello.jsErste Schritte
Erste Schritte:
- Schreibe ein Skript, das eine Sache tut. Im In-Game-nano-Editor erstelle hello.js mit
export async function main(ns) { ns.tprint(ns.getHostname()); }. Starte es. Du hast gerade einen typisierten Entry Point mit einem injizierten Namespace-Objekt ausgeführt — die gleiche Dependency-Injection-Form wie in jeder modernen Plugin-API, die du je brauchst. - Zerreis es absichtlich. Rufe
ns.tprint()ohne Argument auf, oder misspelle die Methode. Lies den Fehler. Die NS-API-Doku wird aus den .d.ts-Dateien generiert, also sind Fehlertext und Dokumentation das gleiche Artefakt — hier sehen viele zum ersten Mal, dass Typen Dokumentation sind. - Schreib eine Schleife mit Kosten. Skripte verbrauchen simulierten RAM proportional zu den NS-Funktionen, die du aufrufst. Füge einen zweiten Funktionsaufruf hinzu und beobachte, wie sich dein RAM-Budget ändert. Das ist die Lektion: jeder API-Aufruf kostet, und ein gutes Skript ist eines, das die Aufgabe innerhalb eines Budgets erfüllt. Das wissen wir von Grasshopper-Definitionen, die vier Minuten zur Neuberechnung brauchen.
- Wechsel zum echten Editor. Öffne VS Code mit diesem Repository, installiere die NS-Type-Definitionen, und schreib deine Skripte ausserhalb des Spiels. Jetzt hast du Autovervollständigung, und die Schleife schliesst sich.
Der Trade-off, klar ausgesagt: ein Incremental-Game ist konstruiert, um Zeit zu verbrauchen, und es wird mehr von deiner verbrauchen als ein Tutorial würde. Das ist eine Eigenschaft des Genres, kein Fehler dieses Projekts — und eben diese Eigenschaft bringt Leute dazu, weiter Code zu schreiben, nachdem ein Kurs sie längst verloren hätte. Entscheide, welche dieser beiden Tatsachen dir wichter ist, bevor du es installierst.
Atelier: Ein Zwölf-Personen-Atelier in Zürich, das Rhino und Grasshopper nutzt und genau eine Person hat, die „die Skripte macht”, trägt einen Single Point of Failure, und alle im Raum wissen das. Der klassische Fix — einen Kurs buchen, zwei abrechenbare Tage verlieren, zusehen, wie das Wissen bis Oktober verdunstet — ist teuer und unzuverlässig. Dein nächster Schritt: Wähle zwei Leute im Büro, die gesagt haben „Ich würde gerne coden lernen” und nie einen Einstieg hatten, und gib ihnen Bitburner plus eine geschützte Stunde die Woche. Nicht als Perk. Als Vorkurs — der Schlüssel zum Erfolg eines echten Grasshopper-2- oder C#-Trainings, denn bis dahin wissen sie schon, was eine typisierte API, eine Funktionssignatur und ein Runtime-Fehler sind. Die PAZ Academy unterrichtet und setzt Grasshopper 2 seit der Alpha um, und die Schüler, die schon eine Type-Signatur lesen können, schaffen in den gleichen zwei Tagen ungefähr die doppelte Strecke.
Hack: Lies die Form einer typisierten API aus den Type-Definitionen statt durch Prosa-Doku zu jagen. Bitburner generiert seine NS-Dokumentation direkt aus TypeScript, damit ist NetscriptDefinitions.d.ts das Handbuch — und der gleiche Trick funktioniert mit jedem npm-Paket auf deinem Rechner. Drei Zeilen Shell ziehen jede Funktionssignatur aus einer Definitionsdatei:
find . -name "NetscriptDefinitions.d.ts" # sie sitzt im Repository
grep -nE "^\s{2,}[a-zA-Z_]+\(" "$(find . -name NetscriptDefinitions.d.ts | head -1)" | head -40
npx tsc --noEmit --strict yourscript.ts # der Compiler antwortet, bevor die Runtime es tutDiese letzte Zeile ist die ganze Disziplin in einem Befehl: lass den Type-Checker dich korrigieren, während die Datei noch offen ist, nicht während der Klient wartet. Architekten arbeiten schon so bei der strukturellen Vorbemessung. Die Gewohnheit überträgt sich.
Es gibt einen zweiten Grund, das in einer Sandbox zu lernen, und er ist nicht komfortabel. Gerade diesen Monat berichtete Heise Online, dass Forscher bei LastPass eine neue Infostealer-Variante fanden, die über Repositories verteilt wird, die auf GitHub legitim aussehen — Malware, die sich als Open-Source-Projekt verkleidet. Die Verteidigung ist nicht Paranoia über Open Source; es ist Code-Kompetenz. Jemand, der ein paar hundert Zeilen JavaScript von jemand anderem gelesen hat, kann den Unterschied zwischen einem Build-Skript und einem Exfiltrations-Skript erkennen. Jemand, der nie welche gelesen hat, kann das nicht. In einem Büro, wo jeden zweiten Plugin als Zip aus einem Forum kommt, ist diese Code-Kompetenz eine Sicherheitskontrolle, und sie ist billiger als jedes Sicherheits-Tool, das man kaufen könnte.
Der lange Blick von hier aus: die Stacks, die überlebten, waren die, deren Dateien ein Fremder noch öffnen und noch lesen konnte. Bitburners README gibt dir den ganzen Build, die ganze API, die Beitragsrichtlinien, und die Notiz, dass Beitragende ihr eigenes Urheberrecht behalten — das ist, wie ein reparierbares System aussieht, aufgeschrieben. PAZ’s eigenes openBIM-Konzeptpanel macht das gleiche Argument mit IfcOpenShell: eine IFC4-Datei ist Klartext, den du in Notepad öffnen, mit zwanzig Zeilen Python durchlaufen, und in der CI als Gate prüfen kannst — lies Pset_WallCommon.FireRating auf jedem IfcWall, löse SystemExit bei Fehlern aus, und ein schlechtes Modell erreicht nie den Ingenieur. Das ist das buildingSMART-Validierungsmuster in Miniatur, eine Anforderungsprüfung im IDS-Stil, die sich selbst überprüft. Das gleiche Prinzip, andere Domäne. Lesbar schlägt bequem, jede Dekade, ohne Ausnahme.
Ressourcen
- bitburner-official/bitburner-src — das Source-Repository; starte mit CONTRIBUTING und seinem „As A Documenter”-Abschnitt, wenn du etwas beitragen möchtest.
- Bitburner (Release-Build) — spiele es im Browser; das README warnt, dass diese URL sich ändern kann.
- Entwicklungs-Build — was der aktuelle Main-Branch tatsächlich macht.
- In-Game-Documentation-Tab — dem README nach die aktuellste Quelle; die NS-API-Referenz wird aus den TypeScript-Definitionen generiert.
- PAZ-Hinweis: kombiniere es mit dem openBIM-Hack-Panel — IfcOpenShell, das eine IFC4-Datei für Pset_WallCommon.FireRating durchläuft, ist die gleiche Fähigkeit, nur auf deine Gebäudedaten angewandt.
Installiere es auf dem Office-Rechner, der bereits Rhino nutzt, gib zwei Kolleginnen oder Kollegen eine Stunde die Woche, und prüfe im Oktober, ob jemand aufgehört hat, die Scripts-Person um Reparaturen zu bitten.
QUELLE · ↗
PAZ Kaffi · interdisziplinäre Redaktionsarbeit, geleitet von der PAZ Academy