Saya pikir sulit mencapai ketiganya. Dua menurut saya bisa layak. Sebagai contoh, saya pikir itu mungkin untuk mencapai efisiensi dan keterbacaan dalam beberapa kasus, tetapi rawatan mungkin sulit dengan kode yang disesuaikan. Kode yang paling efisien di planet ini umumnya akan kekurangan baik pemeliharaan dan mudah dibaca sebagai mungkin jelas bagi kebanyakan, kecuali Anda adalah tipe yang dapat memahami sisi Soa-Vectorized, multithreaded kode SIMD bahwa Intel menulis dengan inline perakitan, atau paling pemotongan Algoritma -edge digunakan dalam industri dengan makalah matematika 40 halaman yang diterbitkan hanya 2 bulan yang lalu dan 12 perpustakaan senilai kode untuk satu struktur data yang sangat kompleks.
Efisiensi Mikro
Satu hal yang saya sarankan yang mungkin bertentangan dengan pendapat umum adalah bahwa kode algoritme paling pintar seringkali lebih sulit untuk dipertahankan daripada algoritma langsung paling mikro-tuned. Gagasan bahwa peningkatan skalabilitas menghasilkan lebih banyak untung daripada tanggung jawab atas kode yang disetel mikro (mis: pola akses yang ramah-cache, multithreading, SIMD, dll.) Adalah sesuatu yang akan saya tantang, setidaknya pernah bekerja di industri yang dipenuhi dengan sangat kompleks struktur data dan algoritma (industri FX visual), terutama di bidang-bidang seperti pemrosesan mesh, karena bang mungkin besar tetapi uangnya sangat mahal ketika Anda memperkenalkan algoritma dan struktur data baru yang belum pernah ada yang pernah dengar sebelumnya karena mereka adalah merek baru. Selanjutnya, saya
Jadi ide ini bahwa optimasi algoritmik selalu truf, katakanlah, optimasi terkait dengan pola akses memori selalu merupakan sesuatu yang saya tidak setuju. Tentu saja jika Anda menggunakan semacam gelembung, tidak ada optimasi mikro yang dapat membantu Anda di sana ... tetapi karena alasan itu, saya tidak berpikir itu selalu sangat jelas. Dan bisa dibilang optimasi algoritmik lebih sulit dipertahankan daripada optimasi mikro. Saya akan merasa jauh lebih mudah untuk mempertahankan, katakanlah, Intel Embree yang mengambil algoritma BVH klasik dan langsung dan hanya menyetel-buangnya daripada kode OpenVDB Dreamwork untuk cara-cara mutakhir dalam mempercepat simulasi fluida secara algoritmik. Jadi dalam industri saya setidaknya, saya ingin melihat lebih banyak orang yang akrab dengan arsitektur komputer lebih mengoptimalkan mikro, seperti yang dimiliki Intel ketika mereka melangkah ke panggung, sebagai lawan datang dengan ribuan dan ribuan algoritma baru dan struktur data. Dengan optimalisasi mikro yang efektif, orang berpotensi menemukan semakin sedikit alasan untuk menemukan algoritma baru.
Saya bekerja di basis kode warisan sebelum di mana hampir setiap operasi pengguna tunggal memiliki struktur data unik dan algoritma di belakangnya (menambahkan hingga ratusan struktur data eksotis). Dan kebanyakan dari mereka memiliki karakteristik kinerja yang sangat miring, yang berlaku sangat sempit. Akan jauh lebih mudah jika sistem itu dapat berputar di sekitar beberapa lusin struktur data yang lebih luas berlaku, dan saya pikir itu bisa terjadi jika mereka dioptimalkan secara mikro jauh lebih baik. Saya menyebutkan kasus ini karena optimasi mikro berpotensi meningkatkan kemampuan pemeliharaan dalam kasus seperti itu jika itu berarti perbedaan antara ratusan struktur data yang pesimis mikro yang bahkan tidak dapat digunakan dengan aman untuk tujuan baca-saja yang ketat yang melibatkan kehilangan cache yang tersisa dan benar vs
Bahasa Fungsional
Sementara itu beberapa kode yang paling bisa dipelihara yang pernah saya temui cukup efisien tetapi sangat sulit dibaca, karena ditulis dalam bahasa fungsional. Secara umum keterbacaan dan pemeliharaan uber adalah ide-ide yang bertentangan menurut pendapat saya.
Sangat sulit untuk membuat kode dapat dibaca, dan dipelihara, dan efisien sekaligus. Biasanya Anda harus sedikit berkompromi dalam salah satu dari ketiganya, jika tidak dua, seperti kompromi keterbacaan untuk pemeliharaan, atau kompromi pemeliharaan untuk efisiensi. Biasanya rawatan yang menderita ketika Anda mencari banyak dari dua lainnya.
Keterbacaan vs Pemeliharaan
Sekarang seperti yang saya katakan, saya percaya keterbacaan dan pemeliharaan bukanlah konsep yang harmonis. Lagi pula, kode yang paling mudah dibaca bagi sebagian besar dari kita manusia memetakan dengan sangat intuitif pola-pola pemikiran manusia, dan pola-pola pikiran manusia secara inheren rawan kesalahan: " Jika ini terjadi, lakukan ini. Jika itu terjadi, lakukan itu. Jika tidak, lakukan ini. Ups , Saya lupa sesuatu! Jika sistem ini berinteraksi satu sama lain, ini harus terjadi sehingga sistem ini dapat melakukan ini ... oh tunggu, bagaimana dengan sistem itu ketika peristiwa ini dipicu?"Saya lupa kutipan persisnya, tetapi seseorang pernah mengatakan bahwa jika Roma dibangun seperti perangkat lunak, hanya akan membutuhkan pendaratan burung di dinding untuk menjatuhkannya. Begitulah halnya dengan sebagian besar perangkat lunak. Ini lebih rapuh daripada yang sering kita pikirkan. Beberapa baris kode yang tampaknya tidak berbahaya di sana-sini dapat menghentikannya hingga membuat kita mempertimbangkan kembali seluruh desain, dan bahasa tingkat tinggi yang bertujuan agar dapat dibaca sebagai mungkin, tidak ada pengecualian untuk kesalahan desain manusia semacam itu. .
Bahasa fungsional murni hampir tidak kebal terhadap hal ini seperti yang bisa dilakukan seseorang (bahkan tidak mendekati kebal, tetapi relatif lebih dekat daripada kebanyakan). Dan itu sebagian karena mereka tidak memetakan secara intuitif ke pemikiran manusia. Mereka tidak dapat dibaca. Mereka memaksakan pola berpikir pada kita yang membuat kita harus menyelesaikan masalah dengan sesedikit mungkin kasus khusus menggunakan jumlah minimum pengetahuan yang mungkin dan tanpa menimbulkan efek samping. Mereka sangat ortogonal, mereka memungkinkan kode untuk sering diubah dan diubah tanpa kejutan begitu epik sehingga kita harus memikirkan kembali desain pada papan gambar, bahkan sampai mengubah pikiran kita tentang desain keseluruhan, tanpa menulis ulang semuanya. Tampaknya tidak lebih mudah untuk mempertahankan daripada itu ... tetapi kodenya masih sangat sulit dibaca,