Dalam pertanyaan ini saya bertanya apakah menjadi penulis yang buruk menghalangi Anda dari menulis kode yang baik. Banyak jawaban dimulai dengan "itu tergantung pada apa yang Anda maksud dengan kode yang baik".
Tampaknya istilah "kode baik" dan "kode buruk" sangat subyektif. Karena saya memiliki satu pandangan, mungkin sangat berbeda dari pandangan orang lain tentang mereka.
Jadi apa artinya menulis "kode yang baik"? Apa itu "kode yang baik"?
code-quality
Gablin
sumber
sumber
Jawaban:
Seorang programmer yang baik seperti pemain biliar yang baik.
Ketika Anda melihat pemain biliar profesional, pada awalnya Anda mungkin tidak akan terkesan: "Tentu, mereka mendapatkan semua bola, tetapi mereka hanya memiliki tembakan mudah!" Ini karena, ketika pemain biliar melakukan tendangannya, dia tidak memikirkan bola apa yang akan masuk ke saku mana, dia juga memikirkan di mana bola isyarat akan berakhir . Mengatur untuk pemotretan berikutnya membutuhkan keterampilan dan latihan yang luar biasa, tetapi itu juga berarti bahwa itu terlihat mudah.
Sekarang, membawa metafora ini ke kode, seorang pembuat kode yang baik menulis kode yang sepertinya mudah dan mudah dilakukan . Banyak contoh oleh Brian Kernighan dalam bukunya mengikuti pola ini. Bagian dari "trik" akan muncul dengan konseptualisasi masalah yang tepat dan solusinya . Ketika kita tidak memahami masalah dengan cukup baik, kita cenderung mempersulit solusi kita, dan kita akan gagal melihat gagasan yang menyatukan.
Dengan konseptualisasi masalah yang tepat, Anda mendapatkan segalanya: keterbacaan, pemeliharaan, efisiensi, dan kebenaran. Karena solusinya tampak sangat mudah, kemungkinan akan ada lebih sedikit komentar, karena penjelasan tambahan tidak diperlukan. Seorang programmer yang baik juga dapat melihat visi jangka panjang dari produk, dan membentuk konseptualisasi mereka sesuai.
sumber
( asli )
EDIT: Ide dasarnya adalah "Kualitas Kode" tidak dapat dimasukkan ke dalam aturan, dengan cara yang sama Anda tidak dapat memasukkan "Seni bagus" atau "Puisi yang bagus" ke dalam aturan sehingga Anda dapat membiarkan komputer menentukan mengatakan "Ya, seni bagus" atau "Tidak, puisi yang buruk". Saat ini satu-satunya cara adalah dengan melihat betapa mudah dipahami kode itu untuk manusia lain.
sumber
Sebenarnya tidak ada kriteria yang baik selain seberapa cepat Anda dapat memahami kode. Anda membuat kode Anda terlihat bagus dengan menemukan kompromi yang sempurna antara ringkas dan mudah dibaca.
"WTF's per minute" (di atas) benar tetapi itu hanya akibat wajar dari aturan yang lebih umum. Semakin banyak WTF, semakin lambat pemahamannya.
sumber
RemoveCustomer
metode itu benar-benar menghilangkan pelanggan tanpa mengacaukan. Anda dapat menghabiskan waktu berjam-jam agar terlihat cantik, tetapi itu tidak berarti itu benar-benar berfungsi. 'Seberapa cepat Anda dapat memahami kode' bukan satu-satunya kriteria untuk 'kode yang baik' adalah apa yang saya katakan.Anda tahu Anda menulis kode yang baik ketika ...
Bagaimana Anda mengukur apakah kodenya baik ...
Kode yang bagus berfungsi saat seharusnya. Kode yang baik dapat dengan mudah dimodifikasi ketika perlu. Kode yang baik dapat digunakan kembali untuk menghasilkan keuntungan.
sumber
Kode yang
bebas serangga
dapat digunakan kembali
independen
kurang kompleks
didokumentasikan dengan baik
mudah untuk mengejar
disebut kode yang baik.
Sumber: MSDN
sumber
Apakah ini tampak familier?
Silakan lihat sisanya di sini .
sumber
terlepas dari kriteria kualitas kode alami (minimum salin / tempel, tidak ada spaghetti, dll.) kode industri yang baik harus selalu terlihat agak naif, agak terlalu bertele-tele, seperti
sebagai lawan
sumber
do_not_create = false
maksudnya "lulusfalse
sebagaido_not_create
argumen sehingga akan dibuat" atau "lulusfalse
sebagaido_create
argumen sehingga tidak akan dibuat"? Dalam bahasa di mana Anda dapat menggunakan nama argumen yang saya inginkancache.get (key:i, create: false); i += 1;
.Mungkin jawaban dengan mengilustrasikan yang sebaliknya akan membantu (plus itu alasan untuk mendapatkan XKCD di sini).
Kode yang bagus
Contohnya termasuk
sumber
Saya hanya akan pergi dengan "dipelihara"
Semua kode harus dipertahankan: tidak perlu ada tugas yang dibuat lebih sulit dari yang diperlukan
Jika ada pembaca yang tidak memahami persyaratan sederhana ini atau perlu menjabarkannya, maka pembaca itu tidak boleh menulis kode ...
sumber
Kode yang baik akan berbeda untuk setiap orang dan bahasa yang mereka gunakan juga berdampak pada apa yang dianggap sebagai kode yang baik. Secara umum ketika saya mendekati suatu proyek saya mencari hal-hal berikut:
Di luar semua ini, apakah desain aplikasi masuk akal secara keseluruhan? Kode yang berada dalam aplikasi dapat menjadi yang terbaik di dunia, tetapi mungkin masih menyusahkan jika desain keseluruhan aplikasi tidak masuk akal.
sumber
Izinkan saya dengan tidak setuju pada readibility. Tidak, tidak sepenuhnya: Kode yang baik harus dapat dibaca, dan itu dapat dengan mudah dicapai dengan komentar yang cukup.
Tapi saya mempertimbangkan dua jenis WTF: yang mana Anda bertanya-tanya apakah programmer lebih jauh dari pemrograman 101, dan yang mana Anda benar-benar tidak memahami keaslian kode. Beberapa kode dapat terlihat sangat aneh pada awalnya, tetapi sebenarnya merupakan solusi yang sangat inventif untuk masalah yang sulit. Yang kedua tidak harus dihitung dalam WTF-meter, dan dapat dihindari dengan komentar.
Kode yang sangat mudah diatur bisa sangat, sangat lambat. Solusi yang kurang mudah diatur dapat memberikan peningkatan kecepatan berlipat ganda. R adalah contoh yang bagus dari bahasa yang sering kali benar. Seseorang suka menghindari for-loop di sana sebanyak mungkin. Secara umum, saya akan menganggap kode tercepat kode yang lebih baik meskipun kurang mudah diatur. Yaitu, jika peningkatannya cukup besar tentunya, dan cukup banyak komentar dimasukkan untuk menjelaskan apa yang dilakukan kode.
Terlebih lagi, manajemen memori dapat menjadi sangat penting dalam banyak aplikasi ilmiah. Kode yang sangat mudah diatur, cenderung agak ceroboh dalam penggunaan memori: hanya ada lebih banyak objek yang dibuat. Dalam beberapa kasus, penggunaan memori secara pintar membuat kode lagi kurang dapat diatur. Tetapi jika Anda menyulap sekitar gigabyte urutan DNA misalnya, memori adalah faktor penting. Sekali lagi, saya menganggap semakin sedikit memori-intensif kode kode yang lebih baik, terlepas dari readibility.
Jadi ya, readibility penting untuk kode yang baik. Saya tahu adagium dari Uwe Liggis: Berpikir sakit dan komputer itu murah. Tetapi di bidang saya (genomik statistik), waktu komputasi dalam seminggu dan penggunaan memori lebih dari 40 Gb tidak dianggap abnormal. Jadi peningkatan dua kali lipat kecepatan dan setengah dari memori bernilai jauh lebih banyak daripada sedikit tambahan kemampuan.
sumber
Sejauh yang saya tahu ... Saya tahu saya menulis kode yang baik ketika rekan kerja yang bekerja pada proyek lain datang dan dapat melompat masuk dan memahami apa yang saya lakukan tanpa saya memeriksa setiap blok kode dan menunjukkan apa yang dilakukannya.
Alih-alih dia berkata, "Tunggu sebentar, apa ?!" Dia berkata, "Oh, baiklah, saya melihat apa yang Anda lakukan di sana."
Kode yang baik juga tidak memiliki banyak solusi tersembunyi atau 'peretasan.' Baris ketika, saat Anda menulisnya, Anda juga berkata pada diri sendiri, "Saya tahu ini bukan cara yang baik untuk melakukannya, tapi saya hanya harus melakukannya dengan cara ini untuk saat ini. Saya akan mengingatkan sendiri untuk memperbaikinya nanti ... "
sumber
Ada banyak fitur kode 'baik', tetapi yang paling penting, IMHO, adalah keterbacaan dan pemeliharaan.
Kode Anda akan mengandung bug, mungkin akan diperluas dan digunakan kembali, dan harus difaktorkan ulang pada beberapa titik - bahkan jika Anda mengunjunginya kembali, kemungkinannya adalah bahwa Anda tidak akan memiliki petunjuk apa-apa Anda lakukan di tempat pertama, untuk melakukan kebaikan pada diri sendiri dan tidak menempatkan hambatan di jalan.
Tentu, gunakan algoritme yang rumit-namun-tidak-efisien, tetapi pastikan Anda menghabiskan sedikit waktu untuk mendokumentasikannya, tetapi jika tidak buatlah kode Anda jelas dan konsisten.
sumber