Tampaknya banyak kali pada stackoverflow, bahwa orang-orang (terutama programmer) cenderung terlalu menyulitkan solusi untuk masalah di mana solusinya jauh lebih rumit daripada masalah aslinya? Saya bukan ahli dengan cara apa pun, tetapi banyak kali saya mencoba untuk pergi dengan solusi paling sederhana yang bekerja (dan jelas ini tidak berhasil di MANA SAJA) tetapi saya sudah cukup sukses dengan menyarankan solusi sederhana pada pekerjaan yang orang tampaknya mengabaikan solusi JAUH lebih rumit?
Apakah ini seperti hal yang normal bagi programmer ..... atau saya hanya tidak berpikir dalam perspektif yang benar.
programming-practices
code-quality
pengguna6791
sumber
sumber
Jawaban:
Jelas, beberapa programmer sangat ingin menunjukkan seberapa pintar mereka dengan membuat beberapa kode rumit yang tidak dapat dimengerti oleh siapa pun. Pemrogram lain menembaki tingkat tinggi, sehingga komplikasi dalam solusi adalah evolusi alami.
Beberapa kode terburuk yang pernah saya lihat adalah metode yang memiliki lebih dari 2000 baris kode di dalamnya. Tidak diragukan lagi kode ini kompleks, tetapi juga sangat buruk.
Saya pikir seorang programmer yang baik menghindari kode yang terlalu rumit. Ini termasuk menghindari godaan untuk memaksakan pola desain agar sesuai dengan solusi yang tidak benar-benar membutuhkannya. Ini juga termasuk menghindari objek Tuhan, tombol ajaib, optimisasi prematur, generalisasi prematur, dan anti-pola lainnya.
Saya terus-menerus memperbaiki dan mencari peluang untuk menyederhanakan solusi saya karena pertumbuhan kompleksitas adalah hal yang organik. Seperti banyak hal organik lainnya, harus dipangkas dan dipangkas jika kita ingin terus digunakan. Saya benci harus berinteraksi dengan solusi yang terlalu rumit karena dengan meningkatnya kerumitan, semakin besar kemungkinan melanggar kode.
Saya pikir keterbacaan adalah elemen paling penting dari pemeliharaan kode, dan solusi yang terlalu rumit hampir selalu mengurangi keterbacaan, dan meningkatkan biaya pemeliharaan.
sumber
Saya telah melihat banyak kode yang lebih kompleks dari yang seharusnya dan hampir selalu karena tiga alasan berikut:
1) Over-engineered karena generalisasi prematur atau mencoba mengantisipasi kebutuhan masa depan yang tidak pernah muncul
2) Pengembang ingin belajar / bereksperimen dengan pola desain baru atau teknologi yang belum pernah mereka gunakan sebelumnya dan memilihnya bahkan ketika itu berlebihan. Mereka melakukannya karena itu membuat pekerjaan mereka lebih menarik dan mereka dapat belajar sesuatu yang baru.
3) Fitur dan perbaikan bug telah ditambahkan, tetapi kode yang ada saat itu tidak di-refactored dengan benar saat itu. Itu mungkin hanya sepotong kecil duplikasi atau menempel argumen bendera lain ke suatu metode tetapi semuanya bertambah. Secara efektif, peretasan ditambahkan dan tidak butuh waktu lama untuk semuanya menjadi terlalu rumit karena semua bau kode. Ini adalah yang paling umum dan biasanya hanya karena tidak mengetahui tekanan waktu atau lebih baik.
sumber
Ini benar-benar hal yang umum. Seperti yang dikatakan sebagian besar buku, pengembang yang baik tahu bagaimana membuatnya sederhana. Terlalu mudah untuk menyulitkan sesuatu dengan teknologi baru atau kerangka kerja "keren" yang baru saja Anda temukan, jadi Anda mulai mencari cara untuk menggunakannya, alih-alih berpikir dari perspektif masalah.
Seperti yang dikatakan Martin Fowler, mereka yang mempelajari teknologi baru memiliki masalah jangka pendek di mana "teknologinya" mendorong solusi.
sumber
Saya tidak berpikir itu normal untuk semua programmer, tapi saya pasti melihat banyak programmer melakukan ini.
Saya pikir beberapa orang percaya bahwa beberapa orang melihat membuat sesuatu yang sangat sederhana 'terlalu mudah', dan itu bukan karya yang baik dari keterampilan mereka. Oleh karena itu, mereka harus membuat solusi besar dan kompleks yang ada cara mengatakan 'lihat apa yang bisa saya lakukan!', Meskipun itu mungkin bukan solusi terbaik untuk masalah yang dihadapi.
sumber
Saya telah melihat programmer sering menulis beberapa baris kode untuk menyelesaikan tugas yang mereka tidak tahu sudah dibangun ke dalam bahasa. Ini tidak disengaja tetapi pasti bisa dicegah.
sumber
Itu tergantung pada apa yang Anda sebut "sederhana". Beberapa orang melihat kode yang sangat refactored sebagai lebih "kompleks" karena ada lebih banyak kode, dan beberapa grafik panggilan. Namun, kode ini lebih "sederhana" karena lebih mudah untuk melakukan perubahan.
Saya sering menemukan bahwa fungsi besar terlihat "sederhana" sampai Anda perlu melakukan perubahan, kemudian menjadi kompleks dengan cepat.
Dengan kata lain, sederhana ada di mata yang melihatnya dalam banyak kasus.
sumber
Masalahnya adalah jika Anda tidak dapat melihat solusi sederhana dengan jelas (di sinilah diskusi dengan rekan-rekan bermain) atau jika Anda terlalu menyamaratakan terlalu dini.
Dengan kata lain, Anda membuat loop sederhana ke fungsi pustaka lanjut karena Anda pikir Anda akan memerlukannya untuk proyek berikutnya (kecuali bahwa Anda tidak akan dalam bentuk yang tepat ini). Lakukan ini terlalu lama dan Anda memiliki aplikasi yang sangat kompleks dengan inti yang sangat sederhana.
Anda mungkin juga menemukan bahwa Anda harus memiliki kode yang sangat kuat, dan semua ketahanan membuatnya rumit secara default. Namun saya tidak berpikir bahwa ini adalah masalah Anda.
sumber
Dalam beberapa kasus mungkin hanya kompleksitas dengan solusi bersih / sederhana.
Ada kutipan yang tidak dapat saya ingat atau temukan sesuatu yang berjalan sendiri, baris "Kode tidak lengkap begitu Anda telah menulis semua yang Anda butuhkan untuk menulis tetapi hanya menyelesaikan begitu Anda tidak memiliki sesuatu yang tersisa untuk dihapus"
Kurangnya kejelasan akan menghalangi kemampuan orang untuk menghapus semua kelebihan.
sumber
Insinyur terbaik adalah yang dapat mengambil masalah yang sangat rumit dan mengubahnya menjadi solusi yang mudah diimplementasikan dan mudah dipahami. Kedengarannya sederhana, tetapi tidak ada banyak insinyur / pengembang seperti itu yang ada. Sebenarnya tidak banyak orang seperti itu yang ada. Pada kenyataannya mayoritas orang di luar sana melakukan hal yang sebaliknya. Mereka mengambil masalah sederhana dan mempersulit mereka tanpa bisa dikenali. Lihat saja politisi kita untuk contoh orang-orang yang berhasil mengambil masalah sederhana dan mengubahnya menjadi kekacauan total. Programmer tidak berbeda dalam hal ini.
sumber
Secara pribadi, saya tidak pernah dengan sengaja mencoba membuat perangkat lunak lebih rumit. Namun, saya telah menyelesaikan sesuatu dan berpikir "wow, itu terlalu rumit" dan kembali ke sana dan refactored. Beberapa orang mungkin melihat ini dan hanya berpikir itu berfungsi dan itu cukup baik dan bukan refactor.
sumber
Orang bijak dituduh mengatakan Anda harus menjaga sesederhana mungkin, tetapi tidak sederhana. Hal yang sama berlaku untuk kode. Kadang-kadang Anda harus menggunakan teknik yang beberapa anggap kompleks (rekursi mungkin menjadi contoh yang baik, sering membuat takut programmer junior).
Namun, secara umum saya pikir kode kompleks sering muncul secara organik. Masalah sederhana diselesaikan dengan kode yang sederhana, kemudian ruang lingkup meluas dan kode dimodifikasi tanpa terlalu banyak berpikir, dan seiring waktu Anda mendapatkan kode yang mencoba untuk menutupi masalah baru tetapi benar-benar dirancang untuk menyelesaikan masalah yang berbeda. Ini menjadi selimut tambal sulam berbagai potongan logika. Kode seperti itu kemudian sering kali tampak jauh lebih kompleks daripada yang dibutuhkan oleh masalah, tetapi kode itu menjadi seperti itu karena setiap perubahan kecil tampaknya, pada saat itu, menjadi cara termudah untuk membuat kode berfungsi.
Saya tidak berpikir sebagian besar pengembang sengaja membuat kode kompleks (meskipun Anda mendapatkan pamer aneh yang akan menggunakan beberapa teknik untuk membuktikan keterampilan mereka sendiri), saya pikir kode hanya akan seperti itu jika tidak dipelihara secara agresif dan refactored .
sumber
volatile
, dll.) Tetapi ...short
sebesar atau tidakint
. Suatu promotable yangunsigned short
ditambahkan ke promotableint
akan menghasilkan aint
. Menambahkan hal-hal yang ditandatangani dan tidak ditandatangani dengan ukuran yang sama, atau menambahkan hal-hal yang tidak dapat dipromosikan dengan ukuran yang berbeda, akan menjadi kesalahan. Tambahkan sedikit kompleksitas di bagian depan, dan kasus sudut aneh di hilir menghilang.Alasan lain yang belum diangkat adalah bahwa orang mungkin terlalu rumit memberikan solusi untuk memastikan bahwa Anda akan membutuhkan layanan mereka nanti untuk mendukung solusi ini. Dengan kata lain: untuk keamanan pekerjaan.
sumber
Mungkin masalah kesalahan klasik?
sumber
Ya kadang-kadang kita terlalu rumit kode untuk menghibur diri kita sendiri. Sebagian besar meskipun persepsi bahwa kode menjadi terlalu rumit berasal dari peserta yang tidak tahu atau Junior dalam proyek tersebut.
sumber
YA ... dan saya telah membayar harga terlalu banyak.
Papan tulis saya sekarang memiliki pernyataan dalam tanda bintang di bagian paling atas yang bertuliskan
... dan setiap kali saya membuat prototipe sesuatu di papan tulis itu selalu menarik perhatian saya.
Ini benar-benar bekerja untuk saya karena desain saya yang kompleks menjadi jauh lebih sederhana yang diterjemahkan menjadi kode yang lebih bersih.
sumber