Überraschung: Manchmal muss man halt doch noch selbst denken

Veröffentlicht am 14. April 2025

2FA

Vor knapp drei Monaten hatte ich meine ersten Gedanken zum Programmieren mit KI(-Agenten) aufgeschrieben. Inzwischen hat das Kind auch einen Namen bekommen, man nennt es wohl Vibe Coding. Okay.

Ich muss zugeben: Für die Entwicklung von Appisto war es mir eine große Hilfe. Grüne Wiese, homogener Tech-Stack, viel CRUD und Forms over Data, Standard-Sachen mit verhältnismäßig kleiner Codebasis. Auch hier habe ich vieles von Hand zurechtgerückt und insbesondere ein Auge auf die Architektur behalten, da es sonst recht schnell unschön geworden wäre. Aber die Code-Generierung hat im Großen und Ganzen gut geklappt. Neuen Dialog nach Schema F erstellen? In 2 Minuten generiert statt in einer halben Stunde manuell zusammenkopiert.

In dieser Woche habe ich mich dann einem etwas komplexeren Thema für Taxaro gewidmet: Der Implementierung von Zwei-Faktor-Authentifizierung. Ich habe zunächst manuell ein Konzept erstellt und das von verschiedenen Modellen challengen lassen, sowohl aus Sicherheits- als auch aus UX-Perspektive.

Dann wollte ich mich so an die Umsetzung machen, wie ich es zuletzt von Appisto gewohnt war. Der erste Versuch mündete darin, dass ich einen Tag Arbeit gelöscht und noch einmal von vorn begonnen habe. Denn die Ausgangslage ist hier eine andere: Jahrelang gewachsene Codebasis mit vielen Beteiligten, heterogener Tech-Stack mit Technologien, die weitaus weniger Mainstream sind.

Das beginnt schon bei F#, wo man den geringeren Umfang an Trainingsdaten im Vergleich zu etwa TypeScript sofort an der Qualität des generierten Codes erkennt. Oft kompiliert das Ergebnis gar nicht und nicht selten enden die Korrekturversuche dann zwar in einem zufriedenen Compiler, aber in wirrem, unnötig komplexem Code. Und das, obwohl das Backend mit einer sehr klaren und einfachen Architektur, sehr stringenten Namenskonventionen und im Kern ja im Prinzip "nur" vielen kleinen und oft puren Funktionen arbeitet. Hier bin ich dann schnell wieder dazu übergegangen, von Hand zu programmieren und nur Copilot zur Vervollständigung bzw. lokale Code-Vorschläge zu benutzen. Denn alles andere hat keine Ergebnisse produziert, die meinem Qualitätsanspruch an lesbaren und nachhaltig wartbaren Code genügen würden.

Anderes Beispiel: In jeder Konstellation schlugen mir die Modelle vor, die Abfrage des zweiten Faktors (hier ein Time-based One-time Password (TOTP)) im Anschluss an das bestehende Formular mit Abfrage von E-Mail-Adresse und Passwort einzubinden. Mein Bauchgefühl sagte mir aber, dass das nicht sauber ist und schnell wurde mir dann auch klar, weshalb: Würde man das so umsetzen mit zwei losgelösten Komponenten, die erst E-Mail und Passwort und anschließend TOTP verifizieren um beispielsweise eine neue Session zu starten, dann könnte ein Angreifer den ersten Schritt im Prinzip überspringen. Konkret darauf hingewiesen, kamen die Modelle dann auch mit Lösungsvorschlägen um die Ecke. Hätte ich mich aber einfach darauf verlassen, was ursprünglich vorgeschlagen wurde, wäre eine halbgare Lösung entstanden.

Das sind so Dinge, bei denen man dann doch noch selbst den Kopf einschalten muss – wer hätte das gedacht. Denn den KI-Systemen fehlt es nicht nur häufig am Kontext, sondern auch an der Motivation und der (Eigen-)Initiative, sich die Dinge selbst zu erschließen und auch mal um die Ecke zu denken. So gilt weiterhin: Shit in, shit out.

Woraus sich die Frage ergibt: Wie das wohl funktioniert für "Vibe Coder" ohne jede Erfahrung und/oder Domänenwissen?

Was meinst du?
Schreib mir gerne eine E-Mail.