Warum ist es schwer Code zu verstehen, den Du in der Vergangenheit geschrieben hast?
Bei Code der in der Vergangenheit geschrieben wurde, muss ich erst mal das gedankliche Modell zum Code wieder aufbauen. Ich muss die Gedanken reproduzieren, die ich damals beim Programmieren hatte. Ich muss mir die Problemstellung wieder ins Gedächtnis rufen, ich muss meine Lösungsidee für das Problem wieder verstehen und zuletzt auch den Lösungsweg. Ich muss die Bedeutung von Variablen, Daten, Methoden etc. erfassen. Deswegen ist es grundsätzlich schwerer Code zu verstehen, der in der Vergangenheit geschrieben wurde. Wenn ich jedoch aktuell an dem Code arbeite oder vor Kurzem gearbeitet habe, dann ist das alles präsent.
Daraus kann man ableiten, dass es unterschiedliche Qualität von Code gibt:
Code der einen beim Aufbau dieses gedanklichen Modells unterstützt
oder Code der einen beim Aufbau dieses gedanklichen Modells in die Irre leitet oder es schwer macht.
Einige Dinge, die Code leicht verständlich machen:
eindeutige Namen für Variablen, Methoden, Klassen, etc.., die das jeweilige Konzept klar und unzweideutig erklären
klare Struktur
Separation of Concerns: Eine bestimmte Codestelle erledigt eine und wirklich nur eine klar umrissene Aufgabe
der Code erzählt eine “Geschichte” und ist dadurch flüssig zu lesen
aktuelle Dokumentation, die das Konzept und die Struktur in klaren Worten beschreibt
gleiche Dinge werden immer auf die gleiche Art erledigt
der Code verhält sich wie erwartet nach dem Lesen des Codes
Arbeitsschritte der gleichen Granularität
Einige Dinge, die Code schwer verständlich machen:
irreführende, missverständliche oder falsche Namen für Variablen, Methoden, Klassen, etc. Man versteht gar nicht, wofür das jeweilige Konstrukt steht
die Reihenfolge der Abarbeitung ist ist willkürlich, eine klare Struktur ist nicht erkennbar
ein zusammengehörender Codeteil (z.B. eine Methode / Funktion) macht mehrere Dinge, die eigentlich nichts miteinander zu tun haben.
veraltete oder falsche Dokumentation
immer wieder andere Lösungen für die selbe Art von Problemen
der Code verhält sich immer wieder unerwartet. Komplexe Schritte verstecken sich an unerwarteter Stelle im Code