Czy kiedykolwiek musiałeś pracować nad kodowaniem standardów, które:
- Znacznie obniżyłeś swoją wydajność?
- Czy pierwotnie zostały uwzględnione z dobrych powodów, ale zostały utrzymane długo po tym, jak pierwotna obawa stała się nieistotna?
- Czy lista była tak długa, że nie można było ich wszystkich zapamiętać?
- Czy myślisz, że autor chciał po prostu zostawić swój ślad, a nie zachęcał do dobrej praktyki kodowania?
- Nie miałeś pojęcia, dlaczego zostały uwzględnione?
Jeśli tak, jaka jest twoja najmniej ulubiona zasada i dlaczego?
Kilka przykładów tutaj
Odpowiedzi:
Może to wzburzyć kilka piór, ale standardy, które nakazują umieszczanie szablonów w komentarzach na górze każdej metody, zawsze mnie denerwują.
1) Zawsze są nieaktualne, ponieważ są zbyt dalekie od kodu, który wykonuje rzeczywistą pracę, aby zauważyć, gdy aktualizujesz rzeczy. Złe komentarze są gorsze niż brak komentarzy.
2) Często powtarzają tylko informacje, które są już zawarte w narzędziu kontroli źródła, po prostu mniej dokładne. Na przykład: Ostatnia modyfikacja przez, lista dat / powodów modyfikacji.
źródło
Kiedyś profesor, który zażądał, mamy co najmniej jeden komentarz do każdego wiersza kodu.
To było dość śmieszne.
źródło
// comment
wcześniej zadzwonić?Nasza firma (C #) standard kodowania wezwał do szerokiego użycia #REGIONÓW (dla tych, którzy nie wiedzą, oznacza bloki kodu źródłowego, które zostaną zwinięte do jednej linii w Visual Studio). W rezultacie zawsze otwierałeś coś, co wyglądało na ładnie ustrukturyzowaną klasę, tylko po to, aby znaleźć stosy i stosy śmieci zmiecione pod głęboko zagnieżdżonymi dywanikami konstrukcji #REGION. Miałbyś nawet regiony wokół pojedynczych linii, np. Musiałbyś rozłożyć region LOG, aby znaleźć jedną deklarację Logger. Oczywiście wiele metod dodanych po utworzeniu jakiegoś regionu zostało również umieszczonych w „złym” zakresie regionu. Horror. Horror.
Regiony są jedną z najgorszych funkcji, jakie kiedykolwiek dodano do Visual Studio; zachęca raczej do strukturyzacji powierzchni niż do faktycznej struktury OO.
Obecnie zabijam #REGIONY na widoku.
źródło
W jednym zadaniu byliśmy zmuszeni użyć dziwnej formy węgierskiej notacji w bazie danych.
Nie pamiętam szczegółów, ale z pamięci każda nazwa pola musiała zawierać:
Na przykład kolumna zawierająca imię osoby może być nazywana:
PRSNFRSTNMVC30X
(Tabela osób, kolumna Imię, 30 znaków Varchar, nie Null)źródło
Nalegając, aby za wszystkimi nawiasami klamrowymi dodano komentarz dotyczący tego, co kończy się nawias klamrowy:
na przykład:
źródło
powiedział nuff.
źródło
#define BEGIN {
i#DEFINE END }
?Prawdziwe przykłady:
paymentmethodtotalshtml
,contracttypechangecontexts
,customsegmentspectexts
,potentialmsceventref
New York Times waży :
źródło
I został poproszony przez lidera oprogramowania firmy do zrobienia „ prosty, re n kod dundant ”. Zabronione było na przykład dodawanie nowego parametru do istniejącej funkcji. Zamiast tego trzeba było powielić funkcję, pozostawiając oryginał nietknięty, aby uniknąć regresji. Oczywiście bez formalnego testowania (strata czasu).
Zabroniono nam również używania oprogramowania do scalania; każdy plik może być modyfikowany tylko przez jednego programistę na raz. Oprogramowanie do kontroli wersji było oczywiście science fiction.
Najszczęśliwszym dniem w moim życiu było zwolnienie go (uważaj, że bardzo, bardzo trudno jest zwolnić kogoś we Włoszech).
źródło
Wszelkie interakcje z bazą danych muszą odbywać się za pomocą procedur przechowywanych . To może mieć sens, jeśli żyjemy w 1997, a nie w 2010 roku.
Właśnie zdałem sobie sprawę, że to faktycznie obejmuje wszystkie kryteria pierwotnego pytania:
źródło
Niedozwolone korzystanie ze STL lub innych standardowych bibliotek C ++, ponieważ CTO wierzył, że „możemy” zrobić to lepiej i szybciej. Nawet podstawowe konstrukcje, takie jak listy i klasa string.
źródło
Notacja węgierska
Próbka wyodrębniona z „ Objaśnienia Charlesa Simonyi dotyczącego węgierskiej konwencji nazywania identyfikatora notacji ” na MSDN.
źródło
Kiedyś pracowałem nad projektem, w którym kierownik projektu nakazał, aby każda zmienna - KAŻDA zmienna - była poprzedzona literą „v”. Zatem vCount, vFirstName, vIsWarranty itp.
Dlaczego? „Ponieważ pracujemy w VBScript i i tak wszystko jest wariantem”.
WTF.
źródło
f
funkcji przed, wtedy kod jest naprawdęfUcked (vUp)
.Prawie zapomniałem tego:
Cytat od kierownika:
To nie było dla oprogramowania konsumenckiego, ale niestandardowe dla jednej dużej organizacji. Nie trzeba dodawać, że klient płacił przez lata później. Może się to wydawać trywialne, ale próba zignorowania błędów jest trudniejsza niż ich znalezienie.
źródło
Wymuszone komentarze XML dotyczące wszystkich nieprywatnych metod, stałych, wyliczeń i właściwości.
Doprowadziło to do trochę zaśmieconego kodu, szczególnie, że wynikiem końcowym było albo naciśnięcie ///, aby utworzyć pusty kod komentarza do wszystkiego, albo zainstalowanie GhostDoc i dodanie automatycznie wygenerowanych komentarzy:
[Edytuj] Powodem, dla którego wspominam o tym jako niedorzecznym standardzie, nie jest to, że uważam, że komentarze do metod są głupie, ale dlatego, że jakość tych komentarzy nie była w żaden sposób egzekwowana i spowodowała po prostu mnóstwo bałaganu w plikach kodu . Istnieją lepsze sposoby tworzenia znaczących dokumentów kodowych niż „niewidoczne” wymaganie kompilacji.
źródło
Validations the handler
' - uh-ohNie jest to tak naprawdę standard kodowania, ale mieliśmy plik pod kontrolą źródła o nazwie „changelog.txt”
Za każdym razem, gdy się zameldowałeś, musiałeś ręcznie dodać wpis do tego pliku. Ten wpis był numerem wersji subversion i Twoim komentarzem do zameldowania.
Kiedy rozpoczął się nowy CTO i ktoś mu to powiedział, natychmiast podjął decyzję wykonawczą i powiedział: „Nie będziemy już tego robić” i usunął plik. Działo się to od lat.
źródło
svn log
?Niektóre miejsca, z którymi pracowałem, nalegały na komentowanie nieużywanego lub przestarzałego kodu zamiast go usuwać. Zamiast ufać VCS w zakresie historii itp., Został boleśnie utrzymany w plikach poprzez skomentowany kod.
Dużym problemem, jaki znalazłem przy tym, jest to, że często nie masz pojęcia, dlaczego kod został skomentowany. Czy to dlatego, że jakiś deweloper aktywnie wprowadzał zmiany i chciał zachować go w celach informacyjnych, czy też nie był już potrzebny?
źródło
Najgorszym standardem kodowania, w jakim kiedykolwiek uczestniczyłem, są bazy kodu, które w ogóle ich nie miały. Wolałbym przestrzegać standardu kodowania, z którym się całkowicie nie zgadzam, niż pracować w bazach kodu, w których w ogóle ich nie ma. To sprawia, że znacznie trudniej jest nauczyć się nowych części bazy kodu.
źródło
Wymuszanie wbudowanych komentarzy do kontroli wersji dotyczyło najbardziej bezcelowego standardu kodowania, który zignorowałem.
Oracle DBA, która nalegała na poprawne użycie białych znaków podczas „utrzymywania” bazy danych z wysoce rywalizującą tabelą, która miała ponad 200 pól i 40 wyzwalaczy, jest bliska.
źródło
Zrobiłem recenzje kodu w projekcie prowadzonym przez C ++ po raz pierwszy, który zdecydował, że wszystkie funkcje członków klasy powinny być poprzedzone nazwą klasy i widocznością:
źródło
Konieczne jest wcięcie całego kodu o cztery spacje;)
źródło
Wiele lat temu miałem pracę, w której cały nasz kod musiał być wyrównany do lewej - bez wcięć. Facet, który wymyślił tę zasadę, nie lubił przewijać się w przód iw tył poziomo podczas oglądania długich linii kodu, zrównując go z grą w ping-ponga oczami.
źródło
To bardziej przykład tego, jak brak standardów kodowania może zaszkodzić.
Wykonawca pracujący w dużym banku nalegał, aby przestrzeganie standardów było jak najlepsze. Aplikacja została napisana w dBase / Clipper, dla którego był jedynym programistą i oczywiście wymyślił standard.
Na tym etapie byłem bardzo nowym programistą-samoukiem, ale wiedziałem wystarczająco dużo, aby nie słuchać szalonego naukowca i wynosić się stąd, zanim poprosiłem o przejęcie projektu.
I tak, powiedzieliśmy kierownictwu, jak złe były te praktyki, ale zawsze miały zwyczajowe „płacenie temu kontrahentowi najwyższego dolara, za który musi wiedzieć, o czym mówi”.
źródło
\07
na początku każdego pliku.i
Stosowane do indeksu tablicy w jednej procedurze może kolidować zi
w procedurze wywoływania. Musisz użyćPRIVATE ALL LIKE m*
iPRIVATE i
zapobiec temu „zacienianiu”Jeszcze jeden wybuch z mojej przeszłości.
Cytat właściciela firmy:
Projekt Java był systemem handlu akcjami zaprojektowanym do obsługi kilkudziesięciu akcji, który był teraz wykorzystywany do przetwarzania tysięcy. Zamiast zająć się wadami projektowymi lub słabym sprzętem, cała firma była zmuszona przekonwertować wszystkie aplikacje spoza C / C ++ na C / C ++, a wszystkie nowe prace rozwojowe musiały być w C / C ++. Języki interpretacyjne oznaczały wszystko, co nie zostało skompilowane, a właściciel rozważał jedynie skompilowanie Assemblera, C i C ++.
Dla 800-osobowej firmy, w której większość kodu była napisana w Javie i Perlu, oznaczało to, że cała firma spędzała większość czasu w ciągu następnych kilku lat, przepisując doskonale doskonały kod w C / C ++.
Zabawne, jakieś dwadzieścia lat przed tym fiaskiem, byłem w innej firmie, w której kierownictwo techniczne zdecydowało, że nasza logika sortowania (była to sortowanie bąbelkowe) powinna zostać przekodowana w asemblerze zamiast zastąpiona przez szybkie sortowanie, ponieważ - Algorytmy robią nie poprawiać wydajności. Jedynym sposobem na poprawę wydajności było przepisanie tej samej logiki w asemblerze.
W obu przypadkach wyszedłem wkrótce po upadku dyktanda.
źródło
Jak wielu programistów (ale niewystarczająco), nienawidzę dekoracji kodu. Denerwuje mnie, gdy muszę używać przedrostka znaku dolara ($) dla nazw zmiennych lub podkreśleń dla zmiennych prywatnych, nawet bez getterów / ustawiaczy. Jeśli musisz udekorować swój kod, aby go zrozumieć, musisz wyjść z tego!
źródło
Od jakiegoś czasu pracuję z systemem webowym, w którym wszystkie przekazane parametry musiały mieć nazwy P1, P2, P3 itd. Nie ma szans, do diabła, wiedzieć, po co są, bez obszernej dokumentacji.
Ponadto - choć nie jest to ściśle standard kodowania - w tym samym systemie każdy plik miał mieć nazwę xyz0001.ext, xyz0002.ext, xyz0003.ext itp. - gdzie xyz był kodem samej aplikacji.
źródło
To było dawno temu - dokładnie 1976. Mój szef nigdy nie słyszał o Edsgerze Dijkstrze ani nie czytał numeru CACM, ale skądś usłyszał plotki, że „GOTO jest złe”, więc nie wolno nam było używać GOTO w naszych programach COBOL. Stało się to zanim COBOL dodał „koniec jeśli”, więc w tym czasie miał tylko dwie i pół z trzech klasycznych struktur kontrolnych (sekwencja, jeśli / to / inaczej, wykona (tj. Zrobi czas)). Niechętnie zezwolił na GOTO w naszych programach podstawowych i instrukcje rozgałęzień w naszych programach językowych asemblera.
Przepraszam, że jest to rodzaj historii „musiałeś tam być”. O ile mi wiadomo, każdy język wymyślony od 1976 r. Ma odpowiednie struktury kontrolne, abyś nigdy nie musiał używać GOTO. Ale chodzi o to, że szef nigdy nie wiedział, DLACZEGO GOTO uważano za szkodliwe, lub który język był zaburzeniem dziecięcym, a która śmiertelna.
źródło
Pracowałem w projekcie, w którym główny architekt chciał napisać (a nawet zbyt) wyraźny kod. Jednym z najgorszych przykładów, które znalazłem w kodzie (a on z radością zatwierdził) był następujący.
Nawet ReSharper powiedział ci, że to źle!
źródło
else
zostanie podjęta ostatnia gałąź ( ).return verbose ? someString : someOtherString;
?W mojej ostatniej pracy „standardy” byłyby bardzo silnym określeniem tego, co dostałem od faceta, który mnie zatrudnił. Programując strony internetowe w ColdFusion i SQL, dostałem wymagania dotyczące kodowania, takie jak:
Zacząłem je zmieniać, jak tylko rzucił.
źródło
W moim życiu jako programista C ++ przestrzegano dwóch naprawdę paskudnych „zasad”:
źródło
O(n^2)
ataki DOS (dostarczanie danych wejściowych w najgorszym przypadku). Również dlaczego nie było możliwe przełączenie - samo w sobie było usprawiedliwieniem nieużywania STL.Jestem zmuszony posiadać dokumentację XML dla wszystkich klas i członków klasy. W tym prywatny. Jestem zachęcony do używania domyślnych komentarzy ghostdoc.
źródło