Apakah standar pengkodean bahkan dibutuhkan lagi?

13

Saya tahu bahwa sudah terbukti bahwa standar pengkodean sangat membantu. Namun, ada banyak alat dan IDE berbeda yang akan memformat dengan standar apa pun yang lebih disukai programmer. Selama kode itu rapi / dikomentari (dan bukan kekacauan spageti), saya tidak melihat perlunya standar pengkodean.

Apakah ada argumen untuk pengembangan standar pengkodean (kami tidak memilikinya, tapi saya ingin membuatnya)?

Anak kucing
sumber
Jika Anda memutuskan untuk menerapkan standar pengkodean, pertimbangkan untuk menerapkannya selama integrasi berkelanjutan.
Leif Carlsen
10
Haruskah semua orang di tim diminta untuk menggunakan IDE yang sama?
Keith Thompson
10
Tidak ada jumlah pemformatan ulang kode yang akan menggantikan pedoman seperti Jangan berlebihan operator kecuali dalam keadaan khusus yang jarang terjadi. . Jika standar pengkodean Anda kebanyakan tentang cara kode Anda diformat, Anda memerlukan standar yang lebih baik.
Caleb
Tidak semua orang menggunakan IDE, saya menggunakan Acme misalnya.
dysoco

Jawaban:

33

Namun, ada banyak alat dan IDE berbeda yang akan memformat dengan standar apa pun yang lebih disukai programmer.

Semoga beruntung dengan itu. Pengalaman saya, ada sejumlah kecil alat (nol!) Yang dapat memformat ulang kode dengan benar dari format X ke format Y. Ada terlalu banyak hal yang menghalangi. Tab vs spasi, pernyataan multi-baris, dll. Lihat saja implementasi GNU dari file pustaka standar C ++. Yang dapat Anda lakukan adalah membuat IDE Anda lakukan adalah selalu menggunakan spasi alih-alih tab dan jangan repot-repot memformat ulang kode asing. Sekarang kode Anda terlihat seperti yang Anda suka, dan kode asing terlihat seperti cara penulis asli menulisnya.

Gaya lekukan tertentu adalah hal terakhir yang harus ditentukan oleh standar pengkodean. Itu hampir memulai pemrograman perang agama. IMO, standar pengkodean harus menentukan rangkaian gaya indentasi yang dapat diterima, tetapi menyerahkan spesifikasinya kepada pembuat paket. Gaya lekukan adalah, atau seharusnya, bagian kecil dari standar pengkodean. Aturan nol angka standar pengkodean: Jangan memusingkan hal-hal kecil. Gaya lekukan adalah hal kecil.

Hal yang lebih besar:

  • Bagaimana saya memberi nama berbagai hal?
  • Apakah bagian-bagian tertentu dari bahasa terlarang?
  • Apakah kode perlu dikompilasi bersih, dan dengan pengaturan kompiler apa?
  • Apakah kode harus lulus metrik tertentu?
  • Tes seperti apa yang dibutuhkan?
  • Dokumentasi apa yang dibutuhkan, baik dalam kode (komentar) dan di tempat lain?
  • Yang paling penting, bagaimana cara mendapatkan pengabaian terhadap standar?

Adendum
Mungkin yang lebih penting adalah apa yang tidak dimasukkan ke dalam standar pengkodean. Topik seperti cara menulis persyaratan tidak termasuk dalam standar pengkodean. Detail tentang pengujian juga tidak termasuk. Suatu proyek tidak boleh menggunakan standar pengkodean sebagai stand-in untuk rencana manajemen proyek, rencana manajemen pengujian, rencana verifikasi dan validasi, dll. Tujuan dari standar pengkodean adalah untuk meningkatkan keamanan kode, kualitas, kemampuan memahami, pemeliharaan, dan "ilities" lainnya. Ada banyak cara untuk memastikan bahwa ini tidak akan terjadi. Hanya sedikit: Menjadikan standar sebuah buku serumit undang-undang pajak beberapa negara, menghasut program perang agama, memiliki konvensi penamaan yang buruk.

Standar pengkodean dapat memiliki konsekuensi yang tidak diinginkan. Contoh: Beberapa orang bodoh dari seorang insinyur proyek akan menafsirkan "tidak ada aturan angka ajaib" yang berarti if (index == 0) {...}dan for (ii = 0; ii < 3; ++ii) {...}harus diubah menjadi if (ZERO == index) {}dan for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}Jangan tertawa. Saya sudah melihatnya terjadi. Saat ini ketika saya menulis standar pengkodean, itu adalah "pedoman angka ajaib" dan bukan aturan untuk menangkal kebodohan semacam ini.

Standar pengkodean bukanlah pertahanan nomor satu terhadap gaya pemrograman yang buruk / praktik pengkodean yang berbahaya. Ulasan kode. Meskipun telah bertahun-tahun diotomatisasi, masih ada yang lebih baik daripada memiliki mata manusia yang agak subyektif melihat dan memberikan penilaian pada sepotong kode.

David Hammen
sumber
+1 untuk daftar hebat - menjadikannya jawaban favorit saya. Terutama kode terlarang, peringatan kompiler, pengujian, dan dokumentasi. Tapi saya masih berpikir tab vs spasi dan lekukan itu penting. Orang lain menyebutkan mimpi buruk ini ketika membuat perbedaan dalam kontrol sumber.
GlenPeterson
Cara mudah untuk berurusan dengan tab vs spasi adalah dengan melarang tab dalam standar pengkodean. Cara mudah untuk menegakkan ini adalah memiliki checkin hook yang menolak checkin atau yang mengonversi tab yang digunakan sebagai spasi kosong ke spasi. Secara otomatis memverifikasi beberapa standar pengkodean seperti saat membangun malam atau di checkin (lebih disukai karena umpan balik hampir instan) adalah fitur yang sangat bagus untuk dimiliki. Bagaimana jika checkin diizinkan (atau dipaksakan), dan konversi membuat berantakan? Ada jawaban mudah untuk itu juga: Ulasan kode. POS yang jelek seharusnya tidak lulus; bahkan tidak boleh ditinjau.
David Hammen
Perhatikan bahwa aturan "tidak ada tab" (sesuatu yang saya hindari dalam daftar saya karena pendapat berbeda) tidak berarti Anda tidak dapat menggunakan tab saat Anda mengetik kode. Editor yang baik dapat mengonversi tab yang diketikkan oleh programer ke whitespace. Jika editor Anda tidak dapat melakukannya, mungkin berpikir untuk beralih ke editor yang lebih baik.
David Hammen
Tidak ada argumen di sana. Hanya mengatakan bahwa lekukan / pemformatan termasuk dalam daftar. Tab mungkin sesuai untuk HTML atau file yang diunduh atau diuraikan pada saat run-time.
GlenPeterson
@GlenPeterson - Indentasi / pemformatan ada dalam daftar saya, atau tepat sebelum daftar saya: "IMO, standar pengkodean harus menentukan rangkaian gaya indentasi yang dapat diterima, tetapi menyerahkan spesifikasinya kepada penulis paket." Dan ya, ada pengecualian untuk aturan "tidak ada tab". Makefiles, misalnya.
David Hammen
60

Standar pengkodean tidak hanya tentang parameter yang disukai indent- mereka juga mencakup konvensi penamaan, konvensi komentar, dan sejumlah besar rekomendasi yang mungkin untuk idiom, penggunaan fitur bahasa, dll.

Lebih penting lagi, Anda masih perlu mendokumentasikan semua ini di suatu tempat. Dan akhirnya, tidak semua orang ingin menggunakan IDE yang memformat ulang kode seperti itu ...

datang badai
sumber
1
Jawaban yang bagus, itu memperluas pengetahuan saya dengan penjelasan yang bagus tentang hal-hal yang tidak saya pikirkan. +1
SomeKittens
Mereka juga dapat membahas hal-hal seperti bagaimana menangani kompatibilitas lintas platform, yang sangat penting jika pengembang baru tidak berpengalaman dalam menulis kode lintas platform.
Velociraptors
3
Jika menurut Anda jawaban ini bagus dan menjawab pertanyaan Anda, cukup tandai saja.
marktani
3
Belum lagi memformat ulang massal dapat menyebabkan sakit kepala ketika Anda melempar standar lain yang baik di sana: kontrol sumber.
Matthew Scharley
1
@MatthewScharley umumnya Anda mendorong kode yang diubah melalui formatter dan kemudian melakukan (setelah mungkin satu tes terakhir berjalan untuk memastikan formatter tidak merusak apa pun) sehingga hanya kode yang diformat dapatkan pada repo
ratchet freak
13

Jika Anda menggunakan gaya yang konsisten dalam suatu tim, kode Anda menjadi lebih mudah dibaca. Ketika kode Anda menjadi lebih mudah dibaca maka tim Anda akan lebih produktif. Mereka akan lebih produktif karena mereka tidak perlu menguraikan kode secara mental, dan dapat fokus pada logika daripada sintaks ketika meninjau dan memelihara kode.

Jika setiap orang membiarkan IDE memformat ulang kode sesuai pilihan mereka, Anda memiliki satu dari dua masalah: Anda harus memastikan bahwa Anda selalu mengubahnya kembali ke format asli saat menyimpan, atau menderita kenyataan bahwa diff Anda akan menunjukkan banyak suara, membuatnya lebih sulit untuk melihat apa yang telah berubah dalam logika kode.

Bryan Oakley
sumber
4
Berbeda! Saya tidak memikirkan itu.
SomeKittens
1
Ya, tentu saja jangan biarkan semua orang memformat ulang kode seperti yang mereka sukai setiap kali mereka mengerjakannya. Itu hanya kekacauan. Bahkan standar yang buruk lebih baik dari itu. Diberi pilihan, saya akan mencoba melakukan apa yang paling populer dalam bahasa tersebut sehingga pengembang baru dapat mempercepat dengan cepat. Gunakan web untuk menemukan standar standar untuk bahasa Anda.
GlenPeterson
5

Jawaban Singkat: Ya, itu mencerminkan kualitas .

Apa itu dan mengapa kita membutuhkannya?

Standar pengkodean adalah bagian yang sangat penting dari perangkat lunak berkualitas tinggi. Mereka memang meningkatkan produktivitas dalam proses pengembangan, membuat kode lebih mudah dipelihara, dan menjaga agar kode tidak terikat pada satu orang atau tim. Konsistensi dalam standar pengkodean juga membedakan kode yang dibuat secara prematur dari seni yang dibuat dengan baik.

masukkan deskripsi gambar di sini

OK, setiap pengembang tahu bahwa konvensi pengkodean itu baik. Tetapi dari mana seharusnya standar berasal?

Sebagian besar ditentukan oleh vendor yang memiliki produk. Setiap pengembang dapat memilih dari banyak standar pengkodean industri. Beberapa perusahaan Microsoft, Oracle dan Sun Microsystems menawarkan pedoman.

Apakah ada argumen untuk pengembangan standar pengkodean (kami tidak memilikinya, tapi saya ingin membuatnya)?

Ya, ada standar industri yang direkomendasikan untuk digunakan. Namun, setiap standar pengkodean khusus untuk platform pengembangan. Dengan demikian, standar pengkodean sebagian besar spesifik bahasa. Misalnya, Java memiliki standar yang berbeda dari .NET. Sebagai contoh C # .NET menggunakan standar itu dalam referensi ini .

Standar umum

Standar umum tidak memiliki ketergantungan pada bahasa pemrograman apa pun. Selain standar yang ditawarkan vendor, alias standar pengkodean industri yang disebutkan, ada berbagai notasi pemrograman seperti Notasi Hongaria atau CamelCase . Saya pikir Microsoft. NET pengkodean standar awalnya didasarkan pada notasi CamelCase.

Standar dan pedoman pengkodean tim

Dalam pemikiran, setiap tim pengembang harus menyetujui standar pengkodean segera setelah proyek dimulai. Pedoman pengkodean biasanya dibuat oleh Ketua Tim atau kepala Arsitek perusahaan. Biasanya dokumen terbuka harus diikuti dan diperbaiki jika diperlukan. Misalnya, di perusahaan kami, kami memiliki halaman Wiki tempat dokumen ini diunggah dan tersedia untuk pengembang perusahaan.

Yusubov
sumber
Saya pikir pertanyaannya adalah bertanya mengapa hal-hal itu penting. Anda menggambarkan apa yang mencakup standar pengkodean, tetapi pertanyaannya adalah bertanya mengapa itu diperlukan.
Bryan Oakley
saya belum menyelesaikan jawaban saya
Yusubov
Itu While Notharus benar-benar menjadi Do Until.
Ry-
2

Saya akan mengambil pendapat kontroversial dan mengatakan tidak, Anda tidak perlu standar pengkodean . Entah aturan tersebut, seperti yang Anda katakan, pedoman yang dapat ditegakkan IDE, praktik umum terbaik yang harus diikuti oleh setiap orang di setiap perusahaan, atau mereka adalah panggilan kasus per kasus tim per kasus yang harus dilakukan oleh lebih dari satu orang di tim yang cakap melalui pemrograman pasangan atau ulasan kode.

Hal-hal seperti Bagaimana kita memberi nama variabel ini? Fitur bahasa apa yang harus kita gunakan? Haruskah kita menghindari? Pengujian apa yang terbaik? Ini sebaiknya tidak dijawab sampai kita menemukan masalah yang didefinisikan sempit yang sedang kita kerjakan sekarang .

Dikristalisasi dari keputusan kecil ini, standar / pola informal dalam tim dapat muncul, berdasarkan persimpangan dengan domain masalah saat ini dan teknologi yang digunakan. Mengkodifikasi ini berarti kami berpikir bahwa hal-hal seperti standar penamaan, bagian bahasa yang sesuai, dll digunakan pada proyek-proyek ini, berdasarkan ratusan keputusan mikro, dan diadopsi secara informal oleh tim-tim ini harus memandu setiap proyek bergerak maju.

Pada prinsipnya itu terdengar seperti hal yang hebat, tetapi dalam kenyataannya itu hanya menjadi magnet bagi politik. Alat apa yang bisa kita paksa semua orang gunakan? Apa yang ingin saya paksa orang lain hindari? Jika semua orang menyetujui pertanyaan-pertanyaan ini, kami tidak memerlukan standar. Kami baru saja melakukannya. Dalam pengalaman saya standar keluar dari keinginan untuk satu subset dari pengembang untuk melakukan kontrol atas subset lain. Biasanya jenis politik ini dan kebijakan teknologi yang mengikutinya hanya menghambat inovasi daripada memberikan panduan.

Jika Anda menginginkan panduan nyata , alih-alih membaca standar dengan banyak aturan yang tidak membantu, temui anggota tim Anda yang cakap dan tanyakan apa yang mereka pikirkan. Apa yang telah mereka bakar? Bagaimana mereka menyarankan Anda menulis kode? Anda akan mendapatkan beragam jawaban berguna dengan banyak pengalaman berharga untuk mendukungnya. Anda akan melihat banyak persimpangan berdasarkan pengalaman umum. Alih-alih monokultur yang dipaksakan oleh standar, Anda juga akan melihat banyak keanekaragaman yang hanya dapat membantu Anda melihat banyak cara yang valid untuk menyelesaikan masalah.

Dan ketika seseorang mengatakan kepada Anda untuk tidak melakukan sesuatu karena aturan dalam "standar" tetapi tidak memiliki pengalaman atau cadangan yang masuk akal untuk klaim mereka, abaikan saja. Di sini standar belum melayani siapa pun atau menjadikan siapa pun pengembang yang lebih baik.

Doug T.
sumber
Baik-baik saja oleh saya - satu hal yang tidak perlu buang waktu, terutama jika semua pengembang memiliki lisensi Resharper dan fxcop / stylecop berjalan di server build.
StuartLC
1
Standar harus, dan biasanya, merupakan puncak dan konsolidasi pengalaman masyarakat. "Orang-orang yang cakap" yang Anda rujuk. Jika mereka salah, kembangkan mereka, tetapi mengabaikannya adalah resep untuk anarki.
Andrew
@Andrew Pengalaman-pengalaman itu mungkin tidak berlaku dan mungkin hanya mengikat Anda pada banyak ide yang tidak ada hubungannya dengan masalah saat ini yang sedang Anda pecahkan
Doug T.
1
+1 untuk menghambat inovasi, mengendalikan himpunan bagian, praktik terbaik umum, dan politik. Mendidik, jangan mengatur!
kirk.burleson
"Tidak ada standar pengkodean tertulis, bergantung pada konvensi dan minta bimbingan" bekerja cukup baik dalam tim kecil (kurang dari, saya tidak tahu, 50? 100?). Ketika Anda memiliki ribuan orang, bermigrasi bolak-balik di antara proyek-proyek dalam basis kode, sangat membantu memiliki seperangkat pedoman tertulis untuk kode tersebut.
Vatine
1

Sekarang pesawat komersial terbang dengan kawat, Anda akan berharap program menerbangkan pesawat berdasarkan karya input pilot. Ketika programmer menulis kode seperti itu, Anda berharap mereka mengikuti serangkaian aturan ketat untuk menghindari kesalahan pemrograman yang biasanya dihindari. Salah satu cara untuk melakukan ini adalah dengan standar pengkodean.

Lihat: Usulan Administrasi Penerbangan Federal C dan C ++ Standar Pengkodean

Perlu saya katakan lebih.

Catatan: Saya tidak dapat menemukan standar aktual dari FAA online, tetapi saya telah melihatnya.

Guy Coder
sumber
Itu adalah standar pengkodean buruk prototipikal. Itu terlalu lama, ini menimbulkan masalah agama, dan yang paling penting, itu berjalan bertentangan dengan pemrograman C ++ modern. Sebagai contoh, itu menghalangi POD (data lama biasa), dan aturannya tentang pengecualian berkisar dari buruk ke kuno. Buruk: Mencoba menangkap std :: bad_alloc ternyata ide yang sangat buruk. Archaic: Gagasan Java untuk menentukan semua pengecualian yang mungkin dilempar dan menangkap semua pengecualian yang dilemparkan oleh fungsi-fungsi yang disebut tidak bekerja di C ++. Jauh lebih baik adalah menulis kode pengecualian-aman berdasarkan konsep konsep pengecualian pengecualian David Abrahams.
David Hammen
1

Bagi saya ini masalah disiplin dan disiplin selalu membantu, ini mencerminkan kualitas pekerjaan yang Anda hasilkan.

Karena itu, saya akan membuat standar pengkodean tetap melihat IDE dan / atau alat yang digunakan. Lebih jauh, IDE harus dikonfigurasikan secara identik (misalnya setiap IDE pengembang harus menggunakan semua tab atau semua ruang putih untuk lekukan dan IDE semua orang harus memiliki panjang tab yang sama) untuk setiap pengembang sehingga setiap orang dapat mengikuti standar dengan mudah ...

Selain itu, skrip check-in dapat dikembangkan dan digunakan yang dapat membantu dalam mematuhi standar pengkodean sampai batas tertentu, misalnya skrip dapat memperbaiki lekukan sebelum benar-benar memasukkan file yang diperiksa ke dalam sistem kontrol versi.

Ingin tahu
sumber
1

Standar pengkodean TIDAK bisa lebih penting lagi! Saya pengguna CakePHP yang rajin dan saya ingin meninjau perubahan dari versi ke versi dan para pengembang tidak mengikuti standar di sana.

Bahkan, saya sangat kesal dengan perbedaan gaya sehingga saya harus menulis Kata-kata Singkat Tentang Konvensi Pengkodean . Dibutuhkan banyak waktu dan uang untuk membawa pengembang baru ke tim yang sudah ada - bayangkan saja membawa pengembang baru tanpa standar ... mempelajari kode akan menjadi terlalu mustahil berikutnya.

endyourif
sumber