Zurück zum Blog

KI-Coding: Die fünf Kriterien, an denen sich Ihr Setup entscheidet

Schematische Darstellung einer Rückkopplungsschleife zwischen Codegenerierung, Prüfung und Korrektur

Kurze Wiederholung

Im ersten Teil dieser Serie ging es darum, dass die übliche Frage nach der besten Programmiersprache für KI-Coding an der Sache vorbeigeht. Ein Coding Agent liefert nicht das ab, was er zuerst geraten hat, sondern das, was nach drei bis fünf Korrekturrunden übrig bleibt. Und weil Sprachmodelle Fehler im eigenen Code nachweislich schlecht finden, muss der Widerspruch von außen kommen.

Die Sprache und ihre Werkzeuge sind dieser Widerspruch. Sie sind das Orakel.

Bleibt die Frage, wie man ein gutes Orakel von einem schlechten unterscheidet. „Hat einen Compiler" ist dafür zu grob. In der Praxis zerfällt die Sache in fünf Kriterien, und die werden fast immer durcheinandergeworfen. Genau deshalb reden die Go-Fraktion und die Rust-Fraktion in diesem Streit konsequent aneinander vorbei.

Kriterium 1: Latenz

Wie lange dauert es, bis der Widerspruch beim Agenten ankommt?

Das ist das Kriterium, das am direktesten auf die Wanduhr durchschlägt. Bei drei bis fünf Runden pro Aufgabe multipliziert sich jede Sekunde Wartezeit. Ein Setup, in dem ein Durchlauf 20 Sekunden braucht, und eines mit vier Minuten trennen Welten, obwohl beide „einen Compiler haben".

Hier gewinnt der REPL vor allem anderen, dann Go, dann TypeScript im Watch-Modus, dann mit Abstand Rust und alles, was einen vollständigen Build braucht.

Kriterium 2: Abdeckung

Welcher Anteil der möglichen Fehler wird gefangen, bevor der Code läuft?

Das ist die Achse, auf der die streng typisierten Sprachen gewinnen. Ein ausdrucksstarkes Typsystem schließt ganze Fehlerklassen aus, bevor eine einzige Zeile ausgeführt wird. Bei Python liegt diese Abdeckung nahe null.

Kriterium 1 und Kriterium 2 arbeiten gegeneinander, und das ist der eigentliche Kern der ganzen Debatte. Rust maximiert die Abdeckung und bezahlt mit Latenz: wenige Runden, jede teuer. Go nimmt mittlere Abdeckung bei sehr niedriger Latenz: mehr Runden, jede billig. Beide landen bei ähnlicher Gesamtzeit, mit unterschiedlichem Risikoprofil. Go lässt mehr Fehlerklassen bis in die Laufzeit durch, Rust hält den Agenten länger in Compiler-Schleifen fest, in denen er sich bei Lifetimes durchaus verheddern kann.

Kriterium 3: Lokalisierung

Zeigt die Fehlermeldung auf die Ursache oder auf ein Symptom drei Schichten weiter?

Das ist das am meisten unterschätzte Kriterium. Eine präzise Meldung führt zu einer gezielten Korrektur. Eine unpräzise Meldung führt dazu, dass der Agent an der falschen Stelle etwas ändert, das Symptom verschwindet und der eigentliche Fehler bleibt.

Rusts Compiler-Meldungen sind hier hervorragend, sie sagen oft direkt, was zu tun ist. C++-Template-Fehler sind das andere Extrem. JVM-Stacktraces, die durch mehrere Ebenen von Makros und verzögerter Auswertung laufen, sind ebenfalls schwach, und das trifft unter anderem Clojure.

Kriterium 4: Maschinenlesbarkeit

Kann der Agent die Rückmeldung verlässlich auswerten, oder muss er Text raten?

Das ist Gos stiller Vorteil und ein Punkt, den fast niemand nennt. Stabile Exit-Codes, strukturierte Ausgaben, ein einheitliches Format. Der Agent muss keine Prosa parsen, um zu wissen, was schiefging.

Bei fragmentierten Werkzeugketten, in denen jedes Tool ein anderes Ausgabeformat hat, geht dieser Vorteil verloren. Nicht weil die Information fehlt, sondern weil der Agent sie unzuverlässig extrahiert.

Kriterium 5: Was bedeutet eigentlich Grün?

Das wichtigste Kriterium, und das am seltensten gestellte.

Wenn Ihr Setup meldet „alles in Ordnung", welche Aussage steckt tatsächlich dahinter?

Bei Haskell bedeutet ein erfolgreicher Compilerlauf sehr viel. Bei Python bedeutet „Tests sind grün" oft nur, dass die Pfade abgedeckt sind, an die jemand gedacht hat. Und bei einem Agenten, der seine Tests selbst geschrieben hat, bedeutet es manchmal überhaupt nichts, weil er die Tests passend zum Code formuliert hat und nicht zur Anforderung.

Ein grünes Signal, dem man nicht trauen kann, ist gefährlicher als gar kein Signal. Es beendet die Prüfung.

Der Punkt, den die Sprachdebatte übersieht

Jetzt kommt die Beobachtung, die in der gesamten Diskussion um Go, Rust und TypeScript praktisch nicht vorkommt, obwohl sie die Sprachwahl relativiert.

Typsysteme fangen Formfehler. Sie fangen keine Bedeutungsfehler.

Ein Agent, der die Syntax einer Sprache beherrscht, und das tun heutige Modelle in allen gängigen Sprachen, macht kaum noch Typfehler. Er macht andere Fehler: Er dreht eine Bedingung um. Er vergisst den Randfall bei einer leeren Liste. Er zählt eins zu viel. Er ruft die richtigen Funktionen in der falschen Reihenfolge auf. Er implementiert sauber, korrekt typisiert und vollständig kompilierbar etwas, das die Anforderung verfehlt.

Ein Typsystem sagt Ihnen, dass dort eine Ganzzahl steht. Es sagt Ihnen nicht, dass es die falsche Ganzzahl ist.

Damit ist die unangenehme Wahrheit: Die Sprache deckt genau die Fehlerklasse ab, die ohnehin kaum noch auftritt, und lässt genau die durch, die tatsächlich weh tut. Ein Compiler ist ein gutes Orakel für Anfängerfehler und ein schwaches für die Fehler eines kompetenten, aber ahnungslosen Mitarbeiters. Und genau das ist ein Coding Agent.

Was Bedeutungsfehler tatsächlich fängt

Es gibt Werkzeuge, die auf dieser Ebene arbeiten, und sie sind älter als der ganze KI-Zyklus.

Eigenschaftsbasiertes Testen prüft nicht einzelne Beispiele, sondern Aussagen, die immer gelten müssen. Nicht „Sortieren von [3,1,2] ergibt [1,2,3]", sondern „das Ergebnis ist immer aufsteigend und enthält immer dieselben Elemente wie die Eingabe". Das System erzeugt dann hunderte Eingaben selbst und sucht gezielt nach dem Gegenbeispiel. Genau die Randfälle, die ein Agent übersieht, findet dieser Ansatz systematisch.

Verträge an den Systemgrenzen prüfen zur Laufzeit, ob Daten die Form haben, die die Anforderung verlangt, und zwar unabhängig davon, was der Code behauptet.

Verifizierbare Abnahmekriterien, die vor dem Code formuliert wurden. Das ist das mit Abstand stärkste Orakel für Bedeutungsfehler, weil es die einzige Instanz ist, die etwas über die Absicht weiß. Ein Compiler kennt die Absicht nicht. Ein Test, den der Agent nach dem Code geschrieben hat, kennt sie auch nicht.

Hier liegt übrigens der Grund, warum Clojure trotz fehlendem Compiler in dieser Betrachtung nicht abstürzt. Der Werkzeugkasten aus Spec, Malli und generativem Testen erzeugt aus einer einmal geschriebenen Vertragsdefinition gleichzeitig Prüfung, Instrumentierung und automatische Testdaten. Das ist auf der Bedeutungsebene stärker als jedes Typsystem. Man muss es nur bauen, weil die Sprache es nicht mitliefert.

Die Bilanz

Stellt man alle fünf Kriterien nebeneinander, ergibt sich ein anderes Bild als in den üblichen Ranglisten.

LatenzAbdeckungLokalisierungMaschinenlesbarGrün heißt was?
Gosehr gutmittelgutsehr gutmittel
Rustschwachsehr gutsehr gutgutsehr gut
TypeScript (strict)gutgutmittelmittelmittel
Clojureherausragendschwachschwachgutschwach ab Werk
Pythonmittelsehr schwachmittelschwachschwach

Go ist der beste Kompromiss, wenn niemand Zeit hat, etwas aufzubauen. Rust ist die Wahl, wenn Korrektheit teurer ist als Wartezeit. TypeScript im strikten Modus ist solide, sofern die Notausgänge zu sind.

Und in allen fünf Spalten steckt dieselbe Grenze: Keine dieser Sprachen weiß, was Sie eigentlich wollten.

Die eigentliche Arbeit

Die Sprachwahl bringt Sie ungefähr bis zur Hälfte. Sie bekommen ein Orakel geliefert, das Formfehler zuverlässig abfängt und bei Bedeutungsfehlern schweigt.

Die andere Hälfte ist kein Werkzeugkauf. Sie ist eine Arbeitsweise: die Absicht so aufzuschreiben, dass sie prüfbar wird, bevor der Agent loslegt. Verifikationsschritte zu formulieren, die tatsächlich falsifizierbar sind statt „sieht gut aus". Und diese Prüfung an einer Stelle zu verankern, an der der Agent sie nicht umgehen kann.

Wie das konkret aussieht, ist Thema von Teil 3.


Teil 3 dieser Serie zeigt die vier Bausteine, mit denen Teams die fehlende Hälfte des Orakels selbst bauen.

Der vollständige Team-Workflow dazu, von der prüfbaren Spezifikation bis zum Review, ist der Inhalt von Spec-Driven Development. Wenn Sie die Sprachfrage zuerst grundsätzlich klären wollen, hilft Ihnen vielleicht mein Beitrag zu Vibecoding im Unternehmen.

Kostenlose Erstberatung - Unverbindlich & ohne Risiko

Unsicher, wo KI in Ihrem Unternehmen wirklich etwas bringt?

In einem 30-minütigen Erstgespräch ordnen wir gemeinsam ein: welche Ihrer Prozesse sich für Automatisierung eignen, welche Werkzeuge zu Ihrer Situation passen, und wo KI ehrlich keinen Mehrwert bringt. Kein Pitch, kein Produkt im Kofferraum.

🛡️ 100% Zufriedenheitsgarantie
DSGVO-konform
Unverbindlich
Kein Verkaufsdruck
35+ erfolgreiche Projekte