Miarą, której używam lub lubię myśleć, że używam jest:
Dla każdego niezależnego, pojedynczego, jednowierszowego wymagania funkcjonalnego typu „weź lub zostaw”, wykonaj migawkę podstawy kodu przed jego wdrożeniem. Następnie zaimplementuj go, w tym znajdując i usuwając wszelkie błędy wprowadzone w tym procesie. Następnie uruchom diff
między bazą kodu przed i po. diff
Pokaże listę wszystkich insercji, delecji i modyfikacji wprowadzonych zmian. (Jak wstawienie 10 kolejnych wierszy kodu to jedna zmiana.) Ile było zmian? Im mniejsza jest ta liczba, tym kod jest łatwiejszy w utrzymaniu.
Nazywam to redundancją kodu źródłowego, ponieważ jest to jak redundancja kodu korygującego błędy. Informacje były zawarte w 1 części, ale zostały zakodowane jako N części, które wszystkie muszą być wykonane razem, aby były spójne.
Myślę, że taki jest pomysł DRY, ale jest to trochę bardziej ogólne. Powodem, dla którego ta liczba jest niska, jest fakt, że jeśli potrzeba N zmian, aby zaimplementować typowe wymaganie, a jako zawodny programista dostaniesz tylko N-1 lub N-2 z nich poprawnie zrobionych, na początku umieściłeś 1 lub 2 błędy. Oprócz wysiłków związanych z programowaniem O (N), błędy te muszą zostać wykryte, zlokalizowane i naprawione. Dlatego małe N jest dobre.
Konserwowalność niekoniecznie oznacza czytelność dla programisty, który nie nauczył się, jak działa kod. Optymalizacja N może wymagać robienia pewnych rzeczy, które tworzą krzywą uczenia się dla programistów.
Oto przykład.
Jedną z rzeczy, która pomaga, jest to, że programista próbuje przewidzieć przyszłe zmiany i pozostawia wskazówki w komentarzu do programu.
Myślę, że gdy N jest wystarczająco zredukowane (optymalne jest 1), kod źródłowy czyta się bardziej jak język specyficzny dla domeny (DSL). Program nie tyle „rozwiązuje” problem, co „stwierdza” problem, ponieważ idealnie każde wymaganie jest przekształcane jako pojedynczy fragment kodu.
Niestety nie widzę ludzi, którzy dużo się uczą, jak to robić. Wydaje się raczej, że myślą, że rzeczowniki mentalne powinny stać się klasami, a czasowniki metodami, a jedyne, co muszą zrobić, to obrócić korbą. Z mojego doświadczenia wynika, że kod to N równy 30 lub więcej.