Ketika saya membaca pertanyaan ini , jawaban yang paling banyak dikutip mengutip Paman Bob tentang standar pengkodean , tetapi saya bingung dengan tip ini:
- Jangan menuliskannya jika Anda bisa menghindarinya. Alih-alih, biarkan kode menjadi cara standar ditangkap.
Ini memantul di otak saya, tetapi saya tidak dapat menemukan tempat untuk menempel. Jika orang baru bergabung dengan tim, atau mengubah standar pengkodean, tidak bisakah ada kebingungan informasi?
Mengapa saya tidak menulis standar pengkodean?
development-process
coding-standards
Malas halal
sumber
sumber
Jawaban:
Ada beberapa alasan.
Standar pengkodean bukan tentang apa yang harus dilakukan orang, tetapi tentang apa yang sebenarnya mereka lakukan. Ketika orang menyimpang dari standar, ini harus diambil dan diubah melalui proses peninjauan kode dan / atau alat otomatis.
Ingat, inti dari standar pengkodean adalah untuk membuat hidup kita lebih mudah. Mereka adalah jalan pintas untuk otak kita sehingga kita dapat menyaring hal-hal yang diperlukan dari hal-hal penting. Jauh lebih baik untuk menciptakan budaya peninjauan untuk menegakkan ini daripada memformalkannya dalam sebuah dokumen.
sumber
Ada interpretasi lain. Saya tidak percaya itu yang dimaksud Paman Bob, tetapi patut dipertimbangkan.
Jangan menangkap standar pengkodean dalam dokumen. Tangkap dalam kode, dengan memiliki proses otomatis yang memverifikasi standar terpenuhi .
Jangan mengandalkan orang yang mereferensikan dokumen, tetapi pada saat yang sama, jangan bergantung pada orang yang menafsirkan kode yang sudah ada dan mengidentifikasi konvensi apa dan kebetulan apa.
Masukkan sesuatu seperti Checkstyle ke dalam komit Anda. Ini dapat menegakkan aturan dasar seperti memformat dan menamai standar, dan bukannya mengeluarkan upaya mental dalam mempertimbangkan gaya, yang semuanya bisa diturunkan ke proses bodoh yang setidaknya dijamin menyeluruh.
Jika itu penting, maka tentukan dengan tegas apa yang Anda inginkan, dan gagal jika itu salah.
sumber
After the first few iterations, get the team together to decide.
Dengan hanya aturan # 3 sepertinya dia menganjurkan tidak ada standar pengkodean, tetapi ketika mempertimbangkan semua aturan bersama-sama, dan yang paling utama semua # 6, sepertinya dia benar-benar berkata: "Jangan memaksakan standar pengkodean pada awalnya. Biarkan berkembang secara organik, dan setelah beberapa saat duduk dengan tim Anda untuk menuntaskan detail. " Yang sangat berbeda dari "Jangan memformalkan standar pengkodean Anda" (yang tampaknya menjadi inti dari banyak jawaban).Orang-orang mengabaikan tujuan sebenarnya dari suatu dokumen standar pengkodean, yaitu untuk menyelesaikan perselisihan .
Sebagian besar keputusan dalam standar pengkodean hanya akan memiliki efek yang sangat kecil pada keterbacaan dan produktivitas. Terutama jika Anda mengadopsi gaya 'normal' untuk bahasa tersebut, dan perancang bahasa mulai menyadari bahwa ini harus menjadi bagian dari spesifikasi (misalnya Go).
Karena mereka sangat sepele, argumen dapat menjadi sangat panas dan berjalan tanpa henti, benar-benar merusak produktivitas dan kohesi tim. Atau dapat mengaburkan riwayat perubahan Anda dengan memformat ulang tanpa akhir antara dua atau lebih gaya yang disukai orang.
Memiliki standar tertulis mengakhiri argumen. Manajer dapat mengarahkannya dan membelokkan ketidakpuasan terhadap dokumen. Anda bisa berdebat dengan selembar kertas tetapi itu tidak akan mendengarkan Anda.
(Lihat juga The Tyranny of Structurelessness )
sumber
Karena komentar adalah dusta .
Standar pengkodean adalah komentar besar yang bagus tentang apa yang harus kode. Kode itu sendiri adalah sumber utama kebenaran. Kebenaran dalam hal ini bukan perilaku kode, itu gaya yang diungkapkan. Jika standar Anda belum tercermin dalam kode Anda, Anda memiliki banyak pekerjaan di depan Anda.
Paman Bob melihat komentar sebagai kegagalan pribadi programmer, karena itu membuktikan bahwa ia tidak berhasil mengekspresikan tujuan fragmen kode dengan bahasa pemrograman itu sendiri. Demikian pula, dokumen standar adalah kegagalan untuk mengekspresikan gaya yang koheren dalam basis kode.
Pemrogram baru harus menghabiskan waktu melihat kode, tidak menghabiskan berhari-hari membaca dokumen standar multi-bab (saya harus melakukan ini, huh).
Sebuah dokumen standar bukanlah ide yang buruk, tapi saya pernah berada di toko pemrograman tempat mempertahankan dokumen standar adalah pekerjaan penuh waktu seseorang. Tolong, jika Anda harus menyimpan dokumen standar, simpan ke halaman. Tetapi jika Anda sudah memiliki kode, tidak adakah yang bisa mengumpulkan dokumen yang sama dalam waktu kurang dari sehari?
Memiliki standar kode adalah penting. Memiliki dokumen yang menentukan apa yang bukan.
sumber
Jika Anda menanyakan alasan di balik pendapatnya, maka Anda mungkin memiliki jawaban hanya jika dia akan mengirim jawaban di sini ( pendapat kami tidak relevan), namun ...
Jika Anda bertanya apakah dia benar tentang hal itu: biarkan saya menjadi satu-satunya yang tidak populer (sejauh ini) untuk mengatakan bahwa Anda tidak punya alasan untuk menghindarinya.
MENULISKANNYA . Namun saya akan mencoba menjelaskan alasan saya ...
David menyarankan dalam komentar bahwa poin utama dari jawaban Stephen bukanlah mengapa Anda tidak harus menulis dokumen tetapi dalam bentuk apa mereka. Jika pedoman diformalkan dalam alat (bukan hanya tinjauan kode manual) maka saya dapat setuju (ketika hukum tidak mensyaratkan hal lain). Harap perhatikan bahwa sayangnya alat tidak dapat memeriksa semuanya (teori perhitungan bukan teman kami) sering karena mereka terbatas pada unit terjemahan atau paket tertentu atau apa pun bahasa favorit Anda yang disebut batas .
Namun kata-kata Paman Bob tidak membuat saya berpikir dia berbicara tentang itu.
Bisakah saya tidak setuju dengan pakar senior seperti itu? Saya lakukan, untuk hampir setiap poin dalam posting yang dikutip (lihat juga bagian kedua dari jawaban ini untuk perincian). Mari kita coba memahami mengapa (dengan asumsi Anda sudah tahu bahwa pedoman pengkodean bukan hanya tentang masalah format kecil ).
"Free self-organizing programming" baik untuk seorang ninja berusia 16 tahun tetapi organisasi memiliki persyaratan lain :
Jika Anda memikirkan orang sebelum proses maka saya hanya bisa menyarankan membaca tentang TPS: manusia adalah bagian utama Lean tetapi prosedurnya sangat formal.
Tentu saja organisasi kecil dengan hanya satu tim dapat membiarkan tim memutuskan standar untuk diadopsi tetapi kemudian harus ditulis. Di sini, di Programmers.SE Anda dapat membaca posting oleh Eric Lippert: Saya kira kita semua setuju dia adalah pengembang yang berpengalaman, ketika dia bekerja untuk Microsoft dia harus mematuhi pedoman tertulis mereka (bahkan jika beberapa aturan mungkin salah , tidak berlaku atau tidak berguna padanya.) Bagaimana dengan Jon Skeet? Pedoman Google sangat ketat (dan banyak orang tidak setuju dengan mereka) tetapi dia harus mematuhi pedoman tersebut. Apakah itu tidak sopan kepada mereka? Tidak, mereka mungkin bekerja untuk mendefinisikan dan meningkatkan pedoman tersebut, sebuah perusahaan tidak dibuat oleh satu anggota (atau satu tim) dan masing-masing tim bukan pulau .
Contohnya
Paman Bob
Benar, sampai Anda tidak memiliki standar dan organisasi Anda memberi Anda tugas untuk membangunnya .
Tidak, untuk semua alasan yang dijelaskan di atas. Bahkan jika Anda berpikir untuk memformalkan pemformatan kode saja (hal yang paling tidak berguna yang mungkin ingin Anda formalkan), saya masih memiliki memori perang tanpa akhir (dan tidak berguna) tentang pemformatan. Saya tidak ingin menghidupkannya lagi dan lagi, atur sekali untuk semua.
Tidak, untuk semua alasan yang dijelaskan di atas (tentu saja kecuali jika Anda akan memperbaiki semua kode Anda dalam sekali pakai ketika pedoman berubah). Apakah Anda ingin membiarkan kode apa adanya? Bagaimana Anda memeriksa basis kode untuk memahami pedoman saat ini ? Mencari berdasarkan usia file dan mengadaptasi gaya pengkodean Anda ke sumber usia file?
Benar, pedoman harus singkat atau tidak ada yang akan membacanya. Jangan ulangi yang sudah jelas.
Tidak hanya, standar yang baik adalah tentang kualitas kecuali jika Anda ingin memiliki standar hanya tentang detail kecil .
Lihat poin pertama dan jangan lupa bahwa standar pengkodean biasanya merupakan proses yang membutuhkan waktu bertahun-tahun untuk dikembangkan dan disempurnakan: beberapa iterasi, mungkin dengan pengembang junior? Benarkah? Apakah Anda ingin mengandalkan memori satu anggota senior (jika ada)?
Tiga catatan:
sumber
sumber
Ada banyak alasan untuk ini. Berikut beberapa pertimbangan:
Berapa banyak waktu orang menghabiskan "belajar" standar kode hanya untuk memiliki banyak waktu masuk ke seluruh tim meninjau, berdiskusi, mendokumentasikan, merevisi ... dll. Standar kode. Ini seperti terus-menerus mendiskusikan "Buku Pegangan Karyawan" Anda - seberapa sering hal itu masuk dalam agenda rapat tim?
Ketika sebuah proyek mengalami kerusakan / disimpan / dll. maka beberapa orang yang tetap biasanya tidak dapat terus mematuhi (atau mungkin bahkan belum membaca) standar. Hal berikutnya yang Anda tahu, semua upaya untuk "menjaga kode tetap bersih" ternyata terbuang sia-sia.
Jika proyek terhenti atau pimpinan baru dimasukkan, sangat mungkin orang tersebut akan mengabaikan aturan sebelumnya dan ingin melakukannya dengan cara yang baru. Sekali lagi, apa yang diperoleh dengan mengkodifikasi standar ??
Anda harus yakin membaca # 6:
Dengan kata lain, ketika saatnya untuk memulai suatu proyek, ikuti saja alirannya untuk sementara waktu. Kemudian diskusikan aturan umum standar pengkodean yang digunakan oleh tim saat ini - dan pada dasarnya ikuti mereka. Dengan begitu, Anda memaksimalkan upaya yang dilakukan untuk meningkatkan produk sambil meminimalkan upaya yang diperlukan untuk menulis, meninjau dan mendokumentasikan "gula sintaksis" yang digunakan untuk mendapatkan kode yang dapat dieksekusi.
Sangat sedikit tim yang memperoleh manfaat besar dari standar pengkodean. Biasanya, "keterbacaan" terlalu kabur - dan sebagian besar pengembang tidak mendapatkan banyak manfaat dari aturan yang tepat tentang penspasian, baris baru, dll. Tetapi Anda dapat menghindari pengembang yang terus-menerus mengganggu dengan memiliki setidaknya beberapa aturan.
sumber
Jawaban lain yang menurut saya tidak cukup jelas dinyatakan, adalah itu juga berarti bahwa orang tidak mengikuti aturan secara membabi buta. Ini berarti bahwa orang harus datang dengan pembenaran aktual untuk keputusan desain dan konvensi pengkodean mereka, daripada hanya bergantung pada fakta bahwa itu telah ditulis untuk membenarkannya.
sumber
Pertama, sejauh yang saya tahu, Paman Bob adalah orang Jawa, ini sangat penting untuk memahami apa yang dikatakannya.
Ketika bekerja di tim Java atau C #, jika kode saat ini telah ditulis oleh pengembang yang berpengalaman, mudah bagi saya untuk mengambil gaya pengkodean dan mengikuti perkembangannya. Jika saya tidak mau melakukannya, mungkin saya bukan orang yang tepat untuk pekerjaan itu ... Jika tidak ada peninjauan kode atau pemrograman pasangan untuk menjemput saya ketika saya tidak mengikuti gaya, maka perusahaan memiliki masalah yang lebih besar dari cara saya memberi nama bidang anggota!
Baik Java dan C #, bersama dengan sebagian besar bahasa modern, telah didefinisikan sehingga ada beberapa perangkap "sederhana" bagi seorang programmer.
Namun ketika saya mulai pemrograman saya menggunakan C (dan kemudian C ++). Di C Anda dapat menulis kode seperti
Kompiler tidak akan memberikan kesalahan, dan itu sulit dikenali ketika membaca banyak kode. Namun, jika Anda menulis:
Kompiler memberikan kesalahan, dan saya mudah untuk mengubah kode
3 == a
. Demikian juga, jika standar pengkodean tidak memungkinkan=
untuk digunakan dalamif
kondisi atau "if
pernyataan kosong ", maka pemeriksa kode dapat digunakan sebagai bagian dari sistem build untuk melacak kesalahan ini.Pandangan saya tentang standar pengkodean berubah sangat ketika saya pindah dari C / C ++: Saya dulu suka standar pengkodean yang ditegakkan secara ketat, dan banyak halaman panjangnya. Saya sekarang berpikir Anda hanya perlu membuat daftar alat yang digunakan, dan mendapatkan persetujuan informal antara anggota tim asli pada beberapa konvensi penamaan. Kami tidak lagi tinggal di dunia tim yang terdiri lebih dari 30 pengembang yang menulis aplikasi dalam C / C ++ ...
Ada alasan saya tidak pernah menyukai JScript, dan menganggap TypeScript adalah hal terbaik yang terjadi pada pengembangan web selama bertahun-tahun. Saya berharap bahwa pengembang Web UI masih membutuhkan standar pengkodean karena cacat dalam desain HTML / CSS / JScript dll.
sumber
Memiliki sumber menjadi standar pengkodean self-documenting menyiratkan dua hal.
sumber
Dokumen standar kode yang sering diperbarui dan ditulis dengan baik bisa sangat berguna, tetapi biasanya tidak demikian. Dokumen standar tidak mencerminkan standar pengkodean aktual yang digunakan oleh perusahaan karena sangat sulit untuk membuat dokumen standar yang baik dan bahkan lebih sulit untuk tetap memperbaruinya.
Daripada memiliki dokumen standar pengkodean yang buruk dan menyesatkan, lebih baik tidak memilikinya dan membiarkan kode itu sendiri mewakili standar tersebut. Apa pun bagian terpenting adalah menerapkan standar dalam kode, dan ini membutuhkan lebih dari sekadar dokumen. Motivasi, proses, pelatihan, alat dll jauh lebih penting.
sumber
Satu hal yang sangat penting yang belum dinyatakan dengan cukup jelas adalah bahwa standar pengkodean seperti bahasa: mereka berkembang. Standar pengkodean tertulis menghalangi hal ini, dan jika tidak, standarnya terus-menerus usang dan tidak berguna.
Tidak memiliki standar coding dipaku tidak terlalu buruk. Jika Anda melakukan peer review pada saat check-in, setiap kali sesuatu yang tidak sesuai dengan standar pengkodean memasuki repositori yang berarti 2 orang memikirkannya * dan memutuskan manfaat variasi ini lebih besar daripada ketidakkonsistenan dengan sisa kode.
Tidak memiliki standar tertulis juga menghilangkan birokrasi yang akan mencegah tim perusahaan untuk mencoba variasi baru dari standar pengkodean untuk proyek baru, baik karena mereka ingin mencoba sesuatu, atau mungkin karena standar yang berbeda memiliki aplikasi praktis pada beberapa alat otomatis yang mereka gunakan.
Menulis standar memiliki kecenderungan untuk menghapus lebih banyak fleksibilitas daripada yang semula dimaksudkan, sementara juga mengambil cukup banyak waktu yang dapat dihabiskan untuk melakukan hal-hal lain. Saya tidak mengatakan Anda seharusnya tidak pernah menuliskan standar pengkodean, standar tertulis tentu memiliki manfaatnya, terutama jika tim yang bekerja di lokasi yang berbeda bekerja pada basis kode yang sama.
Sangat terkait: Evolusi dalam standar pengkodean, bagaimana Anda menghadapinya?
* Jika orang tidak berpikir sambil mengintip kode peninjauan saat check-in, masalah Anda jauh lebih besar dari sekadar standar pengkodean.
sumber
Mengubah mereka menjadi rintangan utama, dan orang akan mematuhi surat hukum dengan aman daripada melibatkan otak dan melakukan hal yang benar.
Akan datang suatu hari ketika bagian dari standar tidak membantu, dan membuat kode lebih buruk. Beberapa orang akan mematuhi standar, karena itu ditulis dan mereka aman, dan karena ada aturan yang harus diikuti. Orang yang ingin menulis kode yang baik daripada kode yang sesuai standar akan frustrasi dan marah. Akan ada argumen dan perbedaan pendapat, sedangkan jika standar tidak ditulis, akan ada eksplorasi dan diskusi.
sumber
Saya pikir banyak posting di sini membingungkan standar pengkodean dengan panduan gaya .
Memastikan bahwa modul yang dikembangkan oleh tim yang berbeda memiliki opsi kompiler yang sama dan ABI adalah hal yang berbeda dari berapa banyak ruang yang diindentasi.
Hal-hal seperti cara yang tepat untuk membuat struktur #include file dan tidak mencemari namespace global dalam file header harus didokumentasikan sehingga mereka dapat digunakan sebagai daftar periksa selama pengkodean awal dan ulasan kode.
Khususnya "jangan gunakan XXX karena menyebabkan masalah kompatibilitas dengan YYY" bukanlah sesuatu yang akan Anda lihat dengan contoh dalam mengikuti kode lain, karena itu tidak ada. Jadi biarkan kode menjadi cara standar ditangkap mungkin tidak jelas atau benar-benar hilang untuk beberapa jenis standar, dan dengan demikian ini tidak dapat menjadi rencana universal.
Sesuatu yang serius meresap dan penting seperti tidak menggunakan pengecualian atau tidak menggunakan
new
dalam sistem embedded tertentu tidak bisa begitu saja dibiarkan menjadi pengetahuan budaya umum, karena "informasi itu budaya (saja)" bertentangan dengan prinsip-prinsip dasar standar manufaktur seperti ISO-9000, bahwa pengembang sistem embedded ini menggunakan (misalnya untuk aplikasi otomotif). Hal-hal penting ini harus didokumentasikan, ditandatangani, dan disimpan secara formal.Tapi itu berlaku untuk coding , bukan style .
Para penemu C dan C ++ menunjukkan, dengan contoh, penggunaan nama huruf kecil dan bukan CaMelCaSe. Jadi mengapa banyak pengembang tidak mengikuti contoh implisit dari sumber? Bukankah seharusnya gaya perpustakaan standar dan bahan ajar kanonik menjadi gaya implisit untuk diikuti?
Sementara itu, orang-orang melakukan mencontoh header perpustakaan standar untuk hal-hal yang tidak boleh disalin, seperti penggunaan
__Ugly
nama untuk parameter makro dan menyertakan file pola non-repeat.Jadi memiliki barang sering tidak dipandang sebagai gaya yang penting, atau sebaliknya memiliki contoh mungkin tidak jelas mengenai apa yang tidak boleh diikuti dalam kode proyek. Keduanya merupakan contoh berlawanan dengan tesis bahwa "gaya" (atau aturan pengkodean) sebaiknya dibiarkan tersirat.
sumber