Ketika berbicara dengan teman non-programmer, saya kebetulan menyebutkan konsep "kode yang indah" dan dia ingin memahami apa artinya, tetapi saya agak bingung bagaimana menjelaskannya kepada seseorang yang tidak memiliki konteks apa pun.
Ketika semua kode terlihat seperti omong kosong bagi seseorang, bagaimana Anda bisa menjelaskan apa yang membuat satu bagian kode lebih cantik dari yang lain? Analogi juga bisa bermanfaat.
aesthetics
Daniel Vandersluis
sumber
sumber
Jawaban:
Analogi bahasa
Pikirkan kisah favorit Anda. Mungkin ditulis dengan indah. Bagi penutur non-Inggris, hanya karena mereka tidak dapat memahaminya atau memahami mengapa itu indah tidak mengurangi keindahannya.
Analogi konstruksi
Pertimbangkan sebuah rumah yang dibangun dengan buruk. Ini memiliki pintu dan jendela yang jelas ditutup. Mortar retak di salah satu sudut di mana fondasinya tidak memadai. Dan tidak ada yang bisa mengerti mengapa ada tangga menuju lantai 2 yang tidak ada. Toilet dibangun di sebelah dapur tanpa kipas dan terletak sedemikian rupa sehingga angin yang ada akan menghembuskan bau rawa jahat ke seluruh rumah. Cerobong asap dari perapian terbuka berjarak 5 cm dari kayu, siap terbakar.
Bandingkan dengan rumah di mana segala sesuatu berada di tempat yang seharusnya, perawatannya rendah, terisolasi dengan baik sehingga sedikit panas matahari akan membuatnya tetap hangat di musim dingin, energi pulih dari ventilasi, sehingga Anda memiliki udara segar, suhu nyaman dan tagihan listrik yang dapat diabaikan. Itu dibangun dari bahan yang tidak mudah terbakar sehingga tidak bisa terbakar dari api. Ini akan tahan terhadap gempa 9.0 dan tornado F5. Hanya membutuhkan biaya 30% lebih banyak untuk membangun daripada rumah lainnya, tetapi akan membayar selisihnya dalam 5 tahun. Dan itu menyenangkan secara estetika.
GUI seperti penampilan luar sebuah rumah. Seorang pengguna dapat mengenali keindahan dalam GUI, sama seperti mereka dapat menghargai rumah yang indah. Tetapi mungkin bahkan yang lebih penting, keindahan nyata dalam desain di kedua rumah dan program adalah hal-hal yang tidak terlihat oleh yang belum tahu, tetapi penting atau baik untuk memiliki terlepas.
sumber
Pikirkan tentang mobil.
Sebagian besar dari kita melihat mobil, dan hanya bisa melihat bodinya. Jika seseorang memperbaiki beberapa bantingan dan menempatkan pekerjaan cat baru di mobil, itu akan terlihat jauh lebih indah. Ini pada dasarnya mobil yang sama, tetapi hanya itu yang kita lihat.
Seorang mekanik membuka mobil, dan melihat ke mesin. Mereka melihat betapa bagusnya mesin itu. Mereka melihat bahwa semuanya diatur agar mudah didapat, dipelihara, dan dikerjakan. Mereka melihat bagian-bagiannya dan tahu seberapa baik desainnya. Bagi seorang mekanik berpengalaman, mesin mobil berkualitas tinggi yang dirawat dengan baik menjadi sesuatu yang indah. Mereka tidak dapat menjelaskan kepada Anda apa yang membuatnya indah, tetapi gagasan mereka tentang kecantikan cenderung diterjemahkan ke dalam biaya perawatan yang lebih rendah, umur mobil yang lebih lama dan kinerja yang lebih baik. Semua ini menambah nilai mobil itu, meskipun Anda tidak bisa melihatnya.
Ketika Anda melihat situs web, atau aplikasi, Anda melihatnya seperti kebanyakan dari kita melihat mobil. Ketika saya melihat kode saya melihat itu seperti mekanik melihat mesin mobil. Anda tidak pernah dapat mengalami keindahan kode itu seperti saya, itu benar-benar tidak terlihat oleh Anda. Tapi keindahan itu penting sama seperti kecantikan mekanik itu. Ini menentukan seberapa baik perangkat lunak itu berjalan, jenis masalah apa yang akan dimilikinya, seberapa mudah perangkat lunak dapat ditingkatkan, dan sebagainya. Semua ini menambah nilai perangkat lunak itu, meskipun Anda tidak dapat melihatnya.
sumber
Semua kode ada, diperlukan, dan tidak ada yang memerlukan penjelasan.
sumber
Saya akan merujuk pada puisi:
Sebuah puisi yang ditulis dengan baik memiliki perasaan yang berbeda daripada puisi dari sebuah buku panduan yang diterjemahkan dengan buruk tentang subjek yang sama.
sumber
Masalah pengkodean adalah tentang konseptualisasi, jadi kode yang indah mewakili konseptualisasi masalah yang luar biasa.
Sebagai contoh, kita suka kalau satu masalah dapat dikurangi untuk masalah dipecahkan yang ada, pinjaman wawasan ke dalam sifat dari masalah itu sendiri .
Terkadang re-konseptualisasi masalah dapat membuatnya tampak mudah; kita berbicara tentang solusi elegan yang memerlukan trik sederhana yang menyederhanakan tugas yang sulit.
Bagi saya, Quicksort adalah contoh yang indah: pilih elemen acak dari sebuah array, dan kemudian bandingkan setiap elemen lain dalam array dengan itu; jika jumlahnya kurang dari itu, taruh di tumpukan A; jika angkanya lebih besar dari itu, masukkan ke dalam tumpukan B. Sekarang, dengan ketimpangan segitiga, tidak ada elemen dalam tumpukan A yang perlu dibandingkan dengan setiap elemen di tumpukan B. Berulang kembali pada A dan B, dan Anda selesai .
sumber
Ingatkan saya tentang ini:
Sumber: XKCD - LISP
sumber
Tidak ada kode non-sepele yang bisa sempurna karena kode sempurna membutuhkan secara bersamaan tujuan yang memuaskan yang sering bertentangan. Kode yang indah, oleh karena itu, menyeimbangkan semua atribut penting dengan sempurna untuk tugas yang dihadapi dan semakin dekat untuk memuaskan semua ini secara bersamaan daripada yang mungkin dipikirkan oleh kebanyakan orang. Tanpa urutan tertentu:
sumber
Lukisan-lukisan Jackson Pollock adalah contoh sesuatu yang indah bagi sebagian orang dan omong kosong bagi orang lain.
sumber
Jika orang itu fasih dalam matematika, saya suka membandingkan kode yang indah dengan solusi yang elegan untuk masalah.
sumber
Beberapa aspek kode yang baik adalah:
sumber
Bagi saya bahasa adalah alat saya.
Dan seperti pengrajin lainnya, saya lebih suka alat saya dalam kondisi mint.
Semakin baik kondisi kode, mengenai kejelasan konsep, rawatan dan keterbacaan. semakin baik kodenya.
Jadi bagi saya, membaca kode yang ditulis dengan baik adalah seperti membuka kotak peralatan dengan alat yang dibuat dengan baik.
Saya telah menggunakan analogi ini beberapa kali dengan sukses. Terutama orang-orang dengan latar belakang yang lebih praktis atau artistik tampaknya memahami konsep kode bersih / indah dengan cara ini.
sumber
Saya pikir itu tergantung apa yang Anda maksud dengan kode yang indah.
Bagi saya, kode itu indah jika bisa dibaca. Selain kemungkinan masalah dengan konsep pemrograman, seorang awam dapat membaca dan, setidaknya pada tingkat tinggi, memahami apa yang dilakukan kode.
Seperti yang telah didiskusikan beberapa jawaban lainnya, kode juga dapat menjadi cantik dalam arti bahwa ia mencapai fungsi yang kompleks dengan menggabungkan beberapa konsep sederhana. Tidak yakin analogi macam apa yang terbaik untuk menjelaskan itu kepada non-programmer, itu tergantung pada orang awam. Mainan puzzle muncul di pikiran, seperti NeoCube .
sumber
Menurut pendapat saya yang rendah hati dan pribadi, kode yang indah seperti buku novel yang bagus:
sumber
Ini seperti perusahaan yang ramping di mana semua orang tahu peran mereka, mudah untuk mengetahui siapa yang pandai dalam hal apa, dan tidak ada duplikasi usaha
Vs.
Ruang Kantor di mana mediokritas diperjuangkan, tiga manajer tidak ada yang lebih baik daripada mengganggumu tentang laporan TPS! @ # $ MESIN FAX TIDAK PERNAH BEKERJA !!! dan setiap karyawan yang diberikan mungkin hanya mendapatkan sekitar 15 menit dari pekerjaan aktual yang dilakukan seminggu. Seorang karyawan mungkin bahkan tidak secara teknis bekerja di sana lagi karena seseorang lupa memecatnya (sulit untuk mengatakannya karena tidak ada yang bekerja secara efisien dan sulit untuk mengevaluasi apa yang mereka coba capai). Dan untuk menyelesaikan sesuatu yang praktis diperlukan menavigasi sistem yang terlalu rumit dan tidak masuk akal yang dibaca dan dipikirkan seseorang akan terlihat rapi pada resume mereka walaupun itu tidak benar-benar menyelesaikan masalah yang mereka miliki.
sumber
Tidak ada "kode indah", ada "algoritma elegan" dan "desain elegan". Desain dapat dipahami oleh bukan pemrogram.
Saya benci programmer yang berdebat tentang "kode yang indah", karena satu atau lain cara, mereka juga tidak benar-benar tahu bagaimana juru bahasa atau kompiler akan mencernanya dan apa yang akan dilakukan mesin, jadi itu lebih seperti anak-anak yang menunjukkan kepada ibunya bagaimana caranya. luar biasa ceritanya, tapi sungguh, tidak.
sumber
Apakah Anda menjelaskan kepada orang-orang mengapa gambar yang bagus itu bagus? Tidak. Anda menunjukkan gambar itu kepada mereka (karena, Anda tahu, gambar mengatakan lebih dari 1000 kata). Jadi yang terbaik adalah, menunjukkan kepada mereka sepotong kecil kode yang benar-benar elegan, indah, sempurna (dan mungkin sebagai perbandingan bagaimana Joe Average mengkodekannya).
sumber