Saya akui : Saya punya masalah "Keep It Simple and Short" sebagian besar waktu karena mencoba membuatnya sesuai dengan buku yang saya baca, pola-desain yang saya dengar dll memberi saya antusiasme - antusiasme yang datang dari perasaan bahwa saya berada di jalan yang benar menuju kesempurnaan yang mungkin.
Di sisi lain, ya, itu memberi tekanan ekstra pada saya dalam hal memberikan tenggat waktu kadang-kadang ...
Tetapi setiap kali saya berkata pada diri sendiri, "Lain kali jadikan itu sederhana, Anda bodoh!" Saya merasa sulit untuk membuatnya "sederhana" ketika kali berikutnya datang, karena itu mulai terasa aneh ... dan tidak nyaman setelah beberapa saat.
Lalu saya mulai menilai pemahaman saya tentang 'sederhana' ...
Apakah SIMPLE berarti terlalu pendek sehingga bekerja tetapi sulit untuk mempertahankan dan memperluas?
Apakah SIMPLE berarti melanggar banyak prinsip OOP?
Apakah SIMPLE berarti curang?
Apakah SIMPLE berarti hanya memenuhi tenggat waktu tanpa kesepakatan? dll.
Sebenarnya apa itu?
Pertanyaannya adalah : Dapatkah Anda menulis definisi SEDERHANA dari SIMPLE dalam hal prinsip KISS? -jika ada.
Terima kasih!
sumber
Jawaban:
Mari belajar KISS Prancis:
Yang diterjemahkan ke:
sumber
Skenario
Anda perlu memotong dan mencubit.
Solusi A: Tidak KISS
Solusi B: CIUMAN
Adapun definisi yang tepat : Sulit untuk menentukan skala absolut untuk mengukur kesederhanaan. Sebagian besar karena kesederhanaan sejati menghalangi pemahaman yang sebenarnya tentang masalah yang dihadapi, dan itu jarang dapat dicapai. Tetapi katakanlah solusi A dan B menggambarkan perbedaan antara solusi yang cenderung ke arah kerumitan dan kesederhanaan masing-masing.
sumber
"Jadikan sesederhana mungkin, tetapi tidak sesederhana" -Einstein
Menyimpan kode sesederhana mungkin, tetapi tidak sederhana tergantung pada masalah yang dipecahkan. Selama masalah yang dipecahkan cenderung berubah, demikian juga KISS.
Ada keseimbangan antara over-engineering (oh man ini sepertinya tempat yang bagus untuk memamerkan keterampilan Pola Desain saya!) Dan under-engineering (jika saja saya menggunakan pabrik saya tidak akan memiliki kopling ini yang menyebabkan saya membuat 20 perubahan kode ...). Tujuannya adalah rawatan.
sumber
Sederhana tidak berarti melanggar prinsip pemrograman yang baik. Bahkan, itu berarti lebih banyak kebalikannya.
Tidak. Menjadi sulit untuk dipertahankan dan diperluas adalah gejala kompleksitas yang besar. Bahkan, saya menemukan bahwa membuat kode dapat diperluas mengarah ke kode yang lebih sederhana, karena Anda tidak berurusan dengan setiap kasus, Anda dapat menjaga kode dasar tetap sederhana.
Tidak. Sebagian besar prinsip OOP dirancang untuk menjaga kode tetap bersih dan lebih teratur, yang pada akhirnya, lebih sederhana.
Tidak. Menulis keras untuk mempertahankan kode & peretasan dengan kedok menjaga tenggat waktu adalah.
Batas waktu dan kesederhanaan kode Anda adalah dua masalah terpisah. Menulis kode sederhana tidak membutuhkan waktu lebih lama untuk menulis (walaupun ini adalah kesalahpahaman umum).
sumber
Ini sangat sulit untuk dijelaskan karena sederhana tidak berarti hal yang sama untuk semua orang.
Contoh. Beberapa pengembang berpikir itu
?:
sederhana tetapi yang lain berpikirif
pernyataan lebih baik. Ketika turun ke level ini, Anda tidak bisa menyenangkan semua orang.Secara umum, cara sederhana tanpa kerumitan . Untuk memahami kesederhanaan, kita perlu memahami kompleksitas.
Ada dua jenis kompleksitas:
Anda dapat memeriksa kompleksitas esensial dengan pertanyaan-pertanyaan berikut:
Apakah solusi ini sederhana? Bisakah saya menjelaskannya kepada rekan saya dalam rentang beberapa menit dan mereka mendapatkannya? Apakah ada solusi yang lebih sederhana untuk masalah ini? Jika ya, adakah trade-off antara solusi rumit versus solusi sederhana? Bisakah kita hidup dengan pertukaran itu? Sebagai contoh, banyak programmer membuat kesalahan dengan mengoptimalkan semuanya mikro dan solusi mereka (dan kode juga) menjadi terlalu rumit.
Memeriksa kompleksitas tidak disengaja Anda:
Apakah kodenya sederhana? Jika saya kembali ke sana dalam tiga bulan, berapa lama bagi saya untuk membangun konteks di otak saya sehingga saya dapat membuat perubahan yang perlu saya buat? Apakah semua yang ada dalam kode sumber saya memiliki tujuan yang jelas dan menyampaikan tujuan tersebut secara efektif kepada saya dan pengembang lainnya ? Seberapa sulit untuk menguji kode saya? Biasanya semakin rumit kode Anda, semakin sulit untuk menguji unit, jadi saya biasanya menggunakan ini sebagai ukuran kompleksitas. Anda biasanya menginginkan kelas dan metode yang kecil, diberi nama baik dan fokus. Pola desain biasanya membantu Anda mencapai ini juga.
Jika Anda mendapati diri Anda ingin menggunakan pola desain hanya karena Anda baru saja membacanya, itu mungkin akan memperkenalkan kompleksitas yang tidak disengaja. Jika Anda menemukan diri Anda ingin memasukkan sesuatu karena Anda berpikir 'pintar' itu mungkin akan menimbulkan kompleksitas yang tidak disengaja.
Saya harap ini membantu dan jangan lupa: Sederhana bukan berarti MUDAH .
sumber
Saya selalu merasa prinsip-prinsip di balik X11 ( http://en.wikipedia.org/wiki/X_Window_System#Principles ) patut diperhatikan. Saya tidak selalu berhasil dalam tujuan ini.
Secara khusus, saya harus selalu mengingatkan diri sendiri ... "Jangan menambahkan fungsionalitas baru kecuali jika Anda mengetahui beberapa aplikasi nyata yang akan membutuhkannya.", Dan "Jika Anda bisa mendapatkan 90 persen efek yang diinginkan untuk 10 persen pekerjaan, gunakan solusi yang lebih sederhana. "
sumber
Tidak.
sumber
Sederhana - dalam konteks khusus ini adalah kebalikan dari kompleks. Sederhana tidak perlu berarti: Setiap orang yang berpikiran bodoh harus memahaminya - tetapi Anda harus memastikan, bahwa Anda dapat memahaminya, bahkan jika Anda belum menulisnya sendiri.
Kompleksitas dapat dicapai dengan referensi yang sulit dipahami - singkirkan itu! Banyak file / kelas terhubung satu sama lain - tidak mungkin! Dan kode yang rumit (artinya: loop dirantai, beberapa lapisan ITE, dll.) - tidak ada yang mau membaca itu.
Menurut pendapat saya: Sangat mudah untuk menambahkan fungsi lain, di kelas Anda juga dapat menambahkan fungsi pribadi, sehingga Anda tidak mengacaukan antarmuka. Jadi mengapa tidak menggunakan keunggulan ini dan membatasi Anda fungsi / prosedur hingga 50 baris. Mungkin bahkan kurang. Dapatkan beberapa nama yang bermakna. Dengan cara ini, Anda membuat sebagian besar komentar usang. Dengan cara ini fungsi Anda mudah dibaca, mudah dimodifikasi / diperluas.
Tentu saja ... beberapa kalimat terakhir akan berfungsi sebagai: Di kelas ada ketersediaan untuk mendefinisikan fungsi pribadi, cukup gunakan kemungkinan ini untuk membagi fungsi menjadi 50 liner sehingga lebih mudah dibaca (jangan lupa nama baik, jadi kamu tidak perlu banyak berkomentar).
TETAPI: Jauh lebih sederhana (!) Untuk membaca semuanya jika ada fullstop yang menunjukkan: Saya selesai berpikir, mari kita lanjutkan dengan yang berikutnya.
Itulah yang akan saya definisikan sederhana.
sumber