Apakah kesederhanaan selalu meningkatkan keterbacaan?
Saya akan mengatakan, mungkin dengan sedikit kontroversi, sama sekali tidak .
Anda bisa memberikan saya sebuah kelas dengan 200 fungsi anggota di antarmuka publiknya, dan itu mungkin antarmuka publik yang paling mudah dibaca secara manusia di luar sana. Mungkin menyenangkan hanya dengan santai membaca kode dan dokumentasinya. Namun, saya tidak akan menyebutnya "sederhana", karena meskipun mudah dibaca, saya harus khawatir dengan bagaimana semua fungsi ini berinteraksi satu sama lain, dan berpotensi mengawasi kasus-kasus rumit yang diakibatkan oleh penyalahgunaan.
Saya lebih suka kelas dengan 20 fungsi anggota yang tidak begitu mudah dibaca hingga 200, karena "keterbacaan" bukan prioritas utama bagi saya dalam hal mencegah kesalahan manusia dan meningkatkan pemeliharaan kode (kemudahan di mana kita bisa mengubahnya, yaitu).
Namun, ini semua akan bergantung pada definisi pribadi kita tentang "kesederhanaan". "Keterbacaan" biasanya tidak bervariasi yang liar di antara kita, kecuali seseorang telah mengakuisisi begitu banyak keahlian dan kelancaran yang mereka anggap regex menjadi sangat "dibaca", misalnya, melupakan kami semua hanya manusia.
Kesederhanaan
Ada suatu masa, dahulu kala, di mana saya berpikir "kesederhanaan" berarti "semudah mungkin dibaca". Jadi saya akan menulis kode C dengan banyak fungsi kenyamanan, mencoba meningkatkan sintaksis dan membuat hal-hal semudah membaca dan menulis mungkin.
Saya merancang perpustakaan yang sangat besar, kaya, tingkat tinggi sebagai hasilnya, mencoba memodelkan fungsi untuk setiap pemikiran manusia: pembantu demi pembantu demi pembantu, semua untuk membentuk kode klien menjadi sintaks yang lebih mudah dibaca. Kode yang saya tulis dulu mungkin yang paling "mudah dibaca", namun itu juga yang paling "tidak dapat dipelihara" dan "kompleks".
Pelat
Namun saya memiliki gairah singkat dengan LISP sekitar pertengahan 90-an (latecomer). Itu mengubah seluruh gagasan saya tentang "kesederhanaan".
LISP bukan bahasa yang paling mudah dibaca. Semoga tidak ada yang berpikir bahwa mengekstraksi CDR dan CARs sambil menjalankan fungsi rekursif dengan sekumpulan kurung bersarang sangat "mudah dibaca".
Namun demikian, setelah berjuang untuk mendapatkan otak saya melilit sintaks aneh bahasa dan cara-cara yang sepenuhnya rekursif dalam melakukan sesuatu, itu secara permanen mengubah ide saya tentang kesederhanaan.
Apa yang saya temukan dengan kode yang saya tulis di LISP adalah bahwa saya tidak lagi membuat kesalahan yang halus lagi, walaupun sulitnya berpikir seperti itu membuat saya membuat kesalahan yang lebih mencolok (tapi itu mudah dikenali dan diperbaiki). Saya tidak salah memahami apa yang dilakukan fungsi dan melewatkan efek samping yang halus dan tidak terduga. Saya hanya memiliki waktu yang lebih mudah secara umum membuat perubahan dan menulis program yang benar.
Setelah LISP, kesederhanaan bagi saya menjadi tentang minimalis, simetri, fleksibilitas, lebih sedikit efek samping, lebih sedikit tetapi lebih banyak fungsi fleksibel yang bergabung bersama dalam berbagai cara yang tak terbatas.
Saya mulai menghargai pola pikir bahwa kode yang paling dapat diandalkan dari semua adalah kode yang tidak ada. Walaupun ini hanya metrik mentah, saya cenderung melihat potensi kode tidak dapat diandalkan berdasarkan kuantitasnya. Mencari kenyamanan sintaksis sepenuhnya dan keterbacaan cenderung meningkatkan kuantitas itu dengan faktor besar.
Minimalisme
Dengan pola pikir LISP tertanam dalam diri saya, saya lebih memilih API minimalis. Saya lebih suka perpustakaan dengan lebih sedikit tetapi lebih dapat diandalkan, fungsi fleksibel yang kurang nyaman dan potensi lebih sulit untuk dibaca daripada yang menawarkan banyak pembantu "nyaman" dan yang mungkin membuat kode mudah "dibaca" tetapi berpotensi tersandung lebih banyak masalah dengan tidak dapat diandalkan dan kejutan yang dihasilkan dari kesalahpahaman apa yang dilakukan salah satu dari ribuan fungsi ini.
Keamanan
Hal lain tentang LISP adalah keamanan. Ini mempromosikan efek samping minimal dan fungsi murni, dan di situlah saya tidak lagi melihat diri saya membuat kesalahan yang halus, meskipun kesulitan membaca dan menulis dalam bahasa itu meningkatkan lebih banyak kesalahan terang-terangan yang bisa saya temukan 10 detik kemudian.
Fungsi murni dan keadaan tidak berubah menjadi lebih disukai bagi saya setiap kali saya mampu membelinya, bahkan jika sintaksisnya:
sword = sharpen(sword)
... sedikit kurang langsung dan terlepas dari pemikiran manusia daripada:
sharpen(sword)
Keterbacaan VS. Kesederhanaan
Sekali lagi, LISP bukan bahasa yang paling "mudah dibaca". Ini dapat mengemas banyak logika menjadi bagian kecil dari kode (mungkin lebih dari satu pemikiran manusia per baris). Saya cenderung lebih suka satu pemikiran manusia per baris untuk "keterbacaan", tetapi itu belum tentu untuk "kesederhanaan".
Dengan definisi "sederhana" seperti ini, terkadang "sederhana" mungkin agak bersaing dengan "mudah dibaca". Ini lebih mempertimbangkan hal-hal dari sudut pandang desain antarmuka.
Antarmuka yang sederhana berarti Anda perlu mempelajari jauh lebih sedikit hal untuk menggunakannya, dan berpotensi memiliki keandalan yang lebih besar dan lebih sedikit Gotcha sebagai hasil dari minimalis. Dokumentasi yang komprehensif tentang subjek mungkin lebih cocok dengan buklet daripada volume buku yang besar. Namun demikian, ini mungkin memerlukan beberapa pekerjaan kasar dan menghasilkan kode yang kurang mudah dibaca.
"Sederhana" bagi saya meningkatkan kemampuan kami untuk memahami fungsionalitas dalam sistem kami pada tingkat yang luas. "Dapat dibaca" bagi saya meningkatkan kemampuan kami untuk menghubungkan setiap baris kecil kode ke bahasa alami dan pemikiran dan mungkin mempercepat pemahaman kita tentang apa yang dilakukan satu baris kode, terutama jika kita tidak fasih dalam bahasa tersebut.
Regex adalah contoh dari apa yang saya anggap "sangat sederhana". Ini "terlalu sederhana dan tidak dapat dibaca" untuk selera pribadi saya. Ada tindakan penyeimbang bagi saya di antara yang ekstrem ini, namun regex memang memiliki kualitas kesederhanaan seperti LISP seperti yang saya definisikan: minimalisme, simetri, fleksibilitas luar biasa, keandalan, dll. Masalah bagi saya dengan regex adalah bahwa sangat sederhana telah menjadi begitu tidak terbaca ke titik di mana saya tidak berpikir saya akan menjadi lancar dalam hal itu (otak saya tidak berfungsi seperti itu dan saya iri pada orang-orang yang dapat menulis kode regex dengan lancar).
Jadi, itulah definisi saya tentang "kesederhanaan", dan itu sepenuhnya independen dari "keterbacaan" dan kadang-kadang bahkan mengganggu yang lain, yang mengarah ke tindakan penyeimbangan antara perpustakaan yang "lebih nyaman secara sintaksis" dan mudah dibaca tetapi lebih besar atau "secara sintaksis" perpustakaan tidak nyaman ", kurang bisa dibaca, namun lebih kecil. Saya selalu menemukan prioritas "kenyamanan pemahaman" dan "pemeliharaan" yang benar untuk disejajarkan dengan prioritas yang terakhir, dengan preferensi yang kuat terhadap minimalis bahkan dengan biaya yang mudah dibaca dan sintaksis manusia yang lebih alami (tetapi tidak sampai pada titik regex) . YMMV.