Als Programmierer sind wir oft unglaublich stolz auf unsere Fähigkeiten und vertreten sehr starke Meinungen darüber, was "guter" Code und "schlechter" Code ist.
Zu jedem Zeitpunkt in unserer Karriere ist uns wahrscheinlich ein Legacy-System in den Schoß gefallen und wir dachten: "Mein Gott, dieser Code ist scheiße!" weil es nicht in unsere Vorstellung passte, was für ein guter Code sein sollte, obwohl es möglicherweise perfekt funktionierender, wartbarer Code war.
Wie bereiten Sie sich mental vor, wenn Sie versuchen, sich mit der Arbeit eines anderen Programmierers auseinanderzusetzen?
Antworten:
Für jede ältere Codebasis besteht die richtige Art, sich mental auf den Umgang damit vorzubereiten, darin, zunächst Komponententests dafür zu schreiben .
Ob es saugt oder nicht, müssen Sie zuerst das Vertrauen haben, um es ändern zu können, ohne Sachen zu brechen!
quelle
Ich kann dir nicht sagen, wie oft ich "Oh, das ist total falsch" gesagt, es umgeschrieben und dann auf die harte Tour herausgefunden habe, warum dieser Code so geschrieben wurde. Normalerweise handelt es sich um eine nicht offensichtliche, ungeschriebene / undokumentierte Anforderung. Zumindest stimmt das für den Legacy-Code, an dem ich gerade arbeite.
quelle
Sie warten, bis Sie lange genug dabei sind, um auf Ihren eigenen beschissenen Legacy-Code zu stoßen. Es ist eine demütigende Erfahrung und Teil des Lernprozesses. Ich sehne mich nach der Zeit, in der ich alles wusste.
Ich denke, Fosco hatte einen guten Grund, es in den Kontext möglicher Zeit- und Funktionseinschränkungen zu stellen. Manchmal muss man etwas zum Laufen bringen.
Und zum Schluss verstehen Sie, warum Sie einen Job haben.
quelle
Lache darüber, versuche es nicht zu sehr zu beurteilen und schaffe es einfach durch. Es ist nicht gut, ein echter Code-Nazi zu sein ... Es gibt definitiv so etwas wie "gut genug" oder sogar "gut genug zu der Zeit". Es gibt viele Male, in denen etwas entwickelt oder verbunden wird, um eine Krise zu beheben, und die dann nie wieder aufgegriffen werden.
Wenn es wirklich schlimm ist, sehen Sie nach, ob Sie ein Argument für das erneute Schreiben finden können. Wenn es nicht wichtig ist, steigen Sie einfach ein und aus.
quelle
Wähle deine Schlachten. Kennen Sie den Unterschied zwischen "Ich würde es nicht so schreiben" und "Dies schafft eine ernsthafte Wartungs- oder Support-Herausforderung".
quelle
Oft finde ich es nützlich, ein Gefühl dafür zu bekommen, was die ursprünglichen Entwickler für gut hielten.
Suchen Sie nach Mustern und Themen für das, was sie getan haben, und oft finden Sie, dass es Gründe für einige der seltsamen Entscheidungen gab.
Manchmal stellt man fest, dass der ursprüngliche Entwickler tatsächlich schlecht war, aber man hat eine Vorstellung davon, welche Art von schlecht sie damals verkauften.
In jedem Fall sollten Sie sich danach ein besseres Bild davon machen, wo Sie mit dem Neuschreiben beginnen können oder wie eine schnelle Lösung aussehen würde, ohne alles umgestalten zu müssen.
Nehmen Sie vor allem nicht gleich an, dass es schlecht ist, nur weil es hässlich ist. Nichts lässt Sie dummer aussehen, als etwas zu modernisieren, nur um herauszufinden, dass es weniger leistungsfähig ist als das Original.
quelle
Wenn ich Zeit habe, greife ich es an und töte den schlecht geschriebenen Code.
Es ist Krieg.
quelle
Ich denke immer, dass hässlicher Code Code ist, bei dem viele Debuggings stattgefunden haben, mit vielen Feinheiten, die bei einer flüchtigen Betrachtung nicht auffallen. Wenn ich es ersetze oder grundlegend neu gestalte, muss ich sicherstellen, dass ich absolut jeden Aspekt der Code-Funktion verstehe. Wenn ich nicht die Zeit habe, auf den Grund zu gehen, muss ich ein minimales Risiko eingehen und die kleinstmögliche Änderung vornehmen, um meine Ziele zu erreichen.
Normalerweise werde ich eine kleine Korrektur / Änderung vornehmen und eine Funktion für die spätere Entwicklung vorschlagen, die es entschuldigen würde, den Dingen auf den Grund zu gehen und die ganze Sache umzugestalten. Dann gebe ich mein Bestes, um den Code zu ignorieren, bis das Feature auf der Roadmap landet.
quelle
Wenn älterer Code älter als ein paar Jahre ist, wurde er möglicherweise aufgrund von Einschränkungen in der Sprache, den Betriebssystemen usw., die zum Zeitpunkt der Codeerstellung existierten, auf diese Weise geschrieben. Hey, es sieht jetzt schlecht aus, aber war es dann schlecht? Ich versuche anzunehmen, dass der Entwickler einen Grund dafür hatte, was er oder sie getan hat. Dieser Grund mag nicht mehr zutreffen, aber wenn Sie davon ausgehen, dass es nicht nur allgemeine Inkompetenzen gibt (junge Programmierer werden in 5 Jahren vielleicht noch weniger an Ihren Code denken), sind Sie weniger verärgert darüber. Wenn es funktioniert und keine Probleme damit verbunden sind, schätzen Sie diesen Legacy-Code, auch wenn er noch so hässlich ist, da Sie aufregendere Probleme lösen können.
quelle
In der Vergangenheit, als ich nicht die Zeit hatte, auf den Code eines anderen zu pissen und ihn in "meinen" Stil zu verwandeln, musste ich mich sehr aufgabenorientiert verhalten:
Was versuche ich, um diesen Code hinzuzufügen / zu beheben / Arbeit zu machen?
Tue ich etwas, um dieses Ziel zu erreichen? Wenn nicht, hören Sie auf und kehren Sie zum letzten Mal zurück, als ich aufgabenorientierte Änderungen vorgenommen habe.
Bin ich mit dieser Aufgabe fertig? Wenn ja, hören Sie auf, an dem Code zu basteln, auch wenn es so aussieht, als ob er von einem nicht empfindungsfähigen Marsmenschen geschrieben wurde.
quelle
Berühren Sie den Code nicht, es sei denn, Sie sind bereit, den Code und die erforderlichen Korrekturen in Zukunft zu besitzen. Du wirst die Tendenz überwinden, etwas reparieren zu wollen, wenn du etwas kaputt machst, das du nicht geschrieben hast, weil du es nicht gut genug studiert hast, bevor du eingetaucht bist, und es dauert 2 Tage und eine Feuerübung, um es wieder zum Laufen zu bringen .
Versteht mich nicht falsch ... Es gibt legitime Gründe, Code umzugestalten, aber wenn ein Unternehmen verlangt, dass der Code funktioniert, und Sie ihn "reparieren", ohne die Konsequenzen zu kennen, bevor Sie einspringen, fordern Sie eine Welt voller Verletzungen .
quelle
Eine zeitweise Überarbeitung kann nützlich sein, aber seien Sie besonders vorsichtig, wenn Sie einen kleinen Aspekt des tatsächlichen Verhaltens des Codes ändern möchten, es sei denn, Sie verstehen, warum dieses Verhalten vorliegt und welche Auswirkungen es hat. Leider ist der Code, der ihn am dringendsten benötigt, manchmal am schwierigsten zu ändern, ohne das Verhalten zu berühren, obwohl Sie normalerweise Teile davon begradigen oder zumindest kommentieren können.
quelle
Ich arbeite heutzutage fast ausschließlich an Legacy-Code und ich denke immer: "Oh sh% t, was dachten sie?" . Dann beginne ich Unit-Tests für den Code zu schreiben und an diesem Punkt muss ich wirklich den Kontrollfluss und die Abhängigkeiten analysieren.
Manchmal ist es nicht einfach, Komponententests zu schreiben. Aber während ich es versuche, erhalte ich Informationen über den Code und werde verstehen, warum er so geschrieben wurde, wie er ist. Manchmal beweist das, dass der Code wirklich ein Chaos ist, manchmal verstehe ich den Denkprozess der ursprünglichen Entwickler und kann nützliche Dokumentationen hinzufügen oder einen Code neu schreiben, wenn ich eine neue Funktionalität hinzufügen möchte.
Für mich ist es hilfreich zu glauben, dass mein Code für mich selbst gleich aussehen wird, wenn ich in 12 Monaten darauf zurückkomme .
quelle
Mit der Erfahrung kommt das Urteil, zu wissen, wann Code wirklich schlecht ist und wann er nur in einem anderen Stil geschrieben ist. Wenn es einwandfrei funktioniert und gewartet werden kann und eine gute automatisierte Testabdeckung besteht , ist es nicht schlecht und Sie müssen nur Ihren Verstand öffnen. Sie werden wahrscheinlich etwas lernen. Fehlerhafter Code ist nicht funktionsfähig und kann nicht gewartet werden.
Hier sind einige Marker für wirklich schlechten Code:
Ein Mangel an automatisierten Tests bedeutet nicht, dass der Code schlecht ist, aber es bedeutet, dass das Projekt schlecht ist.
Dies ist keine Geschmackssache; Diese Praktiken verteuern die Programmwartung erheblich.
Akzeptieren Sie die Tatsache, dass es eine Weile dauert, bis eine neue Codebasis erfolgreich bearbeitet werden kann. Wenn es "perfekt wartbar" ist und es eine hohe Testabdeckung gibt, dauert es weniger, aber es wird immer noch nicht sofort passieren. Wenn der Code schlecht ist, warne ich zuerst die Stakeholder, dass er in einem schlechten Zustand ist und die ersten Fortschritte nur langsam verlaufen. Wenn sie skeptisch sind, untermauere ich meine Behauptung, indem ich ihnen ein Beispiel für Probleme im tatsächlichen Code zeige und erkläre, wie sich diese von den branchenüblichen Best Practices unterscheiden.
quelle