Jestem wielkim zwolennikiem zasady skautów :
Zawsze sprawdzaj moduł w czystszym stanie niż wtedy, gdy go sprawdziłeś. ”Bez względu na to, kto był oryginalnym autorem, co, jeśli zawsze podejmiemy jakiś wysiłek, nie ważne jak mały, aby ulepszyć moduł. Jaki byłby wynik? Myślę, że gdybyśmy wszyscy postępowali zgodnie z tą prostą zasadą, widzieliśmy koniec nieustannego niszczenia naszych systemów oprogramowania. Zamiast tego, nasze systemy stopniowo stawały się coraz lepsze wraz z ich ewolucją. Widzieliśmy także zespoły dbające o system jako całość, raczej niż tylko osoby dbające o swoją małą, małą część.
Wierzę również w pokrewną ideę oportunistycznego refaktoryzacji :
Chociaż istnieją miejsca na zaplanowane działania refaktoryzacyjne, wolę zachęcać do refaktoryzacji jako działania oportunistycznego, wykonywanego zawsze i wszędzie, gdzie trzeba wyczyścić kod - przez kogokolwiek. Oznacza to, że w dowolnym momencie ktoś widzi kod, który nie jest tak przejrzysty, jak powinien, powinien skorzystać z okazji, aby go naprawić natychmiast - a przynajmniej w ciągu kilku minut
W szczególności zwróć uwagę na następujący fragment artykułu z refaktoryzacji:
Obawiam się wszelkich praktyk programistycznych, które powodują tarcie w oportunistycznym refaktoryzacji ... Mam wrażenie, że większość zespołów nie robi wystarczająco refaktoryzacji, dlatego ważne jest, aby zwracać uwagę na wszystko, co zniechęca ludzi do robienia tego. Aby pomóc Ci to wypłukać, miej świadomość, że kiedykolwiek zniechęca Cię robienie małego refaktoryzacji, na pewno zajmie Ci to tylko minutę lub dwie. Każda taka bariera to zapach, który powinien skłonić do rozmowy. Zanotuj więc zniechęcenie i przedstaw je zespołowi. Przynajmniej należy to omówić podczas następnej retrospekcji.
Tam, gdzie pracuję, jest jedna praktyka programistyczna, która powoduje duże tarcie - Code Review (CR). Ilekroć zmieniam cokolwiek, co nie wchodzi w zakres mojego „zadania”, recenzenci napominają mnie, że utrudniam sprawdzenie zmiany. Jest to szczególnie prawdziwe, gdy bierze się pod uwagę refaktoryzację, ponieważ utrudnia to porównywanie różnic „linia po linii”. Podejście to jest tutaj standardem, co oznacza, że oportunistyczne refaktoryzowanie jest rzadko wykonywane i tylko „planowane” refaktoryzowanie (które zwykle jest za mało, za późno) ma miejsce, jeśli w ogóle.
Twierdzę, że korzyści są tego warte i że 3 recenzentów będzie pracowało trochę ciężej (aby faktycznie zrozumieć kod przed i po, zamiast patrzeć na wąski zakres, w którym zmieniono linie - sama recenzja byłaby lepsza z tego powodu ), dzięki czemu skorzysta kolejnych 100 programistów czytających i utrzymujących kod. Kiedy przedstawiam ten argument moim recenzentom, mówią, że nie mają problemu z moim refaktoryzacją, o ile nie ma tego samego CR. Jednak twierdzę, że to mit:
(1) W większości przypadków zdajesz sobie sprawę, co i jak chcesz refaktoryzować, gdy jesteś w trakcie wykonywania zadania. Jak to ujął Martin Fowler:
Gdy dodajesz tę funkcjonalność, zdajesz sobie sprawę, że dodawany przez ciebie kod zawiera pewne powielanie z istniejącym kodem, więc musisz zmienić istniejący kod, aby oczyścić rzeczy ... Może coś działa, ale zdajesz sobie sprawę, że to będzie lepiej, jeśli interakcja z istniejącymi klasami zostanie zmieniona. Skorzystaj z okazji, aby to zrobić, zanim uznasz, że skończyłeś.
(2) Nikt nie będzie wyglądał przychylnie, gdy wydajesz „refaktoryzujące” CR, których nie powinieneś robić. CR ma pewne koszty ogólne, a twój kierownik nie chce, abyś „marnował czas” na refaktoryzację. Gdy jest dołączony do zmiany, którą należy wprowadzić, problem ten jest minimalizowany.
Problem jest zaostrzony przez Resharper, ponieważ każdy nowy plik, który dodam do zmiany (i nie wiem z góry, które dokładnie pliki zostaną zmienione) jest zwykle pełen błędów i sugestii - z których większość jest na miejscu i całkowicie zasługuje ustalenie.
Efektem końcowym jest to, że widzę okropny kod i po prostu go tam zostawiam. Jak na ironię, uważam, że poprawienie takiego kodu nie tylko nie poprawi mojej sytuacji, ale wręcz obniży je i pomaluje na mnie jako „nie skupionego” faceta, który marnuje czas na naprawianie rzeczy, na których nikogo nie obchodzi zamiast wykonywania swojej pracy. Czuję się z tym źle, ponieważ naprawdę gardzę złym kodem i nie mogę znieść oglądania go, nie mówiąc już o wywołaniu go z moich metod!
Wszelkie przemyślenia na temat tego, jak mogę zaradzić tej sytuacji?
your manager doesn't want you to "waste your time" on refactoring