Saya mencoba menjelaskan kepada seseorang bahwa cara mereka menulis kode membuatnya sulit dimengerti, dan jika Anda refactor maka lebih mudah dibaca. Gaya kode yang saya kendarai ini umumnya disebut kode 'idiomatik'.
Tetapi frasa kode idiomatik membawa serta bagasi kebenaran moral , yang bukan motivator yang bagus untuk membuat orang mengubah gaya pengkodean mereka. Cara yang lebih positif untuk mengatakan ini adalah kode yang mengikuti gaya umum - tetapi bagi seorang pemikir kritis yang tampil sebagai alasan mentalitas kawanan.
Cara saya memunculkan ide ini dengan cara yang memotivasi orang untuk mengubah kode mereka adalah:
- menulis kode sedemikian rupa sehingga mengurangi overhead kognitif pembaca (misalnya saya tidak ingat apakah ini jenis vektor pertama - atau jenis vektor kelima)
- kode yang membuatnya lebih mudah untuk memahami maksud (mis. untuk apa vektor ini?)
(Sebagai tambahan, saya tahu buku The Joy of Clojure, sebelum penerbitan pertamanya, memiliki konsep judul Idiomatic Clojure. Jadi sepertinya menjadi alasan untuk membuat kode 'idiomatis', untuk 'membawa kegembiraan' kepada pembaca. ).
Pertanyaan saya adalah: Apakah tujuan di balik kode 'idiomatik' untuk mengurangi overhead kognitif?
Jawaban:
Pertama, saya tidak yakin bahwa ada semacam "kebenaran moral" dalam istilah "idiomatik". The Definisi kamus polos hanya
Ya, kode idiomatik umumnya mengurangi overhead kognitif, khususnya pada definisi antarmuka di mana pustaka standar dan pustaka pihak ketiga mana pun yang dibutuhkan proyek (secara virtual) semuanya idiomatis.
Namun, sebagai titik penjualan, saya akan fokus pada apa yang mengurangi overhead kognitif untuk Anda. Itu membuat lebih mudah bagi programmer untuk menemukan kesalahan karena mereka tidak berusaha untuk mengurai kode yang ditulis dalam gaya yang unik untuk mencari tahu di mana itu secara halus oleh satu atau salah penanganan tepi kasus. Itu membuatnya lebih mudah untuk meninjau kode orang lain yang membuatnya lebih mungkin bahwa tim akan melakukan tinjauan nyata yang mengidentifikasi masalah nyata daripada berdebat tentang sintaksis.
Selain mengurangi overhead kognitif, kode idiomatik umumnya adalah kode yang lebih efisien. Sebagian besar idiom dalam bahasa tertentu berkembang karena bahasa tersebut dirancang untuk mendekati masalah dengan cara tertentu. Kompiler atau interpreter yang Anda gunakan akan memfokuskan optimasi mereka pada kode idiomatik. Jika Anda menggunakan bahasa di mana rekursi adalah cara idiomatis untuk menyusun sepotong kode, misalnya, Anda bisa yakin bahwa kompiler Anda menerapkan rekursi ekor. Jika Anda menggunakan bahasa di mana rekursi bersifat non-idiomatis, itu sangat kecil kemungkinannya. Tidak mungkin rekursi ekor tidak dapat diterapkan di mana-mana, tetapi kebanyakan penulis kompiler tidak akan fokus pada hal-hal yang tidak terjadi secara umum.
sumber
Saya tidak yakin dari mana Anda mendapatkan gagasan bahwa idiom memiliki konotasi moral. Idiom hanyalah cara untuk mengekspresikan sesuatu. Mereka adalah pola pada skala yang lebih besar daripada kata atau frasa individual.
Jika saya mengatakan kepada Anda bahwa seseorang harus melolong dengan serigala, Anda tidak akan tahu apa yang saya maksudkan, meskipun itu adalah idiom Jerman yang terkenal. Jika, OTOH, saya katakan, ketika di Roma, lakukan seperti yang dilakukan orang Romawi, Anda akan segera tahu apa yang saya bicarakan, karena saya menggunakan idiom bahasa Inggris yang tepat.
Bahasa komputer tidak berbeda.
Sebenarnya, nama alternatif untuk "idiom" di dunia pemrograman adalah "pola implementasi". Ini menghubungkan ide dengan ide pola, yang berasal dari arsitek (bata-dan-mortir bukan bit-dan-byte) Christopher Alexander. Sebagian besar programmer tahu tentang Pola Desain, beberapa tahu tentang Pola Arsitektur, yang merupakan pola pada skala yang lebih besar daripada Pola Desain. Idiom adalah pola pada skala yang lebih kecil dari pola desain.
sumber
Sebagian besar bahasa dengan sengaja menggunakan gaya tertentu. Kode yang ditulis dengan gaya itu adalah apa yang idiomatis. Jika Anda melihat melewati kenyataan bahwa Anda memilih lingkungan runtime mempersempit pilihan bahasa yang tersedia, Anda harus memilih bahasa karena masalah yang ada mudah diungkapkan dalam idiom khusus bahasa.
Kebanyakan orang tidak mengerti itu. Sebagai contoh, banyak programmer Java berusaha keras untuk mempertahankan gaya yang sama ketika mereka harus menulis JavaScript (mereka bisa menulis Java dan mengkompilasi silang, tentu saja) dan berhasil sampai batas tertentu - menulis kode yang Java-idiomatik dalam JavaScript - tetapi mereka akan selalu memiliki perasaan melawan JavaScript. Kehilangan fitur tertentu atau sulit ditiru.
Kode idiomatik itu bagus. Sulit bagi orang luar, tetapi mereka bisa belajar. Pada akhirnya, kode harus dipelihara selama bertahun-tahun, jadi jika Anda dapat menemukan bahasa di dalam idiom yang mana program yang mendasarinya dapat diekspresikan dengan cara yang sederhana, itulah yang harus Anda lakukan.
Izinkan saya mengklarifikasi bahwa pasti ada istilah idiom yang berlebihan (atau fitur bahasa yang mendasarinya). Jika Anda menggunakan template C ++ untuk mengeksekusi bagian signifikan dari logika aplikasi pada waktu kompilasi, atau jika program Lisp lengkap Anda adalah panggilan ke beberapa makro yang terungkap ke hal yang sebenarnya dalam cara yang praktis tidak dapat diprediksi, jika solusi Java Anda dari masalah sederhana mengembang ke proporsi FizzBuzzEnterpriseEdition ... Anda salah melakukannya.
Kata orang, kode harus mudah dibaca. Itu hanya setengah kebenaran. Itu harus mudah dipahami, yang mengharuskannya juga mudah untuk bernalar. Itu membutuhkan penggunaan abstraksi yang memadai . Seperti kebanyakan hal, ini adalah masalah mencapai keseimbangan yang tepat.
sumber