Odpowiednie podejście do pracy z legacy code
W swojej karierze zawodowej programiści często spotykają się z określeniem legacy code. W wolnym tłumaczeniu termin ten oznacza kod dziedziczony, w rzeczywistości pojęcie to jest rozumiane na wiele sposobów. Niemniej jednak zazwyczaj przywołuje negatywne skojarzenia i wzbudza ogólny sceptycyzm i niezadowolenie u ludzi, którzy mają z nim pracować. Poniżej wyjaśnimy czym właściwie jest legacy code i dlaczego ma taką złą reputację w środowisku IT.
1. Legacy code - znaczenie
Legacy code to kod, który został stworzony najczęściej lata temu. Oczywiście w międzyczasie różne osoby dodały do niego "na szybko" kilka nowych funkcji lub zmian. Dzięki temu otrzymujemy swoiste "spaghetti" na dokładkę bez jakiejkolwiek dokumentacji. Przez to do końca nie wiadomo jak się zachowa ani jakie są możliwe schematy jego działania, a więc nie wiemy w jaki sposób możemy go zmienić. Legacy code często rozumiany jest także jako przestarzały kod, który przez brak nowoczesnych rozwiązań nie pasuje do obecnej technologii i ciężko jest go do niej dopasować. Inni generalizują tę nazwę, aby określić kod, który jest niezrozumiały i trudny do zmiany. Zawsze trudniej pracuje się z kodem, którego nie tworzyliśmy od podstaw. Oczywiście można by pomyśleć, że najlepszym rozwiązaniem byłoby napisanie kodu od nowa, jednak nie jest to zawsze najlepsza opcja. Jeżeli jeszcze nie poznaliśmy systemu i nie wiemy jak zadziała, lepiej dobrze przeanalizować tę decyzję, ponieważ może okazać się zupełnie nierentowna. Jak więc umiejętnie podejść do legacy code żeby nie kojarzyła się z nieprzyjemnym obowiązkiem tylko ciekawym doświadczeniem?
2. Podejście do pracy z legacy code
Bardzo ważne jest nasze nastawienie do pracy z kodem. Jeżeli od początku będziemy zniechęceni do pracy i uznamy że będzie to trudne i monotonne, zapewne tak właśnie będzie. Nie warto też tracić czasu na rozważanie jak ktoś mógł popełnić taką ilość błędów w kodzie. Najczęściej nie znamy kompleksowej historii powstawania kodu, zwłaszcza jeżeli pisało go kilka różnych osób. To właśnie największe wyzwanie w pracy z legacy code - krok po kroku odkrywać zależności, które na pierwszy rzut oka nie są oczywiste. Chodź niekiedy jest to żmudna praca, ma również swoje dobre strony. Pozwala nam wrócić do podstaw programowania takich jak pisanie czystego kodu, wykorzystywanie dobrych praktyk czy poprawne testowanie. Niezależnie od wiedzy i umiejętności, praca z legacy code to nie zadanie, które można wykonać niezwłocznie. Wręcz przeciwnie - wymaga dużego skupienia i podjęcia kroków, których pominięcie sprawi, że wrócisz do punktu wyjścia.
Pierwszym ważnym krokiem, który powinno się wykonać jest zapoznanie się z dokumentacją (o ile jest dostępna). Jeżeli poznamy pierwotne wymagania projektu być może lepiej zrozumiemy obecną strukturę kodu i co jego twórca chciał osiągnąć. Po drugie należy pamiętać, aby nie przepisywać na nowo zbyt dużej ilości elementów. Może okazać się, że przepisanie kodu spowoduje nowe błędy lub zniszczy powiązania, których jeszcze nie odkryliśmy. Zamiast przepisywać kod znacznie lepiej przeprowadzić refaktoryzację (zmienić strukturę kodu nie zmieniając jego funkcjonalności). Najlepiej refaktoryzować kod stopniowo, wdrażanie zbyt wielu zmian na raz może spowodować niepotrzebne zamieszanie. Pamiętaj też, żeby wprowadzać zmiany tylko tam, gdzie to konieczne. To że kod wydaje Ci się zupełnie niewłaściwy i nie pasujący do obecnych standardów, nie oznacza, że w całości jest błędny. Dlatego też trzeba zagłębić się w strukturę kodu i przeanalizować, w które elementy można ingerować, a które pozostawić niezmienione.
Nie warto zakładać, że praca z legacy code to ciężki i skomplikowany proces. Znacznie lepiej traktować legacy code jak układankę, w której łączenie kolejnych elementów daje dużą satysfakcję, a cały proces układania daje nam lekcje cierpliwości, wytrwałości oraz dokładnych testów. Biorąc pod uwagę, że każdy kod stanie się kiedyś w pewnym stopniu legacy code, lekcja ta nie ominie większości osób zajmujących się programowaniem.