Komplett von vorne anzufangen ist keine gute Lösung
Jeder Entwickler kennt es: Man arbeitet an einem größeren Projekt für Monate oder Jahre und man bemerkt, dass man einiges doch besser gestalten hätte können.
Der erste Gedanke lautet dann oft: Code neu schreiben. Aber Halt!
Wenn dieser Gedanke präsent ist, sollte man kurz durchatmen und sich in Erinnerung rufen, dass es wohl besser sein wird den alten Code inkrementell zu verbessern. Wieso das so ist wollen wir hier klären!
Also:
Code komplett neu zu schreiben ist nicht die Lösung!
Warum wir Code lieber neu schreiben als alten zu verbessern
Jeder Programmierer ist zugleich auch Architekt. Jeder Programmierer arbeitet lieber an der neuen, schönen Struktur, als an der alten, in die Jahre gekommenen, Struktur.
Logisch, man wohnt auch lieber im neu gebauten, modernen Luxushaus als im alten Holzhaus, bei dem schon die ersten Balken am Rausfallen sind.
Aber kann ich diese Analogie auch wirklich auf funktionierenden Code ummünzen?
Rostet alter, aber funktionierender, Code wirklich vor sich hin?
Nein, tut er nicht!
Der oftmals pauschale Gedanke, dass alter Code schlecht ist stimmt so einfach nicht!
Uns als Programmierer fällt es aber vermeintlich leichter Code neu zu schreiben als alten Code zu verbessern. Wieso? Weil es schwerer ist vorhandenen Code zu lesen, als ihn komplett neu zu schreiben! Wir wollen uns nicht lange mit alten Code beschäftigen, wir machen es selbst ja ohnehin besser – das ist aber ein Trugschluss.
Wieso alter Code besser ist als neuer
Jeder kennt es: Funktionen im alten Code, die einfach viel zu lang sind. Die über zwei Seiten oder mehr gehen.
Und das obwohl wir Funktionen möglichst klein und kompakt halten sollen.
Aber wieso kommt es dann dazu, dass sich Funktionen plötzlich über mehrere Seiten erstrecken?
- Fehlerbehebungen!
- Bug-Fixes.
- Auf Edge-Cases eingehen.
Die selbe Funktion, die jetzt mehrere Seiten umfasst, war zu Beginn auch nur 15 Zeilen lang.
Durch Fehlerbehebungen ist die Funktion aber immer weiter gewachsen, da immer weitere Adaptionen eingeflossen sind.
Diese Anpassungen konnten nur einfließen, weil der Code bereits verwendet und getestet wurde – schreibe ich Code aber neu, verliere ich diese ganzen Erfahrungswerte.
Ich muss die selben Fehler nochmal machen, damit ich den neuen Code wieder auf das Niveau des alten Codes hebe. Das ist verlorene Zeit, die man besser in neue Features/Versionen seines Codes stecken sollte.
Solange der alte Code funktioniert ist nichts falsch daran und ist ziemlich sicher besser als der alte. Denn am Ende kommt es nicht drauf an, welches Programm die schönste Architektur hat, sondern welches Programm reibungslos verwendet werden kann!
Durch die verlorene Zeit in der Neu-Programmierung ist man gezwungen Marktanteile an seine Konkurrenz abzugeben, weil man einfach keine Zeit hat um neue Features zu releasen.
Welche Probleme gibt es in der Programmierung
Die Hauptprobleme sind in drei Kategorien einzuteilen.
- Architektonische Probleme: Wenn sich Fehler in der Architektur eingeschlichen haben, also z.B. das User Interface nicht perfekt mit der Logik getrennt wurde, kann man das einfach durch Refactoring beheben. Man verschiebt den Code entsprechend an die richtigen Stellen oder ändert Interfaces. Wenn man hier konzentriert vorgeht, kann das ein Programmierer alleine übernehmen – dafür muss ich nicht die ganze Software neu schreiben.
- Effizienz Probleme: Das Programm ist einfach langsam geworden. Ganz sicher liegt hier der Fehler an einem gewissen Part der Software, nicht das ganze Programm ist langsam und muss deshalb neu entwickelt werden. Wenn ich gezielt diesen einen Part der Software adaptiere, kann ich die Gesamt-Effizienz enorm steigern – dafür muss ich aber 99% des restlichen Codes gar nicht erst angreifen.
- Code-Aussehen: Variablen und Funktionen wurden falsch benannt, die Formatierung wurde nicht eingehalten oder die Klassennamen starten nicht mit Großbuchstaben. Alle diese Fehler sind mit einer guten IDE innerhalb weniger Minuten behoben. Hier sollte nicht mal kurz an eine Neuentwicklung gedacht werden.
Alter Code ist besser als neuer!
Zusammenfassend können wir sagen, dass alter Code deshalb besser ist weil:
- er bereits verwendet wurde und dadurch bereits viele Fehler behoben wurden.
- er diverse Edge-Cases und Anwendungsfälle abdeckt, die im Laufe der Zeit entdeckt wurden.
- im alten Code eine Menge Geld und Hirnschmalz steckt. Das würde verloren gehen, wenn man alten Code einfach wegschmeißt.
- er funktioniert und wir uns so auf neue Features konzentrieren können.
- er uns den aktuellen Markanteil beschert, den wir ansonsten, durch eine Neu-Programmierung und dem daraus resultierenden Stillstand, abgeben müssten.
- er vermutlich sogar besser ist als der neu geschriebene Code. Keiner kann garantieren, dass der neu geschrieben Code tatsächlich besser sein wird. Neuer Code ist kein Garant für bessere Struktur.