W idealnym świecie cały kod napisany przez danego programistę będzie dobrze udokumentowany, dobrze ustrukturyzowany i zrozumiale przetestowany, zarówno za pomocą automatycznych narzędzi, takich jak testy jednostkowe, jak i skryptów przypadków użycia, przez które przechodzi użytkownik, aby sprawdzić, czy uzyskasz oczekiwany wynik.
Pierwszą rzeczą, której się nauczysz, jest to, że nie żyjemy w idealnym świecie!
Wielu programistów nie dokumentuje poprawnie swojego kodu, jeśli w ogóle mieszają logikę biznesową z niepowiązanym kodem, a jedynym testem, jaki przeprowadzają, jest szybkie sprawdzenie, co będzie normalnym przypadkiem użycia.
Pracując z takim kodem, pierwszą rzeczą, którą musisz zrobić, to ustalić, co ma robić. Jeśli są komentarze, mogą dać ci wskazówki, ale nie licz na to. Z mojego doświadczenia wynika, że wielu programistów nie jest dobrych w wyjaśnianiu siebie, a nawet jeśli zostawiają komentarze, mogą być bez znaczenia. Jeśli jednak nie jesteś jedynym programistą w firmie, ktoś z pewnością musi mieć przynajmniej podstawowe pojęcie o tym, do czego służy kod i co ma robić. Zapytaj wokół!
Jeśli masz testy jednostkowe, to znacznie ułatwią ci życie. Jeśli tego nie zrobisz, część nauki bazy kodu może obejmować pisanie testów jednostkowych dla kodu, który już istnieje. Zwykle nie jest to uważane za dobrą praktykę, ponieważ jeśli napiszesz testy jednostkowe w celu dopasowania do istniejącego kodu, zakończysz się testami jednostkowymi, które uznają, że kod działa tak, jak jest (zostaną napisane, aby założyć, że zachowanie, które jest błędem, jest poprawne), ale przynajmniej daje podstawę. Jeśli później odkryjesz, że pewne zachowanie, które uważałeś za prawidłowe, jest w rzeczywistości złe, możesz zmienić test jednostkowy, aby sprawdzić, czy jest to oczekiwany wynik, a nie wynik, jaki daje teraz kod. Po przeprowadzeniu testu jednostkowego możesz wprowadzić zmiany i ocenić, jakie skutki uboczne mają wprowadzone zmiany.
Wreszcie, najlepszym zasobem, który masz do czynienia z nieudokumentowanym fragmentem kodu, jest zapytanie użytkowników końcowych. Mogą nie wiedzieć nic o kodzie, ale wiedzą, co ma zrobić aplikacja. Zbieranie wymagań jest pierwszym etapem każdego projektu, a rozmowa z potencjalnymi użytkownikami opracowywanego systemu jest zawsze jego ważną częścią. Pomyśl o tym jako o etapie przechwytywania wymagań dla nowego projektu, który akurat został już zbudowany.
Pamiętaj, że nawet dobrze napisany i dobrze udokumentowany kod może być trudny do zrozumienia dla osoby z zewnątrz. Kod jest zasadniczo wyrazem tego, jak osoba, która go napisała, myślała w tym czasie i każdy ma swój własny, unikalny proces myślowy. Musisz nauczyć się być trochę cierpliwym i być detektywem. Możliwość wejścia w proces myślenia innej osoby jest trudna, ale jest to niezbędna umiejętność dla programisty zajmującego się konserwacją istniejącego kodu. Ponieważ większość kodowania (około 70%) wiąże się z utrzymywaniem istniejącego kodu, ważna jest umiejętność uczenia się.
Aha, a teraz, gdy widziałeś ból, który może powodować źle udokumentowany, nieprzetestowany i pomieszany kod, nie zrobisz tego następnemu biednemu deweloperowi, prawda? :) Ucz się na błędach swojego poprzednika, dobrze komentuj swój kod, upewnij się, że każdy moduł ma jasno określoną odpowiedzialność, do której się wywiązuje, i upewnij się, że masz kompleksowy zestaw testów jednostkowych, które najpierw piszesz (dla metodologii TDD) lub przynajmniej obok opracowywanego kodu.