Takip etmek zorunda kaldığın en kötü kodlama standardı? [kapalı]


77

Hiç aşağıdaki standartların kodlanması için çalışmak zorunda kaldınız mı:

  • Verimliliğinizi büyük oranda düşürdünüz mü?
  • Başlangıçta iyi nedenlerle dahil edildi mi, ancak orijinal kaygının alakasız kalmasından uzun süre sonra tutuldu mu?
  • Listede o kadar uzun mu kalıyordu ki hepsini hatırlamak mümkün değildi?
  • Yazarın iyi kodlama pratiğini teşvik etmek yerine sadece izini bırakmaya çalıştığını mı düşünüyorsunuz?
  • Neden dahil oldukları hakkında hiçbir fikrin yok mu?

Eğer öyleyse, en sevdiğiniz kural hangisi ve neden?


Burada bazı örnekler


4
Bu arada SO'da daha önce benzer bir soru sordum (ancak tam olarak aynı değil): stackoverflow.com/questions/218123/…
Brian R. Bondy 16

@Brian, teşekkürler, sorunuzu gördüm ama bu konuyu unuttum.
finnw

4
Kodlama standartlarındaki asıl sorun, doğru olup olmadıklarını tartışarak harcanan zaman ve çabadır.
Internecine

Yanıtlar:


97

Bu, birkaç tüyün karışmasına neden olabilir, ancak her yöntemin tepesindeki şablonlu blok yorumları zorunlu kılan standartlar her zaman beni mahvetti.

1) Bir şeyleri güncellerken dikkat etmeniz gereken asıl işi yapan koddan çok uzakta oldukları için her zaman güncel değildirler. Kötü yorumlar, yorum yapmamaktan daha kötü.

2) Genellikle kaynak kontrol aracını içeren bilgiyi tekrar ederler, sadece daha az doğrudurlar. Örneğin: Son Değiştirme Tarihi, değişiklik tarihi / sebepleri listesi.


12
(En azından şimdi, okulun daha önce garip görünüyordu) tamamen yorumlamanın kötü bir uygulama olduğunu görüyorum
Shady M. Najib

14
Sadece bu da değil, tepeye bir yük plakası koymak zorunda kaldığınızda yeni bir sınıf dosyası oluşturmakla ilgili ek yükün aslında devs'i yeni sınıflar oluşturmaktan caydırdığını ve çok büyük hantal sınıfları ve dolayısıyla kötü tasarımı teşvik ettiğini fark ettim.
Gaz,

13
Aynı fikirde olmamak, anlaşamamak! İşe yaramaz cevher yeniden bilgisini ve bilgisini eklemiyoruz, ancak işlevin ne yaptığını (.h dosyasında) ve bunun çok faydalı olduğunu anlatan gerçek bir metin açıklaması! Elbette kodla senkronize tutmaya kendimizi adadık.
Sihirbaz,

5
@Shady M Najib kontrolsüz / kontrolsüz gitmesine izin verildiğinde her zaman kötü mü yoksa kötü mü? Genel olarak, iyi kod, yorum gereksinimini önlemek için amacını açıkça ortaya koyar - ancak bu her zaman böyle değildir ve bu senaryolarda yorumlamanın çok önemli olduğunu düşünüyorum. XMLDoc yorumlarını eklemek için kötü bir neden düşünemiyorum.
Nathan Taylor

7
Ne yaptığını açıklayan bir blok iyidir. Bağımsız değişkenlerin türlerini ve adlarını yineleyen bir blok ve dönüş değeri kötüdür. İkincisini zorunlu kılan standartlarla çalışmak zorunda kaldığımda, çoğunluğunu otomatik olarak oluşturmak için bir emacs betiği yazdım.
AShelly

130

Bir keresinde, her kod satırı için en az bir yorumumuz olmasını isteyen bir profesör vardı.

//Set x to 3
var x = 3;

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

    //Print x
    Print(x);
}

Çok saçma oldu.


10
Bu sadece profesör tam olarak ne olduğunu bildiğini bildiğinden değil mi?
John MacIntyre

80
Sanırım ne olduğu belli ve eğitim değil.
Dan Ray

18
Yukarıda sahip olduğunuz örnek açıktır, ancak bir öğrenci başka bir uygulamadan veya bir kitaptan bazı işlev çağrıları kopyalarsa veya ne olursa olsun ve bunu gerçekten anlamıyorsa ne olur? Prof nasıl bilecek? Bu aptal kural hiçbir gri alana izin vermez (savunmasında muhtemelen daha önce suistimal edilmiştir). Bunu böyle yorumluyorum. ... bunu akademik olmayan bir ortamda görürsem, beni biraz korkutabilir. ;-)
John MacIntyre

4
Evet, sadece kodu tekrar eden ve herhangi bir anlayış göstermeyen yorumları yazabilmeniz dışında. Bitiş ayracı önce sizi doğru "// Bitiş Braketi" yapıyor mu?
alternatif

6
Yanlışlıkla kodunuzda yararlı bir yorumunuz varsa? Ondan // commentönce satır koymak gerekir mi?
konfigüratör,

103

Şirketimiz (C #) kodlama standardı, #REGION'ların kapsamlı kullanımı için çağrıda bulundu (bunu bilmeyenler için Visual Studio'da tek bir satıra katlanacak kaynak kod bloklarını işaretler). Sonuç olarak, her zaman güzel bir şekilde yapılandırılmış bir sınıf olarak görünen şeyi, #REGION yapılarının derinlemesine iç içe geçmiş halılarının altına süpürülmüş çöp yığınlarını ve yığınlarını bulmak için açtınız. Tek satırların etrafındaki bölgelere bile sahip olacaktınız, örneğin Logger'ın tek bir bildirimini bulmak için bir LOG bölgesini katlamak zorunda kalacaksınız. Tabii ki, bir bölge yapıldıktan sonra birçok yöntem eklenmiş, "yanlış" bölge kapsamına da yerleştirilmiş. Korku. Korku.

Bölgeler, Visual Studio'ya eklenen en kötü özelliklerden biri ; gerçek OO yapısından ziyade yüzeyin yapılandırılmasını teşvik eder.

Bugünlerde, bölgedeki # bölgeleri öldürdüm.


11
Bunu bir düzine kez oylamaya çalıştım ...
TGnat

22
Eğer # bölgeye ihtiyacın olduğunu düşünüyorsan, yeniden ateşlenmen gerektiğini düşünüyorum.
Jay Bazuzi

23
Kodları genellikle bölgelere göre yapıcılara, özelliklere, olaylara, yöntemlere ve üyelere göre düzenlerim. Kaynağın yönetilmesini ve yönlendirilmesini kolaylaştırır (özellikle oldukça genişleyebilen bazı statik fayda sınıflarında). Onları bundan daha fazla kullanmam.
Evan Plaice

26
Basit bir kodlama standardına sahibiz: bölgeleri asla iç içe geçirmeyin. Bunları sadece ilgili yöntemleri gruplamak için kullanın (ilklendirme, seri hale getirme, özellikler vb.)
Jason Williams

6
#Regions sadece iyi amaç kodunu gizlemek için düzenlenebilir gerekmez . Bu, kod üretilebilir ya da insanların dokunmamasını ya da çirkin hata ayıklama kodu bloklarını engellemenizi tercih etmesi zor bir algoritmaya sahip kod olabilir. Ancak insanların üzerinde çalışacağı kod değil. Bir bölge dükkanında sıkışmış olanlar için, tanımlara dağılan ancak bölgeleri genişleten bir makro var. Buraya bakın: stackoverflow.com/questions/523220/awesome-visual-studio-macros/…
Kyralessa

80

Bir işte , veritabanında bazı tuhaf Macar gösterim şekillerini kullanmak zorunda kaldık .

Ayrıntıları hatırlayamıyorum, ancak bellekten her alanın içermesi gerekenler:

  • Ünlü yok
  • Tüm büyük harfler
  • Tabloya bir referans
  • Veri tipi göstergesi
  • Veri uzunluğu
  • NULL olabilecek bir gösterge

Örneğin, bir kişinin adını taşıyan sütuna şu adresten ulaşabilirsiniz: PRSNFRSTNMVC30X(Kişi tablosu, Ad sütunu, Varchar 30 karakter, Boş Değil)


14
Üzgünüz, veritabanını yeniden yapılandırdığınızda veya VARCHAR'ın uzunluğunun farklı olması gerektiğine karar verdiğinizde ne olur? Birdenbire tüm kodunuzu gözden geçirmeli ve değiştirmelisiniz. Bu korkunç görünüyor.
Tom Morris

71
Ünlü yok ??! Şaka yapıyorsun değilmi?
Daniel Cassidy

39
Bu standardı uygulayan insanların alnında sırtlar var mıydı ve çoğu zaman onur ve savaşı tartışıyorlar mıydı?
Ryan Roberts

10
Haha, onlar
DBA'lardı

14
Sütun adlarınızı bir URL kısaltıcı aracılığıyla göndermeliydiniz. PersonFirstNameVarchar30NotNull = bit.ly/cULlQc
Billy Coover

48

Tüm parantezlerin, ayraçın sona ermesi ile ilgili yorumda bulunulması konusunda ısrar:

Örneğin:

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

21
Daha çok kabul edilebilir: bloğun başlangıcının ne olduğunu söylemek için bir yoruma ihtiyacınız varsa, o zaman blok çok uzun veya içeriği çok karmaşık => refactor.
Richard

5
Oy kullanmak istiyorum, çünkü uzun, derinlemesine iç içe geçmiş blokları çözmek zor olabilir ve bu yorumlar yardımcı olabilir. Oy vermek istiyorum, çünkü bu yorumlar çok yakında yanlış (ve çok kafa karıştırıcı) hale gelecek ve uzun, derinlemesine iç içe geçmiş bloklar yeniden yorumlamanız gereken, daha fazla yorum eklemek zorunda değilsinizdir.
Jay Bazuzi

7
IDE'siz güçlü bir dünya için harika bir fikirdi.
IAdapter

9
@Hayır IDE'de bir ayracı vurgulayabilir ve diğer ayracı vurgulayabilirsiniz. İnsanlar bunu yaptığında şahsen nefret ediyorum.
Evan Plaice

3
Örneğiniz biraz çılgınca olsa da (mantık değiştirirken sizi yavaşlatacak kadar uzun olmadığı için), bu her zaman kötü bir şey değildir. Bunun gibi yorumlar, tüm dosyayı kapsayan ad alanlarını / endif bildirimlerini kapatmak için gerçekten yararlıdır.
jsternberg

38
#define AND  &&
#define OR   ||
#define EQ   ==

'Hayır dedi.


9
#İnclude <iso646.h> daha iyi bir seçim olmaz mıydı?
AndrejaKo

3
@AndrejaKo: bu tarih öncesi <iso646.h>; bu C'nin FORTRAN'a benzemesi için bir girişimdi.
Niall C.

2
Bu gerçekten bir kodlama standardı mıydı? yani operatörleri doğrudan yazmaya karşı bir şirket politikası var mıydı?
finnw

21
O da var mıydı #define BEGIN {ve #DEFINE END }?
JBRWilkinson

3
Bu bana bazı C ++ programcılarının Visual Basic (ya da belki sadece Basit, bazı lehçelere) benzemesini sağlayacak bir ton tanımının olduğunu gösteren bir Günlük WTF makalesini hatırlatıyor. #define void Sub, #define} End, bunun gibi şeyler.
Wayne Molina

37
  • Yerel değişken isimlerinin tümü alt çizgi içermeyen küçük harflerdir.

Gerçek örnekler: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts,potentialmsceventref

New York Times ağırlığındadır :

“İzin verilenler için boşluk bırakılmamalıdır. İlk seslendiren ilk alfabe olan Eski Yunanca, ses çıkardıysanız ve konuşmasaydınız kelime boşlukları olmadan deşifre edilebilir. […] Latince de, kelimeleri ikinci yüzyıla ayırmaktan vazgeçti. Kayıp şaşırtıcı, çünkü ayrılmamış metni okumak için gözün daha fazla çalışması gerekiyor. Ancak paleograf Paul Saenger'ın açıkladığı gibi, antik dünya “okumayı kolaylaştırmak ve kaydırmak” istemedi. ”

3
+1. Küçük sıkıntılar toparlar. Ayrıca, kodlama standartları editörü ya da Başbakan “Büyük bir yük değil, değiştirmeye değmez” diyebildikleri için tartışmak zor.
finnw

1
Kesinlikle. (Her ne kadar bu durumda, bunun gibi onbeş çeşit değişken ismi okunuyor olsa da, gerçekten büyük eklenti).)
John Siracusa

57
İki şekilde ayrıştırılmak yerine isimler icat ederek kendinizi eğlendirin. pageshits, penisup, vb.
Jay Bazuzi

4
@Jay * sexchange
yapılandırıcı

2
@configurator: Visual Studio hata ayıklayıcı ekibi, izleme penceresinde şu anda uçuşta olan istisnayı görmenize izin veren bir özellik üzerinde çalışırken, "$ ex" adlı bir sözde değişken ekleyecekti. Uzun zamandır farketmedik. Sonra "$ exception" olarak yeniden adlandırdık, ancak hala bir 's' olarak okudum.
Jay Bazuzi

36

Ben "yapmak için bir şirketin yazılım lideri tarafından istendi basit, yeniden n dundant kodu ". Örneğin, mevcut bir işleve yeni bir parametre eklemek yasaklandı. Bunun yerine, gerilemeyi önlemek için orijinali el değmeden bırakarak işlevi kopyalamanız gerekir. Elbette resmi bir test yapılmamaktadır (zaman kaybı).

Birleştirme yazılımı kullanmamız da yasaktı; her dosya bir seferde yalnızca bir programcı tarafından değiştirilebilir. Elbette revizyon kontrol yazılımı bilim kurgu idi.

Hayatımın en mutlu günü kovulduğu gündü (İtalya'da birisini kovmanın çok, çok zor olduğunu düşünün).


'refactoring' kelimesini hiç duymamış olabilir
nanda

3
Asla bir sürü başka kelime de duymadı ...
Wizard79

Resmi bir sınamaya ihtiyacınız yoktu çünkü yöntemleri hiç değiştirmediniz ...
konfigüratör

36

Veri tabanı ile tüm etkileşimin saklı prosedürlerle yapılması gerekir . 2010'da değil, 1997'de yaşıyorsak, bu mantıklı olabilir.

Bunun asıl sorunun tüm kriterlerini karşıladığını anladım:

  • Verimliliğinizi büyük oranda düşürdünüz mü? KONTROL. Lütfen - sadece bir ORM kullanın .
  • Başlangıçta iyi nedenlerle dahil edildi mi, ancak orijinal kaygının alakasız kalmasından uzun süre sonra tutuldu mu? KONTROL. Yönetici, 1000 yıl önce bir veritabanı sunucusu için bir geliştiriciydi ve bu kodlama standardını devreye soktu.
  • Listede o kadar uzun mu kalıyordu ki hepsini hatırlamak mümkün değildi? KONTROL. Bu, 'mümkün olduğu kadar çok mantık veri tabanında depolanmalıdır' dahil.
  • Yazarın iyi kodlama pratiğini teşvik etmek yerine sadece izini bırakmaya çalıştığını mı düşünüyorsunuz? KONTROL. Eski veritabanı sunucusu geliştiricisi olarak yöneticiye geri dönmeyi sağlar.
  • Neden dahil oldukları hakkında hiçbir fikrin yok mu? KONTROL.

2
İş yerimde bu kampta bazı insanlar var. Performans kartını oynamaya çalıştıkları ve bilgilerinin ne kadar güncel olduğunu göstermedikleri zaman komik oluyor
Reinstate Monica

3
bekleyin .. bütün ciddiyetle, SP'nin düz SQL aramalarından ziyade performans açısından akıllı olduğunu düşündüm, C #?
Sk93

3
Neden dahil olduklarını tam olarak biliyor gibisin. : P
Mason Wheeler

4
Büyüdüğümde nihayet her şeyin neden DB'den geçmesi gerektiğini anladım :) Ciddiyetle, bu pek çok şeyi basitleştirir, tekerleği yeniden icat etmeye çalışmayın.
Jé Que

3
Güzel bir akıl yürütme duydum "Bir OR / M kullanamayız çünkü tüm etkileşimin SP kullanması gerekir". Böyle bir insan gücü kaybı.
konfigüratör

33

CTL'nin 'daha iyi ve daha hızlı yapabileceğine inandığı için' STL'yi veya diğer standart C ++ kütüphanelerini kullanmalarına izin verilmiyor. Listeler ve string sınıfı gibi temel yapılar bile.


5
STL'yi kullanmayan birini duyduğum tek zaman, yeterince hızlı olmadığı ve haklı olduğu için oyunlardı. EA, oyunları için STL'nin kendi uygulamasını yaptı. Artık bunun önemli olduğundan şüpheliyim (modern oyunlar GPU sınırlıdır) ve kullandıklarından şüpheliyim. Ama yine de, tamamen yeni bir kütüphane değil, STL'nin bir uygulamasıydı . EASTL kullanırken hala STL kullanıyordunuz.
Matt Olenik

1
@Matt: Buna ek olarak, EA şikayeti hafıza kullanımı ve ilklendirmeye odaklanmıştır. Kendi uygulamaları daha az bellek tüketmiş, daha erken yayınlamış ve daha sonra başlatılacak nesneleri başlatmaktan kaçınmıştı.
Matthieu M.

Ona kendisinin kodlamasını söylerdim.
sağa doğru

31

Macarca notasyonu

MSDN'deki " Charles Simonyi'nin Macar gösterimindeki tanımlayıcı adlandırma kuralını açıklamasından " örnek alınmıştır .

1 # “sy.h” kelimesini içerir
2 harici int * rgwDic;
3 harici int bsyMac;
4 yapı SY * PsySz (char sz [])
6 {
7 karakter * pch;
8 int cch;
9 yapı SY * psy, * PsyCreate ();
10 int * pbsy;
11 int cwSz;
12 imzasız çamaşır suyu = 0;
13 pch = sz;
14 iken (* pch! = 0
15 wHash = (wHash11 + * pch ++;
16 cch = pch-sz;
17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash];
(; * Pbsy! = 0; pbsy = & psy-> bsyNext) için 18
19 {
20 karakter * szSy;
21 szSy = (psy = (yapı SY *) & rgwDic [* pbsy]) -> sz;
22 pch = sz;
23 iken (* pch == * szSy ++)
24 {
25 ise (* pch ++ == 0)
26 iade (psy);
27}
28}
29 cwSz = 0;
30 ise (cch> = 2)
31 cwSz = (cch-2 / sizeof (int) + 1;
32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) - rgwDic;
33 Sıfır ((int *) psy, cwSY);
34 bltbayt (sz, psy-> sz, cch + 1);
35 geri dönüş (psy);
36}

5
Ow ow ow ow ow ow!
Monica

22
Bu örneklemle ilgili en büyük sorun, anlamsız değişken isimleridir. Macar öneklerini kaldırın ve bazıları 1, hatta 0 karakter uzunluğundadır.
finnw

8
Bu, zayıf yazılmış dillerde yararlı olan Sistem macarlığı (bu dillerde isimlerde çalışmak için kritik olan tip bilgisini kodladığı için) - güçlü şekilde yazılmış dillerde faydasızdır. Güçlü yazılan diller için daha iyi bir alternatif , bir değişkenin (üye, işaretçi, uçucu, dizinleyici) kullanımıyla ilgili önemli bilgileri kodlayan , dilin kendisinin desteklemediği bir şey olan Apps Macarca'dır .
Jason Williams

5
Ah lütfen. Daha önce hiçbir zaman bir yerel ile hiçbir üyeyi karıştırmadım ve bu aptal Macarcayı üyeler / yerliler / alanlar / her neyse kullanmıyorum. Onların Joel'ın örnekte olduğu gibi, 'güvenli' ve 'güvensiz' gibi dizeleri farklı türde arasındaki farklılaşma için yararlı olabileceğini düşünüyorum Yanlış Kod Bak Yanlış yapma
yapılandırıcı

3
@configurator: Joel'in örneği korkunç, farklı tiplere sahip olmasından daha iyi olurdu, sonra derleyici kullanımı zorlardı.
Matthieu M.

28

Bir keresinde, proje liderinin her değişkenin - HER değişken - "v" ile öneklenmesini zorunlu kıldığı bir proje üzerinde çalıştım. Yani, vCount, vFirstName, vIsWarranty, vb.

Neden? “Çünkü VBScript'te çalışıyoruz ve zaten her şey bir Varyant”.

O NE LAN.


93
Bir keresinde her değişken gerektiren bir dilde çalıştım - HER değişken - "$" ile eklenmiş olmalı.
nohat

6
@nohat: Ve bunun muhteşem olduğunu farkettiniz, değil mi?
Josh K

Bir zamanlar tüm değişkenlerimin '$' veya '%' veya '@' gibi noktalama işaretleriyle başladığı bir dilde çalıştım. Hala yapıyorum, şimdi ve sonra.
David Thornley

3
Bu, yalnızca fönceden işlevler koymanız gerektiğinde , o zaman kodunuz gerçekte sorun olur fUcked (vUp).
Joe D

1

26

Neredeyse bunu unuttum:

Bir yöneticiden alıntı:

Kendi kodunuzda bulduğunuz herhangi bir sorunu düzeltmeyin veya belgelendirmeyin. Müşteri, önümüzdeki birkaç yıl içinde onları tanımlamamız ve düzeltmemiz için bize para ödeyecek.

Bu tüketici yazılımı için değil, tek bir büyük kuruluş için özel. Söylemeye gerek yok, müşteri daha sonra yıllarca ödeme yaptı. Önemsiz görünebilir, ancak böcekleri görmezden gelmeye çalışmak onları bulmaktan daha zordur.


2
Bu korkunç bir politika. Umarım bu menajer konserve edilmiştir.
Bernard

@ Bernard-Çoğu kurumda uzun vadeli bir gelir akışı yaratan hızlı tanıtım için temel teşkil eder. Umarım, başkası bunun içindeki deliliğini görmüş ve yanlışlıkla park yerinde geçirmiş.
Jim Rush,

24

Tüm özel olmayan yöntemler, sabitler, sayılar ve özellikler hakkındaki zorunlu XML yorumları.

Oldukça karışık kodlara yol açtı, özellikle de sonuçta insanlar ya boş bir yorum saplaması oluşturmak için ya da GhostDoc'u yüklemek ve otomatik olarak oluşturulan yorumlar eklemek için sadece /// isabet eden insanlardı:

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

[Düzenle] Bunu saçma bir standart olarak söylememin nedeni, yöntem yorumlarının aptalca olduklarından değil, bu yorumların kalitesinin hiçbir şekilde zorlanmadığından ve sadece kod dosyalarında çok sayıda ve çok sayıda kargaşaya neden olmasından kaynaklandığından kaynaklanıyor. . Anlamlı kod belgeleri oluşturmanın daha iyi bir yolu vardır ki, "bir yorum yapmalı" derleme gereksinimi kördür.


13
' Validations the handler' - ah-oh
Eric

8
+1 Ugh, bundan nefret ediyorum. Eğer yorumları üretmek için yazılımı kullanıyorsanız, o zaman onlara ihtiyacınız yok.
bleevo

9
Bunun kötü bir kural olduğunu sanmıyorum. İlk kez sürdürmem gereken bir yöntemi okuduğumda, tüm argümanlar için şartnamelerim varsa çok yardımcı olur. Genelde incelikler vardır (örneğin, argüman null olursa ne olur, ne boş bir koleksiyonsa, varolmayan bir dosyanın adı vs. olur.)
finnw

3
@finnw Ben bunun iyi bir uygulama olduğunu düşünüyorum, ancak kötü bir standart. Geliştiriciler kuruldaysa ve garanti edildiğinde anlamlı yöntem yorumları yazıyorsa (istisna ayrıntıları, vb.), Bu harika. Olmazsa, büyük bir karmaşa ile bitirdiniz. Ve eski durumda, derleme düzeyinde denetim yaptırmanıza hiç gerek yok.
Adam Lear

7
Klasik belgelendirme örneği. Açıkça bariz bir şey dışında hiçbir şey söylemeyan yorumlar görünürde öldürülmelidir.
Cumbayah

23

Gerçekten bir kodlama standardı değil, ancak kaynak kontrolünde 'changelog.txt' adında bir dosyamız vardı.

Her giriş yaptığınızda, bu dosyaya manuel olarak bir giriş eklemelisiniz. Bu girdi alt sürüm revizyon numarası ve sizin yorum yapan yorumunuz oldu.

Yeni CTO başladığında ve birileri ona bunu söylediğinde derhal bir yürütme kararı verdi ve "Bunu artık yapmayacağız" dedi ve dosyayı sildi. Bu yıllardır devam ediyordu.


6
Ve kimse farkında değildi svn log?
Htbaa

1
Politikayı başlatanlar çoktan gitmişti ve ardından gelenler devam etti. Yeni CTO ile aynı hafta içinde başladım (arkadaşım) ve ikimiz de buna baktık ve WTF dedi?
Jim A

20

Çalıştığım yerlerden bazıları, silmek yerine kullanılmayan veya kullanımdan kaldırılan kodun yorumlanmasında ısrar etti. Tarih için VCS'ye güvenmek yerine, vb. Yorumlanan kod aracılığıyla dosyalarda acı içinde tutuldu.

Bununla ilgili bulduğum en büyük sorun, kodun neden yorumlandığına dair hiçbir fikriniz olmadığıdır. Bazı dev aktif olarak değişiklikler yapıyor ve referans için etrafta tutmak istediğinden mi yoksa artık gerekmediğinden mi?


3
Geçenlerde birçok eski yorumlanmış kodu siliyorum.
CoderDennis

2
Neden yorumlanmadığını ve neden açık tutulması gerektiğine dair iyi bir açıklama eşlik etmedikçe, yorumlanmış kodu silerim.
Jeremy Wiebe,

Tamamen katılıyorum. Çalıştığınız sürece kod yorumlaması tamamdır, ancak sürüm / ana şubeye giren her şey yorumlanan kodu geçersiz kılmalıdır. Birisi bana "nasıl farklı yapılacağını bilmek hoşuna gittiğini" söyledi. Sadece belirtilen nedenlerden dolayı rahatsız edici buluyorum: Bu eski mi, geçici bir çözüm mü, yapmanın başka bir yolu mu? WTF
Anne Schuessler

VS2013 "Peeks" ile bunların hepsi pencereden dışarı. Ama biz "Değişen Denklem - Baş Harfler" veya başka bir şey söyleyen bir yorum koyduk, bu yüzden eski kodun ne olduğunu merak eden biri gerekiyorsa TFS / VCS'de neye bakacağını merak etti. Bu yüzden 10 yorumlu satır yerine bir satır var. Ancak VS2013 harika, sizin için TFS tarihini gösteriyor.
Suamere

17

Şimdiye kadar katıldığım en kötü kodlama standardı hiç olmayan kod tabanları. Tamamen aynı fikirde olmayan kodlama standartlarını izlemeyi tercih ederim. Kod tabanının yeni bölümlerini öğrenmeyi daha da zorlaştırıyor.


16

Sürüm kontrolü için satır içi yorumları zorlamak, göz ardı ettiğim en anlamsız kodlama standardıydı.

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

200'den fazla alana ve 40 tetikleyiciye sahip yüksek oranda tartışmalı bir tabloya sahip bir veritabanını 'korurken' boşlukların doğru kullanılmasında ısrar eden Oracle DBA yaklaşıyor.


Oldukça gergin
Evan Plaice

5
Mmm. Dim Sum ...
konfigüratör

Tabii kaynak kontrolü olmadan önce bunu yaptım. Bir kez kaynak kontrolü yaptıktan sonra, bu bir alışkanlıktı, ekibin yapmayı bırakması için bir müdahaleye ihtiyacımız vardı. Sonunda onları bulduğumuzda var olanları durdurduk ve sildik.
Scott Whitlock

Üst düzey ekibimiz hala bunu yapmaya zorluyor. Ne zaman kurtulabileceğimi düşündüğümde (ve bazen bilmeyeceğimi bildiğimde) politikayı görmezden geliyorum.
Joshua Smith

Ekibimizde hala her yerde bunu yapan bir adamımız var (ayrıca SQL sürümlerimizde de sürüm kontrolü altında olan "Değişim Günlüğü" işlerini içeriyor). Bana açıklandığı gibi argüman, birkaç değişiklik / taahhütten sonra bir şeyin değiştiği tarihi hatırlamamanızdır, bu nedenle değişiklik günlüğü kimin neyi ve niçin bir dosyayı açtığınızda neyin değiştiğini hemen fark etmekte iyidir.
Wayne Molina

14

Tüm sınıf üyesi işlevlerinin sınıf adı ve görünürlüğü ile birlikte ön eklenmesi gerektiğine karar veren C ++ ilk zamanlayıcı tarafından yönetilen bir projede kod incelemeleri yaptım:

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

1
Onlara neden sordun mu? Motivasyonlarını bilmek isterdim ..
JBRWilkinson

1
Vay, neden bu adam sınıfları kullanıyor ?
Mateen Ulhaq

9

Tüm kodu dört boşlukla girmeniz istenir;)


2
Bu nasıl kötüydü?
Jay Bazuzi

1
Çünkü o zaman her hattın başında 4 gereksiz alan var?
nohat

Oh, şimdi anlıyorum.
alternatif

21
Evet, StackOverflow'un gerçekten kötü kodlama standardı var. :-)
P

Büyük girintiler sizi kod yuvalama düzeyini düşük tutmaya zorlar. 8 girintileri gördüm ve iyi çalıştı.
Toon Krijthe

9

Yıllar önce, tüm kodlarımızın sola hizalı olması gereken bir işim vardı - girintisiz. Bu politikayla gelen adam, uzun kod satırlarını görüntülerken yatay olarak ileri geri gitmek zorunda kalmaktan hoşlanmamıştı;


Uyması gereken korkunç, korkunç bir kodlama standardı. Ve bunun için de aptal bir sebep!
gablin

4
Yatay kaydırma yapmanız gerekiyorsa (örneğin, sayfanın yarısından fazlası), muhtemelen de yanlış bir şeyler olabilir. Hiçbir girinti, kodu tamamen okunamaz hale getirdiğinden iyi değildir. 78-lık bir limite bağlı kalmaya çalışıyorum ama bu miktarın üstesinden gelmek gerekirse, umursamıyorum, ama kaçınmaya çalışıyorum.
Htbaa

8

Bu daha fazla kodlama standartlarına sahip olmamanın bir örneğini incitebilir.

Büyük bir bankada çalışan bir müteahhit, standartları takip etmenin en iyisi olduğuna ısrar etti. Uygulama, kendisi için tek geliştirici olan dBase / Clipper'a yazılmış ve tabii ki standartla birlikte ortaya çıkmıştı.

  • Her şey büyük harf. Yaptığı nadir yorumlar dahil her şeyi kastediyorum.
  • Girinti yok.
  • Değişken isimlendirme APRGNAME dizisi boyunca bir şeydi. A = değişkenin kapsamı, örneğin genel için P, PRG = değişkeni oluşturan kaynak dosyanın ilk üç karakteri, NAME = kalan 6 karakterde dBase / Clipper'ın izin verdiği değişken adı.
  • Kaynak kodun ilk 4 ve son 4 satırı 80 * uzunluğundaydı. Neden? Böylece nokta vuruşlu yazıcının bir dosyanın basımını başlatıp bitirdiğini duyabiliyordu. Hafıza haftanın her günü 20.000 sayfa anabilgisayar üzerinden basıldı.
  • Eminim beynimden atmayı başardığım daha birçok şey vardı.

Bu aşamada çok yeni bir kendi kendine öğretilen programcıydım, ancak projeyi devralmak istemeden önce deli bilim insanlarını dinlememek ve oradan uzaklaşmak için yeterince bilgim yoktu.

Ve evet, yönetime bu uygulamaların ne kadar kötü olduğunu, ancak her zaman olağan olduğunu söylemiştik.


7
Yaşlı dinozorlarla dalga geçme, lütfen. Onlar bize mümkün kıldı.
P

4
İş güvenliği gibi geliyor.
MIA

7
Bir ses işaretleyicisine sahip olmak, böylece her bir dosyanın ne zaman yazdırıldığını ustaca bilirsiniz. \07Şimdi her dosyanın başlangıcına ekleyeceğim .
konfigüratör,

2
Bunun gibi bir isimlendirme şemasının kullanılması (büyük harf değil) dBase'in değişken "kapsam" kurallarının bulunmadığının bir anlam ifade etti. Her şey etkili bir şekilde küreseldi. Bir idiziyi bir prosedürde indekslemek için kullanılan bir i, bir arama prosedürüne müdahale edebilir . Bu "gölgelemeyi" önlemek PRIVATE ALL LIKE m*ve kullanmanız gerekirPRIVATE i
Gerry

8

Geçmişimden bir patlama daha.

Şirket sahibinden alıntı:

Yorumlayıcı diller kullanılarak yazılmış hiçbir kod olmayacak çünkü Java'da yazılmış {expletive} projesinde 25 milyon kaybettim.

Java projesi, şimdi binlerce kişiyi işlemek için kullanılan birkaç düzine hisse senedini idare etmek için tasarlanmış bir hisse senedi alım satım sistemi idi. Tasarım kusurlarını veya kötü donanımları ele almak yerine, tüm şirket tüm C / C ++ uygulamalarını C / C ++ 'a dönüştürmek zorunda kaldı ve tüm yeni gelişmeler C / C ++' da olmalıydı. Yorumlayıcı diller, derlenmemiş herhangi bir şey anlamına geliyordu ve sahibi yalnızca Assembler, C ve C ++ derlenmiş olduğunu düşünüyordu.

Kodun çoğunun Java ve Perl'de olduğu 800 kişilik bir şirket için bu, tüm şirketin zamanının çoğunu önümüzdeki birkaç yıl boyunca C / C ++ 'da mükemmel bir şekilde yeniden kod yazarak geçirdiği anlamına geliyordu.

Yeterince komik, bu fiyaskodan yirmi yıl önce, teknoloji liderinin sıralama mantığımızın (bir Kabarcık Sıralamasıydı) montajcıda Hızlı Sıralama yerine yeniden kodlanması gerektiğine karar vermesi gerektiğine karar verdim çünkü - Algoritmalar performansı artırmak değil. Performansı arttırmanın tek yolu assembler içindeki aynı mantığı yeniden yazmaktı.

Her iki durumda da, dikteler düştükten kısa bir süre sonra ayrıldım.


Her iki şirket de bugün hala çalışıyor mu?
finnw

Java'dan 'taşınan' diğeri ise çoktan gitti. TRS-80’den PC’ye geçişte hiç hayatta kalmadılar
David B,

6

Birçok programcı gibi (ama yeterli değil) kod düzenlemeden nefret ederim. Değişken isimleri için bir dolar işareti ($) öneki, alıcılar / ayarlayıcılar olmasa bile, özel değişkenler için alt çizgiler kullanmak zorunda kaldığımda beni çıldırtıyor. Anlamak için kodunuzu dekore etmeniz gerekiyorsa, cehennemi çıkarmanız gerekir!


Eh, "Will" in dediği gibi, "Alt çizgi ile özel değişkenlerimin intellisense'imde gruplandırılması için hazırlıyorum. Ancak bunu yalnızca bir tür kapsamı içine alan değişkenler için yapıyorum. "Ayrılmalarını ve daha az kullanılan değişkenleri bir arada tutmalarını kolaylaştırır." ve onunla aynı fikirdeyim.
7wp

1
Değişkenlerinizi favori tescilli IDE'nizde gruplandırmanın tüm kodunuzu geçersiz kılmak için yeterince iyi bir neden olduğunu sanmıyorum.
Adam Harte

Bu sizin kodunuzsa, IDE'nizde kullanılabilir kılmak tamamen makul görünüyor. Ayrıca, alt çizgi hazırlamak birçok dilde yaygındır, bu yüzden insanlar onu gördüklerinde ne anlama geldiğini bilirler.
rjmunro

1
+1 İyi bir IDE kullanmak ( regex aramayı kullanabilen ) benim için daha anlamlı. Scratch IDE, bir metin editörü ve terminal kullanmayı öğrenin ve çok daha iyi bir programcı olacaksınız. Bir not olarak, özellikle perl sigillerini sevmiyorum, ama en azından PHP'lerin aksine bir kullanımları var.
alternatif

6
İç çek ... bu "IDE'lerin korkaklar içindir" insanlarından biri.
Nailer

6

Bir süredir bir web sistemiyle çalışıyorum ve tüm parametrelerin P1, P2, P3 vs. olarak adlandırılması gerekiyordu.

Ayrıca - kesinlikle bir kodlama standardı olmasa da - aynı sistemde, her bir dosyaya xyz0001.ext, xyz0002.ext, xyz0003.ext, vb adını verecekti.


6

Bu çok uzun zaman önceydi - kesin olarak 1976. Patronum Edsger Dijkstra'yı hiç duymamıştı veya CACM'nin bir sayısını okumamıştı, ama "GOTO'nun kötü olduğu" bir yerden bir söylenti duymuştu, bu yüzden GOTO'yu COBOL programlarımızda kullanmamıza izin verilmedi. Bu, COBOL'un "eğer öyleyse" eklemesinden önceydi, o zaman o zaman üç klasik kontrol yapısının sadece iki buçuk katıydı (sıra, eğer / sonra / başkası, gerçekleştirirdi (yani öyleyse)). Temel programlarımızda GOTO'ya ve Assembler dil programlarımızda şube talimatlarına izin verdi.

Üzgünüm bu bir çeşit "orada olmalısın" hikayesi. Bildiğim kadarıyla, 1976'dan beri icat edilen her dilin yeteri kadar kontrol yapısı var ki GOTO'yu asla kullanmanıza gerek kalmadı. Fakat mesele şu ki, patron NEDEN GOTO’nun zararlı olarak değerlendirildiğini veya hangi dilin çocukça hastalığı olduğunu ve hangisinin ölümcül olduğunu bilmiyordu.


6

Bir projede çalıştım, baş mimarın açık kod yazması talebi vardı. Kodda bulduğum en kötü örneklerden biri (ve mutlu bir şekilde onayladı).

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

ReSharper bile bunun yanlış olduğunu söyledi!


9
Boş olarak bildirilen bir işlevden bir şey döndürmek için zorlanırsınız.
Mircea Chirea

7
@ MAttB Final ( else) dalının hangi şartlar altında alınacağını düşünün .
Richard

6
else {return string.Empty; } yukarıdaki 2 satır bir bakım geliştiricisi tarafından 5 yıl sonra düzenlendiğinde yürütülür. Ancak string'i döndürmek.Empty, imkansız bir koşul olarak kullanılan gerçeği gizleyecektir . Bunun yerine InvalidOperationException ("Bu kod üç değer mantığını destekleme amaçlı değildi") atmalıdır;
MatthewMartin

1
Bu korkunç. Neyin var return verbose ? someString : someOtherString;?
Callum Rogers

1
@callum Üçlü operatör yasaklandı olabilir :) daha önce orada bulunmuş ...
hplbsh

6

Son işimde "standartlar" beni işe alan adam tarafından verdiklerim için çok güçlü bir terim olurdu. ColdFusion ve SQL’de web sitelerini programlamak , aşağıdaki gibi kodlama gereksinimleri verildi:

  • İçerir kullanmayın. Büyük bir sayfayı severim
  • Değişken ve sütun adlarındaki kelimeleri her zaman alt çizgi ile ayırın (isaktif, ilk isim vb. Hariç).
  • Asla kısaltmalar kullanmayın - her zaman ilk adı yazın (sık sık ad yazdı)
  • Kafa karıştırıcı isimler kullanmayın (farklı ama ilişkili şeyler ölçülen miktar_charged ve charge_amount gibi)
  • DIV'leri kullanmayın ve en az CSS kullanın - bunun yerine iç içe geçmiş tabloları kullanın (bir keresinde derinlemesine altı katman buldum).
  • Sorguları önbelleğe almayın. Hiç.
  • Bir değişkeni birden fazla sayfada mı kullanacaksınız? Uygulama kapsamı
  • Her sayfa kendi deneme / yakalama bloğudur. Global bir hata işleyicisine ihtiyacımız yok / istemiyoruz.

Bunları bıraktıktan sonra değiştirmeye başladım.


"Kafa karıştırıcı isimleri kullanma" bana yeterince adil geliyor ...
8128

1
Bu kesinlikle adil bir rehber. Demek istediğim, hiç takip etmediği idi. Sanırım "kafa karıştırmamak" ve benimkiler farklıydı.
Ben Doom

4

C ++ kodlayıcısı olarak hayatımda, iki kötü "kural" uygulandı:

  1. "STL kullanamıyoruz, çünkü VC ++ 4.1 desteklemiyor (ve şu anda VC ++ 6.0'a geçemiyoruz)."
  2. "Do not ; ben (proje liderinin adı silinmiş) Öğrenci olarak yazdığı Heapsort algoritmasının bu uygulamayı kullanır o Ey olabilir çünkü (n ^ 2) kötü durumlarda, Quicksort kullanıyoruz."

6
Proje liderinin HeapSort'unda yanlış olan neydi?
7wp

4
Aslında, kod dış kullanıcı girişini kabul ederse, QuickSort, O(n^2)DOS saldırılarına açıldığı için yanlış olabilir (en kötü durum girişini besleme). Ayrıca neden değiştirilmesinin mümkün olmadığı - STL kullanmamak için geçerliydi.
Maciej Piechotka

4

Tüm sınıflar ve sınıf üyeleri için XML belgelerine sahip olmak zorundayım. Özel dahil Varsayılan ghostdoc yorumları kullanmaya teşvik edildim.

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

Bu önceki cevaba çok benzer .
finnw

Evet. Hepiniz özel üyelere yorum yapmam gerekiyor. Bu daha az mantıklı.
Carl Bergquist

Ghostdoc kullanmaya teşvik etmek ?! Gah
konfigüratör
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.