Standar pengkodean terburuk yang pernah Anda ikuti? [Tutup]

77

Pernahkah Anda bekerja dengan standar pengkodean yang:

  • Sangat menurun produktivitas Anda?
  • Apakah awalnya termasuk untuk alasan yang baik tetapi disimpan lama setelah masalah asli menjadi tidak relevan?
  • Apakah ada dalam daftar begitu lama sehingga tidak mungkin untuk mengingat semuanya?
  • Membuat Anda berpikir penulis hanya mencoba meninggalkan tanda mereka daripada mendorong praktik pengkodean yang baik?
  • Anda tidak tahu mengapa mereka dimasukkan?

Jika demikian, apa aturan yang paling tidak Anda sukai dan mengapa?


Beberapa contoh di sini

finnw
sumber
4
Saya telah mengajukan pertanyaan serupa (tetapi tidak persis sama) pada SO sebelumnya dengan cara: stackoverflow.com/questions/218123/…
Brian R. Bondy
@ Brian, terima kasih, saya telah melihat pertanyaan Anda tetapi melupakannya.
finnw
4
Masalah sebenarnya dengan standar pengkodean adalah waktu dan usaha yang terbuang untuk memperdebatkan apakah benar atau tidak. Tidak ada yang mengalahkan perang kurung kurawal yang baik untuk menciptakan perselisihan internecine ...
MZB

Jawaban:

97

Ini mungkin mengacak-acak beberapa bulu, tetapi standar yang mengharuskan komentar blokir templated di bagian atas setiap metode selalu bug omong kosong dari saya.

1) Mereka selalu ketinggalan zaman karena mereka terlalu jauh dari kode yang melakukan pekerjaan aktual untuk melihat ketika Anda memperbarui sesuatu. Komentar buruk lebih buruk daripada tidak ada komentar.

2) Mereka sering hanya mengulang informasi yang sudah berisi alat kontrol sumber, hanya saja kurang akurat. Misalnya: Terakhir Dimodifikasi oleh, daftar tanggal / alasan modifikasi.

JohnFx
sumber
12
Saya menemukan (setidaknya sekarang, sebelumnya di sekolah yang tampak aneh) bahwa berkomentar sama sekali adalah praktik yang buruk
Shady M. Najib
14
Bukan hanya itu tetapi saya telah menemukan bahwa overhead yang terkait dengan membuat file kelas baru ketika Anda harus meletakkan beban boilerplate di bagian atas sebenarnya mencegah para dev dari membuat kelas baru dan mendorong kelas-kelas besar yang sulit dan karenanya desain yang buruk.
Gaz
13
Tidak setuju! Kami tidak menambahkan informasi bijih reduntand yang tidak berguna, tetapi penjelasan tekstual aktual tentang apa fungsinya (dalam file .h) dan ini sangat berguna! Tentu saja kami berkomitmen untuk menjaganya agar tetap sinkron dengan kode.
Wizard
5
@Shady M Najib buruk selalu atau buruk ketika dibiarkan tidak terkendali / tidak dirawat? Secara umum, kode yang baik akan membuat tujuannya cukup jelas untuk menghindari kebutuhan akan komentar - tetapi itu tidak selalu terjadi dan saya merasa bahwa dalam skenario ini komentar sangat penting. Saya tidak dapat memikirkan satu alasan buruk untuk memasukkan komentar XMLDoc.
Nathan Taylor
7
Satu blok yang menjelaskan apa yang dilakukannya itu baik. Blok hanya mengulangi jenis dan nama argumen dan nilai kembali buruk. Ketika saya harus bekerja dengan standar mandat yang terakhir, saya menulis sebuah skrip emacs untuk secara otomatis menghasilkan sebagian besar darinya.
AShelly
130

Pernah seorang profesor yang menuntut kami memiliki setidaknya satu komentar untuk setiap baris kode.

//Set x to 3
var x = 3;

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

    //Print x
    Print(x);
}

Itu sangat konyol.

Fishtoaster
sumber
10
Bukankah ini supaya profesor tahu bahwa Anda tahu persis apa yang sedang terjadi?
John MacIntyre
80
Saya pikir jelas apa yang terjadi, dan ini bukan pendidikan.
Dan Ray
18
Contoh yang Anda miliki di atas jelas, tetapi bagaimana jika seorang siswa menyalin beberapa panggilan fungsi dari aplikasi lain atau buku atau apa pun, dan tidak benar-benar memahaminya? Bagaimana prof tahu? Aturan bodoh ini tidak mengizinkan area abu-abu (yang dalam pembelaannya, mungkin telah disalahgunakan sebelumnya). Begitulah cara saya menafsirkan ini. ... keberatan Anda jika saya melihat ini di lingkungan non-akademik mungkin akan membuat saya sedikit takut. ;-)
John MacIntyre
4
Ya, kecuali Anda selalu dapat menulis komentar yang hanya mengulangi kode dan tidak menunjukkan pemahaman apa pun. Apakah dia membuat Anda benar "// Ending Brace" sebelum penjepit berakhir?
alternatif
6
Bagaimana jika Anda secara tidak sengaja mendapat komentar yang berguna dalam kode Anda? Apakah Anda perlu memasang // commentsaluran sebelum itu?
konfigurator
103

Standar pengkodean perusahaan (C #) kami menyerukan penggunaan ekstensif #REGIONs (bagi mereka yang tidak tahu, ini menandai blok kode sumber yang akan diciutkan menjadi satu baris dalam Visual Studio). Sebagai konsekuensinya, Anda selalu membuka kelas yang tampaknya terstruktur dengan baik, hanya untuk menemukan tumpukan dan tumpukan sampah tersapu di bawah karpet konstruksi #REGION yang bersarang. Anda bahkan akan memiliki daerah di sekitar satu baris, misalnya harus melipat keluar melipat sebuah wilayah LOG untuk menemukan satu deklarasi tunggal dari Logger. Tentu saja, banyak metode yang ditambahkan setelah beberapa daerah dibuat, ditempatkan dalam ruang lingkup wilayah yang "salah" juga. Menyeramkan. Menyeramkan.

Wilayah adalah salah satu fitur terburuk yang pernah ditambahkan ke Visual Studio; itu mendorong penataan permukaan daripada struktur OO yang sebenarnya.

Saat ini, saya membunuh #REGIONs saat dilihat.

Cumbayah
sumber
11
Saya mencoba untuk memilih ini selusin kali ...
TGnat
22
Jika Anda pikir Anda perlu #REGION, saya pikir Anda perlu melakukan refactor.
Jay Bazuzi
23
Saya biasanya mengatur kode berdasarkan wilayah menjadi konstruktor, properti, acara, metode, dan anggota. Itu membuat mengelola dan menavigasi sumber mudah (terutama di beberapa kelas utilitas statis yang dapat tumbuh cukup besar). Saya tidak akan menggunakannya lebih dari itu.
Evan Plaice
26
Kami memiliki standar pengkodean sederhana: wilayah jangan pernah bersarang. Cukup gunakan untuk mengelompokkan metode terkait (inisialisasi, serialisasi, properti, dll)
Jason Williams
6
Satu-satunya tujuan #regions yang baik adalah menyembunyikan kode yang tidak perlu diedit . Itu bisa berupa kode, atau kode dengan algoritme sulit-untuk-mendapatkan-tepat yang tidak ingin Anda sentuh orang, atau mungkin blok kode debug yang jelek. Tapi bukan kode yang akan dikerjakan orang. Bagi mereka yang terjebak di toko #region, saya memiliki makro yang runtuh ke definisi tetapi memperluas wilayah. Lihat di sini: stackoverflow.com/questions/523220/awesome-visual-studio-macros/…
Kyralessa
80

Dalam satu pekerjaan kami terpaksa menggunakan beberapa bentuk notasi Hungaria yang aneh dalam database.

Saya tidak dapat mengingat detailnya, tetapi dari memori, setiap nama bidang harus berisi:

  • Tidak ada vokal
  • Semua huruf besar
  • Referensi ke tabel
  • Indikator tipe data
  • Panjang data
  • Indikator nullable

Misalnya, kolom yang memuat nama depan seseorang mungkin disebut: PRSNFRSTNMVC30X(Tabel orang, kolom Nama Depan, Varchar 30 karakter, Bukan Null)

Damovisa
sumber
14
Maaf, tetapi apa yang terjadi ketika Anda memperbaiki database atau ketika Anda memutuskan bahwa panjang VARCHAR harus berbeda. Tiba-tiba, Anda harus memeriksa semua kode Anda dan mengubah ... oh Tuhan. Itu terlihat mengerikan.
Tom Morris
71
Tidak ada vokal ??! Kamu bercanda kan?
Daniel Cassidy
39
Apakah orang-orang yang menegakkan standar ini memiliki tonjolan di dahi mereka dan sering mendiskusikan kehormatan dan pertempuran?
Ryan Roberts
10
Haha, yah mereka DBA, jadi ...;)
Damovisa
14
Anda seharusnya mengirim nama kolom Anda melalui pemendek url. PersonFirstNameVarchar30NotNull = bit.ly/cULlQc
Billy Coover
48

Bersikeras bahwa semua kawat gigi harus diikuti oleh komentar untuk apa ujung kurung kurawal:

misalnya:

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
Kris Erickson
sumber
21
Lebih senior: jika Anda perlu komentar untuk mengatakan apa awal blok itu, maka blok terlalu panjang, atau isinya terlalu kompleks => refactor.
Richard
5
Saya ingin memberi suara, karena blok yang panjang dan bersarang bisa sulit dipilah, dan komentar ini mungkin membantu. Saya ingin memberikan suara, karena komentar-komentar itu akan menjadi salah (dan sangat membingungkan) segera, dan karena blok yang panjang dan bersarang adalah tanda yang perlu Anda refactor, bukan menambahkan lebih banyak komentar.
Jay Bazuzi
7
itu adalah ide bagus untuk dunia tanpa IDE yang kuat.
IAdapter
9
@Jay di IDE yang layak, Anda dapat menyorot satu penyangga dan itu akan menyoroti penyangga lain yang sesuai. Saya pribadi benci ketika orang melakukan ini.
Evan Plaice
3
Meskipun contoh Anda sedikit di sisi gila (karena mereka tidak cukup lama sehingga itu penting dan akan memperlambat Anda ketika mengubah logika), ini tidak selalu hal yang buruk. Komentar seperti itu sangat berguna untuk menutup namespaces / endif deklarasi yang menjangkau seluruh file.
jsternberg
38
#define AND  &&
#define OR   ||
#define EQ   ==

kata Nuff.

Niall C.
sumber
9
Bukankah #include <iso646.h> menjadi pilihan yang jauh lebih baik?
AndrejaKo
3
@AndrejaKo: ini ada sebelum <iso646.h>; ini adalah upaya untuk membuat C terlihat seperti FORTRAN.
Niall C.
2
Apakah ini benar-benar standar pengkodean? yaitu apakah ada kebijakan perusahaan yang melarang penulisan operator secara langsung?
finnw
21
Apakah itu juga punya #define BEGIN {dan #DEFINE END }?
JBRWilkinson
3
Itu mengingatkan saya pada artikel WTF Harian yang saya lihat yang memiliki beberapa programmer C ++ memiliki banyak definisi untuk membuatnya terlihat seperti Visual Basic (atau mungkin hanya Basic, beberapa dialek). #define void Sub, #define} Akhir, hal-hal seperti itu.
Wayne Molina
37
  • Nama variabel lokal semuanya huruf kecil tanpa garis bawah

Contoh nyata: paymentmethodtotalshtml, contracttypechangecontexts, customsegmentspectexts,potentialmsceventref

The New York Times memiliki bobot dalam :

“Ruang kata tidak boleh dianggap remeh. Bahasa Yunani Kuno, alfabet pertama yang menampilkan vokal, dapat diuraikan tanpa spasi kata jika Anda mengeluarkannya, dan melakukannya tanpa itu. [...] Latin, juga tidak lagi memisahkan kata-kata pada abad kedua. Kerugiannya membingungkan, karena mata harus bekerja lebih keras untuk membaca teks yang tidak terpisahkan. Tetapi seperti yang dijelaskan oleh paleografer Paul Saenger, dunia kuno tidak berhasrat untuk 'membuat membaca lebih mudah dan lebih cepat.' ”
John Siracusa
sumber
3
+1. Gangguan kecil bertambah. Juga mereka sulit untuk membantah karena editor pengkodean standar atau PM dapat mengatakan "Ini bukan beban besar sehingga tidak layak untuk mengubahnya."
finnw
1
Persis. (Meskipun dalam hal ini, membaca beberapa variablenames seperti ini benar-benar dapat menambah beban yang besar.)
John Siracusa
57
Hibur diri Anda dengan menemukan nama daripada diurai dua cara. pageshits, penisup, dll.
Jay Bazuzi
4
@Jay * sexchange
configurator
2
@configurator: Ketika tim debugger Visual Studio sedang mengerjakan fitur untuk membiarkan Anda melihat pengecualian yang saat ini dalam penerbangan di jendela arloji, mereka akan menambahkan variabel pseudo yang disebut "$ ex". Kami tidak memperhatikan untuk waktu yang lama. Lalu kami berganti nama menjadi "$ exception", tetapi saya masih membacanya sebagai memiliki 's'.
Jay Bazuzi
36

Saya diminta oleh pemimpin software dari sebuah perusahaan untuk melakukan " sederhana, re n kode dundant ". Itu dilarang, misalnya, untuk menambahkan parameter baru ke fungsi yang ada. Anda malah harus menduplikat fungsi, membiarkan yang asli tidak tersentuh untuk menghindari regresi. Tentu saja tidak ada pengujian formal (buang-buang waktu).

Kami juga dilarang menggunakan perangkat lunak gabungan; setiap file hanya dapat dimodifikasi oleh satu programmer pada satu waktu. Perangkat lunak kontrol revisi adalah fiksi ilmiah, tentu saja.

Hari paling bahagia dalam hidup saya adalah ketika ia dipecat (menganggap bahwa sangat, sangat sulit untuk memecat seseorang di Italia).

Lorenzo
sumber
dia mungkin tidak pernah mendengar kata 'refactoring'
nanda
3
Dia tidak pernah mendengar banyak kata lain ...
Wizard79
Yah Anda tidak perlu pengujian formal karena Anda tidak pernah mengubah metode ...
konfigurator
36

Semua interaksi dengan database harus dilakukan melalui prosedur tersimpan . Mungkin masuk akal jika kita hidup di tahun 1997 dan bukan 2010.

Saya baru menyadari bahwa ini sebenarnya mencakup semua kriteria pertanyaan awal:

  • Sangat menurun produktivitas Anda? MEMERIKSA. Tolong - cukup gunakan ORM .
  • Apakah awalnya termasuk untuk alasan yang baik tetapi disimpan lama setelah masalah asli menjadi tidak relevan? MEMERIKSA. Manajer adalah pengembang untuk server database 1000 tahun yang lalu dan memasukkan standar pengkodean ini.
  • Apakah ada dalam daftar begitu lama sehingga tidak mungkin untuk mengingat semuanya? MEMERIKSA. Ini termasuk 'sebanyak mungkin logika harus disimpan dalam database mungkin'.
  • Membuat Anda berpikir penulis hanya mencoba meninggalkan tanda mereka daripada mendorong praktik pengkodean yang baik? MEMERIKSA. Terus kembali ke manajer sebagai pengembang server database mantan.
  • Anda tidak tahu mengapa mereka dimasukkan? MEMERIKSA.
Jaco Pretorius
sumber
2
Kami punya beberapa orang di kamp ini di tempat kerja saya. Lucu ketika mereka mencoba memainkan kartu kinerja dan menunjukkan betapa ketinggalan jaman pengetahuan mereka
Reinstate Monica
3
tunggu .. dengan sangat serius, saya pikir SP lebih baik, kinerja-bijaksana, daripada panggilan SQL langsung dari, katakanlah, C #?
Sk93
3
Sepertinya Anda tahu persis mengapa mereka dimasukkan. : P
Mason Wheeler
4
Ketika saya dewasa saya akhirnya mengerti mengapa semuanya harus melalui DB :) Dalam semua keseriusan, ini menyederhanakan banyak hal, jangan mencoba dan menemukan kembali roda.
Jé Queue
3
Saya pernah mendengar alasan yang indah, "Kami tidak bisa menggunakan OR / M karena semua interaksi harus menggunakan SP". Buang-buang tenaga manusia.
konfigurator
33

Tidak diizinkan untuk menggunakan STL atau pustaka C ++ standar lainnya karena CTO percaya 'kami' dapat melakukannya dengan lebih baik dan lebih cepat. Bahkan konstruksi dasar seperti daftar dan kelas string.

David B
sumber
5
Satu-satunya waktu saya pernah mendengar ada orang yang tidak menggunakan STL karena itu tidak cukup cepat, dan benar, adalah untuk permainan. EA membuat implementasi STL mereka sendiri untuk game mereka. Saya sangat ragu itu penting lagi (game modern terbatas GPU) dan saya ragu mereka menggunakannya. Tetapi meskipun demikian, itu adalah implementasi dari STL, bukan perpustakaan yang sama sekali baru. Anda masih menggunakan STL saat menggunakan EASTL.
Matt Olenik
1
@ Mat: untuk menambahkan ini, keluhan EA dipusatkan pada penggunaan memori dan inisialisasi. Implementasi mereka sendiri menghabiskan lebih sedikit memori, melepaskannya lebih cepat, dan menghindari menginisialisasi objek yang akan diinisialisasi nanti.
Matthieu M.
Saya akan memberitahunya untuk kode itu sendiri.
sayap kanan
31

Notasi Hungaria

Sampel diekstraksi dari " penjelasan Charles Simonyi tentang konvensi penamaan notasi pengenal Hongaria " di MSDN.

1 #termasuk “sy.h”
2 extern int * rgwDic;
3 extern 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 unsigned wHash = 0;
13 pch = sz;
14 sementara (* pch! = 0
15 wHash = (wHash11 + * p ++);
16 cch = pch-sz;
17 pbsy = & rgbsyHash [(wHash & 077777)% cwHash];
18 untuk (; * pbsy! = 0; pbsy = & psy-> bsyNext)
19 {
20 karakter * szSy;
21 szSy = (psy = (struct SY *) & rgwDic [* pbsy]) -> sz;
22 pch = sz;
23 saat (* pch == * szSy ++)
24 {
25 if (* pch ++ == 0)
26 kembali (psy);
27}
28}
29 cwSz = 0;
30 jika (cch> = 2)
31 cwSz = (cch-2 / sizeof (int) +1;
32 * pbsy = (int *) (psy = PsyCreate (cwSY + cwSz)) - rgwDic;
33 Nol ((int *) psy, cwSY);
34 bltbyte (sz, psy-> sz, cch + 1);
35 kembali (psy);
36}
J8D
sumber
5
Ow ow ow ow ow ow!
Reinstate Monica
22
Masalah terbesar dengan sampel ini adalah nama variabel yang tidak berarti. Lepaskan prefiks Hongaria dan beberapa di antaranya panjangnya 1 atau bahkan 0 karakter.
finnw
8
Ini adalah Sistem hungaria, yang berguna dalam bahasa yang diketik dengan lemah (karena menyandikan informasi jenis yang penting untuk bekerja dalam bahasa-bahasa ini dalam nama-nama) - tidak berguna dalam bahasa yang diketik dengan sangat. Alternatif yang lebih baik untuk bahasa yang sangat diketik adalah Apps Hungarian, yang menyandikan informasi penting tentang penggunaan variabel (anggota, pointer, volatile, indexer) - sesuatu yang tidak didukung oleh bahasa itu sendiri.
Jason Williams
5
Bisa aja. Saya tidak pernah membingungkan penduduk lokal dengan anggota, dan saya tidak menggunakan bahasa Hongaria yang konyol itu untuk anggota / penduduk setempat / ladang / apa pun. Saya pikir mereka mungkin berguna untuk membedakan berbagai jenis string, seperti 'aman' dan 'tidak aman', seperti contoh Joel di Making Wrong Code Look Wrong
configurator
3
@configurator: Contoh Joel mengerikan, dia lebih baik memiliki jenis yang berbeda, maka kompiler akan menegakkan penggunaannya.
Matthieu M.
28

Saya pernah bekerja pada sebuah proyek di mana pimpinan proyek mengamanatkan bahwa setiap variabel - SETIAP variabel - diawali dengan "v". Jadi, vCount, vFirstName, vIsWarranty, dll.

Mengapa? "Karena kita sedang bekerja di VBScript dan semuanya adalah varian".

WTF.

Christopher Hawkins
sumber
93
Saya pernah bekerja dalam bahasa yang mengharuskan setiap variabel - SETIAP variabel - diawali dengan "$".
nohat
6
@nohat: Dan Anda menyadari bahwa itu luar biasa, bukan?
Josh K
Saya pernah bekerja dalam bahasa tempat semua variabel saya mulai dengan tanda baca seperti '$' atau '%' atau '@'. Saya masih melakukannya, sekarang dan kemudian.
David Thornley
3
Ini hanya benar-benar menjadi masalah ketika Anda diminta untuk meletakkan ffungsi sebelumnya, maka kode Anda benar-benar fUcked (vUp).
Joe D
1
Kedengarannya seperti berbagai versi Perl ...
26

Hampir lupa yang ini:

Kutipan dari seorang manajer:

Jangan memperbaiki atau mendokumentasikan bug masalah yang Anda temukan dalam kode Anda sendiri. Pelanggan akan membayar kami untuk mengidentifikasi dan memperbaikinya selama beberapa tahun ke depan.

Ini bukan untuk perangkat lunak konsumen, tetapi khusus untuk satu organisasi besar. Tidak perlu dikatakan, pelanggan membayar selama bertahun-tahun sesudahnya. Mungkin tampak sepele, tetapi mencoba mengabaikan bug lebih sulit daripada menemukan mereka.

David B
sumber
2
Ini adalah kebijakan yang mengerikan. Saya harap manajer ini dikalengkan.
Bernard
@ Bernard-Di sebagian besar organisasi menciptakan aliran pendapatan jangka panjang adalah alasan untuk promosi yang cepat. Mudah-mudahan, orang lain melihat kegilaan dalam hal ini dan secara tidak sengaja menabraknya di tempat parkir.
Jim Rush
24

Komentar XML yang dipaksakan pada semua metode, konstanta, enum, dan properti non-pribadi.

Itu menyebabkan beberapa kode berantakan, terutama karena hasil akhirnya adalah orang-orang baik saja memukul /// untuk membuat tulisan rintisan kosong untuk semuanya atau menginstal GhostDoc dan menambahkannya komentar yang dihasilkan secara otomatis:

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

[Sunting] Alasan saya menyebutkan ini sebagai standar yang konyol bukan karena saya pikir komentar metode bodoh tetapi karena kualitas komentar ini tidak ditegakkan dengan cara apa pun dan mengakibatkan hanya menciptakan banyak dan banyak kekacauan dalam file kode . Ada cara yang lebih baik untuk membuat dokumen kode yang bermakna daripada persyaratan build blind "must have comment".

Anna Lear
sumber
13
' Validations the handler' - uh-oh
Eric
8
+1 Ugh Saya benci ini. Saya pikir jika Anda menggunakan perangkat lunak untuk menghasilkan komentar maka Anda tidak membutuhkannya.
bleevo
9
Saya pikir ini bukan aturan yang buruk. Ketika membaca metode yang harus saya pertahankan untuk pertama kalinya, akan sangat membantu jika saya memiliki spesifikasi untuk semua argumen. Biasanya ada kehalusan (misalnya apa yang terjadi jika argumennya nol, bagaimana jika itu koleksi kosong, nama file yang tidak ada, dll.) Aturan lain yang bagus (IMHO) adalah metode nama harus kata kerja tetapi dalam contoh Anda itu kata benda.
finnw
3
@finnw Saya pikir ini praktik yang baik, tetapi standar yang buruk. Jika pengembang ada di papan tulis dan menulis komentar metode yang bermakna ketika mereka dibenarkan (detail pengecualian, dll), itu bagus. Jika tidak, Anda berakhir dengan kekacauan besar. Dan dalam kasus sebelumnya, Anda tidak perlu penegakan tingkat kompilasi sama sekali.
Adam Lear
7
Kasus klasik tanpa dokumen. Komentar yang tidak mengatakan apa pun selain yang jelas-jelas jelas harus dibunuh pada pandangan.
Cumbayah
23

Tidak benar-benar standar pengkodean, tetapi kami memiliki file dalam kontrol sumber yang disebut 'changelog.txt'

Setiap kali Anda membuat lapor masuk, Anda harus menambahkan entri ke file ini secara manual. Entri ini adalah nomor revisi subversi dan komentar lapor masuk Anda.

Ketika CTO baru dimulai dan seseorang memberitahunya hal ini, ia segera membuat keputusan eksekutif dan berkata, "Kami tidak akan melakukan ini lagi" dan menghapus file. Ini sudah berlangsung bertahun-tahun.

Jim A
sumber
6
Dan tidak ada yang tahu svn log?
Htbaa
1
Mereka yang memulai kebijakan sudah lama hilang dan mereka yang mengikuti terus menjalankannya. Saya mulai dalam minggu yang sama dengan CTO baru (teman saya) dan kami berdua melihat ini dan berkata WTF?
Jim A
20

Beberapa tempat yang pernah saya kerjakan bersikeras untuk mengomentari kode yang tidak digunakan atau tidak digunakan alih-alih menghapusnya. Alih-alih mempercayai VCS untuk sejarah, dll. VCS dikelola dengan susah payah dalam file melalui kode komentar.

Masalah besar yang saya temukan dengan ini adalah bahwa Anda sering tidak tahu mengapa kode itu dikomentari. Apakah itu karena beberapa dev secara aktif membuat perubahan dan ingin menyimpannya untuk referensi atau tidak diperlukan lagi?

Jeremy Wiebe
sumber
3
Saya telah menghapus banyak kode komentar lama baru-baru ini.
CoderDennis
2
Saya biasanya menghapus kode yang dikomentari kecuali jika disertai dengan penjelasan yang baik tentang mengapa itu dikomentari dan mengapa itu harus disimpan.
Jeremy Wiebe
Saya sangat setuju. Mengomentari kode selama Anda bekerja dengannya tidak apa-apa, tetapi semua yang masuk ke versi rilis / cabang utama harus batal dari kode yang dikomentari. Seseorang mengatakan kepada saya bahwa mereka "suka mengetahui bagaimana hal itu dapat dilakukan secara berbeda". Saya hanya merasa menjengkelkan karena alasan yang disebutkan: Apakah itu usang, solusi, cara lain untuk melakukannya? WTF
Anne Schuessler
Dengan VS2013 "Mengintip" ini semua keluar jendela. Tetapi kami memberikan komentar yang mengatakan "Mengubah Persamaan - Inisial" atau sesuatu, jadi seseorang bertanya-tanya apa kode lama itu akan terlihat di TFS / VCS jika mereka perlu. Jadi ini satu baris, bukan 10 baris yang dikomentari. Tapi VS2013 mengagumkan, itu menunjukkan sejarah TFS di sana untuk Anda.
Suamere
17

Standar pengkodean terburuk yang pernah saya ikuti adalah basis kode yang tidak memilikinya sama sekali. Saya lebih suka mengikuti standar pengkodean yang saya sangat tidak setuju daripada bekerja di basis kode di mana tidak ada sama sekali. Itu membuatnya jauh lebih sulit untuk mempelajari bagian-bagian baru dari basis kode.

JaredPar
sumber
16

Memaksa komentar inline untuk kontrol versi adalah tentang standar pengkodean yang paling tidak berguna yang saya abaikan.

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

Oracle DBA yang bersikeras untuk menggunakan ruang putih dengan benar sambil 'memelihara' database dengan tabel yang sangat diperdebatkan yang memiliki lebih dari 200 bidang dan 40 pemicu mendekati.

Ryan Roberts
sumber
Itu cukup keji
Evan Plaice
5
Mmm Dim Sum ...
konfigurator
Saya melakukan ini, sebelum kami memiliki kendali sumber, tentu saja. Setelah kami memiliki kontrol sumber, itu kebiasaan seperti itu, kami praktis membutuhkan intervensi bagi tim untuk berhenti melakukannya. Akhirnya kami berhenti dan menghapus semua yang ada ketika kami menemukannya.
Scott Whitlock
Dev senior kami masih mencoba untuk memaksa kami melakukan ini. Saya mengabaikan kebijakan itu setiap kali saya pikir saya bisa lolos begitu saja (dan kadang-kadang ketika saya tahu saya tidak bisa).
Joshua Smith
Kami memiliki seorang pria di tim kami yang masih melakukan ini di mana-mana (ia juga memasukkan hal-hal besar "Ubah Log" pada skrip SQL kami yang juga di bawah kontrol versi). Argumennya, seperti yang dijelaskan kepada saya, adalah bahwa setelah beberapa perubahan / komitmen Anda tidak ingat tanggal sesuatu diubah, jadi log perubahan itu baik untuk segera mengetahui siapa yang mengubah apa dan mengapa ketika Anda membuka file.
Wayne Molina
14

Saya melakukan review kode pada proyek yang dipimpin oleh timer pertama C ++ yang memutuskan bahwa semua fungsi anggota kelas harus diawali dengan nama kelas dan visibilitas:

class MyClass
{
   public:
      void MyClass_Public_setValue(int value);
}
pengguna1006
sumber
1
Apakah Anda bertanya mengapa ? Saya hanya ingin tahu motivasi mereka ..
JBRWilkinson
1
Wow, kenapa cowok itu bahkan menggunakan kelas ?
Mateen Ulhaq
9

Diperlukan untuk indentasi semua kode dengan empat spasi;)

RedFilter
sumber
2
Bagaimana ini buruk?
Jay Bazuzi
1
Karena maka setiap baris memiliki 4 ruang yang tidak dibutuhkan pada awalnya?
nohat
Oh, aku mengerti sekarang.
alternatif
21
Ya, StackOverflow memiliki standar pengkodean yang sangat buruk. :-)
P Shved
Indentasi besar memaksa Anda untuk menjaga level kode bersarang tetap rendah. Saya telah melihat indentasi 8 dan bekerja dengan baik.
Toon Krijthe
9

Saya punya pekerjaan bertahun-tahun lalu di mana semua kode kami harus rata kiri - tidak ada indentasi Orang yang datang dengan kebijakan itu tidak suka harus menggulir bolak-balik secara horizontal saat melihat garis panjang kode, menyamakannya bermain ping-pong dengan matanya.

Jeremy
sumber
Itu standar pengkodean yang mengerikan dan mengerikan yang harus diikuti. Dan alasan bodoh untuk itu juga!
gablin
4
Jika Anda perlu menggulir secara horizontal (misalnya lebih dari setengah halaman) mungkin ada yang salah juga. Tidak ada indentasi yang tidak baik karena membuat kode benar-benar tidak dapat dibaca. Saya mencoba untuk tetap dengan batas 78-col, tetapi jika diminta untuk melebihi jumlah itu saya tidak keberatan, tetapi saya mencoba menghindarinya.
Htbaa
8

Ini lebih merupakan contoh bagaimana tidak memiliki standar pengkodean dapat merugikan.

Seorang kontraktor yang bekerja di sebuah bank besar bersikeras bahwa mengikuti standar adalah yang terbaik yang pernah ada. Aplikasi ini ditulis dalam dBase / Clipper dimana ia adalah satu-satunya pengembang untuk dan tentu saja ia datang dengan standar.

  • Semuanya dalam huruf besar. Maksud saya segalanya, termasuk komentar langka yang dia buat.
  • Tidak ada lekukan
  • Penamaan variabel adalah sesuatu di sepanjang garis APRGNAME. A = ruang lingkup variabel, mis. P untuk publik, PRG = tiga karakter pertama dari file sumber yang membuat variabel, NAME = nama variabel dalam 6 karakter tersisa yang diizinkan oleh dBase / Clipper.
  • Panjang 4 dan 4 baris terakhir dari kode sumber adalah 80 * panjang. Mengapa? Jadi dia bisa mendengar printer dot matrix memulai dan menyelesaikan pencetakan file. Memori adalah seluruh program dicetak melalui mainframe mingguan, 20.000 halaman.
  • Saya yakin ada banyak lagi yang berhasil saya buang dari otak saya.

Saya adalah seorang programmer otodidak yang sangat baru pada tahap itu tetapi cukup tahu untuk tidak mendengarkan ilmuwan gila dan pergi dari sana sebelum saya meminta untuk mengambil alih proyek.

Dan ya, kami memberi tahu manajemen betapa buruknya praktik-praktik ini tetapi selalu mendapatkan yang biasa "membayar kontraktor ini dolar paling tinggi, ia harus tahu apa yang ia bicarakan".

Tim Murphy
sumber
7
Tolong, jangan mengejek dinosaurus yang lebih tua. Mereka memungkinkan kami.
P Shved
4
Kedengarannya seperti keamanan pekerjaan.
MIA
7
Memiliki penanda audio sehingga Anda tahu kapan setiap file dicetak dengan cerdik. Saya akan menambahkan \07ke awal setiap file sekarang.
konfigurator
2
Menggunakan skema penamaan seperti ini (Bukan huruf besar) masuk akal karena aturan "pelingkupan" variabel dBase tidak ada. Semuanya efektif secara global. Sebuah idigunakan untuk indeks array dalam satu prosedur dapat mengganggu dengan idalam prosedur panggilan. Anda perlu menggunakan PRIVATE ALL LIKE m*dan PRIVATE iuntuk mencegah "membayangi" ini
Gerry
8

Satu lagi ledakan dari masa laluku.

Kutipan dari pemilik perusahaan:

Tidak akan ada kode yang ditulis menggunakan bahasa interpretatif karena saya kehilangan 25 juta pada proyek {expletive} yang ditulis di Jawa.

Proyek Java adalah sistem perdagangan saham yang dirancang untuk menangani beberapa lusin saham, yang sekarang digunakan untuk memproses ribuan. Alih-alih mengatasi kekurangan desain atau perangkat keras yang buruk, seluruh perusahaan terpaksa mengubah semua aplikasi non C / C ++ menjadi C / C ++, dan semua pengembangan baru harus dalam C / C ++. Bahasa interpretatif berarti sesuatu yang tidak dikompilasi, dan pemilik hanya menganggap Assembler, C dan C ++ dikompilasi.

Untuk perusahaan 800 orang, di mana sebagian besar kode berada di Jawa dan Perl, ini berarti seluruh perusahaan menghabiskan sebagian besar waktu mereka selama beberapa tahun ke depan menulis ulang kode yang sangat bagus dalam C / C ++.

Cukup lucu, sekitar dua puluh tahun sebelum kegagalan ini, saya berada di perusahaan lain di mana pemimpin teknologi memutuskan bahwa logika penyortiran kami (itu adalah Bubble Sort) perlu direkam ulang dalam assembler alih-alih digantikan oleh Quick Sort karena - Algoritma melakukan tidak meningkatkan kinerja. Satu-satunya cara untuk meningkatkan kinerja adalah menulis ulang logika yang sama di assembler.

Dalam kedua kasus itu, saya pergi tak lama setelah dikte turun.

David B
sumber
Apakah salah satu perusahaan masih berjalan hari ini?
finnw
Yang 'pindah' ​​dari Jawa adalah, yang lain sudah lama hilang. Mereka tidak pernah selamat dari perpindahan dari TRS-80 ke PC.
David B
6

Seperti banyak programmer (tapi tidak cukup), saya benci dekorasi kode. Ini membuat saya marah ketika saya harus menggunakan awalan tanda dolar ($) untuk nama variabel, atau menggarisbawahi untuk variabel pribadi, bahkan tanpa getter / setter. Jika Anda perlu menghias kode Anda untuk memahaminya, maka Anda harus keluar!

Adam Harte
sumber
Nah, seperti yang dikatakan "Will", "Saya menambahkan dengan garis bawah sehingga variabel pribadi saya dikelompokkan dalam intellisense saya. Namun, saya hanya melakukan ini untuk variabel yang dicakup ke suatu jenis. Variabel yang dideklarasikan dalam metode atau lingkup yang lebih sempit, saya meninggalkan garis bawah" off. Memudahkan untuk memisahkan mereka dan menjaga variabel yang jarang digunakan bersama-sama. " dan aku harus setuju dengannya.
7wp
1
Saya tidak berpikir mengelompokkan variabel Anda bersama-sama dalam IDE milik favorit Anda adalah alasan yang cukup baik untuk menghapus semua kode Anda.
Adam Harte
Jika ini kode Anda, membuatnya dapat digunakan dalam IDE Anda tampaknya sepenuhnya masuk akal. Juga, menggarisbawahi menggarisbawahi adalah umum dalam banyak bahasa, jadi setiap kali orang melihatnya, mereka tahu apa artinya.
rjmunro
1
+1 Menggunakan IDE yang bagus (yang bisa menggunakan pencarian regex ) lebih masuk akal bagi saya. Scratch IDE, belajarlah menggunakan editor teks dan terminal dan Anda akan menjadi programmer yang jauh lebih baik. Sebagai catatan, saya tidak terlalu suka perl sigils, tetapi setidaknya mereka memiliki kegunaan, tidak seperti yang PHP.
alternatif
6
Huh ... salah satu dari orang-orang "IDE for the pussies".
Nailer
6

Saya telah bekerja dengan sistem web untuk sementara waktu di mana semua parameter yang dilewati harus dinamai P1, P2, P3 dll. Tidak ada kesempatan di neraka untuk mengetahui apa yang mereka inginkan tanpa dokumentasi yang luas.

Juga - walaupun tidak sepenuhnya merupakan standar pengkodean - dalam sistem yang sama, setiap file diberi nama xyz0001.ext, xyz0002.ext, xyz0003.ext, dll - di mana xyz adalah kode untuk aplikasi itu sendiri.

CB Du Rietz
sumber
6

Ini adalah waktu PANJANG yang lalu - 1976 tepatnya. Bos saya belum pernah mendengar tentang Edsger Dijkstra atau membaca masalah CACM, tetapi dia pernah mendengar desas-desus dari suatu tempat bahwa "GOTO itu buruk", jadi kami tidak diizinkan menggunakan GOTO dalam program COBOL kami. Ini sebelum COBOL menambahkan "end if", jadi pada saat itu hanya memiliki dua-dan-setengah dari tiga struktur kontrol klasik (urutan, jika / kemudian / lain, lakukan (yaitu lakukan saat)). Dengan enggan ia mengizinkan GOTO dalam program-program Dasar kami, dan memberikan instruksi cabang dalam program bahasa Assembler kami.

Maaf bahwa ini adalah semacam cerita "kamu harus ada di sana". Sejauh yang saya tahu, setiap bahasa yang ditemukan sejak tahun 1976 memiliki struktur kontrol yang memadai sehingga Anda tidak perlu menggunakan GOTO. Tetapi intinya adalah, bos tidak pernah tahu MENGAPA GOTO dianggap berbahaya, atau bahasa mana yang merupakan gangguan kekanak-kanakan dan yang merupakan penyakit fatal.

Mark Lutton
sumber
6

Saya bekerja dalam sebuah proyek adalah permintaan arsitek utama untuk menulis (terlalu) kode eksplisit. Salah satu contoh terburuk yang saya temukan dalam kode (dan dia dengan senang hati menyetujui) adalah sebagai berikut.

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

Bahkan ReSharper memberitahumu ini salah!

Jax
sumber
9
Anda akan sulit ditekan untuk mengembalikan sesuatu dari fungsi yang dinyatakan batal.
Mircea Chirea
7
@MAttB Pertimbangkan dalam kondisi apa elsecabang final ( ) akan diambil.
Richard
6
else {return string.Empty; } akan dieksekusi ketika 2 baris di atas telah diedit oleh pengembang pemeliharaan 5 tahun dari sekarang. Namun, mengembalikan string.Empty akan menyembunyikan fakta yang digunakan sebagai kondisi yang tidak mungkin . Alih-alih itu harus membuang InvalidOperationException ("Kode ini tidak dimaksudkan untuk mendukung tiga logika nilai");
MatthewMartin
1
Ini mengerikan. Ada apa dengan ini return verbose ? someString : someOtherString;?
Callum Rogers
1
@callum Operator ternary mungkin dilarang :) sudah ada sebelumnya ...
hplbsh
6

Di pekerjaan terakhir saya, "standar" akan menjadi istilah yang sangat kuat untuk apa yang diberikan kepada saya oleh orang yang mempekerjakan saya. Memprogram situs web dalam ColdFusion dan SQL, saya diberi persyaratan pengkodean seperti:

  • Jangan gunakan termasuk. Saya suka satu halaman besar
  • Selalu pisahkan kata-kata dalam nama variabel dan kolom dengan garis bawah (kecuali tidak aktif, nama depan, dll.)
  • Jangan pernah menggunakan singkatan - selalu tuliskan firstname (dia sering menulis fname dan sebagainya)
  • Jangan gunakan nama yang membingungkan (seperti jumlah_charged dan charge_amount, yang mengukur hal-hal yang berbeda tetapi terkait)
  • Jangan gunakan DIV , dan gunakan CSS minimal - gunakan tabel bersarang sebagai gantinya (saya menemukan kedalaman enam lapis, sekali).
  • Jangan tembolok pertanyaan apa pun. Pernah.
  • Akan menggunakan variabel di lebih dari satu halaman? Lingkup aplikasi.
  • Setiap halaman adalah blok coba / tangkap sendiri. Kami tidak membutuhkan / menginginkan penangan kesalahan global.

Saya mulai mengubah ini begitu dia berhenti.

Ben Doom
sumber
"Jangan gunakan nama yang membingungkan" tampaknya cukup adil bagiku ...
8128
1
Ini benar-benar pedoman yang adil. Maksud saya adalah dia tidak mengikutinya sama sekali. Saya kira idenya "tidak membingungkan" dan saya berbeda.
Ben Doom
4

Dalam hidup saya sebagai pembuat kode C ++, dua "aturan" yang benar-benar jahat diberlakukan:

  1. "Kami tidak dapat menggunakan STL, karena VC ++ 4.1 tidak mendukungnya (dan kami tidak dapat beralih ke VC ++ 6.0 saat ini)."
  2. "Jangan tidak menggunakan QuickSort, karena bisa O (n ^ 2) dalam kasus-kasus buruk; menggunakan implementasi ini dari algoritma heapsort I (nama pemimpin proyek dihapus) menulis sebagai mahasiswa."

sumber
6
Apa yang salah dengan HeapSort pimpinan proyek?
7wp
4
Sebenarnya jika kode yang diterima input pengguna eksternal QuickSort mungkin salah karena terbuka untuk O(n^2)serangan DOS (memberi makan input kasus terburuk). Juga mengapa itu tidak mungkin untuk beralih - itu sendiri adalah alasan yang sah untuk tidak menggunakan STL.
Maciej Piechotka
4

Saya terpaksa memiliki dokumentasi XML untuk semua kelas dan anggota kelas. Termasuk pribadi. Saya terpaksa menggunakan komentar ghostdoc default.

public class User 
{
    /// <summary>
    /// the _userID
    /// </summary>
    private int _userID;
}
Carl Bergquist
sumber
Sangat mirip dengan jawaban sebelumnya ini .
finnw
Iya. Semua yang saya minta komentar pribadi anggota juga. Yang bahkan lebih tidak masuk akal.
Carl Bergquist
Didorong untuk menggunakan ghostdoc ?! Gah
konfigurator