Dalam esai terkenal Richard Gabriel The Rise of Worse is Better , ia membandingkan versi karikatur dari MIT / Stanford (Lisp) dan filosofi desain New Jersey (C / Unix) di sepanjang sumbu kesederhanaan, kebenaran, konsistensi, dan kelengkapan. Dia memberikan contoh dari "masalah PC kalah" ( dibahas di tempat lain oleh Josh Haberman ) untuk berpendapat bahwa Unix mengutamakan kesederhanaan implementasi daripada kesederhanaan antarmuka.
Satu contoh lain yang saya temukan adalah pendekatan yang berbeda untuk angka. Lisp dapat mewakili angka besar yang sewenang-wenang (hingga ukuran memori), sementara C membatasi angka ke jumlah bit tetap (biasanya 32-64). Saya pikir ini menggambarkan sumbu kebenaran.
Apa saja contoh untuk konsistensi dan kelengkapan? Berikut ini semua deskripsi Gabriel (yang ia akui adalah karikatur):
Pendekatan MIT / Stanford
- Kesederhanaan - desainnya harus sederhana, baik dalam implementasi maupun antarmuka. Lebih penting untuk antarmuka menjadi sederhana daripada implementasi.
- Kebenaran - desain harus benar dalam semua aspek yang dapat diamati. Kekeliruan sama sekali tidak diizinkan.
- Konsistensi - desain tidak boleh tidak konsisten. Sebuah desain dibiarkan menjadi sedikit kurang sederhana dan kurang lengkap untuk menghindari ketidakkonsistenan. Konsistensi sama pentingnya dengan kebenaran.
- Kelengkapan - desain harus mencakup situasi penting sebanyak praktis. Semua kasus yang diharapkan secara wajar harus dicakup. Kesederhanaan tidak diperbolehkan untuk mengurangi kelengkapan secara berlebihan.
Pendekatan New Jersey
- Kesederhanaan - desainnya harus sederhana, baik dalam implementasi maupun antarmuka. Lebih penting agar implementasinya lebih sederhana daripada antarmuka. Kesederhanaan adalah pertimbangan terpenting dalam suatu desain.
- Kebenaran - desain harus benar dalam semua aspek yang dapat diamati. Sedikit lebih baik menjadi sederhana daripada benar.
- Konsistensi - desain tidak boleh terlalu tidak konsisten. Konsistensi dapat dikorbankan untuk kesederhanaan dalam beberapa kasus, tetapi lebih baik untuk menjatuhkan bagian-bagian dari desain yang berurusan dengan keadaan yang kurang umum daripada memperkenalkan kompleksitas implementasi atau inkonsistensi.
- Kelengkapan - desain harus mencakup situasi penting sebanyak praktis. Semua kasus yang diharapkan secara wajar harus dicakup. Kelengkapan dapat dikorbankan demi kualitas lainnya. Bahkan, kelengkapan harus dikorbankan kapan pun kesederhanaan implementasi terancam. Konsistensi dapat dikorbankan untuk mencapai kelengkapan jika kesederhanaan dipertahankan; terutama yang tidak berharga adalah konsistensi antarmuka.
Harap dicatat saya tidak bertanya apakah Gabriel benar (yang merupakan pertanyaan yang tidak sesuai untuk StackExchange) tetapi untuk contoh-contoh dari apa yang dia maksudkan.