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?
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber