Gewinne:
- Fähigkeit, Funktionen, Klassen und Module mit klaren Eingabe-Ausgabe- und Einschränkungsdefinitionen in die KI zu schreiben
- Fähigkeit, KI als Paarprogrammierungspartner zu nutzen und Schritt für Schritt in kleinen, überprüfbaren Abschnitten voranzukommen
- Fähigkeit, Logik- und Randfallfehler zu erkennen, indem der von der KI generierte Code kompiliert und mit kleinen Beispielen ausgeführt wird
Bei der Paarprogrammierung arbeiten zwei Entwickler an demselben Problem, wobei einer schreibt und der andere überarbeitet. Das Codieren mit KI ist die digitale Version genau dieser Beziehung: Sie legen die Richtung, Einschränkungen und Akzeptanzkriterien fest; KI erzeugt schnelle Entwürfe; Sie überprüfen jeden Schritt, indem Sie ihn kompilieren und testen. Die größte Falle besteht hier darin, der KI zu sagen: „Schreib mir diese Bewerbung von Anfang bis Ende“ und blind einen 200-Zeilen-Block zu akzeptieren. Eine gute Paarprogrammierung erfolgt in kleinen Schritten: Jeder Schritt sollte verständlich, überprüfbar und umkehrbar sein.
In dieser Einheit lernen Sie, wie Sie Funktionen, Klassen und Module mit einem klaren Input-Output-Vertrag drucken; Wie man KI Schritt für Schritt anleitet; und wir werden sehen, wie man Logik- und Randfallfehler abfängt, indem man den erzeugten Code anhand kleiner Beispiele ausführt. Das Ziel ist nicht Geschwindigkeit, sondern verifizierte Geschwindigkeit.
Konzepte: Eingabe-Ausgabe-Vertrag: Eine klare Definition, welche Eingaben eine Funktion entgegennimmt und welche Ausgabe und welches Fehlerverhalten sie verspricht. Randfall: Eingabe, die nicht gewöhnlich ist, aber tatsächlich auftreten kann (leer, Null, negativ, sehr groß, Null). Inkrementelle Entwicklung: Mit kleinen, funktionierenden Teilen fortfahren und jeden Schritt validieren.
Code mit Nettovertrag drucken
Die Grundlage des Qualitätscodes besteht darin, vor Beginn der Arbeit genau zu definieren, „was Sie wollen“. Geben Sie beim Schreiben einer Funktion an die KI fünf Dinge an: Sprache und Version, Eingabetypen und -bedeutungen, Ausgabe, Fehlerbedingungen und Einschränkungen (Leistung, Verbot externer Bibliotheken, Stil). Dies verhindert, dass die KI rät.
- Schreiben Sie den Vertrag. Eingabe, Ausgabe, Fehler, Einschränkung.
- Fragen Sie nach einer kleinen Einheit. Eine Funktion mit einer einzigen Verantwortung; Es ist kein riesiges Modul.
- Fordern Sie einen Testblock an. Fügen Sie neben dem Code einige Beispielläufe/Tests hinzu.
- Kompilieren und ausführen. Versuchen Sie es mit Randfällen und überprüfen Sie die Ausgabe mit dem Auge.
- Fahren Sie mit dem nächsten Schritt fort. Sobald ein Teil bestätigt ist, bauen Sie darauf auf.
Eingabeaufforderung für vertraglich vereinbarte Funktionen: „Schreiben Sie eine Funktion für TypeScript 5. Zweck: Berechnen Sie die Gesamtmenge der Artikel in einem Warenkorb. Eingabe: { Preis: Zahl, Menge: Zahl }[] Array. Ausgabe: Zahl (Gesamt). Regeln: Fehler auslösen, wenn Menge oder Preis negativ ist; 0 für leeres Array zurückgeben; Betrag auf 2 Dezimalstellen runden für Dezimalfehler. Verwenden Sie keine externe Bibliothek. Fügen Sie 5 Testfälle unter der Funktion hinzu (normal, leer, negative Menge, Dezimalpreis, einzeln). Gegenstand).“
KI als Paar leiten
Gute Fortschritte bei der Paarprogrammierung sind eher ein Dialog als eine große Bitte. Fordern Sie zunächst das Skelett an und führen Sie es aus. Fügen Sie dann einen Randzustand hinzu. Dann lass einen Fehler beheben. Durch diesen Ansatz bleibt der Code verständlich und Sie haben bei jedem Schritt die Kontrolle.
Eingabeaufforderung für inkrementellen Fortschritt: „Wir werden einen Reader schreiben, der eine CSV-Datei liest und die Zeilen in ein Objekt konvertiert. Gehen wir SCHRITT FÜR SCHRITT vor und fahren mit dem nächsten Schritt fort, ohne dass ich jeden Schritt bestätigen muss. Schritt 1: Schreiben Sie einfach das Grundgerüst, das die Datei in Zeilen aufteilt und die Kopfzeile trennt. Fügen Sie noch keine Typkonvertierung oder Fehlerbehandlung hinzu. Halten Sie es kurz und erklären Sie es.“
Erklären und begründen Sie die Codeaufforderung: „Erklären Sie die Funktion, die Sie gerade geschrieben haben, nicht Zeile für Zeile, sondern Entscheidung für Entscheidung: Welche Entwurfsentscheidung haben Sie getroffen und warum, welchen Randfall haben Sie wie behandelt, welche Fälle haben Sie bewusst ausgeschlossen? Listen Sie 3 Annahmen im Code auf, die ich nicht verpassen sollte.“
Tipp: Akzeptieren Sie den von der KI generierten Code nicht, ohne ihn zu verstehen. „Erklären Sie mir das, welche Annahmen haben Sie getroffen?“ Die Frage deckt versteckte Fehler auf und ermöglicht es Ihnen, diesen Code zu verteidigen, da der Code weiterhin in Ihrer Verantwortung liegt. Wenn Sie Code, den Sie nicht verstehen, in Produktion bringen, ist das so, als würden Sie einen Vertrag verschicken, ohne ihn zu unterschreiben.
Schwache Eingabeaufforderung / Starke Eingabeaufforderung
SCHWACH: „Schreiben Sie eine Sortierfunktion.“ (Ergebnis: Welche Sprache, was wird sortiert, ist sie stabil, was ist die Leistungsbeschränkung, Code ist vage und entspricht wahrscheinlich nicht den Anforderungen.)STRONG: „Schreiben Sie für Java 17 eine Methode, die ein List<Employee>-Objekt zuerst nach Abteilung (alphabetisch) und dann nach Gehalt (absteigend) sortiert Geben Sie in der Kommentarzeile die Methode an, um einen Haupttestblock mit 4 Proben hinzuzufügen.
Leistungsstarke Eingabeaufforderung; Beinhaltet Sortierkriterium (zweistufig), Nebeneffektregel (Ersetzen des Originals), Nullverhalten und Testerwartung. Ohne diese Details liefert die KI eine plausible, aber falsche Lösung; Es kann beispielsweise dazu führen, dass die ursprüngliche Liste beschädigt wird, was an anderer Stelle zu einem stillen Fehler führt.
Validierung mit Randfällen und kleinen Stichproben
Der Code, der im glücklichen Szenario funktioniert, ist nicht der richtige Code. Erzwingen Sie bewusst jede erzeugte Funktion:
Edge-Case-Typ
Beispieleingabe
erwartetes Verhalten
leere Eingabe
Leeres Array/Zeichenfolge
Kein Fehler, logisch leeres Ergebnis
Null/negativ
0, -1
Definiertes und korrektes Verhalten
großer Wert
Millionen von Datensätzen
Überlauf-/Leistungskontrolle
null/undefiniert
fehlender Platz
Kontrollierter Fehler oder Standard
Doppelt/ungewöhnlich
repetitiv, umgekehrte Reihenfolge
richtiges Ergebnis
Mini-Hüllen
Fall 1 – Stiller Rundungsfehler. AI schreibt eine Funktion, die Geld mit Dezimaltypen (Floatzahlen) sammelt; 0,1 + 0,2 ergibt 0,30000000000000004. Der Fehler wird behoben, wenn der Techniker die Regel „Auf 2 Ziffern runden und ganze Cent verwenden“ hinzufügt. Eine 3-Zeilen-Regel verhindert tausende Cent Abweichung bei der monatlichen Abstimmung.
Fall 2 – Nebenwirkungsfalle. Die KI schreibt eine Methode, die eine Liste „sortiert“, aber die ursprüngliche Liste an Ort und Stelle ändert. Es kommt zu unerwartetem Verhalten, weil ein anderes Modul dieselbe Liste verwendet. Wenn die Einschränkung „Original ändern“ in der Eingabeaufforderung enthalten wäre, würde der Fehler nie auftreten. bleibt bei der Codeüberprüfung hängen und verhindert 2 Stunden Debugging.
Fall 3 – Verdienst Schritt für Schritt. Ein Entwickler druckt ein Importmodul mit 150 Zeilen auf einmal. Wenn er einen Fehler findet, kann er nicht herausfinden, woher er kam. Ein anderer Entwickler teilt die gleiche Arbeit in 5 kleine Schritte auf, testet jeden Schritt in 2 Minuten und erkennt den Fehler sofort im 3. Schritt.
Häufige Fehler
- Drucken großer Blöcke in einer Anfrage. Es entsteht riskanter Code, der schwer zu verstehen und zu debuggen ist.
- Nach einem Code fragen, ohne einen Vertrag abzuschließen. Wenn der Eingabe-Ausgabe-Fehler nicht eindeutig ist, wird die KI raten und falsch liegen.
- Ich teste nur das glückliche Szenario. Wenn leere, null-, negative und große Eingaben nicht versucht werden, wird der Fehler der Produktion überlassen.
- Akzeptieren ohne zu verstehen. Der Code, den Sie nicht preisgeben, ist eine Schuld, die Sie nicht verteidigen können.
- Ignorieren sensibler Faktoren wie Nebenwirkungen und Geld/Datum. Floatgeld mit zeitloser Geschichte ist eine klassische Fehlerquelle.
Zusammenfassend
Das Schreiben von Code mit KI ist disziplinierte Paarprogrammierung: klarer Vertrag, kleine Schritte, bei jedem Schritt erstellen und testen. Die Angabe des Input-Output-Fehler-Constraint-Quartetts von Anfang an bestimmt die Qualität des Codes. Das Erklären des von ihm erzeugten Codes und das Forcieren mit Randfällen bringt die Fehler ans Licht, die unter dem glücklichen Szenario verborgen sind. Die Quelle der Geschwindigkeit ist nicht blinde Akzeptanz; ist ein schneller Entwurf plus schnelle Überprüfung.
Anwendungsaufgabe
Wählen Sie eine kleine, aber echte Funktion (z. B. Warenkorbsumme, Datumsdifferenz, Textanalyse). Drucken Sie mit der vertraglich vereinbarten Funktionsaufforderung; Fügen Sie daneben mindestens 5 Testszenarien hinzu. Führen Sie den Code aus und probieren Sie fünf Randfälle bewusst aus, wobei Sie die Tabelle als Leitfaden verwenden. Finden Sie einen Fehler in mindestens einem Grenzfall (falls nicht, entwerfen Sie eine neue Eingabe, um die Funktion zu erzwingen), beheben Sie ihn mit KI und überprüfen Sie durch erneutes Testen, ob die Korrektur funktioniert hat.
Checkliste
- [ ] Ich habe einen Vertrag geschrieben, der Eingaben, Ausgaben, Fehler und Einschränkungen enthält.
- [ ] Ich habe den Code in kleinen Schritten generiert, statt in einem großen Block.
- [ ] Ich habe neben dem Code einen Test-/Beispiellaufblock hinzugefügt.
- [ ] Ich habe bewusst mindestens 5 Randfälle getestet.
- [ ] Ich habe der KI den Code erklärt und seine Annahmen überprüft.
- [ ] Ich habe den gefundenen Fehler korrigiert und die Behebung durch einen erneuten Test bestätigt.