Dlaczego wujek Bob sugeruje, że nie należy zapisywać standardów kodowania, jeśli można tego uniknąć?
Jeśli pytasz o uzasadnienie jego opinii, możesz uzyskać odpowiedź tylko wtedy, gdy opublikuje odpowiedź tutaj ( nasza opinia jest po prostu nieistotna), jednak ...
Dlaczego nie powinienem zapisać standardu kodowania?
Jeśli pytasz, czy ma rację : pozwól mi być jedyną niepopularną (jak dotąd), że nie masz powodu, aby tego unikać.
ZAPISZ GO . Spróbuję jednak wyjaśnić swoje powody ...
David zasugerował w komentarzu, że głównym punktem odpowiedzi Stephena nie jest powód, dla którego nie należy pisać dokumentów, ale w jakiej formie. Jeśli wytyczne są sformalizowane w narzędziach (a nie tylko manualna weryfikacja kodu), mogę się zgodzić (gdy prawo nie wymaga czegoś innego). Pamiętaj, że niestety narzędzia często nie sprawdzają wszystkiego (teoria obliczeń nie jest naszym przyjacielem) często, ponieważ są ograniczone do konkretnej jednostki tłumaczeniowej lub pakietu lub dowolnego ulubionego języka, który określa granicę .
Jednak sformułowanie wuja Boba nie każe mi myśleć, że o tym mówi.
Czy mogę się nie zgodzić z takim starszym ekspertem? Tak, dla prawie każdego punktu w cytowanym poście (szczegółowe informacje można znaleźć w drugiej części tej odpowiedzi). Spróbujmy zrozumieć, dlaczego (zakładając, że już wiesz, że wytyczne dotyczące kodowania nie dotyczą jedynie drobnych problemów z formatowaniem ).
- W niektórych okolicznościach prawo wymaga pisemnych standardów kodowania.
- Czytam dokumentację i jestem pewien, że nie jestem sam. Członkowie zespołu mogą się zmieniać z czasem, wiedza nie może znajdować się w bazie kodu w wieku 5-10 lat lub w głowach członków zespołu. Organizacje powinny zwalniać osoby, które nie przestrzegają wewnętrznych wytycznych.
- Standardy kodowania, po ich zatwierdzeniu , nie będą się często zmieniać, a jeśli tak, to chcesz o tym wiedzieć. Jeśli standardy uległy zmianie, wówczas dokumentacja (w kodzie) jest nieaktualna, ponieważ cały kod nie jest zgodny z nowym standardem. Ponowne formatowanie / refaktoryzacja może być powolna, ale zawsze masz pisemne autorytatywne wytyczne, których należy przestrzegać.
- Lepiej jest przeczytać 5-stronicowy dokument niż sprawdzić LOC 10 / 20K w celu ekstrapolacji reguły (co może być źle zrozumiane, BTW), co do tego nie ma wątpliwości.
- To ironiczne, że ktoś, kto napisał wiele książek o zasadach projektowania i stylu kodowania, sugeruje, że nie powinieneś pisać własnych wytycznych, czy nie jest lepiej, gdyby rzucił nam kilka przykładów kodu? Nie, ponieważ pisemne wytyczne nie tylko mówią, co robić, ale także dwie inne rzeczy, których brakuje w kodzie: czego nie robić i powody, aby to zrobić lub nie.
„Bezpłatne samoorganizujące się programowanie” jest dobre dla 16-letniego faceta ninja, ale organizacje mają inne wymagania :
- Jakość kodu musi być przyznawana (i definiowana) na poziomie firmy - nie jest to coś, o czym może decydować pojedynczy zespół. Mogą nawet nie mieć umiejętności decydowania o tym, co jest lepsze (na przykład, ilu programistów ma wszystkie wymagane umiejętności, aby przejrzeć MISRA lub nawet po prostu zrozumieć każdą regułę?)
- Członkowie mogą być przenoszeni między różnymi zespołami: jeśli wszyscy przestrzegają tych samych standardów kodowania, integracja jest płynna i mniej podatna na błędy.
- Jeśli zespół sam się organizuje, standardy będą ewoluować wraz z upływem czasu, gdy członkowie zespołu się zmienią - wtedy będziesz mieć ogromną bazę kodów, która nie będzie zgodna z obecnie przyjętymi standardami .
Jeśli myślisz o ludziach przed procesem , mogę jedynie zasugerować przeczytanie o TPS: ludzie są centralną częścią Lean, ale procedury są bardzo sformalizowane.
Oczywiście mała organizacja z tylko jednym zespołem może pozwolić zespołowi zdecydować o przyjętych standardach, ale wtedy trzeba to zapisać. Tutaj na Programmers.SE możesz przeczytać posty Erica Lipperta: Przypuszczam, że wszyscy zgadzamy się, że jest doświadczonym programistą, kiedy pracował dla Microsoft, musiał przestrzegać ich pisemnych wytycznych (nawet jeśli niektóre reguły mogą być złe , nie mają zastosowania lub są bezużyteczne do niego.) Co z Jonem Skeetem? Wytyczne Google są dość surowe (i wiele osób się z nimi nie zgadza), ale musi je przestrzegać. Czy to im nie szanuje? Nie, prawdopodobnie pracowali nad zdefiniowaniem i ulepszeniem takich wytycznych, firma nie jest utworzona przez jednego członka (lub jeden zespół), a każdy zespół nie jest wyspą .
Przykłady
- Zdecydowałeś się nie używać wielokrotnego dziedziczenia i klas zagnieżdżonych w C ++, ponieważ członkowie zespołu nie rozumieją tego dobrze . Później ktoś, kto chce użyć wielokrotnego dziedziczenia, musi przejrzeć cały LOC 1M, aby sprawdzić, czy kiedykolwiek był używany. Jest to złe, ponieważ jeśli decyzje projektowe nie są udokumentowane, musisz przestudiować całą bazę kodu, aby je zrozumieć. I nawet wtedy, jeśli nie został użyty, to dlatego, że jest niezgodny ze standardem kodowania, czy też jest dozwolony, ale po prostu nie było wcześniejszych sytuacji, w których wielokrotne dziedziczenie było dobrze dopasowane?
- W języku C # przeciążono metody dostarczania parametrów domyślnych, ponieważ baza kodu została uruchomiona, gdy parametry opcjonalne nie były dostępne w języku C #. Potem zmieniłeś się i zacząłeś ich używać (refaktoryzując stary kod, aby używać ich za każdym razem, gdy musiałeś modyfikować takie funkcje). Nawet później zdecydowałeś, że parametry opcjonalne są złe i zaczynasz unikać ich używania. Jaka jest reguła zawarta w kodzie? Jest źle, ponieważ standard ewoluuje, ale baza kodu ewoluuje wolniej, a jeśli jest to twoja dokumentacja, masz kłopoty.
- Jon przeniósł się z zespołu A do zespołu B. Jon musi nauczyć się nowego standardu; podczas nauki prawdopodobnie wprowadzi bardziej subtelne błędy (lub, jeśli będzie miał szczęście, po prostu zajmie dużo czasu, aby zrozumieć istniejący kod i wydłużyć jego przegląd).
- Zespół A przenosi się do bazy kodu, która była wcześniej własnością zespołu B. Ma on zupełnie inne standardy kodowania. Przepisać? Przystosować się? Mieszać? Wszystkie są równie złe.
Wujek Bob
Niech ewoluują podczas pierwszych kilku iteracji.
To prawda, dopóki nie masz standardu, a Twoja organizacja nie wyznaczyła Ci zadania jego zbudowania .
Niech będą specyficzne dla zespołu, a nie dla firmy.
Nie, z wszystkich powodów wyjaśnionych powyżej. Nawet jeśli myślisz o sformalizowaniu tylko formatowania kodu (najmniej przydatna rzecz, którą możesz chcieć sformalizować), wciąż mam pamięć niekończących się (i bezużytecznych) wojen o formatowaniu. Nie chcę ich przeżywać raz po raz, ustaw to raz na zawsze.
Nie zapisuj ich, jeśli możesz tego uniknąć. Zamiast tego niech kod będzie sposobem na uchwycenie standardów.
Nie, z wszystkich powodów wyjaśnionych powyżej (oczywiście o ile nie zmienisz całego kodu za jednym razem, gdy zmienią się wytyczne). Czy chcesz pozostawić swój kod bez zmian? Jak sprawdzasz bazę kodów, aby zrozumieć aktualne wytyczne? Wyszukiwanie według wieku pliku i dostosowanie stylu kodowania do wieku pliku źródłowego?
Nie ustanawiaj dobrego projektu. (np. nie mów ludziom, żeby nie używali goto)
To prawda, że wytyczne muszą być krótkie, inaczej nikt ich nie przeczyta. Nie powtarzaj tego, co oczywiste.
Upewnij się, że wszyscy wiedzą, że standard dotyczy komunikacji i nic więcej.
Dobry standard dotyczy nie tylko jakości, chyba że chcesz mieć standard tylko w przypadku drobnych szczegółów.
Po kilku pierwszych iteracjach zbierz zespół razem, aby podjąć decyzję.
Zobacz pierwszy punkt i nie zapominaj, że standard kodowania to zwykle proces, który wymagał wielu lat, aby go opracować i udoskonalić: kilka iteracji, może z młodszymi programistami? Naprawdę? Czy chcesz polegać na pamięci jednego członka wyższego (jeśli w ogóle) członka?
Trzy notatki:
- Moim zdaniem wady niektórych języków są poważniejsze niż w innych, na przykład w C ++ standard na poziomie firmy jest nawet bardziej potrzebny niż w Javie.
- Takie rozumowanie może nie mieć pełnego zastosowania (a powody wuja Boba mogą być mniej skrajne ), jeśli pracujesz w bardzo małej firmie, w której masz tylko jeden mały zespół.
- Jesteś zatrudniony (jako zespół) i będziesz pracować sam z jednym nowym projektem, a potem go zapomnisz i przejdziesz dalej. W takim przypadku możesz się nie przejmować (ale twój pracodawca powinien ...)