In einer Welt, in der die meisten Liefertermine von den Geschäftsanforderungen bestimmt werden, liefern Programmierer normalerweise Code, der funktioniert. Struktur und Effizienz von Code, der ausgeliefert wird, werden oft fragwürdig, wenn Sie wissen, dass Code funktioniert. Wenn die Produktionsqualität nicht spezifiziert ist (api zum Beispiel zu einem Algorithmus), ist für Code, der in einige hundert Zeilen läuft, der lieferbare Code gleich dem Code, der funktioniert.
Meine Frage ist: Gib eine ETA für ein Feature, würdest du Code schreiben, bis das Feature funktioniert und fertig ist? Oder würden Sie es so schnell wie möglich zur Arbeit bringen und die Release-Qualität umgestalten?
Meine Neigung ist zu letzterem, obwohl es nach mehr Arbeit klingt. Wenn Code, der funktioniert, für algorithmische Effizienz und Muster zerlegt wird, ist es eine freudige Erfahrung, alles zusammenzufassen. Außerdem bekommt es all diese nicht-funktionale Liebe - weniger Bugs, performant, erweiterbar, sicher. Ich glaube nicht, dass ich gut darin bin, den besten Code zum ersten Mal zu schreiben. Dieser Ansatz funktioniert also gut für mich.
Ich würde gerne wissen, welche ist bevorzugt und warum? Ich bin nicht auf der Suche nach einem branchenweiten Ansatz, sondern nach individuellen Neigungen, damit ich die Ähnlichkeit des Denkens beurteilen kann.
Ich bevorzuge Refactoring vor und nach dem Versand.
Das Refactoring bis nach der Veröffentlichung zu verschieben, klingt schrecklich, als ob Sie es wahrscheinlich tun würden (meistens kommt etwas geschäftskritischer vor). Aber selbst wenn du es vor dem Versand tust, ist es nicht so, als ob dein Code perfekt ist und dir die Dinge ausgehen, um dich zu verbessern. Also auch danach (solange der Code in einem gewissen Umfang beibehalten wird).
Refactoring Code in etwas einfacher und sauberer ist für mich immer wieder Teil der Softwareentwicklung.
Edit: Offensichtlich müssen Sie bei der Entscheidung für wie viel und für wie lange Sie zu einem bestimmten Zeitpunkt refaktorieren.
Edit 2: Was die Frage "Wie man meinen Manager über das Refactoring überzeugt" (siehe Kommentare), hier sind einige Ressourcen, die helfen könnten:
In unserem Team betrachten wir nicht refaktorierten Code als nicht "erledigt". Mit anderen Worten, "Code wurde refaktoriert" ist Teil unserer Definition von Done , es ist eines unserer Kriterien für den lieferbaren Code.
Problem ist, wenn Sie die Tendenz haben, nur nach dem Versand zu refaktorisieren, werden Sie es nie tun;)
Ich neige dazu, "erledigt" zu sehen, einschließlich wohlfakturiertem Code.
Es gibt Ausnahmen von dieser Regel, wenn es ein Refactoring in sehr großem Maßstab gibt, das einen hohen Aufwand erfordert. Um einen Termin einzuhalten, können Sie zur nächsten Entwicklungsiteration wechseln.
Wenn Sie Test Driven Development durchführen. Oft schreiben Sie die einfachste Sache, die zuerst funktioniert und dann umgestaltet, wenn zusätzliche Funktionalität hinzugefügt wird (AKA Red, Green, Refactor).
In dieser Frage gibt es natürlich eine große Grauzone. Wenn Sie ein nicht zu erhaltendes Durcheinander liefern, sollten Sie sich vielleicht überlegen, wie Sie Code überhaupt schreiben. Refactoring sollte für einen bestimmten Zweck durchgeführt werden - um Code flexibler zu machen, um beispielsweise einen neuen Produkttyp zu ermöglichen. Refactor nicht nur, weil Sie das Gefühl haben sollten.
Ich würde es vorziehen, vor dem Versand zu refaktorieren. Du hast recht, mein erster Code ist oft nicht das beste Design. Aber wenn Sie einen bestandenen Test für den Code haben, sollte es wenig Risiko sein, direkt danach zu refaktorieren.
Und das Problem, es später zu tun, ist einfach "nach der Veröffentlichung, wenn vor der Veröffentlichung". Meiner Erfahrung nach gibt es keinen Grund zu hoffen, dass nach der Veröffentlichung Zeit bleibt, aufzuräumen.
Für mich sollte das Refactoring nach dem Versand erfolgen, um sicherzustellen, dass alle Funktionen funktionieren, und es der nächsten Iteration des Code-Buildings überlassen. Wenn Sie anfangen, den Code vor dem Versand zu manipulieren, können Sie am Ende nur wenig Optimierungen vornehmen und schließlich mit ungültigem Code belassen werden.
Tags und Links language-agnostic refactoring shipping