Bagaimana Anda bisa menjelaskan "kode cantik" kepada non-programmer? [Tutup]


44

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.


12
Bisakah Anda menjelaskan kode yang indah kepada seorang programmer tanpa menunjukkan kode itu? Deskripsi itu sendiri merupakan seni.
kojiro

9
Jika kita bisa mendapatkan ide yang bagus di sini, mungkin saya bisa menggunakannya untuk menggambarkan bukti yang bagus untuk non-matematikawan.
David Thornley

Kode yang indah bisa menjadi salah satu yang menggunakan ide-ide yang lebih sederhana dan lebih sedikit saat melakukan pekerjaan dengan benar. Ironisnya, tugas sebelumnya untuk menemukan ide-ide sederhana bisa menjadi pekerjaan yang kompleks, dan itu kami kagumi. - Maaf saya tidak dapat menemukan sekarang cara untuk menjelaskan ini dengan cara yang lebih alami kepada seseorang.
LatinSuD

Kode yang indah adalah ketika Anda mengatur font IDE Anda ke Comic Sans. desahan
Kirk Broadhurst

Jawaban:


88

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.


19
Analogi konstruksi itu sempurna!
Daniel Vandersluis

1
+1 @ user21007: Dulu, dahulu kala saya adalah seorang arsitek informasi untuk situs-situs besar - semua orang mendapatkan analogi konstruksi, dan konsep sistem yang hanya bekerja dan terasa benar.
kesalahan

1
Analogi yang bagus untuk produk dengan GUI. Tidak begitu baik untuk kerangka kerja dan perpustakaan.
Den

1
Jenis mengingatkan saya pada iklan ini: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
Saya sudah sering menggunakan analogi bahasa: "Saya bekerja dengan kode jelek ini ..." "Tunggu, apa maksudmu dengan jelek?" "Anda tahu, itu menulis seperti itu"
DistantEcho

28

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.


11

Semua kode ada, diperlukan, dan tidak ada yang memerlukan penjelasan.


2
@ Zdan: Saya akan melawan dengan mengatakan bahwa mereka yang merasa cantik, memiliki pengetahuan yang diperlukan (karenanya, di mata yang melihatnya). Selain itu, pintar! = IMO indah.
Steven Evers

2
@zdan: Ketika membutuhkan banyak penjelasan seperti itu, itu bukan "kode yang indah," tetapi "peretasan yang cerdas."
Mason Wheeler

1
FFT adalah peretasan yang sangat cerdas, tetapi tidak mungkin Anda bisa menyebutnya cantik.
Kyte

1
Saya setuju dengan SnOrfus untuk sebagian besar. Namun bagi saya kode yang indah tidak hanya diperlukan, cukup dan cukup jelas, tetapi juga harus secara subyektif terasa sempurna & ringan. Saya percaya banyak kode dapat memenuhi syarat kriteria yang diekspos oleh SnOrfus namun merasa cukup rumit atau tidak sempurna dengan cara lain. Saya akan menyebut kode seperti itu indah.
asoundmove

1
Saya memang berpikir ide "sesuatu berkurang menjadi esensi, tetapi tidak lebih" berada di jalur yang benar. Namun, sesuatu yang tidak dapat dipelihara dan ditulis dalam bahasa yang salah untuk tugas tersebut juga sesuai dengan definisi ini. Selain itu, dengan meminta hal itu tidak memerlukan penjelasan, ada kemungkinan bahwa sebagian besar tugas yang sesuai dengan definisi Anda juga harus sepele. Saya tidak berpikir "Hello World" bisa disebut cantik.
user21007

5

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.


Ini adalah pemikiran saya juga, tetapi tidak semua orang suka atau mengerti puisi. Musik juga muncul di pikiran: lagu yang bagus vs lagu yang buruk, tapi itu juga cukup subjektif.
PSU

Apa ... 25 antarmuka +25 kelas semua mewarisi dari kelas abstrak? Saya hanya ingin gerobak roda merah. Dan mungkin beberapa ayam.
Erik Reppen

5

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 .


5

Ingatkan saya tentang ini:

http://imgs.xkcd.com/comics/lisp.jpg

Sumber: XKCD - LISP


5
Lebih baik memilikinya sebagai tautan terutama karena teks hover tidak ada.
user151019

1
Dan hovertext adalah setengah dari lelucon dalam kasus ini.

4

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:

  • Keterbacaan
  • Keringkasan yg padat isinya
  • Efisiensi
  • Fleksibilitas
  • Kegamblangan
  • Kekokohan
  • Keamanan / idiot-proofness
  • Kelengkapan
  • Konsistensi
  • Kemudahan penggunaan (untuk API)

2

Lukisan-lukisan Jackson Pollock adalah contoh sesuatu yang indah bagi sebagian orang dan omong kosong bagi orang lain.


Hmmmm ... aku tidak merasakannya.
Dinamis

Pemrograman lebih kerajinan daripada seni (atau ilmu dalam hal ini). Bukannya aku mengetuk juga.
Erik Reppen

1

Jika orang itu fasih dalam matematika, saya suka membandingkan kode yang indah dengan solusi yang elegan untuk masalah.


1

Beberapa aspek kode yang baik adalah:

  1. Ini memiliki sejumlah besar detail kecil yang semuanya mengarah ke arah yang sama
  2. itu adalah konsisten dalam struktur , setiap bagian mengikuti pola yang sama
  3. tapi itu tidak terulang , malah setiap bagian berbeda
  4. itu juga tidak mengizinkan perilaku yang dianggap tidak valid
  5. ia memiliki jumlah terkecil dari berbagai negara
  6. Anda dapat memahami seluruh perilaku kode dengan membaca prototipe fungsi
  7. tidak memiliki efek samping
  8. eksekusi itu dijamin berhenti
  9. itu tidak menggunakan fitur-fitur canggih yang tersedia dalam bahasa pemrograman
  10. itu tidak terlalu kompleks dibandingkan dengan kompleksitas masalah yang dipecahkannya
  11. tidak ada kesalahan atau perilaku yang tidak terdefinisi di dalamnya
  12. itu dapat dikompilasi dengan compiler dari beberapa vendor yang berbeda
  13. tidak memiliki dependensi pada kode yang tidak digunakan

0

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.


0

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 .


0

Menurut pendapat saya yang rendah hati dan pribadi, kode yang indah seperti buku novel yang bagus:

  • Anda dapat membacanya dari awal hingga akhir / Anda tidak perlu melompat ke halaman buku selanjutnya untuk memahami halaman saat ini.
  • buku itu tidak memiliki pengulangan yang tidak perlu / sebuah buku agak membosankan jika selalu mengatakan hal yang sama.
  • maksud dari setiap bagian terbukti hampir setiap waktu / Anda tidak perlu memiliki kamus di sisi Anda setiap saat untuk membaca buku (kecuali puisi / kode golf xD).
  • itu diatur dalam substruktur ukuran dan kompleksitas yang terjangkau (modul, fungsi, pernyataan, dll.), tidak memiliki terlalu banyak 'bersarang' / bab, paragraf dan kalimat seimbang dengan baik; tidak menggunakan terlalu banyak level subordinasi kalimat, dll.
  • itu enak dipandang secara estetika (dengan indentasi bagus, blok-blok dibatasi dengan benar, dll.) / seperti buku dengan pengaturan huruf yang tepat.

0

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.


-1

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.


-1

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).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.