Apakah ada istilah untuk komplikasi OOP yang berlebihan?

18

Satu atau dua tahun yang lalu saya melihat artikel yang sangat baik tentang OOP (Jawa), yang menunjukkan perkembangan logger beton sederhana dari dua atau tiga baris kode, dan proses pemikiran teoretis yang berlebihan oleh pengembang yang tidak berpengalaman yang pada dasarnya mengatakan oh, saya harus tambahkan ini jika kita menginginkannya! Pada akhir artikel, penebang sederhana ini adalah sampah raksasa yang hampir tidak dapat dipahami oleh pengembang asli ...

Apakah ada istilah umum untuk jenis komplikasi berlebih ini? Artikel itu (yang saya harap bisa saya temukan lagi) menunjukkan konsep yang luar biasa untuk kasus yang terisolasi, tetapi saya telah menemukan seluruh proyek di mana para pengembang pada dasarnya telah memprogram diri mereka sendiri menjadi simpul dengan penggunaan pola, kerangka kerja, perpustakaan dan masalah lain. Dengan caranya sendiri, ini sama buruknya (atau bahkan lebih buruk) dari aplikasi spaghetti VB6 lama yang kami warisi untuk penggantian.

Apa yang sebenarnya saya cari adalah mengemukakan hal ini saat wawancara. Saya ingin tahu apakah seseorang sadar dan sadar betapa mudahnya jatuh ke dalam ini dengan kurangnya arsitektur / pra-perencanaan (dan mendapatkan jatuh untuk apakah mereka tampaknya memiliki keseimbangan yang tepat di tempat), tetapi itu bukan sesuatu yang benar-benar sesuatu Saya dapat menemukan banyak info tentang.

Jachach
sumber
25
Ya, itu disebut OOP.
Gardenhead

Jawaban:

28

Istilah yang paling sering saya dengar untuk menggambarkan desain seperti itu adalah rekayasa berlebihan . The makna asli dari kata itu, bagaimanapun, tidak berhubungan dengan pengembangan perangkat lunak, dan di luar pengembangan perangkat lunak memiliki mungkin tidak nada yang buruk tersebut.

Pada tingkat yang lebih umum, Joel Spolsky memberi desainer yang overcomplicate desain arsitektur nama " astronot arsitektur ".

Namun, terutama untuk wawancara, saya pikir lebih penting untuk mengetahui apa yang disebut sebaliknya, menempatkan hanya hal-hal ke dalam desain yang benar-benar dibutuhkan dan melupakan pendekatan "hanya dalam kasus" yang tidak sehat - ini disebut prinsip YAGNI .

Doc Brown
sumber
Terima kasih. Saya penganjur besar YAGNI, tidak yakin apakah ada yang sebaliknya.
jleach
Saya akan menekankan bahwa yagni adalah tentang "apa yang sebenarnya dibutuhkan saat ini". Anda masih harus meninggalkan hal-hal, bahkan jika diketahui akan diperlukan nanti, selama tidak diperlukan saat ini.
Bent
7
@Bent, saya juga akan menekankan bahwa itu tidak berarti untuk sepenuhnya mengabaikan hal / perubahan yang Anda tahu pasti akan terjadi di fitur dekat ... mengetahui bagaimana perangkat lunak akan diperluas setelah dapat memandu Anda untuk menulis kode yang akan lebih dengan mudah dapat diulang kembali sepanjang sumbu perubahan itu.
Bakuriu
Saya telah menggunakan istilah "rekayasa buruk" sebagai kebalikan dari "rekayasa berlebihan". Saya telah bekerja dengan orang-orang yang suka menambahkan semua jenis fitur dan ekstensi "hanya dalam kasus" yang tidak memiliki kasus penggunaan yang jelas. Jika Anda gagal memahami masalah yang Anda coba selesaikan, itu hanya rekayasa yang buruk.
Josh Johnson
4

Ya, overengineering adalah istilah paling sederhana untuk menggambarkan ini. Saya telah melihat desain yang rumit, tidak perlu-rumit lebih dari yang saya ingat selama bertahun-tahun. Bertahun-tahun yang lalu ketika mengambil kursus Microsoft GWBasic, instruktur berulang kali memalu metode KISS (Keep it Simple Stupid). Ini sama benarnya hari ini seperti dulu.

Jadi saya selalu ingat CIUMAN dan selalu mendesain dengan Prinsip SOLID dalam pikiran. Tetapi dengan itu, masih mungkin untuk merekayasa desain dengan prinsip-prinsip SOLID sepenuhnya. Anda harus menyeimbangkan akal sehat, pendekatan pragmatis dengan keinginan untuk menjadi murni dan mematuhi pedoman OOP yang dapat diterima secara umum. Jika diberi waktu yang cukup dan jika Anda suka membuat solusi yang rumit, Anda dapat berakhir di jalur merancang mesin untuk skateboard karena Anda pikir pada akhirnya akan berubah menjadi mobil. Untungnya, saya telah cukup disiplin untuk tidak melakukan ini selama bertahun-tahun, tetapi saya telah melihatnya berkali-kali.

Jadi untuk meringkas, untuk mencegah komplikasi kode yang berlebihan:

1) KISS (Keep It Simple Stupid)

2) Ikuti prinsip-prinsip SOLID dengan kepraktisan dalam pikiran.

3) Jangan mencoba mendesain untuk setiap kemungkinan. Dan kadang-kadang abstraksi kecil dan bocor bukanlah hal yang mengerikan, jika mereka terisolasi, disengaja, dan jika upaya untuk mencegahnya jauh melebihi dampak dari mempertahankannya.

4) Pertimbangkan implementasi solusi saat mendesainnya. Anda tidak bisa hanya mengatakan, "oh, itu detail implementasi", dan menganggap desain Anda praktis. Saya dulu bekerja dengan seorang arsitek yang sering melakukan ini, dan sayangnya, desainnya tidak pernah bekerja, dan akibatnya, saya tidak bekerja lagi di sana.

5) Kode seolah-olah Anda yang akan mempertahankannya.

David Spenard
sumber
-3

Jadi, Anda akan melakukan wawancara ini dan Anda berniat untuk menipu kandidat agar menampilkan apa yang dia ketahui tentang rekayasa perangkat lunak dan kemudian Anda akan berkata "Tidak, Anda mungkin ingin menerapkan semua yang Anda tahu dalam tugas pertama Anda, lanjutkan sekarang , Anda pencipta pelapis nilai-bisnis non-nilai bisnis emas! Shoo! "

Saya pikir akan lebih aman untuk menyajikan contoh konkret dan mendiskusikan pro dan kontra dari penerapan pola-pola tertentu. Daripada Anda akan meminta tanggapan seperti "Itu tergantung, apakah Anda ingin cepat? Apakah ini semua? Seberapa rumit masalahnya? Pola apa yang sudah ada?" dan Anda dapat belajar sesuatu sendiri. Ini juga akan memungkinkan kandidat untuk membuktikan rasa konteksnya sementara itu akan menjadi pertanyaan yang lebih terbuka. Menunggu dan menginginkan jawaban spesifik paling tidak akan membuat Anda seseorang dengan masalah terbesar yang sama dengan Anda. Jika Anda tidak mendapatkan jawaban Anda, bisa jadi kandidat menganggapnya sebagai no-brainer.

Martin Maat
sumber
4
Maaf, tapi saya benar-benar hanya ingin tahu apakah ada istilah untuk itu. Saya tidak mencari saran tentang bagaimana melakukan wawancara (atau agar pertanyaan saya dipahami dengan cara bagaimana saya akan melakukan wawancara). Terima kasih atas perhatian Anda ...
jleach
1
Nah, Anda memang menulis paragraf terakhir di pertanyaan Anda yang sulit untuk diabaikan dan cukup pernyataan. Jika Anda tidak menghargai umpan balik pada bagian-bagian tertentu dari teks Anda, Anda mungkin ingin lebih membatasi apa yang Anda letakkan.
Martin Maat