Jaka była najdziwniejsza reguła standardu kodowania, której musieliście przestrzegać? [Zamknięte]

173

Kiedy zadałem to pytanie , prawie zawsze otrzymywałem zdecydowane tak, że powinieneś mieć standardy kodowania.

Jaka była najdziwniejsza standardowa zasada kodowania, do której musieliście się stosować?

A mówiąc najdziwniejsze, mam na myśli najzabawniejsze, najgorsze lub po prostu dziwne.

W każdej odpowiedzi podaj, w jakim języku, jaki był rozmiar Twojego zespołu i jakie złe skutki spowodowało to dla Ciebie i Twojego zespołu.

Brian R. Bondy
źródło
19
Po przeczytaniu tej listy nagle czuję, że miałem bardzo szczęśliwą karierę, aby uniknąć tego wymuszonego standardowego gówna!
mat b
Następnym razem, gdy będę rozmawiać o pracę, przejrzę to pytanie, aby służyć jako „Czerwona flaga. Biegnij!” wskaźnik. Rzeczywiście, kodowanie standardowych anty-wzorców.
Stu Thompson
5
Aż wstyd mi przyznać, że bardzo wcześnie w swojej karierze narzuciłem zespołowi jedną z odpowiedzi. Tak mi przykro.
JasonFruit

Odpowiedzi:

434

Ja nienawidzę go, gdy korzystanie z wielu zwrotów jest zakazane.

Simon Johnson
źródło
26
Jaki jest przypuszczalny cel tej reguły? Osobiście nie sprawdziłbym kodu pod kątem kodu, który mógłby być łatwiejszy do odczytania, umieszczając inny zwrot.
Mark Baker
22
Z drugiej strony, wyeliminowanie opcji na początku, takiej jak „if (param == null) return null”, może całkiem wyczyścić kod, a zakazanie tego zamiast zachęcania jest nieco przestępcze.
Bill K
39
Obejście: if (! Initialize ()) {RetVal = ERR_BADINIT; goto ReturnPoint; } (dużo więcej kodów) ReturnPoint: return RetVal; } Problem rozwiązany! ;)
Marc Bernier
9
Do niedawna wielokrotne zwroty były zabronione. Następnie ujawniono, że jest to pozostałość po C, przestarzała przez C ++ RAII i funkcje o rozmiarze mniejszym niż 15 linii. Od tamtej pory, jak Braveheart: „WOLNOŚĆ !!!!” ... :-p ...
paercebal
122
Twój wybór: wiele zwrotów lub więcej zagnieżdżonych instrukcji if. Przyjmę wiele zwrotów.
Lance Fisher
333

odwrotne wcięcie. Na przykład:

    for(int i = 0; i < 10; i++)
        {
myFunc();
        }

i:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }
code_g03s_g00d
źródło
152
O mój Boże ... Czy mogę poznać socjopatę, który to wymyślił? Mógłby mnie nauczyć czegoś o mizantropii.
John Rudy
23
To nie może być prawda.
Dane
191
Za każdym razem, gdy odwracasz wcięcie, Bóg zabija programistę konserwacyjnego.
Chris Vest
14
OMG, żartujesz?
Andrea Ambu
21
oszczędza cenne bajty ... bezcenne, używaj go dużo
Spikolynn
326

Może nie najbardziej dziwaczny, jaki dostaniesz, ale naprawdę nienawidzę, gdy muszę poprzedzać nazwy tabel bazy danych przedrostkiem „tbl”

Galwegian
źródło
5
Czy to nie jest po prostu węgierski zapis DB?
ARKBAN
19
Czy to nie jest jak poprzedzanie zmiennych przedrostkiem var?
Brian R. Bondy
26
Podobnie nienawidzę, gdy kolumny ID w bazach danych są poprzedzone nazwą tabeli, tak jak w tabeli produktów byłaby kolumna productid. Nadmiarowość, która czasami sprawia, że ​​pisanie skryptów bez ORM jest bardziej bolesne niż powinno być
Andrew Ingram
30
Właściwie wolę, aby kolumna ID była poprzedzona nazwą tabeli. Ułatwia pisanie zapytań nieco łatwiej. W przypadku kluczy obcych pole klucza obcego może być takie samo jak pole klucza.
Craig
38
Podobnie nienawidzę, gdy nazwy tabel muszą być pojedyncze. Odruchowo mam zamiar nazwać tabelę zawierającą, powiedzmy, klientów „Klientami”, a nie „Klientami”. Brzmi to mało, dopóki nie zorientujesz się, ile zaoszczędzisz, gdybyś mógł nazwać swój stół „Transakcje” zamiast „[Transakcja]”.
Atario
248

Prawie każdy rodzaj notacji węgierskiej.

Problem z notacją węgierską polega na tym, że jest ona bardzo często źle rozumiana. Pierwotny pomysł polegał na tym, aby przedrostek zmiennej był jasny. Na przykład:

int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.

Ale większość ludzi używa go do określenia typu.

int iAppleCount = 0; // Number of apples.
int iPearCount = 0;  // Number of pears.

Jest to mylące, ponieważ chociaż obie liczby są liczbami całkowitymi, wszyscy wiedzą, nie można porównywać jabłek z gruszkami.

Toon Krijthe
źródło
71
Zobacz ten post Joel on Software o tym, jak prawidłowe użycie notacji węgierskiej może pomóc w zmniejszeniu liczby błędów: joelonsoftware.com/articles/Wrong.html
flicken
9
Oczywiście używając C ++ zamiast C możesz napisać kod tak, aby kompilator wyświetlał błąd podczas porównywania jabłek z gruszkami.
Andreas Magnusson
5
Tak, Joel ma rację. Chciałbym, żeby kompilatory wymusiły na nim wersję Joela.
Loren Pechtel,
9
Czy nie powinno to być „int cntApples = 0; int cntPeas = 0;”? To znaczy. Przedrostkiem jest zmienna „rodzaj”.
Blorgbeard wychodzi
42
Przynajmniej pierwszy jest poprawny… wszystko, co zawiera „Apple”, musi być poprzedzone „i”. ;)
Johannes Charra
240

Żaden operator trójskładnikowy nie jest dozwolony tam, gdzie obecnie pracuję:

int value = (a < b) ? a : b;

... ponieważ nie każdy „to rozumie”. Jeśli powiesz mi: „Nie używaj tego, ponieważ musieliśmy je przepisać, gdy struktury stały się zbyt skomplikowane” (zagnieżdżone operatory trójskładnikowe, ktoś?), To zrozumiałbym. Ale kiedy powiesz mi, że niektórzy programiści ich nie rozumieją ... hm ... Jasne.

Jarrett Meyer
źródło
235
Przez wszystkich twój szef ma na myśli siebie.
Brian R. Bondy
13
Kiedyś wpadałem w ten obóz ... Ale wyrosłem z niego i nauczyłem się kochać operator warunkowy (kiedy jest to właściwe).
John Rudy
22
Jeśli już, zasada powinna brzmieć „zawsze używaj operatora trójskładnikowego”, operatora czystej piękności :)
Bobby Jack
16
Uwielbiam to, ale powód, dla którego najczęściej nie używam, jest taki sam, jak twoje doświadczenie „ludzie tego nie zrozumieją”. Mój argument jest taki, że nie powinni pracować, jeśli nie rozumieją koncepcji ...
Aidos,
7
Jak inaczej mógłbyś warunkowo zainicjować stałą zmienną bez pisania zupełnie nowej funkcji (która nie zrobi wiele dobrego dla czytelności). Użycie const dla lokalnych "zmiennych" robi o wiele więcej dobrego dla zrozumienia kodu i podążania za kodem niż zakaz operatora trójskładnikowego.
Andreas Magnusson
239

NIGDY nie usuwać żadnego kodu podczas dokonywania zmian. Powiedziano nam, aby komentować wszystkie zmiany. Pamiętaj, że używamy kontroli źródła. Ta polityka nie trwała długo, ponieważ programiści byli oburzeni z powodu tego i tego, jak sprawi, że kod będzie nieczytelny.

George
źródło
3
Naprawdę tego nienawidzę ... jest kilka osób, które to robią (chociaż to nie jest standard ani nic)
dreszcze42
7
Takie zasady są powodem, dla którego POTRZEBUJĘ drukowania kodu źródłowego, który odziedziczyłem po innych w kolorze. Za grosze stronę, to nie jest zbyt przyjemne dla mojej firmy - ale to jedyny sposób, w jaki mogę ją przeczytać, jeśli muszę ją wydrukować. (Wiele odziedziczyliśmy po tej zasadzie ...)
John Rudy
3
Brzmi jak zasada opracowana przed kontrolą źródła. Lub ze względu na to, że programiści sprawdzają się tylko raz w tygodniu.
Craig
6
Uwielbiam czytać te odpowiedzi, ponieważ dzięki temu moja praca wydaje się 100 razy lepsza.
rjh
2
Zapraszam ... jesteśmy w SVN od ponad 4 lat, ale starszy programista go nienawidzi i sprawdza mniej więcej raz na dwa miesiące, spędzając następne trzy dni na błaganiu o zepsuty kod: /
Viktor Svub
204

Kiedyś pracowałem pod tyranią Mighty VB King .

VB Król był czysty mistrz MS Excel i VBA, a także baz danych ( stąd jego nazwisko: Grał z Excel, podczas gdy programiści pracowali z kompilatorów i kwestionując go na bazach danych może mieć szkodliwy wpływ na swoją karierę ... ).

Oczywiście jego ogromne umiejętności dały mu unikalną wizję problemów programistycznych i rozwiązań w zakresie zarządzania projektami: chociaż nie były to dokładnie standardy kodowania w ścisłym tego słowa znaczeniu, VB King regularnie miał nowe pomysły na temat „standardów kodowania” i „najlepszych praktyk”, które wypróbował (i często udawało się) narzucić nam. Na przykład:

  • Wszystkie tablice C / C ++ powinny rozpoczynać się od indeksu 1 zamiast 0. Rzeczywiście, użycie 0 jako pierwszego indeksu tablicy jest przestarzałe i zostało zastąpione przez wnikliwe zarządzanie indeksami tablic w języku Visual Basic 6.

  • Wszystkie funkcje zwracają kod błędu: w VB6 nie ma wyjątków, więc po co w ogóle ich potrzebujemy? ( tj. w C ++ )

  • Ponieważ „Wszystkie funkcje powinny zwracać kod błędu” nie jest praktyczne w przypadku funkcji zwracających znaczące typy, wszystkie funkcje powinny mieć kod błędu jako pierwszy parametr [we / wy].

  • Cały nasz kod będzie sprawdzał kody błędów ( doprowadziło to do najgorszego przypadku VBScript, jeśli w mojej karierze wystąpiło wcięcie, jeśli kiedykolwiek widziałem ... Oczywiście, ponieważ klauzule „else” nigdy nie były obsługiwane, nie znaleziono żadnego błędu aż do za późno ).

  • Ponieważ pracujemy z C ++ / COM, od dziś będziemy kodować wszystkie nasze funkcje narzędziowe DOM w języku Visual Basic.

  • Błędy ASP 115 są złe. Z tego powodu użyjemy On Error Resume Next w naszym kodzie VBScript / ASP, aby ich uniknąć.

  • XSL-T to język zorientowany obiektowo. Użyj dziedziczenia, aby rozwiązać swoje problemy ( głupia niespodzianka tego dnia prawie złamała mi szczękę ).

  • Wyjątki nie są używane, dlatego należy je usunąć. Z tego powodu odznaczymy pole wyboru z prośbą o wywołanie destruktora w przypadku wycofania wyjątku ( ekspertowi zajęło kilka dni, aby znaleźć przyczynę tych wszystkich wycieków pamięci i prawie wpadł w szał, gdy dowiedział się, że dobrowolnie zignorowali (i ukryty) jego notatka techniczna o ponownym sprawdzeniu opcji, wysłana kilka tygodni wcześniej ).

  • przechwytuje wszystkie wyjątki w interfejsie COM naszych modułów COM i usuwa je po cichu (w ten sposób, zamiast awarii, moduł wydawałby się tylko szybszy ... Błyszczący! ... Ponieważ używaliśmy opisanej powyżej obsługi błędów über, zajęło nam nawet trochę czasu, zanim zrozumieliśmy, co się naprawdę dzieje ... Nie możesz mieć zarówno szybkości, jak i poprawnych wyników, prawda? ).

  • Od dzisiaj nasza baza kodu zostanie podzielona na cztery gałęzie. Będziemy zarządzać ich synchronizacją i ręcznie integrować wszystkie poprawki błędów / ewolucje.

Wszystkie oprócz tablic C / C ++ , funkcji narzędziowych VB DOM i języka XSL-T jako języka OOP zostały zaimplementowane pomimo naszych protestów. Oczywiście z biegiem czasu niektóre zostały odkryte, ahem , zepsute i całkowicie porzucone.

Oczywiście, wiarygodność VB King nigdy nie ucierpiała z tego powodu: wśród wyższej kadry kierowniczej pozostał ekspertem technicznym „top gun” ...

Wytworzyło to kilka zabawnych efektów ubocznych, jak widać, klikając łącze Jaki jest najlepszy komentarz w kodzie źródłowym, jaki kiedykolwiek napotkałeś?

paercebal
źródło
28
Re: 1-indeksowanie. Czasami wystarczy wstać i powiedzieć coś mocnego, np. „To głupie i złe”. Narysuj linię na piasku. Zapomnij o uspokajaniu ego i po prostu to powiedz. Mogę prawie zagwarantować, że każdy inny wartościowy programista natychmiast zacznie
kiwać
31
@jrista: Jeśli NIE komentujesz pisowni mojego tekstu, zignoruj ​​następujące ... ... ... ... ... ... ... ... Jeśli komentujesz mój tekst, proszę rozważ (1) zaproponowanie poprawek, (2) samodzielne poprawienie pisowni, lub (3) weź pod uwagę, że nie każdy programista na świecie (daleki od tego) jest native speakerem języka angielskiego, więc tolerowanie błędnej pisowni to minimum, które możesz zrobić, lub udowodnij, że potrafisz lepiej, wysyłając mi poprawne tłumaczenie W
JĘZYKU
4
Gdyby ten facet był moim szefem, udałbym się prosto do każdego członka wyższego kierownictwa z dobrze napisaną i udokumentowaną listą skarg i spowodowałbym, że został zwolniony. -1 za to, że nie masz piłek, by się bronić
muusbolla
34
@muusbolla: Kto ci powiedział, że nie narzekamy? Sytuacja narastała, aż delegacja dwóch osób (w tym ja) poszła prosto do dyrektora generalnego, aby wyjaśnić problem. Ale przykro mi, że muszę wam powiedzieć, że istnieje różnica między światem idealistycznym, w którym panuje sprawiedliwość, a światem rzeczywistym, w którym niektórzy szefowie wierzą, że „zarządzanie nigdy się nie myli, nawet jeśli jest”, i zmiażdży każdego, kto odważy się zaprzeczyć temu dogmatowi. Jedyną szczęśliwą pamiątką, jaką mam z tamtego czasu, jest dzień, w którym zrezygnowałem, prawie trzy lata temu, i od tego dnia jestem szczęśliwszym człowiekiem. W każdym razie, jeśli to prawda, twój powściągliwy powód jest kiepski. Przepraszam.
paercebal
7
@paercebal: En générale, c'est correctement écrit, sauf que quelques petits erreurs: «squatch»: ça doit être «squash»; „Ten jeden dzień”: en ce context-là, na dirait „ten dzień”; „Procedury magazynowe”: „procedury magazynowe”; «Zakrztuszony» s'écrit «zadławiony». Aussi, dans les commentaires, vous utilisez ° wzmiankowany », ce qui doit être« wzmiankowany »Mais vraiment, tout ça ne justifie pas une telle plainte. Au contraire, vous y montrez une excellente maîtrise de l'anglais; félicitations!
intuicja
131

W latach 80-tych i 90-tych pracowałem dla firmy produkującej symulatory samolotów, która używała FORTRAN. Nasz kompilator FORTRAN miał ograniczenie do 8 znaków dla nazw zmiennych. Standardy kodowania firmy zarezerwowały pierwsze trzy z nich dla informacji w stylu węgierskim. Musieliśmy więc spróbować stworzyć znaczące nazwy zmiennych z zaledwie 5 znakami!

David Arno
źródło
17
Luksus: mieliśmy tylko 6 znaków; pakiet miał nazwy zaczynające się od g; wszystkie funkcje wewnętrzne rozpoczęły się gk; były sterowniki stacji roboczej z kodami takimi jak 0p (więc gk0p było początkiem), pozostawiając nam dwa znaki na resztę nazwy Fortran. gk0paa, gk0pab, ...
Jonathan Leffler
103
„Kiedy byłem w twoim wieku, mieliśmy tylko 2 znaki! I nie było rozróżniania wielkości liter!”
pookleblinky
53
Kiedyś musieliśmy wstawać o 2 nad ranem, 3 godziny przed pójściem spać, potem pisać własne kompilatory i płacić firmie za przywilej chodzenia do pracy. Pozwolono nam tylko na literę A jako nazwy naszych zmiennych. Wtedy nasz szef usuwałby nasz kod i tańczył na naszych listach, śpiewając alleluja.
David Arno,
12
„50 możliwych identyfikatorów powinno wystarczyć każdemu”: p
Chris Vest,
5
Do licha, tłumacze języka BASIC, z którymi pracowaliśmy dawno temu, mieli dwuznakowe nazwy zmiennych. Po co narzekać na 5?
David Thornley
107

Pracowałem w miejscu, w którym nastąpiło połączenie dwóch firm. „Dominujący” miał główny serwer napisany w K&R C (tj. Przed ANSI). Zmusili zespoły Java (z obu biur - prawdopodobnie w sumie 20 programistów) do korzystania z tego formatu, który radośnie zignorował dwa filary „debaty o nawiasach klamrowych” i od razu doprowadził do szaleństwa:

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }
Michała Wielkanoc
źródło
18
Myślę, że utrzymanie większego wizualnego rozróżnienia między C i Javą ułatwiłoby przejścia. (+1 za „i idzie prosto do szaleństwa”)
Jeffrey L Whitledge
4
Wygląda na styl Whitesmiths, który był używany w oryginalnym „Programming Windows” Petzolda - idź do dzieła! ;)
Bobby Jack
7
Uważam, że to najbardziej inteligentny styl zamka. Niestety większość ludzi go nie używa. Jeśli nawiasy klamrowe mają znaczenie semantyczne, należy je tak traktować, a nie blokować na końcu wiersza i ignorować.
Ryan Lundy,
7
@Kyralessa. Nie zgadzam się ... Nie wiem, czy nawiasy klamrowe mają znaczenie semantyczne, ale z pewnością mogą wpływać na dopasowanie wzorców i poczucie przestrzeni. IMO, ta wersja całkowicie to traci. np. chcę, aby moja zakładka wystawała poza książkę, a nie równo ze stronami.
Wielkanoc Michaela
6
Właściwie to mój ulubiony styl, ale wszystko na świecie (szczególnie Visual Studio) domyślnie działa w innych trybach, więc poddałem się. Dlaczego to lubię? Nawiasy klamrowe „częścią” zawartego kodu - zmuszają go, aby „wyglądał jak” pojedyncza instrukcja w instrukcji if, czego oczekuje.
Atario
104

Zakazana:

while (true) {

Dozwolony:

for (;;) {
bh213
źródło
4
Inni twierdzą, że for (;;) {jest to C Idiom po raz pierwszy.
Robert P
69
Jeśli dobrze rozumiem nowoczesne, nowomodne emotikony, ten standard sprawia, że ​​biedni, przepracowani, płaczą za twierdzeniami!
Ben Blank
15
To jest tutaj de facto zasada. VC6 generuje ostrzeżenie kompilatora o while (true), ale nie o for (;;). W przeciwnym razie są równoważne. Więc wybieramy ten bez ostrzeżeń.
user9876
22
Bjarne S. powiedział w swojej książce: „bo (;;) należy czytać jak wieczność”. Jeśli to jest wystarczająco dobre dla twórcy C ++, powinno być wystarczająco dobre dla Ciebie. :-)
Frank Krueger
58
W pierwszym programie w języku C, nad którym pracowałem, ktoś dodał #define ever (;;), abyś mógł powiedzieć „na zawsze {...}”
James Curran,
101

mój przyjaciel - nazwiemy go CodeMonkey - dostał swoją pierwszą pracę po college'u [ wiele lat temu], pracując nad rozwojem wewnętrznym w języku COBOL. Jego pierwszy program został odrzucony jako „niezgodny z naszymi standardami”, ponieważ używał… [bzdura!] Zagnieżdżonych instrukcji IF

standardy kodowania zakazały stosowania zagnieżdżonych instrukcji IF

teraz CodeMonkey nie był nieśmiały i był pewien swoich umiejętności, więc upierał się przy pytaniu wszystkich w górę łańcucha i na końcu przejścia, dlaczego ta zasada istnieje. Większość twierdziła, że ​​nie wie, niektóre zmyślały o „czytelności”, aż w końcu jedna osoba przypomniała sobie pierwotny powód: pierwsza wersja kompilatora COBOL, której używali, miała błąd i nie obsługiwała poprawnie zagnieżdżonych instrukcji IF.

Ten błąd kompilatora został oczywiście naprawiony przez co najmniej dekadę, ale nikt nie kwestionował standardów . [baaa!]

CodeMonkey udało się zmienić standardy - ostatecznie!

Steven A. Lowe
źródło
7
Steven, to przypomina mi historię eksperymentu z małpami: o) freekvermeulen.blogspot.com/2008/08/…
Nick Dandoulakis
5
@ [Nick D]: tak, ja też - stąd kryptonim „CodeMonkey” ;-)
Steven A. Lowe
3
Albo sekret gotowania babci ...
beztrosko,
Powód mógł być zły, ale nadal dobrze jest unikać zagnieżdżonych ifs - c2.com/cgi/wiki?ArrowAntiPattern
manojlds
97

Kiedyś pracował nad projektem, w którym znaki podkreślenia były zakazane. I mam na myśli całkowity zakaz. Więc w aplikacji ac # winforms, za każdym razem, gdy dodaliśmy nową procedurę obsługi zdarzeń (np. Dla przycisku), musielibyśmy zmienić nazwę domyślnej metody z buttonName_Click () na coś innego, aby zaspokoić ego gościa, który napisał kod standardy. Do dziś nie wiem, co miał przeciwko skromnemu podkreśleniu

ZombieSheep
źródło
23
Może _ był zepsuty na klawiaturze;)
Roman Plášil
139
buttonNameUnderscoreClick
9
Ma niefortunny efekt uboczny uniemożliwiający użycie PLIKU i LINII do debugowania. Oraz #if __cplusplus extern "C" w plikach nagłówkowych. Oraz typy całkowite w stdint.h. I rozmiar_t.
Steve Jessop
8
Dobrze, że to był C # wtedy
konfigurator
4
Poważnie odradzam podkreślanie (chociaż nie w przypadku OP wymienionym powyżej. To dodatkowe dwa naciśnięcia klawiszy (shift + _), których wolę nie nakładać na mnie, gdy pascal lub obudowa camel wystarczy.
TGnat
92

Całkowicie bezużyteczne konwencje nazewnictwa baz danych. Każda nazwa tabeli musi zaczynać się od numeru. Liczby pokazują, jaki rodzaj danych znajduje się w tabeli.

  • 0: dane używane wszędzie
  • 1: dane używane tylko przez określony moduł
  • 2: tabela przeglądowa
  • 3: kalendarz, czat i poczta
  • 4: logowanie

To sprawia, że ​​trudno jest znaleźć stół, jeśli znasz tylko pierwszą literę jego nazwy. Ponadto - ponieważ jest to baza danych mssql - musimy otaczać nazwy tabel wszędzie nawiasami kwadratowymi.

-- doesn't work
select * from 0examples;

-- does work
select * from [0examples];
Kristof Neirynck
źródło
65
Przepraszam, strasznie przepraszam ...
Kirk Strauser
1
Wow - dobry. Myślę, że użycie Letters nie wchodziło w grę? Nie żeby to też był dobry pomysł, ale przynajmniej nie musisz cytować wszystkich nazw tabel.
Mark Brittingham
zadziwiające ... kto to wymyślił? dba?
dotjoe
90

Robiliśmy projekt w C ++, a kierownikiem zespołu był Pascal.

Mieliśmy więc plik dołączania standardu kodowania, aby przedefiniować całą tę nieznośną składnię C i C ++:

#define BEGIN {
#define END }

ale czekaj, jest więcej!

#define ENDIF }
#define CASE switch

itd. Trudno to sobie przypomnieć po tak długim czasie.

Wymagało to tego, co byłoby doskonale czytelnym kodem C ++ i sprawiło, że stał się nieczytelny dla nikogo z wyjątkiem kierownika zespołu.

Musieliśmy też użyć odwrotnej notacji węgierskiej, tj

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

chociaż, co dziwne, polubiłem to.

billmcc
źródło
22
Tworzenie niemożliwego do utrzymania kodu na przyszłość
rshimoda
2
Poprawna notacja węgierska jest w porządku. Zrobione źle ... och. Właściwy system typów jest lepszy od obu.
Thelema
5
Wiesz, myślę, że jestem z tobą w tej sprawie. Węgierskie brodawki nie są prawie tak niepożądane, gdy są przyczepione do końca w ten sposób.
TED
haha przenosi mnie z powrotem do czasów, kiedy przeszedłem z Pascala na C ++ (około 16 lat temu). Za każdym razem, gdy widziałem {musiałem sobie w myślach powiedzieć „{oznacza POCZĄTEK”. Przynajmniej dla mnie to było tylko w mojej głowie.
thomasrutter
6
Kiedy pracowałem w obsłudze MS VC ++, kilku klientów przesłało napisany w ten sposób kod repro. Zajęło nam trochę czasu, zanim zdaliśmy sobie sprawę, że tak naprawdę było w C ++ (nie zawierały #defines).
JBRWilkinson,
88

W poprzedniej pracy:

  • Tabele „normalne” zaczynają się od T_
  • Tabele „systemowe” (zwykle wyszukiwania) zaczynają się od TS_ (z wyjątkiem sytuacji, gdy tego nie robią, ponieważ ktoś nie miał na to ochoty tego dnia)
  • Tabele odsyłaczy zaczynają się od TSX_
  • Wszystkie nazwy pól zaczynają się od F_

Tak to prawda. Wszystkie pola w każdej tabeli. Abyśmy mogli stwierdzić, że to pole.

Jeromy Irvine
źródło
i nie miałeś specjalnego prefiksu dla pól klucza podstawowego ???
Czimi
2
@Czimi: Zapomniałem o tym wspomnieć. Każda tabela ma pole o nazwie FI_ID używane jako klucz podstawowy.
Jeromy Irvine
31
Holy sh ... T_guy, który wynalazł ten koszmar, powinien zostać zabity z F_gun i wysłany do TSX_hell.
Sergey Skoblikov
3
Mieliśmy tbl i fld dla wszystkich pól i tabel. Zupełnie bezużyteczne ...
konfigurator
5
@configurator: Masz „tbl” dla wszystkich pól i „fld” dla wszystkich tabel? :-)))
Timwi
84

Mój kumpel napotkał tę zasadę podczas pracy w rządzie. Używanie ++ (pre lub post) zostało całkowicie zabronione. Powód: różne kompilatory mogą to interpretować inaczej.

JaredPar
źródło
5
Cóż, w tym momencie równie dobrze możesz się poddać, prawda?
Kirk Strauser
90
Ktoś został ukąszony przez niezrozumienie różnicy między postfiksem a prefiksem, stwierdził błąd kompilatora, a potem wyrządził go innym, myślę.
Bernard
5
Właściwie w pewnych okolicznościach mieli rację. Banowanie wydaje się jednak nieco przesadzone. Weźmy na przykład linię: a [i] = i ++; i może zostać zwiększony, zanim zostanie użyty do indeksowania a lub po. Język tego nie definiuje.
TED
9
Ma rację - kolejność operacji nie jest gwarantowana, gdy używasz tej samej zmiennej w innym miejscu w instrukcji. Po prostu zablokuj potencjalnie niejednoznaczny kod, jednak nie wszystkie jego zastosowania!
Loren Pechtel
2
Równie dobrze może banować, =ponieważ może być używany do wywoływania nieokreślonego zachowania.
konfigurator
81

Połowa zespołu opowiadała się za wcięciem w czterech miejscach; druga połowa opowiadała się za wcięciem z dwoma spacjami.

Jak można się domyślić, standard kodowania wymagał trzech, aby „urazić wszystkich jednakowo” (bezpośredni cytat).

Tim Lesher
źródło
42
Dlatego identyfikacja zakładek jest tak dobra. Każdy może zmienić rozmiar w swoim edytorze;)
xardias
41
Tak, wcięcie tabulatora jest świetne ... dopóki nie otworzysz czyjegoś pliku i nie znajdziesz rzeczy źle wyrównanych, ponieważ spacje zostały pomieszane tam, gdzie nie powinny, lub nie zostały pomieszane tam, gdzie powinny. Potem automatycznie formatujesz i różnice w kontroli wersji stają się brzydkie. Fuj.
Alan Hensel
41
dlatego powinieneś używać tylko tabulatorów do wcięcia i tylko spacji do wyrównywania i nigdy te dwa się nie spotkają. a jeśli zamierzasz dokonać zmiany w białych znakach w pliku, to musi to być jedyna zmiana, jaką wprowadzisz dla tego konkretnego wpisu.
joh6nn
16
... i to nigdy nie działa. : P
Robert P
10
„Obrazić wszystkich jednakowo”… Uwielbiam to. Będę musiał o tym pamiętać, gdy następnym razem będę w jakiś sposób zaangażowany w wojnę o standaryzację wcięć.
Michael Burr
74

Brak możliwości użycia Reflection, ponieważ menedżer twierdził, że wiąże się to ze zbyt dużą „magią”.

leppie
źródło
10
Tak, wygląda na to, że magia jest trudna do utrzymania;) LOL.
Rik
19
To prawdopodobnie właściwa zasada, z niewłaściwych powodów :)
Bobby Jack
71
dla 'magicznej' wydajności odczytu zabijającej niemożliwy do utrzymania, niejasny kod koszmaru. On ma rację.
gbjbaanb
4
Wydaje mi się, że wtedy w ogóle nie wolno było kodować w .Net. W końcu wiele z tego, jak działa framework, odbywa się poprzez refleksję.
NotMe
5
Precz z tymi czarodziejami !! Zawsze w pobliżu, ze swoją magią , kradnąc nam pracę, uwodząc nasze kobiety i deprawując nasze dzieci!
ZJR
71

Najdziwniejsze, jakie miałem, a którego obalenie zajęło mi sporo czasu, było wtedy, gdy właściciel naszej firmy zażądał, aby nasz nowy produkt był tylko IE. Jeśli mógł działać na FireFox, to było w porządku, ale musiał to być tylko IE.

Może nie zabrzmi to zbyt dziwnie, z wyjątkiem jednej małej wady. Całe oprogramowanie było przeznaczone dla niestandardowego pakietu oprogramowania serwerowego, działającego w systemie Linux, a wszystkie komputery klienckie, które kupował nasz klient, to Linux. Nie próbując dowiedzieć się, jak uruchomić Wine (w tamtych czasach, bardzo zawodne) na wszystkich tych komputerach i sprawdzić, czy moglibyśmy uruchomić IE i przeszkolić administratorów, jak debugować problemy z Wine, po prostu nie było to możliwe aby spełnić prośbę właściciela. Problem polegał na tym, że zajmował się projektowaniem stron internetowych i po prostu nie wiedział, jak dostosować witryny internetowe do FireFox.

Prawdopodobnie nie zszokuje Cię wiadomość, że nasza firma zbankrutowała.

Owidiusz
źródło
1
Powiedziałbym, że to dość dziwne.
Brad Gilbert,
14
Trzy okrzyki dla kapitalizmu!
starblue
46
Brawo dla przetrwania najsilniejszych ... ten facet nie zasługiwał na prowadzenie własnego biznesu oprogramowania.
Mark Brittingham
10
Ostatnie zdanie było świetne. Jak można kogoś traktować poważnie, gdy podejmuje takie decyzje?
Mr. Shickadance
54

Używanie generycznych numerowanych nazw identyfikatorów

W mojej obecnej pracy kieruję się dwiema zasadami, które są naprawdę wredne:

Zasada 1: Za każdym razem, gdy tworzymy nowe pole w tabeli bazy danych, musimy dodać dodatkowe pola rezerwowe do wykorzystania w przyszłości. Te rezerwowe pola są ponumerowane (ponieważ nikt nie wie, które dane będą przechowywać pewnego dnia) Następnym razem, gdy będziemy potrzebować nowego pola, najpierw szukamy nieużywanego pola rezerwowego.

W rezultacie otrzymujemy customer.reserve_field_14adres e-mail klienta.

Pewnego dnia nasz szef myślał o wprowadzeniu stolików rezerwowych , ale na szczęście udało nam się go przekonać, żeby tego nie robił.

Zasada 2: Jeden z naszych produktów jest napisany w VB6, a VB6 ma limit całkowitej liczby różnych nazw identyfikatorów, a ponieważ kod jest bardzo duży, ciągle napotykamy ten limit. W ramach „rozwiązania” wszystkie lokalne nazwy zmiennych są numerowane:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

Chociaż to skutecznie omija limit identyfikatorów, te dwie reguły razem prowadzą do pięknego kodu, takiego jak ten:

...

If Lvarbool1 Then
  Lvarbool2 = True
End If

If Lvarbool2 Or Lvarstr1 <> Lvarstr5 Then
  db.Execute("DELETE FROM customer WHERE " _ 
      & "reserve_field_12 = '" & Lvarstr1 & "'")
End If

...

Możesz sobie wyobrazić, jak trudno jest naprawić stary lub czyjś kod ...

Ostatnia aktualizacja: Teraz używamy również „procedur rezerwowych” dla prywatnych członków:

Private Sub LSub1(Lvarlong1 As Long, Lvarstr1 As String)
  If Lvarlong1 >= 0 Then 
    Lvarbool1 = LFunc1(Lvarstr1)
  Else
    Lvarbool1 = LFunc6()
  End If
  If Lvarbool1 Then
    LSub4 Lvarstr1
  End If
End Sub

EDYCJA: Wygląda na to, że ten wzorzec kodu staje się coraz bardziej popularny. Zobacz ten post w The Daily WTF, aby dowiedzieć się więcej: Astygmatyzm :)

Daniel Rikowski
źródło
10
Bez żartów. Założę się, że przejście i usunięcie wszystkich tych zastrzyków SQL zajęło wieczność. ;-)
Kirk Strauser
To jest czyste zło. Jestem pewien, że twój szef / TL jest overlordem tylko czekającym na swoją okazję.
Manuel Ferreria
5
omg, kto do diabła wymyśliłby takie zasady ??? najważniejsze: jak do diabła twój zespół potrafi kodować?
hasen
2
Myślę, że miał na myśli, że domyślnie wybierasz wszystkie pola, więc masz również wszystkie pola „rezerwowe”, bez konieczności ich określania.
Mr. Shickadance
2
maibe możesz użyć wstępnego przetwarzania kodu, w którym napiszesz swój kod używając pełnych nazw zmiennych, a następnie zamień go na "poprawne" przed skompilowaniem czegoś takiego jak '% s / email / reserved_field_12 / g';)
João Portela
53

W moich dniach C ++ nie mogliśmy używać ==,> =, <=, &&, itd., Były do ​​tego makra ...

if (bob EQ 7 AND alice LEQ 10)
{
   // blah
}

chodziło oczywiście o "stare przypadkowe przypisanie w warunkowym błędzie", ale mieliśmy również regułę "wstawianie stałych przed zmienne", więc

if (NULL EQ ptr); //ok
if (ptr EQ NULL); //not ok

Właśnie sobie przypomniałem, najprostszym standardem kodowania, jaki kiedykolwiek słyszałem, było „Pisz kod tak, jakby następny opiekun był okrutnym psychopatą, który wie, gdzie mieszkasz”.

Adam Straughan
źródło
1
rofl .. pisząc fortran w C.
Robert Paulson,
nadal null == zmienna w C #. Wiem, że nie muszę się tym martwić, ale nie mogę się powstrzymać. jeśli widzę to w inny sposób, czuję się zdenerwowany. stare zwyczaje umierają ciężko.
Troy Howard,
Ta ostatnia o psychopacie prawie natychmiast spowodowała śmierć niektórych ludzi.
Pan Shickadance,
31
+1 dla okrutnego psychopaty.
rcollyer
Podczas publikowania kodu na forach czasami używam rzeczy takich jak LT i SHL, aby uniknąć sytuacji, w których operatorzy zostaliby zablokowani jako HTML.
supercat
45

Ogólnie notacja węgierska.

vfilby
źródło
11
Cóż, lubię H / N do kontroli na stronie. Znacznie łatwiej jest znaleźć wszystkie kontrolki pola tekstowego w menu rozwijanym IntelliSense, gdy wszystko, czego muszę szukać, to txtFooBar.
cciotti
20
Notacja węgierska nie jest zła, wystarczy ją odpowiednio używać joelonsoftware.com/articles/Wrong.html
Czimi
1
Poddam się w odniesieniu do kontroli. Wtedy pomocna może być notacja węgierska. Ogólnie uważam jednak, że notacja węgierska jest przestarzała i generalnie nadużywana. Odleciał od pierwotnego zamiaru.
vfilby
9
Okropnie nadużywane, tak. Nie, nie.
Loren Pechtel
2
Wiele osób zaczyna nazwę interfejsu z I, IEnumerable, IList ... w .NET framework in interfejsy zacząć od I.
tuinstoel
43

Miałem wiele głupich zasad, ale niewiele, które uważałem za wręcz dziwne.

Najgłupsza była praca w NASA, nad którą pracowałem na początku lat 90-tych. To była ogromna praca, przy której pracowało ponad 100 programistów. Doświadczeni programiści, którzy napisali standardy kodowania, zdecydowali, że każdy plik źródłowy powinien zaczynać się czteroliterowym akronimem, a pierwsza litera miała oznaczać grupę odpowiedzialną za plik. To był prawdopodobnie świetny pomysł dla starych projektów FORTRAN 77, do których byli przyzwyczajeni.

Był to jednak projekt Ada , z ładną hierarchiczną strukturą bibliotek, więc nie miało to żadnego sensu. Każdy katalog był pełen plików zaczynających się od tej samej litery, po których następowały 3 kolejne bezsensowne litery, podkreślenie, a następnie część nazwy pliku, która miała znaczenie. Wszystkie pakiety Ada musiały zaczynać się od tej samej pięcioznakowej brodawki. Klauzule „use” Ada również nie były dozwolone (prawdopodobnie dobra rzecz w normalnych okolicznościach), więc oznaczało to, że każde odwołanie do dowolnego identyfikatora, który nie był lokalny dla tego pliku źródłowego, również musiało zawierać tę bezużyteczną brodawkę. Prawdopodobnie powinno nastąpić powstanie w tej sprawie, ale cały projekt był obsadzony przez młodszych programistów i świeżo zatrudnionych po studiach (ja jestem tym drugim).

Typowa instrukcja przypisania (już szczegółowa w Adzie) wyglądałaby mniej więcej tak:

NABC_The_Package_Name.X := NABC_The_Package_Name.X + 
  CXYZ_Some_Other_Package_Name.Delta_X;

Na szczęście byli przynajmniej wystarczająco oświeceni, aby pozwolić nam na ponad 80 kolumn! Mimo to obiekt kurzajka był na tyle znienawidzony, że stał się szablonowym kodem na początku wszystkich plików źródłowych, aby użyć „przemian” Ady, aby pozbyć się brodawki. Dla każdego zaimportowanego („zwiędłego”) pakietu byłaby jedna zmiana nazwy. Lubię to:

package Package_Name renames NABC_Package_Name;
package Some_Other_Package_Name renames CXYZ_Some_Other_Package_Name;
--// Repeated in this vein for an average of 10 lines or so

To, co bardziej kreatywne z nas zrobiło, to próba użycia brodawki do stworzenia bardzo rozsądnej (lub głupiej) nazwy opakowania. (Wiem, o czym myślisz, ale niedozwolone były eksplikacje i wstydź się! To obrzydliwe). Na przykład, był w C spólnej grupy kodu, i potrzebne do pakietu do interakcji z W grupie orkstation. Po burzy mózgów z gościem ze stacji roboczej zdecydowaliśmy się nazwać nasze pakiety, aby ktoś potrzebujący obu musiał napisać:

with CANT_Interface_Package;
with WONT_Interface_Package;
TED
źródło
1
Mając to wszystko, NASA nadal nie mogła się dowiedzieć, czy
liczyć
16
Cholera, i naprawdę myślałem, że zamierzasz pójść na całość i użyć konwencji nazewnictwa pakietów CUN * _ i W * NK_. Przepraszam, mam wolno palące się, wybuchowe, tekstowe tourettes. Ale twoje były dużo, dużo, zabawniejsze!
defmeta
41

Kiedy zacząłem pracować w jednym miejscu i zacząłem wprowadzać kod do kontroli źródła, mój szef nagle podszedł do mnie i poprosił mnie, abym przestał tak wiele robić. Powiedział mi, że odradza się wykonywanie więcej niż jednego zatwierdzenia dziennie dla programisty, ponieważ zaśmieca to kontrolę źródła. Po prostu gapiłem się na niego ...

Później zrozumiałem, że powodem, dla którego nawet do mnie w tej sprawie wpadł, jest to, że serwer SVN wysyłał mu (i 10 innych kierowników wyższego szczebla) pocztę za każde zatwierdzenie dokonane przez kogoś. Zaśmiecając kontrolę źródła, domyśliłem się, że zapamiętał swoją skrzynkę pocztową.

Avihu Turzion
źródło
Podświetl wiadomość e-mail, kliknij usuń, gotowe
TheLQ
Zdecydowanie nie jestem fanem tak zwanych „masywnych check-inów”. Zatwierdź, gdy zmiana zostanie zakończona, takie proste. Lubię też zobowiązać się pod koniec dnia pracy, ponieważ wymusza to w mojej głowie, że mój kod powinien być kompilowalny i przynajmniej działać z resztą projektu dla innych programistów następnego ranka.
Jesse C. Slicer
2
Wykorzystaj to, co najlepsze z obu światów - zobowiązuj się do lokalnego oddziału, gdy nie chcesz czegoś stracić. Rebase i zgniataj te commity, kiedy będziesz gotowy, aby umieścić je w master. (wybacz terminologię git - jestem pewien, że jest to możliwe w Mercurial i wielu innych systemach)
Michael Anderson
Zgadzam się z powyższym. Jest to zakorzeniony problem związany z kontrolą wersji. Nie ma rozwiązania technologicznego. Rozważałem przejście na git-svn, co pozwoliłoby mi pracować z lokalnym repozytorium, a następnie przekazywać rzeczy do repozytorium SVN, ale to wystarczyłoby, by wysłać e-maile o wszystkich zatwierdzeniach dnia w jednej ogromnej partii i rozwiązałoby to nic dla moich szefów.
Avihu Turzion
34

Wykonywanie wszystkich zapytań do bazy danych za pośrednictwem procedur składowanych w Sql Server 2000. Od złożonych zapytań wielotabelowych po proste, takie jak:

select id, name from people

Argumentami za procedurami były:

  • Występ
  • Bezpieczeństwo
  • Konserwowalność

Wiem, że temat zabiegu jest dość kontrowersyjny, więc zapraszam do oceny mojej odpowiedzi negatywnie;)

azkotoki
źródło
2
Łatwość konserwacji można poprawić, jeśli nazwy tabeli i kolumn nie są unikalne, ale nazwy SP są. Może to ułatwić znajdowanie odniesień do kodu. Jeśli są jakieś inne, lepsze korzyści konserwacyjne, to nie jestem ich świadomy. Bezpieczeństwo jest głównym powodem korzystania z usług SP.
Jeffrey L Whitledge
2
Zgadzam się, że dla celów ogólnych nie jest to 100% wtf, ale zobacz ten link: codinghorror.com/blog/archives/000292.html
azkotoki
2
„Bezpieczeństwo jest głównym powodem używania SP” Nie. Nic w SP w SQL Server nie jest bezpieczniejsze. Są bezpieczne tylko wtedy, gdy są wywoływane jako zapytania paremeterized, co można zrobić równie dobrze z dynamicznym SQL.
Flory
4
Nie, sprocesy są przydatne. Chociaż czasami może to być uciążliwe, w końcu piszesz lepszy, bardziej wielokrotnego użytku interfejs bazy danych. Twoja dba może również łatwiej analizować problemy z wydajnością i może zaktualizować system produkcyjny bez zmiany kodu aplikacji. Nie opowiadam się jednak za logiką biznesową w sprocesach.
Robert Paulson
4
Zakopywanie zapytań w skompilowanym kodzie to taki ból, jestem w 100% za polityką 100% sprocs dla samej abstrakcji
annakata
33

Na 1000 wierszy kodu musi przypadać 165 testów jednostkowych (niekoniecznie zautomatyzowanych). To działa w jednym teście na mniej więcej każde 8 linii.

Nie trzeba dodawać, że niektóre wiersze kodu są dość długie, a funkcje zwracają te wskaźniki, aby umożliwić łączenie w łańcuch.

harriyott
źródło
W jaki sposób test jednostkowy nie jest zautomatyzowany.
pupeno
Jak wymyślili magiczną liczbę 8?
Rohit
1
Co się stanie, jeśli masz 164? 166?
Daniel Daranas
8
Bardziej jak 6 linii.
rekurencyjne
1
Myślę, że zależy to również od tego, jak drobnoziarniste są twoje testy. Rozważałbym function(x).should == 2pojedynczy test, podczas gdy inni połączyliby 10 z nich razem i nazwaliby to pojedynczym testem.
Orion Edwards
30

Musieliśmy posortować wszystkie funkcje w klasach alfabetycznie, aby były „łatwiejsze do znalezienia”. Nieważne, że jaź spadł. To było za dużo kliknięć.

(ten sam kierownik techniczny napisał aplikację, aby usunąć wszystkie komentarze z naszego kodu źródłowego).

Nat
źródło
3
Cóż, jasne, bo w końcu komentarze są po prostu bałaganem ... i pomyśl, ile cykli preprocesor oszczędza podczas kompilacji! (Aplikacja jest jeszcze zabawniejsza niż reguła. Dobra.)
ojrac
7
Oczywiście! Deweloperzy powinni pisać kod, nie tracić czasu na pisanie komentarzy :)
Daniel Rikowski
2
Tak! Komentarze spowalniają kompilację!
Greg D,
2
Niemniej jednak uważam, że dobrą zasadą jest sortowanie członków według typu (pola, właściwości, metody) i według nazwy
abatishchev
3
Sortuję metody, członków itp. Alfabetycznie w odpowiednich grupach, zarówno w nagłówku, jak i źródle ... ale tylko dlatego, że mam obsesję.
Jon Purdy,
29

Mniej więcej w 1987 roku podjąłem pracę w firmie, która mnie zatrudniła, ponieważ byłem jednym z nielicznych ludzi, którzy wiedzieli, jak korzystać z Revelation. Revelation, jeśli nigdy o nim nie słyszałeś, było w istocie implementacją systemu operacyjnego Pick na PC - który, jeśli nigdy o nim nie słyszałeś, ma swoją nazwę od swojego wynalazcy, bajecznie nazwanego Dick Pick. Wiele można powiedzieć o Pick OS, większość z nich jest dobra. Wielu dostawców supermini (przynajmniej Prime i MIPS) korzystało z Pick lub ich własnych niestandardowych implementacji.

Ta firma była sklepem Prime, a do swoich wewnętrznych systemów korzystała z informacji. (Nie, tak naprawdę miała na imię: to była implementacja Pick'a przez Prime.) Mieli kontrakt ze stanem na zbudowanie systemu opartego na PC i poświęcili około roku na projekt Revelation, zanim facet wykonał całą pracę, który był także ich dyrektorem MIS, zdecydował, że nie może już wykonywać obu prac i zatrudnił mnie.

W każdym razie ustalił szereg standardów kodowania dla ich oprogramowania opartego na Prime, z których wiele wywodzi się z dwóch podstawowych warunków: 1) użycia 80-kolumnowych głupich terminali i 2) faktu, że ponieważ Prime nie nie miał edytora wizualnego, napisał swój własny. Ze względu na magiczną przenośność kodu Pick, przeniósł swój edytor do Revelation i zbudował cały projekt na komputerze, używając go.

Revelation, oczywiście, działając na PC, miał doskonały edytor pełnoekranowy i nie sprzeciwiał się, kiedy przekroczyłeś kolumnę 80. Jednak przez pierwsze kilka miesięcy tam byłem, nalegał, żebym użył jego edytora i jego standardy.

Tak więc pierwszym standardem było to, że każdy wiersz kodu musiał być komentowany. Każda linia. Bez wyjątków. Jego uzasadnieniem było to, że nawet jeśli Twój komentarz mówił dokładnie to, co właśnie napisałeś w kodzie, konieczność komentowania oznaczała, że ​​przynajmniej dwa razy pomyślałeś o tym wierszu. Ponadto, jak radośnie zaznaczył, dodał polecenie do edytora, które sformatowało każdą linię kodu, aby można było umieścić komentarz na końcu linii.

O tak. Kiedy komentowałeś każdy wiersz kodu, był to komentarz na końcu wiersza . Krótko mówiąc, pierwsze 64 znaki w każdym wierszu były przeznaczone na kod, potem był średnik, a następnie było 15 znaków na opisanie tego, co robiły twoje 64 znaki. Krótko mówiąc, używaliśmy konwencji języka asemblera do formatowania naszego kodu Pick / Basic. Doprowadziło to do rzeczy, które wyglądały tak:

EVENT.LIST[DATE.INDEX][-1] = _         ;ADD THE MOST RECENT EVENT
   EVENTS[LEN(EVENTS)]                 ;TO THE END OF EVENT LIST

(Właściwie po 20 latach w końcu zapomniałem składni kontynuacji wiersza R / Basic, więc mogło wyglądać inaczej. Ale masz pomysł.)

Dodatkowo, ilekroć trzeba było wstawić komentarze wielowierszowe, obowiązuje zasada, że ​​używasz skrzynki na kwiaty:

************************************************************************
**  IN CASE YOU NEVER HEARD OF ONE, OR COULDN'T GUESS FROM ITS NAME,  **
**  THIS IS A FLOWER BOX.                                             **
************************************************************************

Tak, te zamykające gwiazdki w każdym wierszu były wymagane. W końcu, jeśli używałeś jego edytora, było to tylko proste polecenie edytora, aby wstawić skrzynkę kwiatową.

Zmuszenie go do złagodzenia się i umożliwienia mi użycia wbudowanego edytora Revelation było sporą bitwą. Na początku nalegał, po prostu dlatego, że takie były zasady. Kiedy sprzeciwiłem się, że a) znałem już edytor Revelation b) był znacznie bardziej funkcjonalny niż jego edytor, c) inni programiści Revelation mieliby tę samą perspektywę, odparł, że gdybym nie trenował na jego edytorze, nie zrobiłbym tego kiedykolwiek będzie w stanie pracować na bazie kodu Prime, co, jak oboje wiedzieliśmy, nie nastąpi, dopóki piekło pozostanie niezamarznięte. W końcu się poddał.

Ale standardy kodowania były ostatnie. Zwłaszcza komentarze do skrzynki z kwiatami były głupią stratą czasu, a on walczył ze mną zębami i paznokciami, mówiąc, że gdybym użył odpowiedniego edytora, utrzymanie ich byłoby całkowicie łatwe. (Całość stała się dość pasywno-agresywna.) W końcu cicho się poddałem i odtąd cały kod, który przyniosłem do recenzji kodu, zawierał jego cenne komentarze do skrzynki na kwiaty.

Pewnego dnia, kilka miesięcy po rozpoczęciu pracy, kiedy udowodniłem, że jestem bardziej niż kompetentny (zwłaszcza w porównaniu z niezwykłą paradą innych programistów, którzy przeszli przez to biuro, gdy tam pracowałem), patrzył mi przez ramię, gdy ja zadziałało, a on zauważył, że nie używam komentarzy do skrzynki na kwiaty. Och, powiedziałem, napisałem program do formatowania kodu źródłowego, który konwertuje moje komentarze na twój styl, kiedy je drukuję. To łatwiejsze niż utrzymywanie ich w edytorze. Otworzył usta, pomyślał przez chwilę, zamknął je, odszedł i nigdy więcej nie rozmawialiśmy o standardach kodowania. Po tym obie nasze prace stały się łatwiejsze.

Robert Rossney
źródło
14
+1 dla programu formatującego komentarze podczas drukowania
BradC
1
NIGDY nie należy nadużywać skrzynki na kwiaty. Nienawidzę tego, kiedy czytam kod, ok, fajny komentarz, a potem widzę skrzynkę z kwiatami krzyczącą „TO ROBI TO, TO I TO”
TheLQ,
26

W mojej pierwszej pracy wszystkie programy w C, bez względu na to, jak proste czy złożone, miały tylko cztery funkcje. Miałeś główną, która wywoływała po kolei pozostałe trzy funkcje. Nie pamiętam ich nazw, ale były one czymś w rodzaju begin (), middle () i end (). begin () otworzyła pliki i połączenia z bazą danych, end () zamknęła je, a middle () zrobił wszystko inne . Nie trzeba dodawać, że middle () to bardzo długa funkcja.

Aby było jeszcze lepiej, wszystkie zmienne musiały być globalne.

Jednym z moich najbardziej dumnych wspomnień z tej pracy jest udział w powszechnym buncie, który doprowadził do zniszczenia tych standardów.

abeger
źródło
2
Wydaje
Musiał być zaprojektowany przez nauczyciela angielskiego.
jodie
Musi być zaprojektowany przez programistę COBOL.
bruno
Musiałem używać dużo goto.
nowy123456,
26

Zewnętrznie napisany standard kodowania w C, który miał regułę „nie polegaj na wbudowanym priorytecie operatorów, zawsze używaj nawiasów”

W porządku, oczywistym zamiarem było zakazanie:

a = 3 + 6 * 2;

na korzyść:

a = 3 + (6 * 2);

Chodziło o to, że zostało to wymuszone przez narzędzie, które działało zgodnie z regułami składni języka C, które to „=”, „==”, „”. a dostęp do tablicy są operatorami. Więc kod taki jak:

a[i].x += b[i].y + d - 7;

musiało być zapisane jako:

((a[i]).x) += (((b[i]).y + d) - 7);
soru
źródło
2
może (((a) [(i)]). x) + = ((((b) [(i)]). y) + (d)) - (7)); ?
Behrooz