- Ich habe darüber gesprochen, wie man Programme auswählt, die lange nutzbar bleiben, und wie man eine vertrauenswürdige Infrastruktur aufbaut, muss aber eingestehen, dass ich darin immer noch nicht besonders gut bin
- Im letzten Monat habe ich den Kern eines Programms, das ich in den vergangenen zwei Jahren benutzt habe, neu geschrieben und dabei auf die Veränderungen meines Programmierens im Laufe meines Lebens zurückgeblickt
2015
- Ich stand Abstraktionen skeptisch gegenüber und legte Wert auf Tests und Versionsverwaltung
- Ich hielt den Missbrauch von Abstraktionen und den Mangel an Tests/Versionsverwaltung für die Ursache der Probleme
- Ich entwarf die Plattform Mu1 mit Tests und Layern als grundlegenden Einschränkungen
2017
- Beginn der Überarbeitung von Mu1 zum heutigen Mu
- Anfangs nutzte ich alle neuen Ideen zu Tests und Layern, stellte ihre Nutzung aber nach und nach ein
- Mu hat viele Tests, aber in herkömmlicher Form, und die Layer-Infrastruktur wurde nicht portiert
2022
- Beginn der Arbeit an Freewheeling Apps
- Zunächst ohne Tests gestartet, dann aber gründliche Tests für die Kernteile des Texteditors geschrieben
- Der Rest ließ sich nur schwer testen, funktionierte aber gut
2024
- Vor einem Monat habe ich alle Tests gelöscht
- Ich habe den Texteditor radikal überarbeitet – auf eine Weise, bei der ich mir Sorgen über Merge-Konflikte mit anderen Freewheeling Apps gemacht hatte
- Ich mache mir keine Gedanken mehr über Versionsverwaltung
- Ich habe Tests und Versionen aufgegeben und dadurch ein deutlich besseres Programm geschaffen
Meine aktuelle, integrierte Sicht auf nachhaltiges Programmieren
- Nachhaltig für viele Menschen zu entwickeln ist zu schwierig, also sollte man es gar nicht erst versuchen
- Die meiste Software ist von Anreizen infiziert, kurzfristig vielen Menschen dienen zu wollen. Konzentriere dich auf Software mit weniger Logos, die leicht zu bauen ist, wenige Abhängigkeiten hat und keine automatischen Updates durchführt
- Kleine Änderungen im Kontext können grundlegend verändern, wie gut ein Programm zu seinem Kontext passt
- Neue Programme führen uns auf die eine oder andere Weise ins Unbekannte. Oft wissen wir nicht genau, was wir eigentlich tun, egal in welche Richtung wir gehen
- Typen, Abstraktionen, Tests, Versionen, Zustandsmaschinen, Immutability, formale Analyse usw. sind Werkzeuge, die man in unbekanntem Gelände einsetzen kann
- Unvermeidlich wird man einige dieser Werkzeuge übermäßig einsetzen. Der ideale Einsatz ist viel geringer, als wir denken. Übernutzung ist technische Schuld
- Wenn sich das Verständnis des Kontexts stabilisiert, ist es wertvoll, einen beträchtlichen Teil des Programms wegzuwerfen und von vorn zu beginnen
- Vor dem Neuschreiben muss man alles, was man vom Programm will, und alle Szenarien, die das Programm bewältigen muss, gleichzeitig im Kopf haben
- Baue alles auf einmal
- Tests und Versionsverwaltung stehen dem Erreichen des Endpunkts dieser Entwicklung im Weg
- Tests lassen einen Bedenken vergessen, und Versionsverwaltung lässt einen an der Vergangenheit hängen
Meinung von GN⁺
- Wenn ein Programm zu komplex wird, kann es unmöglich werden, in Schritt 8 alles im Kopf zu behalten. Das gilt für die meiste Software, besonders für Software, die von mehr als einer Person geschrieben wurde
- Nicht jede Software muss zwangsläufig Schritt 9 erreichen. Viele Freewheeling Apps sind einfach genug und entwickeln sich langsam genug, dass sie sich schon bei nur wenigen Nutzern zu einem bugfreien Zustand stabilisieren können – unabhängig von frühen Designentscheidungen
- Um Schritt 9 zu erreichen, ist datenorientiertes Design eindeutig hilfreich. Es ist kein Werkzeug, das man blind anwenden kann, sondern eine Denkweise, die über immediate data structure choices hinaus auf das große Ganze schaut, wie ein Programm auf Daten zugreift
- Diese Schritte sind vielleicht nicht vollständig richtig. Möglicherweise werden Werkzeuge unterschätzt, mit denen man weniger Erfahrung hat
- Ich frage mich, welche Schritte es jenseits dieser Schritte noch geben könnte
1 Kommentare
Hacker-News-Kommentare
Ohne Tests sieht man Probleme nicht, sodass es so wirkt, als gäbe es sie nicht
Durch den Verzicht auf Tests und Versionen entstand ein besseres Programm
Zuerst dachte ich, der Autor liege falsch, aber es gibt gute Einsichten
Versionsverwaltung und automatisierte Tests lösen reale Probleme
Beim Schreiben/Refactoring großer Programme ist es wichtig, zu schreiben, wegzuwerfen und neu zu schreiben
Dieser Artikel ist verwirrend
Kleine Änderungen können die Eignung eines Programms stark verändern
Allein Software zu entwickeln und im Team zu entwickeln, ist völlig unterschiedlich
2022 begann die Arbeit an Freewheeling Apps
Ich stimme nicht zu, dass kleine Änderungen die Eignung eines Programms stark verändern können
Ich mag den Autor und mag das Mu-Projekt
Ich bin von der Komplexität des Software-Engineerings überwältigt