Jaka była najdziwniejsza zasada kodowania, którą musiałeś przestrzegać? [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięty 9 lat temu . zamknięte. To pytanie i jego odpowiedzi są zamknięte , ponieważ pytanie jest off-topic, ale ma znaczenie historyczne. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.

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

Jaka była najdziwniejsza zasada kodowania, do której byłeś zmuszony?

I przez najdziwniejsze mam na myśli najzabawniejsze, najgorsze, lub po prostu dziwne.

W każdej odpowiedzi proszę wspomnieć, w jakim języku, jaki był rozmiar twojej drużyny i jakie złe skutki spowodował ty i twój drużynowo

 173
Author: Brian R. Bondy, 2008-10-20

30 answers

I hate it, gdy użycie wielu zwrotów jest zakazane.

 434
Author: Simon Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 11:43:35

Odwrotne wcięcia. Na przykład:

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

I:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }
 333
Author: 2 revs, 2 users 97%code_g03s_g00d,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:22:00

Może nie najbardziej dziwaczny, ale naprawdę nienawidzę, gdy muszę przedrukować nazwy tabel z 'tbl'

 326
Author: Galwegian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 11:41:46

Prawie każdy rodzaj zapisu węgierskiego.

Problem z węgierską notacją polega na tym, że jest ona bardzo często źle rozumiana. Pierwotny pomysł polegał na prefiksie zmiennej tak, aby znaczenie było jasne. 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.

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

 248
Author: Toon Krijthe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 18:17:48

No ternary operator allowed where I currently work:

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

... bo nie każdy to "rozumie". Gdybyś mi powiedział: "nie używaj tego, ponieważ musieliśmy je przepisać, gdy struktury zbyt się skomplikują "(zagnieżdżone operatory trójdzielne, ktoś?), wtedy zrozumiem. Ale kiedy powiesz mi, że niektórzy deweloperzy ich nie rozumieją... um... Jasne.

 240
Author: Jarrett Meyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 12:07:26

Aby nigdy nie usuwać żadnego kodu podczas wprowadzania zmian. Kazano nam komentować wszystkie zmiany. Należy pamiętać, że używamy kontroli źródła. Ta polityka nie trwała długo, ponieważ deweloperzy byli w zamieszaniu o to i jak to uczyni kod nieczytelny.

 239
Author: George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 15:19:31

Pracowałem kiedyś pod tyranią potężnego króla VB .

The VB King był czystym mistrzem MS Excel i VBA, a także baz danych (stąd jego nazwisko: grał z Excelem, podczas gdy programiści pracowali z kompilatorami, a wyzwanie mu w bazach danych może mieć negatywny wpływ na twoją karierę...).

Oczywiście, jegoogromne umiejętności dały mu unikalną wizję problemów rozwojowych i rozwiązań zarządzania projektami: podczas gdy nie do końca standardy kodowania w najściślejszym sensie, VB King regularnie miał nowe pomysły na "standardy kodowania" i "najlepsze praktyki", które próbował (i często się udało) nam narzucić. Na przykład:

  • Wszystkie tablice C / C++ rozpoczynają się od indeksu 1, zamiast 0. W rzeczywistości użycie 0 jako pierwszego indeksu tablicy jest przestarzałe i zostało zastąpione przez intuicyjne zarządzanie indeksami tablicy w Visual Basic 6.

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

  • Ponieważ "wszystkie funkcje zwracają kod błędu" nie jest praktyczne dla funkcji zwracających typy znaczące, wszystkie funkcje mają kod błędu jako pierwszy parametr [in/out].

  • Cały nasz kod sprawdzi kody błędów ( doprowadziło to do najgorszego przypadku VBScript if-indentation, jaki kiedykolwiek widziałem w mojej karierze... Oczywiście, ponieważ klauzule "else" nigdy nie były obsługiwane, nie ma błędu został znaleziony dopiero za późno ).

  • Ponieważ pracujemy z C++ / COM, od Dziś będziemy kodować wszystkie nasze funkcje użytkowe DOM w Visual Basic.

  • Błędy ASP 115 są złe. Z tego powodu będziemy używać przy wznowieniu błędu w naszym kodzie VBScript/ASP, aby ich uniknąć.

  • XSL-T jest językiem zorientowanym obiektowo. Użyj dziedziczenia, aby rozwiązać swoje problemy (głupia niespodzianka prawie złamała mi szczękę dzień).

  • Wyjątki nie są używane i dlatego powinny zostać usunięte. Z tego powodu, odznaczymy pole wyboru z prośbą o wywołanie destruktora w przypadku odwinięcia wyjątku (zajęło kilka dni, aby ekspert znalazł przyczynę wszystkich wycieków pamięci, a on prawie wpadł w szał, gdy dowiedział się, że dobrowolnie zignorowali (i ukryli) jego notatkę techniczną o ponownym sprawdzeniu opcji, wysłaną garściami kilka tygodni przed ).

  • Złap wszystkie wyjątki w Kom interfejs naszych modułów COM, i pozbywać się ich po cichu (w ten sposób, zamiast upaść, moduł tylko wydaje się być szybszy... Błyszczące!... Ponieważ wykorzystaliśmy opisaną powyżej obsługę błędów über, zajęło nam to nawet trochę czasu, aby zrozumieć, co naprawdę się dzieje... Nie możesz mieć zarówno prędkości, jak i poprawnych wyników, prawda?).

  • Od dzisiaj nasza baza kodów podzieli się na cztery oddziały. Będziemy zarządzać ich synchronizacją i integrować wszystkie poprawki/ewolucje błędów przez ręka.

Wszystkie oprócz tablic C/C++ , Funkcje VB Dom utility i XSL-T jako język OOP zostały zaimplementowane pomimo naszych protestów. Oczywiście, z biegiem czasu, niektóre zostały odkryte, ahem , złamane i całkowicie porzucone.

Oczywiście, Król VB nigdy nie ucierpiał z tego powodu: wśród wyższego kierownictwa pozostał ekspertem technicznym "top gun"...

Wywołało to zabawne efekty uboczne, jak widać po za linkiem jaki jest najlepszy komentarz w kodzie źródłowym, jaki kiedykolwiek spotkałeś?

 204
Author: paercebal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22

W latach 80. / 90. pracowałem dla firmy zajmującej się symulatorami samolotów, która używała Fortranu. Nasz kompilator FORTRAN miał limit 8 znaków dla nazw zmiennych. Standardy kodowania firmy zarezerwowały pierwsze trzy z nich dla informacji o stylu zapisu węgierskiego. Musieliśmy więc spróbować stworzyć sensowne nazwy zmiennych z zaledwie 5 znakami!

 131
Author: David Arno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 11:57:02

Pracowałam w miejscu, w którym doszło do fuzji dwóch firm. "Dominujący" miał główny serwer napisany w K & R C (tj. pre-ANSI). Zmusili zespoły Javy (z obu biur-w sumie 20 programistów) do użycia tego formatu, który radośnie zignorował 2 filary "brace debate" i od razu przeszedł do szaleństwa: {]}

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }
 107
Author: Michael Easter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 12:34:34

Zakazany:

while (true) {

Dozwolone:

for (;;) {
 104
Author: bh213,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 20:52:56

Mój przyjaciel - nazwijmy go CodeMonkey - dostał swoją pierwszą pracę po studiach [ Wiele lat temu] robiąc własny rozwój w COBOLu. Jego pierwszy program został odrzucony jako "niezgodny z naszymi standardami" , ponieważ był używany... [drżenie!] zagnieżdżone polecenia IF

Standardy kodowania zakazały używania zagnieżdżonych instrukcji IF

Teraz CodeMonkey nie był nieśmiały i był pewien swoich umiejętności, więc uparcie pytał wszystkich w łańcuchu i w przejściu do ołtarza, dlaczego zasada ta istniała. Większość twierdziła, że nie wie, niektórzy wymyślili coś o "czytelności" i wreszcie 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 poleceń zagnieżdżonych IF.

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

CodeMonkey udało się zmienić standardy-w końcu!

 101
Author: Steven A. Lowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-16 05:49:13

Kiedyś pracowałem nad projektem, w którym podkreślenia były zakazane. I mam na myśli całkowicie zakazane. Tak więc w aplikacji C # winforms, za każdym razem, gdy dodaliśmy nowy program obsługi zdarzeń (np. dla przycisku), musieliśmy zmienić nazwę domyślnej metody z buttonName_Click() na coś innego, tylko po to, aby zadowolić ego faceta, który napisał standardy kodowania. Do dziś Nie wiem, co on miał przeciwko skromnemu akcentowi

 97
Author: ZombieSheep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 12:02:58

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

  • 0: dane, które są używane wszędzie
  • 1: Dane używane tylko przez określony moduł
  • 2: Tabela wyszukiwania
  • 3: kalendarz, Czat i poczta
  • 4: logowanie

To sprawia, że trudno znaleźć tabelę, jeśli znasz tylko pierwszą literę jej nazwy. Również-ponieważ jest to baza mssql - musimy otoczyć wszędzie tablice z nawiasami kwadratowymi.

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

-- does work
select * from [0examples];
 92
Author: Kristof Neirynck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 16:52:00

Pracowaliśmy nad projektem C++, a kierownikiem zespołu był Pascal.

Więc mieliśmy standard kodowania pliku include, aby przedefiniować całą tę brzydką składnię C i C++:

#define BEGIN {
#define END }
Ale czekaj, to nie wszystko!
#define ENDIF }
#define CASE switch

Itd. Ciężko to zapamiętać po tylu latach.

Wymagało to tego, co byłoby doskonale czytelne w C++ i uczyniło go nieczytelnym dla każdego, z wyjątkiem lidera zespołu.

Musieliśmy również użyć odwrotnej notacji Węgierskiej, tj.

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

Chociaż dziwnie ja polubiłem to.

 90
Author: billmcc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-23 23:16:52

W poprzedniej pracy:

  • tabele"normalne" rozpoczynają się od T_
  • tabele" systemowe " (Zwykle lookupy) zaczynają się od TS_ (chyba, że nie, bo ktoś nie miał ochoty tego dnia)
  • tabele odsyłaczy rozpoczynają się od TSX_
  • Wszystkie nazwy pól rozpoczynają się od f_

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

 88
Author: Jeromy Irvine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-13 05:04:20

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

 84
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 13:01:50

Połowa zespołu preferowała wcięcie czteroprzestrzenne; druga połowa preferowała wcięcie dwuoprzestrzenne.

Jak można się domyślić, standard kodowania wymagał trzech, tak aby "obrazić wszystkich równo" (bezpośredni cytat).

 81
Author: Tim Lesher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-16 15:53:46

Nie jest w stanie użyć odbicia, ponieważ menedżer twierdził, że wiąże się to z zbyt dużą ilością "magii".

 74
Author: leppie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 11:49:58

Najdziwniejsze, jakie miałem, i które zajęło mi sporo czasu, było to, gdy właściciel naszej firmy zażądał, aby nasz nowy produkt był TYLKO IE. Gdyby to działało na Firefoksie, to było OK, ale to musiał być TYLKO IE.

To może nie zabrzmieć zbyt dziwnie, poza jedną małą wadą. Całe oprogramowanie było na zamówienie pakietu oprogramowania serwerowego, działającego na Linuksie, a wszystkie pudełka klienta, które klient kupował, były linuksowe. Krótko o tym, jak zdobyć wino (w tamtych czasach bardzo zawodne) uruchamianie i uruchamianie na wszystkich tych polach i sprawdzanie, czy możemy uruchomić IE i przeszkolić ich administratorów, jak debugować problemy z Wine, po prostu nie było możliwe spełnienie prośby właściciela. Problem polegał na tym, że zajmował się projektowaniem stron internetowych i po prostu nie wiedział, jak sprawić, by strony internetowe były zgodne z Firefoksem.

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

 71
Author: Ovid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 08:48:11

Używanie ogólnych numerowanych nazw identyfikatorów

W mojej obecnej pracy mamy dwie zasady, które są naprawdę wredne:

Reguła 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 pola rezerwowe są ponumerowane (ponieważ nikt nie wie, jakie dane będą przechowywane pewnego dnia) następnym razem, gdy potrzebujemy nowego pola, najpierw szukamy nieużywanego pola rezerwowego.

Więc kończymy z customer.reserve_field_14 zawierającym adres e-mail z klient.

Pewnego dnia nasz szef myślał o wprowadzeniu tabel rezerwowych, ale na szczęście mogliśmy go przekonać, żeby tego nie robił.

Reguła 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, stale napotykamy ten limit. Jako "rozwiązanie" Wszystkie nazwy zmiennych lokalnych są numerowane:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

Chociaż to skutecznie omija limit identyfikatorów, te dwie zasady połączone prowadzą do pięknego kodu takiego jak:

...

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

EDIT: wygląda na to, że ten wzór kodu jest staje się coraz bardziej popularny. Zobacz ten The Daily WTF post, aby dowiedzieć się więcej: astygmatyzm :)

 54
Author: Daniel Rikowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

W moich czasach C++ nie wolno nam było używać ==,>=,

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

Było to oczywiście do czynienia z "starym przypadkowym przypisaniem w Bugu warunkowym", jednak my również mieliśmy regułę "stawiaj stałe przed zmiennymi", 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 " napisz kod tak, jakby następnym opiekunem był złośliwy psychopata, który wie, gdzie mieszkasz."

 53
Author: Adam Straughan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-11 23:40:41

Notacja węgierska w ogóle.

 45
Author: vfilby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 11:46:02

Miałem wiele głupich zasad, ale nie wiele, które uważałem za całkowicie dziwne.

Najgłupsza była praca NASA, którą pracowałem na początku lat 90-tych. To była ogromna praca, z ponad 100 deweloperami. Doświadczeni programiści, którzy napisali standardy kodowania, zdecydowali, że każdy plik źródłowy powinien zaczynać się od czteroliterowego akronimu, a pierwsza litera musiała oznaczać grupę, która była odpowiedzialna za plik. To był prawdopodobnie świetny pomysł na stary FORTRAN 77 projektów, do których zostały wykorzystane.

Był to jednak projekt Ada , z ładną hierarchiczną strukturą biblioteki, więc nie miało to żadnego sensu. Każdy katalog był pełen plików zaczynających się na tę samą literę, a następnie 3 kolejne nonsensowne litery, podkreślenie, a następnie część nazwy pliku, która miała znaczenie. Wszystkie pakiety Ada musiały zaczynać się od tego samego pięcioznakowego brodawki. Klauzule Ada " use " też nie były dozwolone (prawdopodobnie dobra rzecz w normalnych okolicznościach), więc oznaczało to każde odniesienie do jakiegokolwiek identyfikatora, który nie był lokalny do tego pliku źródłowego również musiało zawierać ten bezużyteczny brodawka. Prawdopodobnie powinno być powstanie z tego powodu, ale cały projekt był obsadzony przez młodszych programistów i świeżo po studiach nowych pracowników(ja jestem tym ostatnim).

Typowe polecenie przypisania (już w Ada) wyglądałoby 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 na tyle oświeceni, że pozwolili nam na ponad 80 kolumny! Mimo to obiekt wart był na tyle znienawidzony, że stał się kodem boilerplate na górze wszystkich plików źródłowych, aby użyć Ada "renames", aby pozbyć się brodawki. Dla każdego zaimportowanego ("withed") pakietu będzie jedna zmiana nazwy. Tak:
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

Tym, co bardziej kreatywne wśród nas było Próbowanieużyć brodawki, aby stworzyć sensowną (lub głupią) nazwę pakietu. (Wiem o czym myślisz, ale nie wolno ci było się wstydzić! To obrzydliwe). Na przykład: byłem w grupie Common code i musiałem stworzyć pakiet do interfejsu z w orkstation group. Po burzy mózgów z gościem ze stacji roboczej, zdecydowaliśmy się nazwać nasze pakiety tak, aby ktoś, kto potrzebuje obu, musiał napisać:

with CANT_Interface_Package;
with WONT_Interface_Package;
 43
Author: T.E.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:47:34

Kiedy zacząłem pracować w jednym miejscu i zacząłem wprowadzać mój kod do kontroli źródła, mój szef nagle podszedł do mnie i poprosił, żebym przestał się tak angażować. Powiedział mi, że odradza się wykonywanie więcej niż 1 commit dziennie dla programisty, ponieważ wpływa to na kontrolę źródła. Po prostu się na niego gapiłem...

Później zrozumiałem, że powodem, dla którego on nawet przyszedł do mnie w tej sprawie, jest to, że serwer SVN wysyła mu (i 10 innych wysokich dyrektorów) pocztę za każdy commit, który ktoś robi. Zaśmiecając źródło, domyśliłem się, że naprawił swoją skrzynkę pocztową.

 41
Author: Avihu Turzion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-21 14:40:32

Wykonywanie wszystkich zapytań do bazy danych za pomocą procedur składowanych w Sql Server 2000. Od złożonych zapytań wielostolikowych do prostych, takich jak:

select id, name from people

Argumenty przemawiające za procedurami były następujące:

  • wydajność
  • bezpieczeństwo
  • Konserwacja

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

 34
Author: azkotoki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-31 14:00:56

Na 1000 linii kodu musi być 165 testów jednostkowych (niekoniecznie zautomatyzowanych). To działa w jednym teście dla mniej więcej co 8 linii.

Nie trzeba dodawać, że niektóre linie kodu są dość długie, a funkcje zwracają ten Wskaźnik, aby umożliwić łączenie.

 33
Author: harriyott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-20 13:01:09

Musieliśmy posortować wszystkie funkcje w klasach Alfabetycznie, aby "łatwiej było je znaleźć". Nieważne, że ide ma listę. To było za dużo kliknięć.

(ten sam Tech lead napisał aplikację, która usuwa wszystkie komentarze z naszego kodu źródłowego).

 30
Author: Nat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-21 02:47:59

W 1987 roku podjąłem pracę w firmie, która mnie zatrudniła, ponieważ byłem jednym z niewielu ludzi, którzy wiedzieli, jak używać Objawienia. Objawienie, jeśli nigdy o nim nie słyszałeś, było zasadniczo implementacją systemu operacyjnego Pick na PC - który, jeśli nigdy o nim nie słyszałeś, otrzymał swoją nazwę od swojego wynalazcy, bajecznie nazwanego Dicka Picka. Wiele można powiedzieć o systemie operacyjnym Pick, większość z nich jest dobra. Wiele sprzedawców supermini (przynajmniej Prime i MIPS) używało Picka, lub ich własnych niestandardowe wdrożenia it.

Ta firma była głównym sklepem, a do swoich wewnętrznych systemów wykorzystywali informacje. (Nie, to była naprawdę jego nazwa: to była implementacja Picka Prime ' a.) Mieli kontrakt z Państwem na zbudowanie systemu opartego na PC i włożyli około roku w ich projekt Objawienia, zanim facet wykonujący całą pracę, który był również ich błędnym dyrektorem, zdecydował, że nie może już wykonywać obu zadań i zatrudnił mnie. / Align = "center" bgcolor = "# e0ffe0 " / cesarz Chin / / align = center / standardy kodowania dla ich oprogramowania opartego na Prime, z których wiele wynikało z dwóch podstawowych warunków: 1) korzystania z 80-kolumnowych durnych terminali i 2) faktu, że Prime 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 z jego wykorzystaniem.

Rewelacja, oczywiście, będąc opartym na PC, miał doskonale dobry edytor pełnoekranowy i nie sprzeciwiał się, gdy przeszedłeś kolumna 80. Jednak przez pierwsze kilka miesięcy byłem tam, nalegał, abym korzystał z jego edytora i jego standardów.

Więc pierwszym standardem było to, że każdy wiersz kodu musiał być skomentowany. Każda linia. Bez wyjątków. Jego uzasadnieniem było to, że nawet jeśli twój komentarz powiedział dokładnie to, co właśnie napisałeś w kodzie, konieczność komentowania oznacza, że przynajmniej dwa razy myślałeś o linijce. Ponadto, jak radośnie zauważył, dodał do edytora polecenie, które formatowało każdy linijkę kodu, abyś mógł umieścić komentarz na końcu wiersza.

O tak. Kiedy komentowałeś każdą linijkę kodu, było to za pomocą komentarzy end-of-line . Krótko mówiąc, pierwsze 64 znaki w każdej linii były dla kodu, potem był średnik, a następnie miałeś 15 znaków, aby opisać to, co twoje 64 znaki. Krótko mówiąc, do sformatowania kodu Pick/Basic używaliśmy konwencji języka asemblacji. To doprowadziło 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 od lat w końcu zapomniałem o składni linii r / Basic-kontynuacja, więc mogło to wyglądać inaczej. Ale masz pomysł.)

Dodatkowo, za każdym razem, gdy trzeba było wstawiać komentarze Wielowierszowe, zasada była taka, że używa się pudełka z kwiatami:

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

Tak, te zamykające gwiazdki na każdej linii były wymagane. W końcu, jeśli użyłeś jego edytora, To było tylko proste polecenie edytora, aby wstawić pudełko z kwiatami.

Namówienie go do ustąpienia i umożliwienia mi korzystania z wbudowanego edytora Revelation było dość Bitwa Na początku nalegał, tylko 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 deweloperzy Revelation mieliby tę samą perspektywę, odparł, że gdybym nie trenował na jego edytorze, nigdy nie byłbym w stanie pracować nad Prime codebase, co, jak oboje wiedzieliśmy, nie wydarzy się tak długo, jak długo piekło pozostanie odmrożone. W końcu się poddał.

Ale kodowanie standardy były ostatnie. W szczególności komentarze z pudełka kwiatowego były głupią stratą czasu. walczył ze mną, mówiąc, że gdybym tylko użył odpowiedniego edytora, utrzymanie ich byłoby całkowicie łatwe. (Całość stała się dość pasywno-agresywna.) W końcu po cichu poddałem się i od tego czasu wszystkie kody, które przyniosłem do recenzji kodu, miały jego cenne komentarze w pudełku z kwiatami.

Pewnego dnia, kilka miesięcy do pracy, kiedy udowodniłem, że jestem więcej niż Kompetentny (szczególnie w porównaniu z niezwykłą paradą innych programistów, którzy przeszli przez to biuro, gdy tam pracowałem), patrzył mi przez ramię, gdy pracowałem i zauważył, że nie używam komentarzy z pudełka kwiatowego. Powiedziałem, że napisałem program do formatowania kodu źródłowego, który konwertuje Moje komentarze na twój styl, kiedy je wydrukuję. To łatwiejsze niż utrzymywanie ich w edytorze. Otworzył usta, pomyślał przez chwilę, zamknął je, odszedł, a my nigdy nie rozmawialiśmy o standardach kodowania jeszcze raz. Po tym obie nasze prace stały się łatwiejsze.

 29
Author: Robert Rossney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-16 02:06:20

W mojej pierwszej pracy, wszystkie programy C, bez względu na to, jak proste lub złożone, miały tylko cztery funkcje. Miałeś główny, który nazwał pozostałe trzy funkcje z kolei. Nie pamiętam ich nazw, ale były czymś w stylu begin (), middle () I end (). begin () otwiera pliki i połączenia z bazą danych, end () je zamyka, a middle () robi Wszystko inne. Nie trzeba dodawać, że middle() było Bardzo długą funkcją.

I żeby było jeszcze lepiej, wszystkie zmienne musiały być globalne.

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

 26
Author: abeger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-27 21:55:51

Zewnętrznie napisany standard kodowania C, który miał regułę "nie polegaj na wbudowanym priorytecie operatora, Zawsze używaj nawiasów"

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

a = 3 + 6 * 2;

Za:

a = 3 + (6 * 2);

Rzecz w tym, że zostało to wymuszone przez narzędzie, które postępowało zgodnie z regułami składni C, które '=', '==', '.'i dostęp do tablicy są operatorami. Więc kod jak:

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

Musiało być napisane jako:

((a[i]).x) += (((b[i]).y + d) - 7);
 26
Author: soru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 16:49:40