Sprzątaj swój kodzik nieustannie czyli o ciągłej refaktoryzacji.

refaktoryzacja to proces ciągły

Siadam do kodu i piszę… i piszę… i piszę… a potem save, commit, push. Done? No, nie bardzo. Jeśli pracujesz w TDD, to dobrze wiesz co to jest: red, green, refactor. REFACTOR!, REFAKTORYZACJA! Czyli moment kiedy po prawie skończonej pracy porządkujemy kod. To  sprowadza się do posprzątania śmieci, usunięcia zbędnych zmiennych, metod i klas oraz wprowadzenia abstrakcji tam gdzie trzeba – ogólnie doprowadzenie kodu do stanu używalności – do stanu jaki chciałbyś sam zastać jak będziesz z nim pracować. Jeśli nie pracujesz w TDD to pewnie i tak sprzątasz twórczy bałagan – tylko nie nazywasz to refaktoryzacją. No chyba, że tego nie robisz; to może pora zacząć.

Dlaczego kod nie refaktoryzowany ssie?

Ile razy ktoś marudził na kiepski kod? Jak to jest, że taki kod powstaje? Sam się przecież nie pisze. To my go takim robimy. Czasem nie ma czasu, żeby sprzątnąć bo deadline albo jakakolwiek inna wymówka, ot po prostu nie refaktoryzujemy. Czasami po prostu nie mamy chęci i energii; to jednak nikogo nie zwalnia z obowiązku refaktoryzowania od czasu do czasu. Przecież koniec końców to  my w przyszłości będziemy z tym kodem najwięcej obcować. Zawsze można coś zwalić na innych członków zespołu. Im większy zespół tym łatwiej ale czy na pewno o to chodzi? Jesteśmy dorośli… trzeba po sobie posprzątać. Jaki jest sens trzymania 10 pustych linii pomiędzy metodami? To nie jest kartka papieru gdzie kiedyś coś dopiszemy. Nic tak nie rozprasza jak wtedy, gdy przewijając kod widzisz raz większe a raz mniejsze dziury w kodzie. Do tego jakieś kawałki kodu wykomentowane. Serio? Przecież nawet nie wiadomo czy to jeszcze działa. Co to robiło. Wywal te komentarze i wywal puste miejsca i niech to jakoś wygląda. Na początek tyko tyle i aż tyle. Dzisiaj po otwarciu 690 linijkowego pliku zacząłem wywalać takie puste miejsca. Jak skończyłem zostało ich 615. Nie usunąłem wszystkich pustych linii bo to by było bez sensu.

Najprostsza refaktoryzacja – puste linie

Puste linie są świetnym narzędziem do poprawienia czytelności kodu gdy oddzielają metody, gdy oddzielają usingi od namespace-a czy logiczne kawałki kodu od siebie. Wtedy ich użycie jest bardzo zasadne. Kod ma się dobrze i łatwo czytać a takie wolne miejsce pozwala coś zaznaczyć . Edytory kodu nie mają (na szczęście) pogrubiania czy ustawiania różnych fontów dla kawałków kodu (wyobrażasz sobie pół metody boldem bo to jest ważniejsze pół metody?). Wolna linia jest naszym narzędziem.

A wracając do wątku… po wyczyszczeniu tego jednego pliku odpaliłem te same reguły na całym solution i okazało się, że 120 plików się zmieniło. Jak dobrze, że są automaty, które potrafią usprawnić ten proces 🙂

A jak to jest w innych branżach?

W piekarni, cukierni, kuchni robi się bałagan. To jest naturalny efekt uboczny procesu przygotowania produktu. Tu się coś wysypie, tam się wyleje. Nie da się utrzymać kuchni bez jednego brudka, bez jednej skazy podczas gotowania,ale naturalne jest, że po skończonej pracy wszystko się sprząta. Nie zostawia się na kiedyś. Nikt nie mówi, jutro. Jak się zostawi syf to potem się zalęgnie robactwo i będzie coraz trudniej doprowadzić lokal do stanu używalności. Zresztą, czy ty jako klient swojej ulubionej restauracji wolisz, aby sprzątali na kuchni codziennie czy może nie sprzątali w ogóle a raz na pół roku (jak wynegocjują z klientami sprint na sprzątanie) robili miesiąc wielkiego, gruntownego sprzątania? Myślisz, że tak sobie wymyślam? Zobacz jak pracują kucharze w MasterChefie gdzie gotują amatorzy a jak w Top Chefie gdzie gotują zawodowcy. Pomimo skrajnie skromnych ilości czasu w Top Chefie na ugotowanie czegokolwiek – oni ciągle sprzątają. Gotują i ciągle, dbają o to aby było czyściutko – to się nazywa ciągła refaktoryzacja w kuchni. To nie jest zryw przed końcem czasu, to jest ciągły proces, ich druga natura. Talerz leży do wydania a stanowisko prawie jak nietknięte. W MasterChef-ie natomiast jest więcej czasu a mimo tego często na stanowiskach jest… bałagan. Jest bałagan, bo uczestnicy nie mają we krwi ciągłego sprzątania swojego warsztatu no i jak już dzieło jest skończone to nie ma czasu aby doprowadzić stół do porządku. To jest różnica pomiędzy profesjonalistami a amatorami.