piątek, 28 września 2012

Refaktoryzować czy nie - oto jest pytanie?

o co chodzi?

Czym jest refaktoryzacja? W skrócie - jest to wprowadzenie zmian w kodzie, które nie wpływają na zmianę zachowania aplikacji, są niewidoczne dla końcowego użytkownika, ale poprawiają jakość kodu. Dzięki tym modyfikacją, w przyszłości nie ogarnie nas przerażenie, gdy będzie trzeba zajrzeć do tego kodu ponownie. No dobra, pewnie i tak ogarnie:P, ale nie będzie już ono tak wielkie.
Jeżeli to dla Was za mało, to więcej na ten temat znajdziecie tutaj.

a na co mnie ten cały refaktoring?

Dokładnie! Po co mi on? Po co tracić cenny czas?

Po to, żeby jakość kodu była wyższa, a praca z nim nie była udręką i czymś, czego będziemy unikali tak długo, jak tylko będziemy w stanie. Po to, żeby programista, który nie był obecny przy implementacji danej funkcjonalności, był w stanie, na podstawie kodu, powiedzieć, co się tutaj dzieje.
Wszystko da się zrobić lepiej i tylko ignoranci sądzą, że jest inaczej. Tylko Ci, którzy nie uczą się niczego nowego, popatrzą na swój kod sprzed x czasu i powiedzą, że jest świetny. Pewnie większości z Was zdarzyła się nieraz sytuacja, gdy patrząc na stare implementacje, jedyny komentarz, który cisnął się na usta, to WTF?
I właśnie po to jest refaktoryzacja, aby tych WTFków było jak najmniej (bo i tak będą:). Dlatego właśnie refaktoryzacja, przynajmniej w teorii, może nie mieć końca:)

Podsumowując, refaktoryzacja to czynności, które sprawiają, że nasze (i nie tylko nasze:) życie będzie przyjemniejsze.

nie odkładaj na później tego, co możesz zrobić dzisiaj

Po co poświęcać czas na poprawianie czegoś, co jest i działa? Przecież w tym czasie mogę implementować kolejne świetne funkcjonalności? Że mój kod dotyka jednej metody ze starej implementacji? Że ta metoda niby nie obsługuje takiego przypadku? Daj mi 5 minut i będzie obsługiwała. Tutaj dorzucę jeden parametr, który defaultowo będzie równy x, a tutaj if'a i po sprawie:)

Niestety często wygląda to tak, jak przedstawiłem sprawę powyżej. Tylko takich zmian na jednej metodzie może być kilka i po pewnym czasie okaże się, że już nikt nie wie, jakie parametry i w jakich okolicznościach należy przekazać, aby otrzymać oczekiwany wynik. Nie mówiąc już o ilości bloków warunkowych wewnątrz.

Refaktoryzacji nie należy odkładać na później, bo z doświadczenia wiem, że to "później" rzadko nadchodzi, a gdy spotykamy się po pewnym czasie z tym kodem, zastanawiamy się, co też autor natchniony miał na myśli pisząc dany kod. Najśmieszniej jest wtedy, gdy okazuje się, że to my byliśmy tym autorem:)

Kiedy jednak nie ma sensu refaktoryzować kodu?

Mimo tego, że każdy chce, aby jego kod był najwyższej jakości, to refaktoryzacja dla samej idei, to moim zdaniem strata czasu, który można poświęcić na coś innego. Osobiście uważam, że kodu, który działa, którego nie dotykamy w żaden sposób, nie rozszerzamy jego funkcjonalności, nie ma potrzeby refaktoryzować, ponieważ najzwyczajniej można zacząć robić coś nowego, zamiast spędzać godziny (oby tylko) na robieniu tego samego po raz kolejny.

Jest jeszcze jedna sytuacja, kiedy refaktoryzacja moim zdaniem, to strata czasu.
Załóżmy, że już mamy prawie skończoną aplikację, klient jest zadowolony, ale musimy dodać jeszcze jedną rzecz. Niestety dotyka ona kilku miejsc w naszym kodzie, które już dawno zostały napisane. I co? Refaktoryzacja, żeby wszystko było "pięknie i ładnie"?
Wydaje mi się, że w chwili, gdy produkt jest już prawie gotowy, możemy sobie pozwolić na zapomnienie o jego jakości i dorzuceniu tych kilku if'ów. Tylko, przed zdecydowaniem się na taki krok, warto zastanowić się nad tym, czy nie będziemy kiedyś zmuszeni jeszcze z nim pracować, czy też oddajemy gotową aplikację i zapominamy o niej?
Bo jeżeli istnieje cień szansy, że będziemy mieli przyjemność spotkać się z nim raz jeszcze, to lepiej jednak poświęcić chwilę czasu i zadbać o jego jakość:)