Änderungshygiene und Code Craft
Überblick
Wie Änderungen geformt und wie Code geschrieben wird. Zwei Themen: Trenne strukturelle von verhaltensbezogenen Änderungen und sage, was du meinst, mit der geringsten Cleverness, die funktioniert.
Änderungshygiene
- Strukturelle Änderungen vor verhaltensbezogenen Änderungen, unabhängig validiert. Umstrukturieren (Dateien teilen, umbenennen, Kommentare hinzufügen) ist ein separater, unabhängig überprüfbarer Schritt von der Änderung des Verhaltens (neue Einschränkungen, veränderte Logik). Vermische sie niemals in einer untrennbaren Änderung – ein Prüfer kann sicheres Umstellen nicht von echten Logikänderungen unterscheiden.
- Ein Anliegen pro Änderung. Eine Änderung hat einen einzigen, klar angebbaren Zweck.
- Verbessere den Code, in dem du arbeitest, wenn seine Probleme deine Aufgabe beeinträchtigen (hinterlasse den Campingplatz sauberer) – aber beginne nicht mit unzusammenhängendem Refactoring. Bleibe fokussiert auf das Ziel.
Code Craft
- Explizit vor implizit. Keine Wildcards, wo Namen hingehören, keine impliziten Typumwandlungen, keine leeren Zeichenketten oder magischen Sentinels. Sage, was du meinst.
- Deskriptive Namen. Funktionen/Variablen beschreiben, was sie tun; folge den Idiomen der Sprache und des Ökosystems.
- Kommentiere Absicht, nicht Mechanik. Erkläre warum, wenn es nicht offensichtlich ist; überspringe Kommentare bei selbsterklärendem Code.
- Kleine, einsatzorientierte Einheiten. Für jede Einheit solltest du angeben können, was sie tut, wie man sie verwendet, wovon sie abhängt – ohne ihre Interna lesen zu müssen. Eine große Datei tut normalerweise zu viel.
- DRY im Produktionscode mit Urteilsvermögen. Duplikation ist ein Signal, kein automatischer Fehler. Das zweite nahezu identische Vorkommen löst eine bewusste Entscheidung aus: abstrahiere oder dokumentiere, warum nicht. Abstrahiere gemeinsame Bedeutung, niemals zufällige Form – Dinge, die ähnlich aussehen, sich aber aus unterschiedlichen Gründen ändern, bleiben getrennt.
- Befolge Ökosystemstandards. Verwende die Idiome und gut unterstützten Bibliotheken, die ein kompetenter Praktiker erwartet. Erfinde nicht neu, was die Plattform gelöst hat.
Die benannten Spannungen
- DRY vs. vorzeitige Abstraktion: Produktionscode abstrahiert auf der Grundlage demonstrierter Wiederholung von Absicht, nicht antizipierter Wiederholung von Form. Wenn du unsicher bist, warte auf das dritte Vorkommen (YAGNI entscheidet den Tie-Break).
- DRY vs. DAMP: Produktionscode ist DRY; Testcode ist DAMP (Klarheit vor Deduplizierung, siehe
tests-as-a-control). DRY auf Tests anzuwenden ist ein Verstoß.
Häufige Rationalisierungen
| Ausrede | Realität |
|---|---|
| "Ich benenne um und füge das Feature in einem Commit hinzu" | Struktur und Verhalten in einem Diff sind nicht überprüfbar. Trenne sie. |
| "Zwei Kopien, ich muss jetzt DRY machen" | Zweites Vorkommen = entscheide. Gleiche Form ≠ gleiche Bedeutung. Zufällige Duplikation sollte getrennt bleiben. |
| "Solange ich hier bin, lasse ich mich dieses andere Modul refactoren" | Unzusammenhängendes Refactoring erweitert Umfang und Risiko. Notiere es; mache es jetzt nicht. |
| "Ein cleverer Einzeiler ist eleganter" | Explizit schlägt clever. Optimiere für den nächsten Leser. |
Rote Flaggen – STOPP
- Ein Diff, das sowohl Code verschiebt als auch sein Verhalten ändert
- Ein PR, dessen Zweck das Wort "und" zur Beschreibung benötigt
- Abstraktion beim ersten Anzeichen von Ähnlichkeit oder bei antizipierter (nicht tatsächlicher) Wiederholung
- Eine Datei, die du nicht mehr im Kopf behalten kannst
Vollständige Begründung: Artikel V & VI der Verfassung, gebündelt unter engineering-constitution/references/engineering-constitution.md.