Die rasante Entwicklung der künstlichen Intelligenz hat in den letzten Jahren zahlreiche Bereiche revolutioniert, insbesondere die Softwareentwicklung. Eine besonders spannende Methode, die sich dabei herauskristallisiert hat, ist das sogenannte Vibe-Coding. Dieses Vorgehen beschreibt eine Art von Programmierung in einem tranceähnlichen Zustand, bei der Entwickler eng mit großen Sprachmodellen (LLMs) zusammenarbeiten, um komplexe Anwendungen zu erstellen – häufig ohne vollständige Kenntnis der zugrundeliegenden Programmiersprache. Dieses Konzept eröffnet eine neue Welt an Möglichkeiten, birgt aber auch Herausforderungen, die während des Entwicklungsprozesses nicht zu unterschätzen sind. Die Entstehung einer Vibe-Coding-Erfahrung entstand aus der Neugier und dem Wunsch, die Grenzen dieser Methode auszutesten.
Ein erfahrener Programmierer, der mit fast zwanzig Programmiersprachen vertraut ist, aber über begrenztes Wissen in JavaScript verfügte, entschied sich, mittels LLMs wie Grok 3, Claude und Gemini ein großes Projekt von Grund auf neu zu entwickeln – ein Browser-basiertes Kriegsspiel namens Kriegspiel. Diese Art von Spiel, das eine langjährige Tradition als strategisches Trainingsinstrument für Generäle hat, war mit seinen sechs verschiedenen Einheitentypen und taktisch komplexen Abläufen eine perfekte Herausforderung, um die Leistungsfähigkeit der KI-gestützten Codierung zu testen. Zu Beginn des Projekts wurde festgestellt, dass der Versuch, den gesamten Spielcode in einem einzigen Prompt von der KI generieren zu lassen, nicht zielführend war. Das Modell lehnte die Bitte ab, eine komplette Anwendung dieses Umfangs bereitzustellen und empfahl stattdessen, das Projekt schrittweise anzugehen. Diese Erkenntnis war entscheidend und führte zur Entwicklung einer inkrementellen Herangehensweise.
Zunächst wurde die KI gebeten, nur die Spielkarte mit einem hexagonalen Raster zu erstellen. Danach folgten Ergänzungen wie Wälder, Seen und Berge, die jeweils farblich markiert wurden. Die schrittweise Erstellung ermöglichte einen besseren Überblick und machte es einfacher, einzelne Probleme gezielt anzugehen. Während des Prozesses gab es auch Rückschläge, insbesondere beim Versuch, grafische Einheiten zu zeichnen. Die anfänglichen Vorschläge der KI, Soldaten und Wagen mit simplen geometrischen Formen wie Kreisen und Quadraten zu visualisieren, waren ästhetisch wenig ansprechend.
Die Einbeziehung eigener Bilddateien half dabei, eine visuell zufriedenstellende Lösung zu finden. Doch auch nach mehreren Durchläufen wurde klar, dass die kodetechnische Komplexität der Anwendung steigt und das Projekt bald unübersichtlich wurde. Das Management der einzelnen Codebestandteile erforderte die Aufteilung in mehrere Dateien, was anfangs zu Problemen führte, da das Modell dabei regressiv auf frühere fehlerhafte Versionen zurückfiel. Hier zeigte sich die immense Bedeutung von Versionierungssystemen wie Git, die es ermöglichen, Fehler rückgängig zu machen und stabile Entwicklungsstände zu bewahren. Ein zentrales Problem bei der weiteren Entwicklung war die Implementierung von Bewegungs- und Kampfsystemen.
Ursprünglich wurde angestrebt, diese Funktionen asynchron auszuführen, um die Performance zu verbessern. Obwohl die KI dieser Idee zustimmte, setzte sie sie nicht wie erwartet um, sondern passte lediglich Intervalle für Kampfüberprüfungen an. Dies führte zu einer interessanten Diskrepanz zwischen Erwartungen und Realität und verdeutlichte die Grenzen des Verständnisses der Modelle. Jedoch trug die Änderung letztlich zur glatteren Spielperformance bei. Im Laufe der Entwicklung wurde auch der sogenannte Nebel des Krieges eingefügt, ein Mechanismus, mit dem Spieler nur Sicht auf bestimmte Gebiete bekommen, was für strategische Tiefe sorgt.
Die KI bewältigte diese Erweiterung beeindruckend gut auf Anhieb. Der Wunsch, das Spiel zudem als mehrspielerfähige Online-Anwendung umzusetzen, stellte das Projektteam vor neue Herausforderungen. Die Integration eines Servers mittels Node.js, der Spielzustände verwaltet und die verschiedenen Spieler unabhängig steuert, verlangte eine Reihe neuer Komponenten und eine kluge Architektur. Obwohl die KI zunächst skeptisch war und davor warnte, komplexe Netzwerkanforderungen zu übernehmen, konnten präzise, gut vorbereitete Prompting-Strategien die gewünschten Resultate erzielen.
Die KI generierte serverseitige Dateien und passte bestehende Clientdateien an, um die Funktionalität zu sichern. Mit wachsender Größe des Codes nahm jedoch die Leistung der Sprachmodelle ab. Lange Generierungszeiten und teils unvollständige Codeteile erschwerten den Prozess. Ein weiteres Phänomen, das Beobachter als „Funktion Halluzinationen“ bezeichneten, trat auf: das Modell schlug Code mit nicht existenten Methoden vor, die allerdings oft nahe an den tatsächlichen Bedürfnissen waren. Solche Situationen erforderten eine eingehende menschliche Überprüfung und manuelle Korrekturen.
Dies unterstreicht die Notwendigkeit des Programmierwissens auch bei Einsatz modernster KI. Das Projekt zeigte, dass trotz aller Fortschritte in der KI-gestützten Programmierung immer noch ein gewisses Maß an technischem Know-how unabdingbar ist. Die Komplexität großer Projekte verlangt ein Verständnis der internen Logik und der Wechselwirkungen zwischen Funktionen. Die Zusammenarbeit mit der KI entwickelte sich von anfänglichen Komplettlösungen hin zu einer fein granulierten Arbeitsweise, bei der einzelne Funktionen und Variablen gezielt angepasst werden mussten. Strategien wie das Extraieren relevanter Codezeilen, Erklärungen durch die KI und die manuelle Umsetzung der Änderungen führten zu einem produktiven Workflow.
Das Fazit dieser Erfahrung ist ambivalent, aber ermutigend. Große Sprachmodelle sind in der Lage, die Basis für bedeutende Softwareprojekte zu legen und damit auch Opensource- oder individuelle Projekte für Menschen mit begrenztem Fachwissen zugänglich zu machen. Gleichzeitig offenbaren sich deutliche Grenzen, wenn die Projekte eine bestimmte Größenordnung überschreiten, insbesondere bei mehr als 5.000 Codezeilen. An diesem Punkt ist menschliches Eingreifen unerlässlich, um Stabilität, Funktionalität und Wartbarkeit sicherzustellen.