it-swarm-eu.dev

Nejhorší standard kódování, jaký jste kdy museli dodržovat?

Už jste někdy museli pracovat na standardech kódování, které:

  • Výrazně jste snížili svou produktivitu?
  • Byly původně zahrnuty z dobrých důvodů, ale byly ponechány dlouho poté, co se původní zájem stal irelevantní?
  • Byli v seznamu tak dlouho, že nebylo možné si je všechny pamatovat?
  • Mysleli jste si, že se autor pokoušel spíše opustit značku, než aby podporoval správnou praxi kódování?
  • Nevěděl jsi, proč jsou zahrnuty?

Pokud ano, jaké je vaše nejoblíbenější pravidlo a proč?


Některé příklady zde

76
finnw

To může prohrábnout několik peří, ale standardy, které nařizují pokřivené blokové komentáře v horní části každé metody, mě vždycky zbavují.

1) Jsou vždy zastaralé, protože jsou příliš daleko od kódu, který si skutečná práce všimne při aktualizaci věcí. Špatné komentáře jsou horší než žádné komentáře.

2) Často pouze opakují informace, které jsou již obsaženy v nástroji pro ovládání zdroje, pouze méně přesné. Například: Last Modified by, seznam datum/důvody změny.

97
JohnFx

Měl jednou profesora, který požadoval, máme alespoň jeden komentář pro každý řádek kódu.

//Set x to 3
var x = 3;

//if x is greater than 2
if(x>2){

    //Print x
    Print(x);
}

Bylo to docela směšné.

129
Fishtoaster

Naše společnost (C #) kódovací standard požadoval rozsáhlé použití #REGIONů (pro ty, kteří to neví, označuje bloky zdrojového kódu, které budou v Visual Studio sbaleny na jeden řádek). V důsledku toho jste vždy otevřeli to, co se zdálo být pěkně strukturovanou třídou, jen abyste našli hromady a hromady odpadu smetené pod hluboce vnořenými koberci konstrukcí # REGION. Dokonce byste měli oblasti kolem jednotlivých linek, např. musí se rozložit oblast LOG, aby se našlo jediné prohlášení Loggeru. Samozřejmě, mnoho metod přidaných poté, co byl vytvořen nějaký region, bylo také umístěno do oblasti „špatného“ regionu. Horor. Horor.

Regiony jsou jednou z nejhorších funkcí, které byly do Visual Studio přidány; podporuje spíše strukturování povrchu než skutečnou strukturu OO).

Dnes zabíjím #REGIONy na dohled.

103
Cumbayah

V jednom zaměstnání jsme byli v databázi nuceni použít nějakou podivnou formu maďarská notace .

Nepamatuji si podrobnosti, ale z paměti muselo každé jméno pole obsahovat:

  • Žádné samohlásky
  • Všechna velká písmena
  • Odkaz na tabulku
  • Indikátor typu dat
  • Délka dat
  • Nulovatelný ukazatel

Například sloupec s křestním jménem osoby může být nazýván: PRSNFRSTNMVC30X (Tabulka osob, sloupec Jméno, Varchar 30 znaků, Null)

80
Damovisa

Trvá na tom, aby za všemi závorkami následoval komentář k tomu, co rovnátka končí:

např:

for (int i = 0; i < 10; i++)
{
    if (foo > bar)
    {
        printf("Foo greater than bar");
    } // End If (foo > bar)

    while (baz)
    {
       farb();
    } // End while (baz)
} // End For
48
Kris Erickson
#define AND  &&
#define OR   ||
#define EQ   ==

řekl nuff.

37
Niall C.
  • Názvy lokálních proměnných jsou všechna malá písmena bez podtržítek

Skutečné příklady: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts, potentialmsceventref

The New York Times váží se :

„Prostory slov by neměly být považovány za samozřejmost. Starověká řečtina, první abeceda, která obsahuje samohlásky, by mohla být dešifrována bez mezer Wordu, pokud by to znít, a udělala by bez nich. […] Latinská slova přestala od druhého století také oddělovat slova. Ztráta je záhadná, protože pro čtení neodděleného textu musí oko pracovat mnohem tvrději. Jak ale vysvětlil paleograf Paul Saenger, starověký svět nechtěl „usnadnit a urychlit čtení“. ““
37
John Siracusa

Byl jsem požádán softwarovým vůdcem společnosti, aby udělal "jednoduché, znovundundant code ". Bylo například zakázáno přidávat nový parametr k existující funkci. Místo toho jste museli funkci duplikovat a ponechat původní nedotčenou, abyste se vyhnuli regresím. Samozřejmě žádné formální testování (ztráta čas).

Rovněž nám bylo zakázáno používat slučovací software; každý soubor mohl být upraven najednou pouze jedním programátorem. Software pro kontrolu revizí byl samozřejmě science fiction.

Nejšťastnější den mého života byl, když byl vyhozen (domnívejte se, že je velmi, velmi obtížné někoho vyhodit v Itálii).

36
Wizard79

Veškerá interakce s databází musí probíhat prostřednictvím ložené procedury . Může to mít smysl, pokud žijeme v roce 1997 a ne v roce 2010.

Právě jsem si uvědomil, že to ve skutečnosti pokrývá všechna kritéria původní otázky:

  • Výrazně jste snížili svou produktivitu? ŠEK. Prosím, použijte ORM .
  • Byly původně zahrnuty z dobrých důvodů, ale byly ponechány dlouho poté, co se původní zájem stal irelevantní? ŠEK. Manažer byl vývojářem databázového serveru před 1000 lety a vložil tento standard kódování do.
  • Byli v seznamu tak dlouho, že nebylo možné si je všechny pamatovat? ŠEK. To zahrnovalo „co nejvíce logiky by mělo být uloženo v databázi, jak je to možné“.
  • Mysleli jste si, že se autor pokoušel spíše opustit značku, než aby podporoval správnou praxi kódování? ŠEK. Udržuje návrat do správce jako vývojář databázového serveru ex.
  • Nevěděl jsi, proč jsou zahrnuty? ŠEK.
36
Jaco Pretorius

Není dovoleno používat STL nebo jiné standardní knihovny C++, protože CTO věřil, že „my“ to dokážeme lépe a rychleji. I základní konstrukty jako seznamy a třída řetězců.

33
David B

Maďarská notace

Ukázka extrahovaná z „ vysvětlení úmluvy pojmenování identifikátoru maďarského notace Charlesem Simonyim " na MSDN.

1 #včetně „sy.h“ 
 2 vnější int * rgwDic; 
 3 vnější int bsyMac; 
 4 struct SY * PsySz (char sz []) 
 6 {
 7 char * pch; 
 8 int cch; 
 9 struct SY * psy, * PsyCreate (); 
 10 int * pbsy; 
 11 int cwSz; 
 12 nepodepsaných wHash = 0; 
 13 pch = sz; 
 14, zatímco (* pch! = 0 
 15 wHash = (wHash11 + * pch ++; 
 16 cch = pch-sz; 
 17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash]; 
 18 pro (; * pbsy! = 0; pbsy = & psy -> bsyNext) 
 19 {
 20 char * szSy; 
 21 szSy = (psy = (struct SY *) & rgwDic [* pbsy]) -> sz; 
 22 pch = sz; 
 23 zatímco (* pch == * szSy ++) 
 24 {
 25 if (* pch ++ == 0) 
 26 návrat (psy); 
 27} 
 28} 
 29 cwSz = 0; 
 30 pokud (cch> = 2) 
 31 cwSz = ( cch-2/sizeof (int) +1; 
 32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) -rgwDic; 
 33 Zero ((int *) psy, cwSY); 
 34 bltbyte (sz, psy-> sz, cch + 1); 
 35 návrat (psy) ; 
 36}
31
JD Frias

Jednou jsem pracoval na projektu, ve kterém vedoucí projektu nařídil, aby každá proměnná - KAŽDÁ proměnná - byla předponou "v". Takže vCount, vFirstName, vIsWarranty atd.

Proč? "Protože pracujeme ve VBScriptu a všechno je stejně Variant".

WTF.

28

Téměř zapomněl tento:

Citace od manažera:

Neopravujte ani dokumentujte žádné chyby, které najdete ve svém vlastním kódu. Zákazník nám v příštích několika letech zaplatí, abychom je identifikovali a opravili.

Nebylo to pro spotřební software, ale pro jednu velkou organizaci. Netřeba dodávat, že zákazník zaplatil roky poté. Může to vypadat triviálně, ale snažit se ignorovat chyby je těžší než je najít.

26
David B

Vynucené komentáře XML ke všem neveřejným metodám, konstantám, výčtu a vlastnostem.

Vedlo to k nějakému přeplněnému kódu, zejména protože konečný výsledek byl, že lidé buď jen zasáhli /// a vytvořili prázdný pahýl pro komentáře nebo nainstalovali GhostDoc a nechali jej přidat automaticky generované komentáře:

/// <summary>
/// Validations the handler.
/// </summary>
/// <param name="propertyName">The property name.</param>
public void ValidationHandler(string propertyName) 
{
   // whatever
}

[Upravit] Důvod, proč to zmiňuji jako směšný standard, není proto, že si myslím, že komentáře k metodám jsou hloupé, ale protože kvalita těchto komentářů nebyla žádným způsobem vynucena a vyústila v vytvoření mnoha a spousty nepořádků v kódových souborech. . Existují lepší způsoby, jak vytvářet smysluplné kódové dokumenty, než slepé, musí mít požadavek na vytvoření komentáře.

24
Adam Lear

Ne opravdu kódovací standard, ale měli jsme soubor v řízení zdroje nazvaný 'changelog.txt'

Pokaždé, když jste provedli kontrolu, musíte ručně přidat položku do tohoto souboru. Tato položka byla číslo revize Subversion a váš komentář k checkin.

Když začal nový CTO a někdo mu to řekl, okamžitě učinil výkonné rozhodnutí a řekl: „Už to nebudeme dělat“ a soubor smazal. Stalo se to už roky.

23
Jim A

Některá místa, se kterými jsem pracoval, trval na tom, aby místo mazání nepoužívaného nebo zastaralého kódu komentovali. Místo důvěryhodnosti VCS pro historii atd. To bylo bolestivě udržováno v souborech prostřednictvím komentovaného kódu.

Velký problém, který jsem s tím našel, je, že jste často netušili, proč byl kód komentován. Bylo to proto, že někteří dev aktivně prováděli změny a chtěli si to nechat pro informaci, nebo už to nebylo potřeba?

20
Jeremy Wiebe

Nejhorší standard kódování, na kterém jsem se kdy podílel, jsou kódové základny, které vůbec neměly. Raději bych se řídil kódovacím standardem, se kterým naprosto nesouhlasím, než prací v kódových základnách, kde vůbec žádný není. Je mnohem obtížnější naučit se nové části základny kódu.

17
JaredPar

Vynucení inline komentářů pro řízení verzí bylo o nejbezprostřednějším standardu kódování, který jsem ignoroval.

//Changed on 2/2/2004 By Ryan Roberts for work item #2323332
Dim Some Horrendous VB
//End Changed

Oracle DBA, která trvala na správném použití mezery a zároveň „udržovala“ databázi s vysoce namítanou tabulkou, která měla přes 200 polí a 40 spouště, se blíží.

16
Ryan Roberts

Provedl jsem kontrolu kódu na projektu vedeném prvním časovačem C++, který rozhodl, že všechny funkce členů třídy by měly být předponovány názvem třídy a viditelností:

class MyClass
{
   public:
      void MyClass_Public_setValue(int value);
}
14
user1006

Před lety jsem měl práci, kde celý náš kód musel být zarovnán vlevo - bez odsazení. Chlap, který přišel s touto politikou, neměl rád, když se musel dívat na dlouhé řádky kódu vodorovně nahoru a dolů, což mu přirovnával k hraní ping-pongu očima.

9
Jeremy

Požaduje se odsazení celého kódu čtyřmi mezerami;)

9
RedFilter

Ještě jeden výbuch z mé minulosti.

Citace od majitele společnosti:

Nebude napsán žádný kód s použitím interpretačních jazyků, protože jsem ztratil 25 milionů v tomto {expletive} projektu psaném v Javě.

Projekt Java) byl systém obchodování s akciemi navržený tak, aby zvládl několik desítek akcií, které se nyní používaly ke zpracování tisíců. Místo řešení konstrukčních nedostatků nebo špatného hardwaru byla celá společnost nucena převést všechny aplikace, které nejsou C/C++, na C/C++, a veškerý nový vývoj musel být v C/C++. Interpretační jazyky znamenaly nic, co nebylo kompilováno, a vlastník považoval kompilaci pouze za Assembler, C a C++.

Pro společnost s 800 osobami, ve které byla většina kódu v Java a Perl), to znamenalo, že celá společnost strávila většinu času během příštích několika let přepsáním dokonale jemného kódu v C/C++.

Docela vtipné, asi dvacet let před tímto fiaskem, jsem byl v jiné společnosti, ve které technický vedoucí rozhodl, že naše třídicí logika (byla to Bubble Sort), musí být překódována v assembleru, místo aby byla nahrazena Quick Sort, protože - - Algoritmy nezlepšují výkon. Jediným způsobem, jak zlepšit výkon, bylo přepsat stejnou logiku v assembleru.

V obou případech jsem odešel krátce po sestupu diktátů.

8
David B

Toto je více příklad toho, jak to, že nebude mít standardy kódování, může bolet.

Smluvní dodavatel pracující ve velké bance trval na tom, že dodržování standardů je vůbec nejlepší. Aplikace byla napsána v dBase/Clipper, pro který byl jediným vývojářem a samozřejmě přišel se standardem.

  • Všechno je velké. Mám na mysli všechno, včetně vzácných komentářů, které učinil.
  • Žádné odsazení.
  • Proměnné pojmenování bylo něco podle APRGNAME. A = rozsah proměnné, např. P pro veřejnost, PRG = první tři znaky zdrojového souboru, který proměnnou vytvořil, NAME = název proměnné u zbývajících 6 znaků, které dBase/Clipper povolil.
  • První 4 a poslední 4 řádky zdrojového kódu byly 80 * dlouhé. Proč? Takže slyšel, jak tiskárna s bodovou maticí zahajuje a dokončuje tisk souboru. Paměť je celý program byl vytištěn přes mainframe týdně, 20 000 stránek.
  • Jsem si jist, že jich bylo mnohem víc, co se mi podařilo zbavit mozku.

V té fázi jsem byl velmi novým samoučeným programátorem, ale věděl jsem dost, abych neposlouchal šíleného vědce a nedostal se odtud do pekla, než jsem požádal o převzetí projektu.

A ano, řekli jsme managementu, jak špatné jsou tyto praktiky, ale vždy jsme dostali obvyklou „platili tomuto dodavateli nejvyšší dolar, musí vědět, o čem mluví“.

8
Tim Murphy

Jako mnoho programátorů (ale ne dost) nenávidím dekorace kódu. Rozzuřilo mě to, když musím použít předponu dolaru ($) pro názvy proměnných nebo podtržítka pro soukromé proměnné, a to i bez getterů/setterů. Pokud potřebujete ozdobit svůj kód, abyste tomu rozuměli, musíte se dostat do pekla!

6
Adam Harte

To bylo před dlouhou dobou - přesněji 1976. Můj šéf nikdy neslyšel o Edsgerovi Dijkstrovi ani nečetl problém CACM, ale odněkud slyšel zvěsti, že „GOTO je špatná“, takže jsme nemohli používat GOTO v našich programech COBOL. To bylo předtím, než COBOL přidal „konec if“, takže v té době měl pouze dvě a půl ze tří klasických kontrolních struktur (sekvence, pokud/pak/jinde, provádějte (tj. Dělat)). Neochotně povolil GOTO v našich základních programech a větvil instrukce v našich jazykových programech Assembler.

Je nám líto, že se jedná o jakýsi příběh „musel jsi tam být“. Pokud vím, každý jazyk vynalezený od roku 1976 má odpovídající kontrolní struktury, takže nikdy nebudete muset používat GOTO. Jde ale o to, že šéf nikdy nevěděl, PROČ byla GOTO považována za škodlivou, nebo který jazyk byl infantilní porucha a které fatální onemocnění.

6
Mark Lutton

Pracoval jsem na projektu, který byl hlavním požadavkem architekta napsat (příliš) explicitní kód. Jeden z nejhorších příkladů, které jsem v kódu našel (a on s radostí souhlasil), byl následující.

private string DoSomething( bool verbose )
{
    if ( verbose ) { return someString; }
    else if ( !verbose ) { return otherString; }
    else { return string.Empty; }
}

I ReSharper vám řekl, že je to špatně!

6
Jax

Chvíli jsem pracoval s webovým systémem, kde všechny předané parametry musely být pojmenovány P1, P2, P3 atd. V pekle nemám šanci vědět, na co jsou, bez rozsáhlé dokumentace.

Také - ačkoli to není striktně kódovací standard - ve stejném systému, měl být každý jednotlivý soubor pojmenován xyz0001.ext, xyz0002.ext, xyz0003.ext atd. - kde xyz byl kódem samotné aplikace.

6
CB Du Rietz

Při mé poslední práci by „standardy“ byly velmi silným pojmem toho, co mi dal ten, kdo mě najal. Programování webových stránek v ColdFusion a SQL, dostalo se mi požadavků na kódování jako:

  • Nepoužívat zahrnuje. Líbí se mi jedna velká stránka
  • Vždy oddělujte slova v názvech proměnných a sloupců podtržítky (kromě isactive, křestního jména atd.)
  • Nikdy nepoužívejte zkratky - vždy pište křestní jméno (často psal křestní jméno a tak dále)
  • Nepoužívejte matoucí názvy (například amount_charged a charge_amount, které měřily různé, ale související věci)
  • Nepoužívejte DIVs a používejte minimální CSS - místo toho použijte vnořené tabulky (jednou jsem našel hloubku asi šesti vrstev) .
  • Neukládejte žádné dotazy do mezipaměti. Vůbec.
  • Chystáte se použít proměnnou na více než jedné stránce? Rozsah aplikace.
  • Každá stránka je vlastní blok try/catch. Nepotřebujeme/nechceme zpracovat globální chyby.

Jakmile jsem odešel, začal jsem je měnit.

6
Ben Doom

Téměř jakýkoli druh konvence pojmenování proměnných, který opakuje typ proměnné, mutabilitu, obor/třídu úložiště a/nebo jejich odkaz. V podstatě jakýkoli konstrukt vlastní jazyku. V moderním IDE to již není nutné v 21. století (a podle mého názoru se původně vyřešilo špatné rozložení/praxe kódu). To zahrnuje maďarský zápis a jeho varianty:

  • bigBlobStr - Řetězec.
  • bigBlobStrCurLocPtr - Ukazatel na „aktuální umístění“ v uvedeném řetězci.
  • someIntArray - pole celých čísel

nebo věci jako:

  • e_globalHeading - Externí proměnná
  • sg_prefPoolSz - Statická globální proměnná

a samozřejmě jeden z nejvzdálenějších očí v OOP, m_ pro všechny členy. Pokud si nemůžete být jisti/sledovat, jaké proměnné jsou lokální, členové, globály, statické nebo konečné/konstituční, můžete můžete psát nejasný, špatně faktorovaný, špagetový kód.

To je úplně jiné, než když určíte konvenci předpony/přípony pro věci jako min, max, avg, velikost, počet, index, atd., Což je v pořádku.

4
charstar

Jsem nucen mít dokumentaci XML pro všechny třídy a členy třídy. Včetně soukromého. Jsem nařízen používat výchozí komentáře ghostdoc.

public class User 
{
    /// <summary>
    /// the _userID
    /// </summary>
    private int _userID;
}
4
Carl Bergquist

Nejhorší standard, jaký jsem kdy musel čelit:

StyleCop pro C #

Vezměte všechny zbytečné standardy a vložte je do nástroje, který běží v době kompilace namísto v IDE v době návrhu).

//this is not a legal comment.
//  nor is this

// musí následovat jedno místo, pokud provádíte ladění, použijte //// k komentování kódu. Vlastnosti musí také obsahovat komentáře „trojitého lomítka“ a musí číst „Gets or Sets xxxxx“ doplněné o tečku na konci a správně kapitalizované.

Ugh. Možná existuje bod s široce publikovanými API, ale moje hlavní hovězí maso je, že to určitě mohli postavit jako plugin a la R #.

4
MIA

Krátce jsem pracoval v Japonsku. Dělal jsem složité matematické kódování. Firemní kódovací standard neměl absolutně žádné komentáře. Bylo to těžké, protože bych rád přidal několik komentářů, které vysvětlují složité výpočty a nezapomínám na sebe po několika týdnech. Litujte dalšího chlapa, který po mně přijde, aby pochopil, co kód dělá.

Bylo to poprvé, co jsem viděl, že kódování komentářů bylo zakázáno.

4
softveda

V předchozí úloze měl standard C # v deklaracích mít alespoň dvě mezery mezi názvem typu a názvem proměnné, název metody musí začínat na dalším řádku od modifikátorů přístupu a návratového typu, před jakýmkoli otevřeným interpunkčním znaménkem musí být mezera. (závorka nebo závorka), všechna deklarace proměnných na začátku metody, deklarace oddělené od přiřazení a odsazení byly 3 mezery. Příklad:

private static int
ThisIsTheMethod (int  code, string  message)
{
   int  i;
   int  j;
   int  k;

   for (i = 0; i < message.Length; i++)
   {
      if (message [i] == '!') return -1;
   }

   j = SomeMethod (code);
   k = OtherMethod (j);

   return k;
}

Přestože bylo ošklivé, fungovalo to s tou výjimkou, že Visual Studio opravdu nechtělo věci takovým způsobem a po kódování „za normálních okolností“ bylo přeformátování tímto způsobem více zvláštní krok.

3
Jesse C. Slicer

v mé předchozí práci, kterou jsem rád před 3 měsíci ukončil:

databáze:

  • Názvy tabulek musely být velkými písmeny.
  • Názvy tabulek musely být předpony TBL_
  • Pole musela být předpona: DS_ (pro varchar, což nedávalo smysl) NU_ pro čísla CD_ pro ("bitová pole") DT_ pro data
  • databázová pole musela být také velká [CD_ENABLED]
  • stejné se jmény sp [SP_INFINITY_USER_GROUPS_QRY] a názvy databází [INFINITY]
  • zmínil jsem se, že sp jména byla vlastně taková? Předpona SP_, potom název databáze SP_INFINITY_, potom název tabulky, SP_INFINITY_USER_GROUPS, co se od toho ve skutečnosti očekávalo (QRY, UPD, DEL, INS), ježíš, ani mě nezačal s dotazy, které nebyly pouze dotazy CRUD.
  • všechna textová pole musela být jednoznačně varchar (MAX).
  • čísla byla buď int nebo double, i když jste mohli použít jiný typ.
  • "boolean" pole (bit) byla int, žádný důvod.
  • uložené procedury musely být předpony sp_productname_

asp.net/c #/javascript

  • KAŽDOU jednotlivou funkci bylo třeba zabalit v pokusu {} catch {}, takže aplikace „explodovaly“ (přinejmenším to byl oficiální důvod), i když to vedlo k tomu, že věci nefungují a nemají ponětí, proč.
  • parametry musí být předpony s p, např. pCount, pPage
  • proměnné rozsahu musely být předpony s w (jako v „pracujícím“, co to sakra vůbec znamená?)
  • statika sg atd.
  • vše, co post framework 1.1 bylo offlimits, jako byste měli nějaké skutečné využití pro linq a generiky. (Udělal jsem to místo, abych je donutil, aby mi umožnil používat jquery, alespoň v tom jsem uspěl).
3
bevacqua

Povinné zahrnutí, rozšíření $ Log $ informací, když naše SCC byla zastaralá verze PVCS. Měli jsme nějaké soubory, kde $ $ $ informace byla mnohem, mnohem delší než skutečný kód v souboru.

3
Ian C.

Veškerý výstup ve skriptu PHP skript) musí být opakován řádek po řádku.

<?php
echo "<div id=\"foo\">";
echo "<h1>" . $title . "</h1>";
echo paragraphs($body); // just an example
echo "</div>";
?>

(Zřeknutí se odpovědnosti: Nemusel jsem to následovat, ale tým, se kterým jsem pracoval, to udělal.)

3
sholsinger

nejhorší byl projekt (C++), kde třídy byly předponovány zkratkami modulů.

Například pokud bylo něco v modulu MessagePassing a součástí mechanismu Response, mohlo by se to nazvat MESPAS_RESSomeobject.

Práce na tomto kódu mě přiměla k tomu, abych vysekl oči.


Není to nejhorší, ale moje současná práce vyžaduje c_ předpony na třídách a e_ předpony pro výčty. Nic pro strukturu. ale _t postfix na typedefs. Je to také docela ošklivé.

Jo, a funkce hlavičky komentáře v BOTH. Ha CPC (prohlášení a definice), které se samozřejmě téměř nikdy neshodují.

3
µBio

Moje nejoblíbenější je pravidlo „Žádná magická čísla“ bezradně aplikovaná. Například jsem jednou viděl komentář v revizi kódu, který uvádí, že tímto řádkem kódu bylo porušeno pravidlo „Žádná magická čísla“:

if (fscanf(file, "%s %hd",name, nbrObject ) != 2 )

Myslím, že recenzent chtěl konstantu namísto 2, například #define TWO 2

3
Chalie Wax

Názvy našich metod musely být ve formátu 'Get/Set/Add/Delete' + jméno cílového objektu + jména všech parametrů.

GetUserById(userId);
InsertUser(user);
DeleteUser(user);

Fér dost - ale pravidlo velmi přísné. Složité typy objektů neměly být zkráceny a operace vždy musely vyjmenovávat každý parametr požadavku, bez ohledu na to, jak směšné:

GetCustomerOrderDeliveryDetailsByCustomerIdAndDeliveryDateAndOrderStatus(...

Po přidání úplných názvů proměnných (které neměly být zkráceny) si dokážete představit, jak dlouho byly některé jednoduché metody volání. Slovo zabalené dlouho.

3
Kirk Broadhurst

Tam, kde nyní pracuji, je proces pojmenování proměnných pro cokoli, co se týká databáze, následující:

  • $ sql za výpisy
  • $ result pro výsledky dotazu

Což dává smysl, když jsem však uvedl, že konvence byla příliš obecná a že by to skončilo proměnlivým překrýváním, odpověď byla „use result_alt or sql_alt“. Moje pocity k komentování, pokud jste použili správná jména proměnných, která naznačují účel, nebudete potřebovat komentáře ani tolik z nich.

2
chrisw

Nejhorší kódovací standard, jaký jsem kdy musel dodržovat, byl „Všechny názvy proměnných objektů musí být předpony 'obj' '. Jednalo se o velký projekt Java, takže téměř všechno byl objekt. Nejhorší bylo, že téměř každý přijal politiku pojmenování proměnných jednoduše předplněním „obj“ ke jménu třídy. Skončili jsme s věcmi jako Person objPerson1 v celém kódu. Jednou jsem proti tomu vznesl námitky a nechal jednoho z dalších vývojářů vložit, že se jí konvence líbila, „protože pak nemusím myslet na své proměnné názvy“. To místo bylo skutečnou hrůzou ...

2
TMN

Možná kódovací standard společnosti Huawei Software Company. Chtějí, abyste prohlásili všechny členy za veřejné :))

2
LostMohican

Psaní všeho v Fortran ( WATFOR , FORTRAN 77 ), kde ve sloupci 1 není mezera byl komentář a kompilátor vás nevaroval, pokud jste překročili sloupec 72, jen tiše ignoroval.

Alespoň jsem to strávil jen sedm let.

2
Mark Thalman

S tím, co se rovná souborům záhlaví C, v projektu Java=).

Rozhraní existují z několika dobrých důvodů, ale tento standard nařídil rozhraní (foo.Java) pro každou jednotlivou třídu (fooImpl.Java) zda to dávalo smysl nebo ne. Spousta věcí pro udržení synchronizace, úplné přerušení Eclipse click-to-method, zbytečné práce.

Systém sestavení jej vynutil, ale neumím si představit, jaký byl původní účel. Naštěstí jsme ho pustili do nového kódu, když jsme přešli na nový systém pro správu verzí a budování systému, ale stále je toho hodně.

Současně jsme také vykopali hloupý zvyk verzí-control-info-in-file-comments, který byl povinný.

2
user763

V současné době pracuji ve společnosti, kde jsou dotazy SQL prováděny pomocí tzv. „Třídy požadavků“. Jak směšné:

V "include/request.class.php"

class RequestClass
{
    // ... some code.

    public function getUser($where)
    {
        global $initrequest

        $sql = $initrequest['users']
        $sql.= $where;

        return execute($sql);
    }
}

In initrequest.php:

$initrequest['users'] = 'SELECT * FROM users WHERE ';

A to bylo nazýváno z aplikace tímto způsobem:

$request = new request();
$tmpquery = "username = $username AND password = $password";
$request->getUsers($tmpquery);

A mají podobný systém šablon založený na „blocích“, ale po pochopení toho, co zde ukazuji, jsem neustále tlačil do koše celý náš software a přepisoval ho do Symfony.

2
Arie Deckelmann

V Main () není povolen více než jeden řádek kódu

Profesor na mé univerzitě, kterého jsem měl to štěstí, že netrvala na tom, aby její juniorští studenti C # nemohli do vstupního bodu svých konzolových aplikací vložit více než jeden řádek kódu.

To dává rozumné množství smyslu při vývoji profesionální aplikace, ale pokud je jediným záměrem programu vzít několik základních vstupů a vytvořit jediný výstup (tj. MultiplyTwoNumbers.exe), takový požadavek je více bolest než dobrý.

Kromě „jednoho řádku kódu v hlavní“ profesor také trval na tom, že každý řádek kódu má popisný komentář a každý člen třídy má verbálně popisné jméno. Body se ztratily, pokud profesor neměl pocit, že tyto požadavky byly splněny „přiměřeně“.

Studenti, kteří byli nuceni se držet těchto pravidel, byli (téměř) všichni nováčci v programování, a tak vidím hodnotu vynucování chování jako dobré pojmenování a oddělení zájmů. Přesto jsem jako učitelka .NET na mé univerzitě neustále pomáhala svým studentům splnit tyto všední a nepříjemné požadavky dlouho poté, co dostali svůj kód pracující .

Podle mého názoru by při vzdělávání někoho, kdo je zcela novým v programovacím jazyce, mělo být první starostí to, jak vytvořit kód, nikoli jak vytvořit standardy kód.

1
Nathan Taylor

Msgstr "Nepoužívat styl komentáře C++ pro kód C".

I když to může mít stále malou hodnotu, pokud existuje riziko, že budete muset svůj program přenést na zastaralý kompilátor, je to většinou jen problém. Moje největší námitka je, že je opravdu obtížné používat /* pro zablokování komentáře u velké oblasti během vývoje nebo testování jednotky. */

1
AShelly

Můj přednášející ADA v unii trval na tom, že každá metoda má komentář nastíňující předpoklady, postconditions a velký O. Největší problém s tím bylo, že se nikdy neobtěžoval vysvětlit, co velký O ve skutečnosti znamená, a nikdy nekontroloval, jestli jsou správné, takže jsem se ocitl v kopírování a vložení tohoto komentáře blokuje stokrát.

-- Method_Name
-- PRECONDITIONS: none
-- POSTCONDITIONS: none
-- O(n) = n
1
Christopher

(C++)

Všechny vrácené hodnoty musely být HRESULTS (standardní - ne uživatelem definované hresults)

To bylo jen před několika lety. Starší lidé byli stále tak poblázněni COM a nikdy nečetli ani se nedozvěděli o jiných osvědčených postupech. Bylo to úžasně uzavřené prostředí.

Stejné místo také neumožňovalo používání STL.

Odjel jsem krátce poté, co jsem zjistil, že úklid.

1
Tim

V Visual Basic 6. jsme museli přidat jednotlivé bloky zpracování chyb. Žádné vyjímky. Tak jsme to udělali.

Potom jsme museli vysvětlit, proč byly části aplikace pomalé.

1
Chris Brandsma

Největším podrážděním je pravděpodobně omezený prostor pro názvy proměnných/objektů. Pracoval jsem v relativně moderním, proprietárním jazyce, který umožňuje pouze 10 znaků. Jedná se o pozdržení oproti původním verzím.

Čistým výsledkem je, že skončíte s legračními konvencemi pojmenování, které definují, co má reprezentovat každá postava vaší povolené 10. Něco jako:

  • 1-3: předpona aplikace
  • 4-6: předpona modulu
  • 7-9: uživatelem definovaná sekce
  • 10: číslo jen v případě, že dvě ... nebo 9 jsou pojmenovány totéž.
1
Brad Gardner

Moje oblíbená by musela být směrnice pro pojmenování databáze, kterou se v současné době snažíme dodržovat. Všechny tabulky používané pro mnohočetné vztahy by měly být pojmenovány pomocí názvů propojených tabulek a musí být doplněny „Link“. A samozřejmě, žádné množení názvů tabulek.

  • Řádky? Ani náhodou. Mělo by se to nazývat OrderProductLink
  • Přátelé? Ani náhodou. Mělo by to být PersonPersonLink
1
CodingInsomnia

Být nucen přidat popis souboru do každého souboru (je to C # projekt).

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="User.cs" company="Company">
//   Copyright (C) 2009 Company. All rights reserved.
// </copyright>
// <summary>
//   The user.
// </summary>
// --------------------------------------------------------------------------------------------------------------------
0
Carl Bergquist

V jedné společnosti jsme museli psát technickou dokumentaci, která vysvětlila, jak budeme psát funkčnost. Bylo to rychle zastaralé, protože jste při programování v UML nepřemýšleli o všem.

0
IAdapter