Apa itu kode cantik? [Tutup]

30

Saya sering membaca bahwa pengembang harus menulis kode yang indah, tetapi bagi seorang pemula seperti saya, kode itu tetap tidak jelas tentang apa itu kode yang indah dan bagaimana Anda mengenalinya?

Pertanyaan wajarnya adalah: Bagaimana cara menulis kode yang indah dan kebiasaan praktis apa saja untuk meningkatkan kualitas kode Anda? , apa yang harus saya pedulikan untuk membuat kode yang saya tulis indah (dan apa yang harus saya pelajari).

torr
sumber
4
Itu hanya kiasan. Keindahan terletak di mata yang melihatnya, dan lebih dari itu, itu semua tentang kejelasan instruksi yang telah Anda letakkan dalam file teks untuk memecahkan masalah, dan betapa mudahnya Anda atau orang lain dapat memodifikasi dan mempertahankannya di masa depan. Lebih dari itu, betapa lebih indahnya kode Anda sepenuhnya terserah Anda - lekukan, struktur modular, kompleksitas, efisiensi secara bersamaan dengan mudah dibaca, konvensi penamaan, dll.
bad_keypoints
Anda mungkin tertarik membaca Kode Indah: Programmer Terkemuka Jelaskan Bagaimana Mereka Berpikir saat itu!
UncleZeiv

Jawaban:

55

"Kecantikan dibeli dengan penilaian mata".

Yang mengatakan, saya pikir sebagian besar programmer akan setuju bahwa kode yang indah menunjukkan keseimbangan antara kejelasan dan transparansi, keanggunan, efisiensi dan estetika.

  • Kejelasan dan Transparansi : Kejelasan adalah seberapa mudah pembaca dapat menyimpulkan apa yang dilakukan kode. Kode transparan melakukan apa yang tampaknya dilakukan. Jika kode tampaknya melakukan satu hal tetapi sebenarnya melakukan sesuatu yang lain (atau sesuatu yang lebih), itu tidak transparan - itu menyesatkan.

  • Keanggunan : ada banyak cara untuk mengimplementasikan sebagian besar algoritma, tetapi beberapa cara canggung sementara cara lain rapi dan anggun. Kesederhanaan sering menambah keanggunan, tetapi kesederhanaan yang berlebihan dapat mengurangi kejelasan.

  • Efisiensi : menghindari penggunaan sumber daya yang tidak perlu (seperti waktu CPU, memori, dan I / O).

  • Estetika : mudah di mata. Ini cukup subyektif. Sebagian besar turun ke gaya. Salah satu pertimbangan penting adalah memiliki gaya yang konsisten . Kode yang berubah, misalnya, mengindentasi gaya setengah jalan, jelek.

Igby Largeman
sumber
11
penjelasan yang indah, +1
koenmetsu
2
Saya akan mengeluarkan "Efisiensi". Meskipun dalam arti yang ketat itu positif, memasukkannya dalam daftar bisa menyesatkan. Ini biasanya merupakan produk sampingan dari yang lain dan itu harus menjadi perhatian sekunder pada saat pengkodean. Alasan utamanya adalah, untuk sebagian besar, ia hanya memanifestasikan dirinya sendiri setelah kompiler mengerjakan sihir gelapnya.
DPM
@Jubbat Memang - kadang-kadang solusi paling efisien sebenarnya mengarah ke kode yang sangat jelek. (Misalnya fungsi Fast Inverse Square Root klasik)
Darrel Hoffman
@ DarrelHoffman Benar, meskipun kompromi itu juga berlaku oleh lebih banyak variabel yang mendefinisikan kode yang baik, tidak hanya efisiensi dan sisanya (ada penjelasan panjang yang baik tentang ini di "Kode Selesai" - sayangnya saya tidak ingat di bagian mana dari buku, dekat awal mungkin-)
DPM
@ Jubbat: Saya setuju bahwa efisiensi biasanya menjadi perhatian kedua, tapi saya masih berpikir itu faktor ke dalam persamaan kecantikan.
Igby Largeman
20

Jangan biarkan orang membodohi Anda dengan berpikir bahwa kode yang indah adalah sebagai berikut:

  • algoritma pintar
  • fitur bahasa yang licik
  • memecahkan masalah dengan jumlah pukulan kunci paling sedikit

Karena tidak. Kode seperti itu lucu , dan tentu saja layak untuk dilirik, tetapi bukan jenis kode yang ingin Anda setujui.

Dan Anda tahu bahwa meta rekursif mewah polimorfisme statis templated yang mewarisi lambda variatik - atau apa pun yang Anda baca tentang online? Anda mungkin ingin sekali melompat pada trik yang inovatif dan bagus tanpa alasan yang jelas untuk menggunakannya. Tetapi kode yang mendorong batas-batas bahasa juga tidak indah.

Mereka seksi .
Banyak bersenang-senang, tetapi tanyakan pada diri sendiri ini: Apakah saya benar-benar ingin menghabiskan waktu menjelajahi anatomi bahasa ini, atau apakah saya ingin bekerja sama dengan bahasa dan membangun sesuatu yang indah? Bagaimanapun, bahasa pemrograman hanyalah alat untuk membuat.


Jadi apa kode yang indah itu?

Kode indah = kode yang dapat dipelihara. ITU DIA!
ITULAH FORMULA!

Jika Anda dapat menulis sesuatu, kembalilah ke sana beberapa bulan kemudian, dan terus membuat kemajuan, maka itu indah. Jika setahun kemudian Anda menyadari bahwa Anda ingin menambahkan fungsionalitas serta men-tweak fitur yang ada, dan Anda berhasil melakukannya dengan relatif mudah, maka ITULAH indah. Jika orang lain dapat masuk ke basis kode Anda dan dengan cepat mencari tahu apa yang terjadi karena semuanya teratur, mereka akan memiliki lebih banyak rambut, dan juga menjadi cantik.

Jadi pertanyaan sebenarnya yang ingin Anda tanyakan adalah: "Bagaimana cara saya menulis kode yang lebih bisa dikelola?" Saya khawatir itu pertanyaan yang lebih besar dan itu adalah disiplin yang kreatif. Teruslah menulis kode, tetapi kali ini jangan bertanya pada diri sendiri apakah itu bisa lebih indah. Tanyakan pada diri sendiri apakah Anda bisa membuatnya lebih bisa dipertahankan.

Trevor Hickey
sumber
4
untuk mengatasi masalah yang Anda ajukan
jk.
4

Menurut saya, "Kode Indah" ini bukan istilah yang objektif atau sangat berguna. Dan kita seharusnya tidak mencoba mendefinisikannya.


Definisi kamus tipikal dari kata bahasa Inggris "beauty" adalah seperti ini:

  • "1. kombinasi dari semua kualitas seseorang atau sesuatu yang menyenangkan indera dan menyenangkan pikiran"
  • "1. kualitas hadir dalam diri seseorang atau sesuatu yang memberikan kesenangan estetika yang intens atau kepuasan mendalam pada pikiran atau indera."
  • "1. Kualitas yang memberi kesenangan pada pikiran atau indera dan dikaitkan dengan sifat-sifat seperti harmoni bentuk atau warna, keunggulan kesenian, kejujuran, dan orisinalitas."

(Sumber http://dictionary.com )

Utas umum adalah bahwa "keindahan" adalah tentang apa yang secara estetika menyenangkan. Itu tentu subjektif ... seperti yang diilustrasikan oleh pepatah "Kecantikan ada di mata yang melihatnya".


Kita dapat menerapkan kata "keindahan" ke kode, dan makna yang jelas adalah bahwa kode itu "menyenangkan secara estetika".

Tetapi untuk kemudian mengatakan bahwa "kode yang indah" memiliki seperangkat atribut tertentu (seperti yang disarankan oleh Jawaban lain) adalah kontradiksi dari makna yang jelas menyenangkan secara estetika. Estetika adalah tentang bagaimana orang -orang ... orang-orang individual ... memandang sesuatu.

Atau dengan kata lain, ada sesuatu yang menjijikkan tentang seseorang yang mengatakan kepada saya apa yang harus saya anggap cantik, baik itu pada orang, karya seni, atau ... kode.

Sejauh yang saya ketahui, kode cantik adalah kode yang menurut saya indah, dan hanya itu. Itu subyektif dan individual, dan biarkan saja begitu.

Stephen C
sumber
2

Ini saran saya.

Lihat jawaban untuk Bagaimana Anda bisa menjelaskan "kode indah" kepada non-programmer? dan lihat karakteristik apa yang ingin mereka fokuskan. Kemudian ambil sebuah buku seperti Kode Lengkap dan bacalah untuk mempelajari saran tentang cara menulis kode yang lebih baik.

Pada titik tertentu itu akan memukul Anda sambil melihat kode lama Anda, "Ini jelek." Ini akan menjadi reaksi estetika langsung. Dan melihatnya, Anda akan menyadari bahwa Anda melihat kode Anda seperti seorang programmer, dan dapat melihat keburukan karena Anda tahu seperti apa kode yang terlihat lebih baik.

btilly
sumber
1

Hanya karena Anda sering membaca tentang kode yang indah tidak berarti orang yang menulisnya memiliki definisi yang sama. Sedihnya, menilai dari pertanyaan Anda, tampaknya mereka bahkan tidak repot-repot mendefinisikannya.

Bagi saya kode yang indah adalah:

  • Ekspresif
  • Ringkas

Kode ringkas yang tidak ekspresif bisa samar, dan kode ekspresif yang tidak ringkas cenderung membengkak dan membosankan untuk dibaca, jadi Anda perlu keduanya.

Saya tidak akan memasukkan perawatan sebagai bagian dari apa yang membuat kode cantik, karena kecantikan adalah sesuatu yang Anda lihat / baca, bukan sesuatu yang Anda tindak lanjuti. Tapi sekali lagi ini pandangan pribadi saya.

guillaume31
sumber
0

Istilah kode indah adalah istilah yang sangat kabur dan abstrak. Mudah untuk mengetahui apa yang diwakilinya, dan apa artinya, tetapi itu tidak boleh dilihat sebagai lebih dari tujuan sekunder.

Ini mengingatkan saya pada banyak metrik cakupan kode. Ketika Anda mendapatkan angka yang cukup tinggi, Anda dapat bersantai dan melakukan sesuatu yang lain. Memiliki basis kode dengan cakupan sekitar 80% bagus, tidak tahan peluru, tetapi cukup untuk bersantai dan melakukan hal-hal lain. Memiliki cakupan 40% cukup menakutkan dan harus mendorong Anda untuk meningkatkannya.

Intinya hanya cakupan kode hanya benar-benar bermakna jika jumlahnya rendah. Jadi jangan biarkan rendah. Ketika cakupan naik ke titik tertentu, beralih ke hal lain.

Demikian pula kode yang indah itu bagus. Jika Anda memiliki kode cantik, bagus, pindah ke yang lain. Jangan terlalu menekankan hal itu. Anda tidak akan pernah mencapai angka 100% itu, dan jika Anda melakukannya Anda akan menemukan Anda terlalu fokus pada apa yang dibaca, atau seperti apa, dan tidak cukup pada apa yang dilakukannya, atau bagaimana melakukannya. . Jadi, dapatkan tanda yang masuk akal dan kemudian berhenti.

Tetapi jika kode Anda jelek, jika itu adalah kode kode spaghetti yang berbelit-belit, jika secara fisik Anda sakit untuk membuka file, jika Anda tidak memiliki komentar atau dokumentasi dll dll dll kemudian memperbaikinya. Dan lakukan secepatnya.

Anda akan menemukan dari waktu ke waktu basis kode Anda pada umumnya lebih bersih, umumnya lebih cerah dan umumnya lebih indah dan yang lebih penting lebih dapat digunakan ketika Anda fokus untuk membuatnya tidak terlalu jelek. Menulis kode yang indah bukanlah proses satu langkah.

Tidak ada filosofi sihir. 1000 langkahnya yang lebih kecil semuanya dilakukan bersamaan, yang semuanya melayani tujuan konkret yang tidak ada hubungannya dengan betapa cantiknya kode itu. Tetapi, ketika Anda melayani mereka bersama-sama, mereka membentuk kode yang indah sebagai jumlah dari bagian-bagiannya. Seperti voltron. Atau kapten planet.

angkasawan
sumber
0

Saya setuju dengan jawaban di sini benar-benar, tetapi mengambil pendekatan yang kurang teknis Saya akan mengatakan kode yang indah adalah ekspresi dari kejernihan pemikiran penulis tentang masalah yang dihadapi yang memanifestasikan dirinya melalui bahasa yang diformulasikan dengan baik dan tepat namun sederhana.

Bagi saya, melihat-lihat kode yang indah mirip dengan melihat karya seni, melihat detail baru yang menunjukkan niat pembuatnya, tetapi juga bagaimana bagian-bagian yang berbeda direalisasikan, masing-masing memberikan jawaban atas begitu banyak pertanyaan, dan kemudian, akhirnya, bagaimana keberadaannya terasa seperti hukum kodrati yang meluruskan segala sesuatunya sehingga hanya bisa digambarkan dengan kata-kata kagum: luar biasa, inspiratif, indah.

Jadi dari sudut pandang itu, dalam karir Anda sebagai seorang programmer Anda mungkin membuat penemuan-penemuan kode yang indah yang orang lain mungkin tidak mengerti karena mereka tidak memiliki pengetahuan atau mungkin tidak menemukan yang perlu diperhatikan lagi karena mereka telah dimanjakan oleh terlalu banyak keindahan;)

Kode yang indah memiliki semua kualitas pragmatis sebagaimana disebutkan sebaliknya, saya sepenuhnya setuju.

Filou
sumber
0

Saya punya tiga kriteria:

  • Sederhana: Setidaknya itu harus dapat dibaca manusia. Misalnya, Anda dapat menulis kode yang berfungsi di O (1) untuk solusi dengan banyak baris, tetapi saya lebih suka kode yang berfungsi dengan 0 (n) diselesaikan dengan beberapa baris. Ini mungkin berubah untuk situasi ekstrem tetapi untuk awal kesederhanaan itu penting.
  • Dapat digunakan kembali : Kode harus dapat digunakan kembali, tetapi tidak ditimpa. Jika Anda membutuhkan operasi, Anda harus mendefinisikannya dengan cara yang dapat Anda gunakan bertahun-tahun kemudian.
  • Lekukan: Mungkin ini bukan masalah bagi Anda, tetapi untuk tingkat pemula, ini adalah hal pertama yang harus dipecahkan.
pengguna2674653
sumber