Für mich ist es ein gewisses Maß an Stabilität (wie in Beton zementiert, im Ofen gebrannter Ton, in Stein gemeißelt, in permanenter Tinte geschrieben). Je instabiler Ihr Code ist, je höher die Wahrscheinlichkeit ist, dass Sie ihn in Zukunft ändern müssen, desto flexibler muss er sein, um wie nasser Lehm produktiv zu bleiben. Ich betone auch die Geschmeidigkeit und nicht die Lesbarkeit. Für mich ist die Leichtigkeit, Code zu ändern, wichtiger als die Leichtigkeit, ihn zu lesen. Code kann einfach zu lesen und ein Albtraum zu ändern sein, und was nützt es, Implementierungsdetails zu lesen und leicht zu verstehen, wenn sie ein Albtraum sind, der geändert werden muss? Wenn es sich nicht nur um eine akademische Übung handelt, müssen Sie in der Regel in der Lage sein, Code in einer Produktionscodebasis leicht zu verstehen, um ihn bei Bedarf leichter ändern zu können. Wenn es schwierig ist, zu ändern, Dann gehen viele der Vorteile der Lesbarkeit aus dem Fenster. Lesbarkeit ist im Allgemeinen nur im Zusammenhang mit Nachgiebigkeit nützlich, und Nachgiebigkeit ist nur im Zusammenhang mit Instabilität nützlich.
Natürlich ist selbst der schwierigste Code, den man sich vorstellen kann, unabhängig davon, wie einfach oder schwer er zu lesen ist, kein Problem, wenn es keinen Grund gibt, ihn zu ändern, sondern nur zu verwenden. Und es ist möglich, eine solche Qualität zu erzielen, insbesondere für Low-Level-Systemcode, bei dem die Leistung häufig am meisten zählt. Ich verwende immer noch regelmäßig C-Code, der sich seit Ende der 80er Jahre nicht geändert hat. Es musste sich seitdem nicht mehr ändern. Der Code ist flüchtig und wurde in den Tagen des Fummelns geschrieben, und ich verstehe ihn kaum. Trotzdem ist es bis heute gültig, und ich muss die Implementierung nicht verstehen, um es optimal nutzen zu können.
Gründliches Schreiben von Tests ist eine Möglichkeit, die Stabilität zu verbessern. Ein anderer ist die Entkopplung. Wenn Ihr Code von nichts anderem abhängt, besteht der einzige Grund für eine Änderung darin, dass er sich selbst ändern muss. Manchmal kann eine geringe Menge an Code-Duplikaten als Entkopplungsmechanismus dienen, um die Stabilität auf eine Weise dramatisch zu verbessern, die es zu einem angemessenen Kompromiss macht, wenn Sie im Gegenzug Code erhalten, der jetzt völlig unabhängig von allem anderen ist. Jetzt ist dieser Code für Änderungen an der Außenwelt unverwundbar. In der Zwischenzeit hat Code, der von 10 verschiedenen externen Bibliotheken abhängt, den zehnfachen Grund, sich in Zukunft zu ändern.
Eine andere hilfreiche Sache in der Praxis ist es, Ihre Bibliothek von den instabilen Teilen Ihrer Codebasis zu trennen, möglicherweise sogar separat zu erstellen, wie dies für Bibliotheken von Drittanbietern der Fall ist (die ebenfalls nur dazu gedacht sind, verwendet zu werden, zumindest nicht von Ihnen geändert zu werden) Mannschaft). Nur diese Art von Organisation kann verhindern, dass Menschen daran manipulieren.
Ein weiterer Grund ist der Minimalismus. Je weniger Ihr Code versucht zu tun, desto wahrscheinlicher ist es, dass er das kann, was er gut kann. Monolithische Designs sind fast permanent instabil, da sie umso unvollständiger erscheinen, je mehr Funktionen hinzugefügt werden.
Stabilität sollte Ihr vorrangiges Ziel sein, wenn Sie Code schreiben möchten, der unweigerlich nur schwer zu ändern ist, z. Sie wirken der Schwierigkeit der Codewartung entgegen, indem Sie die Wahrscheinlichkeit maximieren, dass Sie den Code nicht ändern müssen und ihn daher in Zukunft nicht mehr warten müssen. Das senkt die Wartungskosten auf null, egal wie schwierig die Wartung des Codes ist.