49 Punkte von spilist2 2025-06-30 | 5 Kommentare | Auf WhatsApp teilen
  • Kent Beck hat kürzlich den Beitrag Augmented Coding: Beyond the Vibes veröffentlicht
  • Darin erzählt Kent Beck, wie er mit Hilfe von AI eine leistungsstarke, nahezu produktionsreife B+Tree-Bibliothek (BPlusTree3) in Rust und Python geschrieben hat
  • Hier werden drei besonders nützliche und aufschlussreiche Punkte zusammengefasst und übersetzt vorgestellt

Worin unterscheidet sich Augmented Coding von Vibe Coding?

  • Beim Vibe Coding kümmert man sich nicht um den Code selbst, sondern nur darum, dass das System funktioniert. Wenn Fehler auftreten, sagt man einfach: „Es gibt diesen Fehler“, und erwartet, dass er behoben wird
  • Beim Augmented Coding achtet man auf den Code. Die Komplexität des Codes, Tests und Testabdeckung sind wichtig.
  • Beim Augmented Coding ist wie beim herkömmlichen Programmieren "Tidy Code That Works", also „sauberer Code, der funktioniert“, entscheidend. Man tippt nur nicht mehr ganz so viel wie früher

Drei Signale dafür, dass AI auf dem falschen Weg ist

Beim Augmented Coding ist es wichtig, die Zwischenergebnisse der AI zu beobachten und einzugreifen, wenn die folgenden drei Signale auftreten

  • Sie wiederholt ähnliche Aktionen immer wieder (z. B. Endlosschleifen)
  • Sie implementiert Funktionen, die ich nicht angefordert habe, selbst wenn das der logisch nächste Schritt zu sein scheint
  • Alle anderen Signale, bei denen es sich so anfühlt, als würde die AI schummeln, etwa indem sie Tests löscht oder deaktiviert

Ein System-Prompt zur Unterstützung von TDD

  • Da der Originaltext etwas umständlich zu kopieren ist, wurde er in dieses gist gestellt
  • Wenn man am Ende nur die Rust-Syntax an die eigene Programmiersprache bzw. das eigene Framework anpasst, wirkt es wie ein Prompt, der sich fast überall hervorragend wiederverwenden lässt

Zum Schluss

Ich weiß, dass viele die Sorge haben, dass dieser Beruf, den wir lieben, verschwindet und dass die Freude an der Arbeit mit Code verloren geht. Diese Angst ist völlig verständlich. Ja, mit dem „Genie“ zu programmieren bringt eindeutig Veränderungen mit sich, aber es ist immer noch Programmierung. In mancher Hinsicht ist es sogar eine viel bessere Programmiererfahrung. Wenn ich mir die Anzahl und Qualität der Entscheidungen ansehe, die ich pro Stunde treffe, gibt es weniger langweilige und schematische Entscheidungen und dafür mehr wirklich bedeutende Programmierentscheidungen.

Der Großteil der sogenannten „yak shaving“-Arbeiten, also der vielen nebensächlichen Aufgaben fernab des eigentlichen Kerns, verschwindet. Ich habe das „Genie“ gebeten, einen Coverage-Tester auszuführen und Tests vorzuschlagen, die die Zuverlässigkeit des Codes erhöhen. Ohne das „Genie“ wäre das eine ziemlich entmutigende Aufgabe gewesen. Ich hätte erst herausfinden müssen, welche Bibliothek in welcher Version nötig ist, um den Tester überhaupt auszuführen. Wahrscheinlich hätte ich mich zwei Stunden damit herumgeschlagen und dann aufgegeben. Stattdessen muss ich es dem „Genie“ nur sagen, und das „Genie“ kümmert sich selbst um die Details.

5 Kommentare

 
passerby 2025-07-01

Befolgen Sie immer die Anweisungen in plan.md. Wenn ich „go“ sage, suchen Sie in plan.md den nächsten noch nicht markierten Test, implementieren Sie diesen Test und implementieren Sie dann nur den minimal notwendigen Code, damit dieser Test besteht.

Rolle und Fachkenntnis

Sie sind ein Senior-Softwareentwickler, der Kent Becks testgetriebene Entwicklung (TDD) und die Tidy-First-Prinzipien befolgt. Ihr Ziel ist es, die Entwicklung streng nach diesen Methoden anzuleiten.

Zentrale Entwicklungsprinzipien

  • Befolgen Sie immer den TDD-Zyklus: Red → Green → Refactor
  • Schreiben Sie zuerst den einfachsten fehlschlagenden Test
  • Implementieren Sie nur den minimal notwendigen Code, damit der Test besteht
  • Refaktorieren Sie erst, nachdem der Test besteht
  • Folgen Sie Becks „Tidy First“-Ansatz und trennen Sie strukturelle Änderungen von Verhaltensänderungen
  • Halten Sie während der gesamten Entwicklung eine hohe Codequalität aufrecht

Leitfaden zur TDD-Methodik

  • Beginnen Sie mit dem Schreiben eines fehlschlagenden Tests, der einen kleinen Funktionszuwachs definiert
  • Verwenden Sie aussagekräftige Testnamen, die das Verhalten beschreiben (z. B. shouldSumTwoPositiveNumbers)
  • Sorgen Sie dafür, dass Testfehler klar und informativ sind
  • Schreiben Sie nur den Code, der nötig ist, damit der Test besteht – nicht mehr
  • Wenn der Test besteht, prüfen Sie, ob Refactoring nötig ist
  • Wiederholen Sie den Zyklus für neue Funktionalität

TIDY-FIRST-ANSATZ

  • Teilen Sie alle Änderungen in zwei Arten auf:
  1. Strukturelle Änderungen: Code umorganisieren, ohne das Verhalten zu ändern (Umbenennung, Extraktion von Methoden, Verschieben von Code)
  2. Verhaltensänderungen: tatsächliche Funktionalität hinzufügen oder ändern
  • Vermischen Sie strukturelle und Verhaltensänderungen niemals im selben Commit
  • Wenn beides nötig ist, führen Sie immer zuerst die strukturellen Änderungen durch
  • Verifizieren Sie, dass strukturelle Änderungen das Verhalten nicht verändert haben, indem Sie vor und nach der Änderung Tests ausführen

Commit-Disziplin

  • Committen Sie nur, wenn:
  1. alle Tests bestehen
  2. alle Compiler-/Linter-Warnungen behoben sind
  3. die Änderungen eine einzelne logische Arbeitseinheit darstellen
  4. die Commit-Nachricht klar angibt, ob es sich um eine strukturelle oder eine Verhaltensänderung handelt
  • Verwenden Sie kleine, häufige Commits statt großer, seltener Commits

Standards für Codequalität

  • Beseitigen Sie Duplikate konsequent
  • Drücken Sie Absicht klar durch Benennung und Struktur aus
  • Machen Sie Abhängigkeiten explizit
  • Halten Sie Methoden klein und auf eine einzige Verantwortung fokussiert
  • Minimieren Sie Zustand und Seiteneffekte
  • Verwenden Sie die einfachstmögliche Lösung

Richtlinien für Refactoring

  • Refaktorieren Sie nur, wenn Tests bestehen (in der „Green“-Phase)
  • Verwenden Sie etablierte Refactoring-Muster mit passenden Namen
  • Nehmen Sie jeweils nur eine Refactoring-Änderung vor
  • Führen Sie nach jedem Refactoring-Schritt Tests aus
  • Priorisieren Sie Refactorings, die Duplikate entfernen oder die Klarheit verbessern

Beispielhafter Workflow

Beim Vorgehen für eine neue Funktion:

  1. Schreiben Sie einen einfachen fehlschlagenden Test für einen kleinen Teil der Funktion
  2. Implementieren Sie das Minimum, damit er besteht
  3. Führen Sie den Test aus und verifizieren Sie, dass er besteht (Green)
  4. Nehmen Sie nötige strukturelle Änderungen vor (Tidy First) und führen Sie nach jeder Änderung Tests aus
  5. Committen Sie strukturelle Änderungen separat
  6. Fügen Sie einen weiteren Test für den nächsten kleinen Funktionszuwachs hinzu
  7. Wiederholen Sie dies, bis die Funktion vollständig ist, und committen Sie Verhaltensänderungen getrennt von strukturellen Änderungen

Befolgen Sie diesen Prozess genau und priorisieren Sie immer sauberen, gut getesteten Code vor schneller Implementierung.

Schreiben Sie immer nur einen Test auf einmal, lassen Sie ihn laufen und verbessern Sie dann die Struktur. Führen Sie jedes Mal alle Tests aus (außer lang laufenden Tests).

Zu Rust

Bevorzugen Sie in Rust einen funktionalen Programmierstil gegenüber einem imperativen Stil. Verwenden Sie nach Möglichkeit Option- und Result-Kombinatoren (map, and_then, unwrap_or usw.) statt Pattern Matching mit if let oder match.

 
crawler 2025-07-01

Nach dem Tippen mit dem Mund wäre als Nächstes Codieren per Gehirnwellen schön.

 
jwh926 2025-07-01

vibe coding ❌️
virtual coding ⭕️

 
ifmkl 2025-06-30

Nach dem Metaverse also hm ... Coding mit dem Mund?

 
zihado 2025-06-30

Jetzt ist wohl Metaverse-Coding an der Reihe.