Aktualizacja
Moja odpowiedź w cytatach na podkreślenie:
Wierzę, że odpowiedź, która stwierdza, że komentarze nie powinny być poruszane w Kodeksach, a następnie zawiera zestaw pytań obronnych, aby z tym walczyć, jest jedyną prawidłową odpowiedzią.
Problem polega na tym, że standard kodowania to po prostu standard . Niezwykle subiektywne pomysły nie powinny znajdować się w standardzie kodowania . Może to być przewodnik po najlepszych praktykach, ale nie można go użyć przeciwko programistom podczas recenzji kodu. Moim osobistym zdaniem standard kodowania powinien być jak najbardziej zautomatyzowany. Kody recenzji poświęcają tak dużo czasu na spieranie nazw, odstępów, tabulatorów, nawiasów, komentarzy itp. Itd., Kiedy WSZYSTKO można zautomatyzować. Nawet odpowiedź na temat tables
i chairs
może być zautomatyzowana. LINT'ery pozwalają na tworzenie słowników, sprawdzanie wielkości liter według pojęcia (zmienna, funkcja, metoda, klasa itp.).
Nawet sprawdzanie JavaDoc może zostać zaimplementowane przez Robot LINT'er przed zaakceptowaniem żądania ściągnięcia. Wiele projektów Open Source robi dokładnie to samo. Przesyłasz żądanie ściągnięcia, kod jest zbudowany z pliku Travis-CI, w tym analizy statycznej, i musi przejść wszystkie standardy kodowania, które można obiektywnie wyrazić. Żaden człowiek nie mówi o tym, że „robi to niepoprawnie” lub nie „podaje wartości” z komentarzem lub niewłaściwy sposób nazywania zmiennych itp. Dyskusje te nie mają żadnej wartości i najlepiej pozostawić je robotowi zewnętrznemu, który może przejąć ciężar naszego kodowania emocjonalnego.
Aby faktycznie odpowiedzieć na pytanie, musielibyśmy odpowiedzieć na pytanie, jak napisać Standard, który opisuje, jak odpowiedzieć na następujące pytanie: Czy ten komentarz miał wartość? Standard kodowania nie może dyktować „wartości” komentarza. Dlatego konieczne jest, aby człowiek przejrzał tę listę kontrolną. Samo wspomnienie o komentarzach w standardzie kodowania tworzy listę kontrolną, której oryginalny plakat chce uniknąć.
Dlatego komentarze zwykle nie są przetwarzane przez kompilator i usuwane. Ich wartości nie można ustalić. Czy dany komentarz jest cenny; Tak lub nie?. Odpowiedź na to pytanie jest trudna. Tylko ludzie mają szansę na prawidłowe udzielenie odpowiedzi, a nawet wtedy na odpowiedź może odpowiedzieć tylko osoba czytająca; gdzie na wartość tego komentarza ma wpływ pogoda, jego życie domowe, ostatnie spotkanie, w którym uczestniczyli i nie zakończyło się dobrze, pora dnia, ilość wypitej kawy. Ufam, że obraz staje się bardziej wyraźny.
Jak można to właściwie wyrazić w dowolnym standardzie? Standard nie jest użyteczny, chyba że można go stosować konsekwentnie i rzetelnie, a uczciwość polega bardziej na obiektywności niż na emocjach.
Sprzeciwiam się, że standard kodowania powinien pozostać jak najbardziej obiektywny. Sposób, w jaki zmienne są nazywane celami IS. Można je łatwo sprawdzić w słowniku pod kątem poprawnej pisowni, struktury gramatycznej i wielkości liter. Wszystko poza tym to „pissing match”, który wygrywa osoba o największej mocy lub „bicie brwi”. Coś, z czym osobiście walczę, by NIE robić.
Kiedy komentuję, zawsze komentuję rozmowę z moim przyszłym sobą w trzeciej osobie. Jeśli wrócę do tego kodu za 5 lat, co powinienem wiedzieć? Co byłoby pomocne, co byłoby mylące, a co nieaktualne z kodem? Istnieje inna różnica między dokumentowaniem kodu w celu wygenerowania publicznego API z możliwością przeszukiwania a kodem komentującym, który zapewnia wartość nieznanej stronie trzeciej, nawet jeśli ta strona trzecia jest tobą.
Oto dobry test lakmusowy. Jeśli byłeś TYLKO tym w projekcie. Wiedziałeś, że będziesz jedynym w projekcie. Co będzie w twoim standardzie kodowania? Chcesz, aby Twój kod był czysty, zrozumiały i zrozumiały dla ciebie w przyszłości. Czy miałbyś ze sobą recenzję kodu, dlaczego nie umieściłeś komentarza w każdej linii? Czy sprawdziłbyś każdy komentarz, który utworzyłeś na 100 zarejestrowanych plikach? Jeśli nie, to po co zmuszać innych?
Uważam, że w tych dyskusjach brakuje czegoś, co stanowi, że Future You jest także deweloperem tego projektu. Pytając o wartość, jutro jesteś także osobą, która może czerpać wartość z komentarza. Więc rozmiar zespołu, moim zdaniem, nie ma znaczenia. Doświadczenie zespołowe nie ma znaczenia, zmienia się zbyt często.
Żadna ilość kodu komentarza, który to recenzuje, nie powstrzyma twórcy tempa przed awarią i zabiciem pacjenta. Kiedy mówisz o komentarzu, który wpływa na kod, mówisz teraz o kodzie, a nie o komentarzu. Jeśli wystarczy zabraknąć komentarza, aby kogoś zabić, w procesie tym pachnie jeszcze coś.
Rozwiązanie tego rodzaju rygorystycznego sposobu kodowania zostało już dostarczone jako metodologia pisania samego oprogramowania. I nie ma to nic wspólnego z komentarzami. Problem z komentarzami polega na tym, że NIE mają one wpływu na ostateczny sposób działania produktu. Najlepsze komentarze na świecie nie mogą uchronić oprogramowania przed awarią, gdy są wbudowane w generator tempa. Lub podczas pomiaru sygnałów elektrycznych za pomocą przenośnego EKG.
Mamy dwa rodzaje komentarzy:
Komentarze do odczytu maszynowego
Style komentarzy, takie jak Javadoc, JSDoc, Doxygen itp., To wszystkie sposoby komentowania publicznego interfejsu zapewnianego przez zestaw kodu. Z tego interfejsu może korzystać tylko jeden inny programista (własny kod dla zespołu dwuosobowego), nieznana liczba programistów (np. JMS) lub cały dział. Ten kod można odczytać w zautomatyzowanym procesie, który następnie daje inny sposób czytania tych komentarzy, np. HTML, PDF i tym podobne.
Ten typ komentarza jest łatwy do stworzenia standardu. Staje się obiektywnym procesem zapewniania, że każda publicznie wywoływana metoda, funkcja, klasa zawiera wymagane komentarze. Nagłówki, parametry, opis i. el. Ma to na celu ułatwienie innym zespołom znalezienia i używania kodu.
Robię coś, co wygląda na szalone, ale tak naprawdę nie jest
Te komentarze są tutaj, aby pomóc innym zobaczyć, DLACZEGO ten kod został napisany w określony sposób. Być może w procesorach, na których działa kod, występuje błąd numeryczny, który zawsze zaokrągla w dół, jednak programiści zazwyczaj zajmują się kodem, który zaokrągla w górę. Dlatego komentujemy, aby upewnić się, że programista dotykający kodu rozumie, dlaczego obecny kontekst robi coś, co normalnie wydaje się nieracjonalne, ale w rzeczywistości zostało napisane w ten sposób celowo.
Ten typ kodu powoduje tyle problemów. Zazwyczaj nie jest to komentowane, a później zostaje znalezione przez nowego programistę i „naprawione”. W ten sposób wszystko psuje. Nawet wtedy komentarze są tylko po to, aby wyjaśnić DLACZEGO tak naprawdę nie zapobiegać uszkodzeniu czegokolwiek.
Na komentarze nie można się powoływać
Komentarze są ostatecznie bezużyteczne i nie można im ufać. Komentarze zwykle nie zmieniają sposobu działania programów. A jeśli tak, to twój proces powoduje więcej problemów, niż powinien. Komentarze są przemyśleniami i nigdy nie mogą być niczym innym jak. Najważniejszy jest kod, ponieważ wszystko to jest przetwarzane przez komputer.
Może to zabrzmi dziwnie, ale proszę o wyrozumiałość. Która z tych dwóch linii naprawdę ma znaczenie?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
W tym przykładzie liczy się tylko to, że nie mamy pojęcia, co to jest „n”, nie ma żadnego sprawdzania, czy n wynosi 0 ORAZ nawet jeśli było, nic nie powstrzymuje programisty przed n = 0
sprawdzeniem PO za 0. Tak więc komentarz jest bezużyteczny i nic zautomatyzowanego nigdy tego nie złapie. Żaden standard tego nie złapie. Komentarz, choć ładny (dla niektórych), nie ma wpływu na wynik produktu.
Rozwój oparty na testach
Co ma wpływ na produkt? Branże, w których napisany kod może dosłownie ocalić lub zabić kogoś, muszą zostać rygorystycznie sprawdzone. Odbywa się to poprzez recenzje kodu, recenzje kodu, testowanie, testowanie, recenzje kodu, testy jednostkowe, testy integracyjne, testy, testowanie, miesiące testowania, recenzje kodu i próby dla jednej osoby, inscenizacja, recenzje kodu, testowanie, a następnie może w końcu wchodzę do produkcji. Komentarze nie mają z tym nic wspólnego.
Wolę kod, który NIE ma komentarzy, miał specyfikację, miał testy jednostkowe, które zweryfikowały specyfikację, badania wyników uruchomienia kodu na urządzeniu produkcyjnym, a następnie dobrze udokumentowany kod, który nigdy nie był testowany, ani nie miał nic do porównania kod przeciwko.
Dokumentacja jest dobra, gdy próbujesz dowiedzieć się, DLACZEGO ktoś zrobił coś w określony sposób, jednak przez lata odkryłem, że dokumentacja jest zwykle używana do wyjaśnienia, dlaczego zrobiono coś „sprytnego”, kiedy tak naprawdę nie było potrzeby być napisanym w ten sposób.
Wniosek
Jeśli pracujesz w firmie, która WYMAGA skomentowania każdego wiersza, GWARANTUJĘ, że co najmniej dwóch inżynierów oprogramowania w projekcie napisało już program do automatycznego tworzenia dokumentów w Perl, Lisp lub Python, który określa ogólną koncepcję tego, co robi linia , a następnie dodaje komentarz powyżej tego wiersza. Ponieważ jest to możliwe, oznacza to, że komentarze są bezużyteczne. Znajdź inżynierów, którzy napisali te skrypty, aby automatycznie udokumentować kod i użyj ich jako dowodu na to, dlaczego „Komentarz do każdej linii” marnuje czas, nie ma żadnej wartości i potencjalnie szkodzi.
Nawiasem mówiąc, pomagałem bliskiemu przyjacielowi w zadaniu programistycznym. Jego nauczyciel ustanowił wymóg, aby każdy wiersz musiał być udokumentowany. Widzę więc, skąd wziąłby się ten proces myślowy. Po prostu zadaj sobie pytanie, co próbujesz zrobić i czy to jest właściwa rzecz? Następnie zadaj sobie pytanie; Czy jest jakiś sposób na „granie” w system za pomocą tego procesu? Jeśli tak, to czy naprawdę wnosi jakąkolwiek wartość? Nie można automatycznie napisać testów jednostkowych, które sprawdzają, czy kod spełnia określoną specyfikację, a jeśli mogłyby, to nie byłoby złe.
Jeśli urządzenie musi działać w określonych warunkach, ponieważ znajdzie się w człowieku, jedynym sposobem upewnienia się, że go nie zabije, są lata testowania, wzajemnej oceny, prób, a NIGDY NIGDY nie zmiany kodu. Właśnie dlatego NASA nadal korzysta z tak starego sprzętu i oprogramowania. Jeśli chodzi o życie lub śmierć, nie tylko „dokonaj niewielkiej zmiany i sprawdź ją”.
Komentarze nie mają nic wspólnego z ratowaniem życia. Komentarze są dla ludzi, ludzie popełniają błędy, nawet podczas pisania komentarzy. Nie ufaj ludziom. Ergo, nie ufaj komentarzom. Komentarze nie są twoim rozwiązaniem.