Apakah Pola Desain Menahan Kreativitas

21

Bertahun-tahun yang lalu, saya berbicara dengan seorang profesor Ekonomi tentang pola desain, bagaimana mereka membangun bahasa umum untuk programmer dan bagaimana mereka memecahkan masalah yang terkenal dengan cara yang baik, dll.

Kemudian dia berbicara kembali kepada saya bahwa ini adalah pendekatan sebaliknya yang akan dia gunakan untuk mahasiswa Ekonomi. Dia biasanya mempresentasikan masalah dan meminta mereka untuk menemukan solusi terlebih dahulu, sehingga mereka dapat memikirkannya terlebih dahulu dan mencoba mencari cara untuk menyelesaikan masalah terlebih dahulu, dan hanya setelah itu, ia mempresentasikan solusi "klasik".

Jadi saya berpikir jika pendekatan "desain pola" benar-benar sesuatu yang membuat programmer lebih pintar atau bodoh, karena mereka sering kali hanya mendapatkan "solusi yang tepat untuk masalah ini" daripada mungkin menggunakan kreativitas dan imajinasi untuk menyelesaikan beberapa masalah dalam cara baru dan inovatif.

Apa yang kamu pikirkan?

Leo
sumber
5
Saya sarankan membaca A Pattern Language (buku, bukan artikel wikipedia) di mana konsep arsitektur perangkat lunak pola didirikan. Mereka tidak membangun blok atau potongan puzzle agar cocok bersama begitu saja.
11
Miring / Mengajar berbeda dari melakukan. Jadi kursus CS yang sangat bagus mungkin membuat Anda menulis kompiler - jika Anda menyarankan kepada atasan Anda bahwa Anda perlu menulis kompiler untuk sistem pemrosesan pesanannya Anda akan / harus dipecat.
James Anderson
2
Saya tidak berpikir keduanya harus sebanding - pola desain bukan solusi klasik, mereka adalah pendekatan untuk banyak solusi.
jmoreno
1
kemungkinan duplikat pola Desain - apakah Anda menggunakannya? - pertanyaannya mungkin terdengar berbeda, tetapi jawaban untuk pertanyaan itu cocok untuk kasus ini.
Doc Brown
2
Saya tidak tahu tentang kreativitas, tetapi banyak sekali "Pola apa ini?" atau "Apakah ada pola untuk ini?" pertanyaan memberi kesan bahwa beberapa devs berpikir ada pola untuk semuanya.
JeffO

Jawaban:

43

Profesor ekonomi Anda benar sekali.

Pola Desain Perangkat Lunak terutama merupakan cara bagi pengembang perangkat lunak berpengalaman untuk berkomunikasi satu sama lain . Mereka adalah singkatan untuk solusi mapan untuk masalah yang diketahui.

Tetapi mereka seharusnya hanya digunakan oleh orang-orang yang mengerti bagaimana menyelesaikan masalah tanpa pola, atau telah muncul dengan pola yang sama sendiri. Kalau tidak, mereka akan memiliki masalah yang sama dengan copy / paste coder; mereka akan memiliki kode, tetapi mereka tidak akan mengerti cara kerjanya, dan karena itu tidak akan dapat memecahkan masalah itu.

Juga, banyak pola desain adalah pola perusahaan , pola yang dimaksudkan untuk digunakan dalam sistem perangkat lunak perusahaan yang besar. Jika Anda mempelajari keajaiban wadah Inversion of Control, Anda akan ingin menggunakannya di setiap program yang Anda tulis, meskipun sebagian besar program tidak benar-benar membutuhkannya (ada cara yang lebih baik untuk menyuntikkan dependensi Anda dalam program yang lebih kecil, dengan cara yang tidak tidak memerlukan wadah IOC).

Pelajari polanya. Memahami pola, dan penggunaannya yang tepat. Ketahui cara mengatasi masalah yang sama tanpa pola (semua pola perangkat lunak adalah abstraksi atas algoritma mendasar). Maka Anda akan dapat menggunakan pola perangkat lunak dengan percaya diri, ketika itu masuk akal untuk melakukannya.

Robert Harvey
sumber
3
Saya cukup yakin ada begitu banyak pengembang yang tanpa menggunakan pola desain mereka akan menulis kode berkualitas rendah sehingga tidak seorang pun ingin melihatnya. Saya tidak setuju bahwa ini HANYA digunakan oleh orang-orang yang mengerti bagaimana menyelesaikan masalah tanpa pola ... Bagi saya itu adalah inti dari pola desain; Jika saya tahu bagaimana melakukannya, mengapa saya harus memilih pola desain? Juga apa yang harus dilakukan pengembang lain jika kita memaksa mereka untuk tidak menggunakan pola desain? Mereka harus membuat perangkat lunak nyata dengan ide-ide mereka dan membiarkannya gagal dan kemudian belajar sesuatu yang baru?
Mahdi
18
@ Mahdi ketika banyak orang menemukan solusi yang sama, solusi itu disebut pola. Ini bukan sebaliknya - Anda tidak melihat pola dan menggunakannya sebagai solusi, Anda melihat solusi dan menemukan pola.
user253751
13
@ Mahdi Saya melihat jauh lebih banyak pemula yang berpikir bahwa jika saja mereka menggunakan pola XXX mereka akan membuat perangkat lunak yang sempurna setiap kali (di mana XXX adalah apa pun yang mereka baca terakhir tentu saja) dan kemudian pergi keluar dari jalan mereka untuk menyiksa setiap proyek agar sesuai pola itu.
jwenting
5
@ Mahdi: jangan mengambil kalimat "oleh orang-orang yang mengerti bagaimana menyelesaikan masalah tanpa pola" terlalu harfiah. Robert tentunya berarti "oleh orang-orang yang telah memahami masalah yang dipertaruhkan dengan cukup baik untuk membuat keputusan yang masuk akal tentang kapan harus menggunakan suatu pola, dan kapan tidak".
Doc Brown
2
@Dunk Saya bisa mencoba sesuatu yang kreatif di atas pola yang terkenal atau saya bisa membuatnya dari awal, tetapi setelah mencoba banyak hal lain dan setelah memahami apa pro dan kontra yang tepat dari setiap pola. Jika Anda meminta saya untuk pergi dan membangun rumah untuk pertama kalinya dan katakan saja kepada saya untuk menjadi kreatif maka saya tidak akan sampai sejauh itu untuk membangun sesuatu yang solid, hanya karena itu terlalu rumit. Jika Anda ingin menjadi kreatif alih-alih menggunakan suatu pola, Anda harus sudah memiliki pemahaman yang kuat tentang masalah itu sendiri, dan Anda akan memperolehnya hanya setelah pengalaman bertahun-tahun ...
Mahdi
21

Cara Pola Desain orang ingin Anda melihat Pola Desain adalah sebagai satu set solusi yang dapat Anda terapkan jika masalah serupa muncul. Mereka tidak ingin Anda menganggap mereka sebagai satu-satunya solusi yang mungkin, yang diberikan oleh Allah kepada Musa yang diukir dalam loh batu di atas gunung.

Sayangnya, beberapa orang menganggapnya sebagai sesuatu yang lebih dekat dengan tulisan suci daripada sekelompok contoh desain yang bisa dipelajari. Itu membunuh kreativitas, dan mendirikan kultus kargo.

Profesor ekonomi Anda menyebutkan memberi siswa masalah dan meminta mereka untuk menyelesaikannya terlebih dahulu, yang merupakan teknik pendidikan yang baik, tetapi ia memiliki solusi untuk menunjukkan kepada mereka. Memiliki banyak solusi untuk banyak masalah yang berbeda di kepala Anda adalah hal yang baik, dan itu adalah sesuatu Pola Desain mencoba menjadi. Saya pikir itu gagal dalam beberapa hal (Singleton mendorong pendekatan yang buruk, fokus rabun pada OO imperatif, dll), tetapi dapat digunakan dengan baik dengan kecerdasan dan selera. Namun, adalah kesalahan untuk berpikir bahwa setiap solusi contoh yang mungkin dalam perangkat lunak Harus Menjadi Pola Desain Resmi.

Jika Anda melihat suatu masalah dan bertanya pada diri sendiri "Apa Pola Desain untuk ini?", Maka Anda melakukan kesalahan, dan Anda akan cenderung melihat solusi yang menatap wajah Anda.

Jika Anda melihat masalah dan bertanya pada diri sendiri "Bagaimana saya bisa menyelesaikan ini?", Maka jika ada solusi non-pola, Anda akan melihatnya, dan jika ada pola yang cocok, Anda akan melihatnya juga.

Michael Shaw
sumber
10

Saya juga berpikir profesor ekonomi Anda benar dan itulah cara untuk mempelajari apa pun sejak awal; Namun mari kita lihat seperti ini: Apakah Anda akan menjaga rahasia Wheel dan membiarkan semua orang menemukannya kembali, demi Kreativitas ? Saya berharap Anda mengatakan Tidak, karena tidak semua orang dibuat / mampu menemukan roda mereka - dan jika mereka, mereka akan melakukannya di beberapa titik, tidak masalah jika mereka menyadari keberadaan roda atau tidak.

Mari kita kembali ke programmer; Saya adalah pengembang web di siang hari, jadi MVC adalah salah satu hal yang berinteraksi dengan saya setiap hari. Beberapa kali saya mencoba membangun struktur saya sendiri, saya belajar banyak tetapi semuanya pada dasarnya tidak berhasil. Saya mencoba yang terbaik tetapi apa yang akan terjadi jika tidak ada MVC di luar sana? Yah, sederhana, kode sumber saya menyebalkan - dalam hal keandalan, pemeliharaan dan perluasan.

Saya pikir itu sama untuk kebanyakan dari kita. Jika tidak ada yang memberi tahu Anda tentang DI - sebagai praktik yang baik, lalu berapa banyak aplikasi perusahaan yang harus berjuang atau gagal sampai pengembangnya mempelajari pelajaran?

Poin kedua adalah Standar Industri . Jika Anda tidak akan mengajarkan MVC kepada pengembang web maka apakah Anda siap untuk menghadapi semua struktur non-standar yang perlu Anda luangkan waktu untuk mempelajari cara mereka melakukan sesuatu terlebih dahulu, dan kemudian Anda menyadari bahwa beberapa struktur itu mungkin memiliki ide yang bagus, tetapi sebagian besar dari mereka akan memiliki kekurangan desain yang serius yang mungkin memiliki konsekuensi serius untuk proyek perangkat lunak Anda - bahkan kerangka kerja terkenal masih berjuang dengan kekurangan desain dari waktu ke waktu.

Tetapi apa yang akan terjadi jika kita memiliki semua ide bagus itu dan menggabungkan semuanya dan para pengembang pintar mengambil hal-hal baik dari semua eksperimen itu dan membuat struktur yang sangat keren yang paling cocok untuk masalah spesifik itu? Maka Anda baru saja membuat Pola Desain . Jika Anda adalah makhluk hidup, maka tidak ada jalan lain; Bahkan hewan mengikuti praktik terbaik dan pola desain dalam kehidupan sehari-hari mereka.

Mahdi
sumber
3
"Saya belajar banyak tetapi semuanya pada dasarnya tidak berhasil. Saya mencoba yang terbaik tetapi apa yang akan terjadi jika tidak ada MVC di luar sana? Yah, sederhana, kode sumber saya menyebalkan" - kata-kata emas padat!
ankush981
5

Jangan menemukan kembali palu, tetapi jangan memperlakukan setiap masalah seperti paku

Pola pemrograman adalah penghemat waktu yang hebat, karena memberi Anda solusi siap pakai, didokumentasikan dengan baik dan diuji dengan kasing rata-rata yang bisa Anda lupakan dengan mudah. Tetapi Anda perlu belajar (dan berpikir) kapan menggunakannya.

Mengutip pertanyaan Anda: apakah belajar mengemudi membuat saya bergerak lebih cepat, atau hanya berjalan lebih lambat?

Mempelajari cara menggunakan pola pemrograman tidak berarti Anda tidak perlu berolahraga untuk menemukan solusi sendiri. Masih akan ada cukup masalah untuk melatih kreativitas Anda. Mengetahui pola pemrograman hanya akan membuat Anda cepat dengan masalah terkenal dan berkonsentrasi pada mereka, yang kurang sepele.

Kembali ke bagian kedua dari pertanyaan Anda - apakah proffesor Anda benar?

Ya, dia benar . Tujuan utama studi adalah belajar siswa untuk berpikir . Mereka perlu mencoba menemukan solusi mereka sendiri untuk masalah tersebut, dan kemudian menghadapi mereka dengan solusi yang ada. Hanya dengan cara itu mereka benar-benar dapat memahaminya. Jika Anda mempelajari polanya terlebih dahulu, Anda berisiko mereka hanya akan belajar secara mekanis untuk menerapkannya, dan tidak memahami, apa yang ada di baliknya.

Inilah alasan mengapa Anda pertama kali mengajar siswa ke program, dan polanya diperkenalkan di semester berikutnya.

Pelaut Danubia
sumber
5

Saya benar-benar akan menyarankan untuk tidak mengajarkan pemrograman dengan mengajarkan pola desain. Anda tidak dapat menerapkannya dengan baik tanpa memahami asas-asas di belakangnya, sehingga mengajarkan asas-asas itu jauh lebih penting.

Saya cenderung berpikir bahwa pola desain juga tidak begitu berharga bagi programmer yang bekerja. Jika Anda benar-benar memahami prinsip-prinsip yang terlibat dalam pola desain tertentu, maka dalam situasi di mana itu adalah solusi yang baik Anda secara alami akan cenderung membangunnya (atau sesuatu yang serupa) tetap saja sebagai hal yang biasa, bahkan jika Anda tidak tahu bahwa itu adalah pola dengan nama. Kapan pun Anda akan menghabiskan pola belajar bisa lebih baik dihabiskan untuk belajar bagaimana memikirkan kode secara umum. Jika keterampilan "pemecahan masalah secara umum" Anda tidak lengkap, maka Anda tidak dapat menulis kode yang bagus tidak peduli seberapa baik Anda dalam menerapkan beberapa pola. Dan jika keterampilan "pemecahan masalah secara umum" Anda baik, maka Anda dapat memecahkan masalah bahkan jika Anda tidak tahu satu pola pun.

Saya juga berpikir bahwa di dunia yang ideal tidak akan ada pola desain, karena ide-ide yang cukup umum untuk disebut pola semua akan diimplementasikan dengan baik di perpustakaan dan kami benar-benar akan menggunakan kembali kode daripada terus-menerus menulis ulang itu. Bayangkan jika ada "pola desain ekspresi reguler", yang mengharuskan Anda untuk menerapkan mesin regex kecil setiap kali Anda ingin menggunakannya. Pola desain hanyalah perpustakaan yang tidak dapat ditulis karena bahasa tidak menyediakan fasilitas abstraksi yang tepat.

Itu sebenarnya alasan lain untuk tidak terlalu peduli tentang mereka; mereka tidak mendekati universal seperti yang kadang-kadang diklaim, tetapi pada kenyataannya terikat sangat kuat dengan cara-cara khusus program penataan yang bahasa tertentu memungkinkan / mendorong. Buku pola desain yang ditulis untuk Python akan sangat berbeda dari yang ditulis untuk Java, dan bahkan lebih berbeda dari yang ditulis untuk bahasa non-imperatif seperti Haskell. Lebih baik untuk memahami pada tingkat yang lebih dalam, dan Anda akan dapat menemukan pola desain sendiri dalam bahasa apa pun yang Anda kenal.

Ben
sumber
Hmm, jawaban yang menarik. Tetapi saya mendengar bahwa wawancara pemrograman sangat tergantung pada pola desain. Mengapa itu terjadi jika ada sedikit nilai di dalamnya?
ankush981
@dotslash Untuk alasan yang sama bahwa tes IQ berat pada matematika / logika: mereka memiliki beberapa nilai dan mudah diuji. Yang mengatakan, dalam pekerjaan saya mencari sebagai programmer saya tidak menemui mereka dalam wawancara sebanyak itu; Saya orang Australia, jadi mungkin ada perbedaan dalam mode.
Ben
Tetapi bukankah belajar tentang pola desain merupakan cara yang bagus untuk melihat contoh konkret tentang cara berpikir tentang kode? Hal-hal apa yang akan Anda lihat untuk mempelajari cara berpikir tentang kode jika bukan masalah + solusi umum yang memecahkan masalah dan contoh kode yang mengimplementasikan solusi?
Amy Blankenship
@Aya Ya, tapi ada perbedaan besar antara "ini masalahnya, inilah solusinya, inilah cara saya memunculkannya" dan "inilah polanya, hafalkan sehingga Anda dapat menerapkannya pada masalah ini di masa mendatang". Anda ingin mengajarkan kemampuan untuk menghasilkan solusi, karena pola hanya dapat berlaku beberapa saat, sehingga mereka akan membutuhkan kemampuan itu tidak peduli berapa banyak pola yang mereka ketahui. Jika saya mengajar kursus termasuk pola, saya mungkin akan melakukannya dengan mengatur latihan yang dirancang untuk membuat siswa memperhatikan sendiri bahwa ada konsep umum dalam solusi untuk latihan.
Ben
Jawaban yang sangat bagus. Lingkungan pemrograman terbaik akan merangkum pola yang paling menarik di perpustakaan atau bahasa, membebaskan pengembang untuk bekerja di tingkat yang lebih tinggi. Saya juga suka poin tentang ketergantungan bahasa; banyak pola desain umum sebenarnya sudah usang sekarang.
Frank Hileman
3

Perdagangan dan pendidikan memiliki tujuan yang berbeda. Jika saya mengajar siswa pola desain, saya akan mengambil pendekatan yang sama. Tetapi dalam lingkungan produksi, waktu dan efisiensi adalah segalanya.

Selain itu, ekonomi (makro) di luar kelas adalah hal yang berbeda. Apakah Anda melihat pemerintah berkata, "Whoa! Sekarang kita sangat bosan melakukan pajak dan semua cara yang sama, jadi mari kita coba sesuatu yang super aneh kali ini"? Tidak, Anda tidak bisa, karena eksperimen liar semacam itu dapat menghancurkan ekonomi tanpa bisa diperbaiki. Sebaliknya, mereka cenderung berpegang pada pendekatan yang telah dicoba dan diuji: meningkatkan suku bunga, mengumumkan pembebasan pajak, dll. Dengan kata lain, mereka mengandalkan pola desain.

ankush981
sumber
1

Jawabannya tentu saja: Ya.

Pola desain adalah alat pembelajaran yang luar biasa, asalkan orang meluangkan waktu untuk mencari tahu bagaimana mereka bekerja dan mengapa mereka membawa nilai yang mereka bawa.

Mereka juga bisa menjadi pemacu produktivitas yang hebat dengan melacak proses desain dengan cepat, karena mereka memberikan solusi yang akrab untuk masalah yang muncul setiap saat.

Namun, jika mereka desain arus pendek terlalu banyak, atau orang menjadi dogmatis dan terlalu tepat tentang penggunaannya, maka mereka memiliki efek sebaliknya.

rampok
sumber
3
mereka adalah alat pengajaran yang mengerikan untuk mengajar pemrograman (bukan desain). Mereka mengarah ke pertanyaan oh begitu umum di forum internet "bagaimana saya bisa menerapkan XXX menggunakan pola YYY", yang merupakan pertanyaan yang salah untuk ditanyakan, pertanyaannya seharusnya (ketika Anda ingin memaksakan pola) "pola apa yang akan sesuai untuk mengimplementasikan XXX "
jwenting
1
lol Saya katakan alat belajar, bukan alat mengajar - jika ada yang mau belajar;)
Rob
-2

Pola desain tentu saja kurang kreatif. Itu seluruh idenya. Kreativitas adalah sumber daya yang langka. Anda tidak boleh menyia-nyiakannya untuk masalah yang tidak membutuhkan kreativitas. Jauh lebih mudah, lebih cepat, dan lebih mungkin untuk bekerja, jika Anda memecahkan masalah dengan cara yang sama seperti ratusan pengembang sebelum Anda. Kode membosankan yang tidak seru yang melakukan tugasnya sebenarnya bagus.

gnasher729
sumber
2
Apakah ini hanya pendapat Anda atau Anda dapat mendukungnya?
nyamuk