Saya sangat menikmati game pemrograman dan pembuat / game puzzle. Saya menemukan diri saya merekayasa banyak masalah ini dengan cara yang sama dan pada akhirnya menggunakan teknik serupa untuk memprogram mereka yang saya benar-benar nyaman.
Untuk memberi Anda wawasan singkat, saya ingin membuat grafik di mana node diwakili dengan objek. Objek ini menyimpan data seperti koordinat, posisi, dan tentu saja referensi ke objek tetangga lainnya. Saya akan menempatkan semuanya dalam struktur data dan membuat keputusan tentang informasi ini dalam "lingkaran permainan".
Meskipun ini adalah contoh singkat, ini tidak tepat dalam semua situasi. Hanya satu cara yang membuat saya merasa sangat nyaman. Apakah ini buruk?
problem-solving
Bryan Harrington
sumber
sumber
Jawaban:
Tidak apa-apa.
Inti dari pemrograman praktis adalah untuk menemukan solusi yang mungkin akan berguna dalam banyak perkembangan serupa. Anda baru saja menemukan satu.
Anda tidak dapat dan tidak seharusnya membuat solusi yang berbeda hanya karena mereka berbeda. Tetapi Anda harus memiliki pandangan kritis terhadap solusi Anda setiap kali dan bertanya pada diri sendiri apakah solusi itu masih bagus atau mungkin industri sudah maju sejak saat itu dan Anda perlu menyelaraskan dengannya.
sumber
Jika itu bekerja dengan baik, sebut saja itu pola desain. Jika tidak, tetapi Anda tidak tahu yang lebih baik, itu adalah antipattern palu emas.
sumber
Secara realistis dalam pekerjaan sehari-hari kita, kita cenderung mendapat cukup banyak masalah yang serupa.
Dalam situasi seperti ini, bertahan dengan apa yang Anda ketahui bisa baik. Saya telah melihat lebih banyak contoh solusi buruk dari orang yang menerapkan sesuatu yang mereka tidak mengerti bahwa seseorang menggunakan teknik yang tidak ideal dengan baik.
Jika Anda mengetahui sesuatu dengan baik kemungkinannya adalah Anda dapat melenturkannya sesuai kebutuhan dan implementasi Anda akan solid dan efektif. Hal-hal itu mungkin tidak akan benar dari upaya pertama Anda pada teknik baru.
Tetapi sisi sebaliknya adalah jika semua yang Anda miliki adalah palu, semuanya terlihat seperti paku. Anda harus melakukan hal-hal untuk membuat diri Anda sadar akan alternatif dan ketika Anda mungkin mendorong favorit Anda terlalu jauh.
Mungkin memilih beberapa perubahan yang tidak mendesak / tidak kritis dan menggunakannya untuk mempercepat dengan solusi alternatif?
sumber
Pertanyaan yang bagus, dan saya harus mengakui bahwa ini adalah sesuatu yang menghantui saya juga.
Kapan ini baik-baik saja? Lakukan analisis kinerja kode Anda - jika Anda melihat bahwa Anda berada di O (log n) atau O (n) atau O (n log n) dan dengan demikian masalahnya dapat dipetakan ke struktur data yang diketahui, Anda biasanya baik-baik saja.
Kapan ini tidak baik? Kompleksitas waktu atau ruang Anda adalah O (n ^ 2) atau lebih buruk, atau masalah menurut definisi adalah NP lengkap. Dalam situasi ini Anda perlu menerapkan sedikit heuristik, menerapkan pengetahuan dari domain lain dll.
Contoh cepat: Dalam desain chip, memilih cara mengatur gerbang di sirkuit untuk daya minimal adalah NP-complete. Hanya grafik saja tidak akan banyak membantu Anda meskipun itu adalah suatu keharusan. Anda perlu membaca materi tambahan, banyak di antaranya antar-disiplin di waktu dan menerapkan pengetahuan dalam domain Anda. Untuk algoritma genetika misalnya (algoritma yang meniru crossover dan mutasi genetik, sebagaimana didefinisikan dalam biologi 101) memiliki banyak aplikasi dalam merancang chip perangkat keras.
sumber
Belum tentu, jika itu cara yang baik untuk menyelesaikannya :)
Biasanya ketika mengerjakan "solusi", saya melakukan hal-hal ini dalam urutan:
Bukan berarti kinerja tidak masalah: Saya mendesain dengan kinerja dalam pikiran, tetapi tanpa mendorongnya terlalu jauh (jadi jika saya perlu melakukan panggilan ke metode utilitas seperti StringUtils.isEmpty atau sesuatu seperti itu dalam aliran yang sama, saya menang ' t mind). Jika diperlukan kinerja (kasus bisnis atau masalah pengalaman pengguna), maka saya menggunakan pendekatan yang berbeda dari yang sederhana dan dapat digunakan kembali. Menjadi pragmatis.
Anehnya, ketika coding di C, saya lebih peduli tentang kinerja daripada ketika coding di Java ... Angkatan kebiasaan :))
sumber
Selama masalah diselesaikan dengan cara yang efisien, tidak perlu khawatir.
sumber
Saya pikir grafik adalah desain yang cocok untuk merancang game untuk mewakili keputusan \ pilihan. Perlu diingat bahwa mungkin ini dapat disempurnakan dan dibuat lebih efisien, dan ini mungkin bukan solusi terbaik untuk domain lain.
sumber
Jika berhasil, tidak apa-apa.
Jika Anda khawatir tentang terlalu mengandalkan satu teknik tunggal, cobalah sebagai latihan untuk menghasilkan variasi dari beberapa masalah yang dipecahkan yang akan membuat solusi Anda tidak berhasil. Poin tambahan jika Anda dapat menggeneralisasi perubahan untuk menentukan ruang penerapan proses biasa Anda.
sumber
Jika Anda memecahkan masalah itu bagus. Dan tidak masalah bagaimana caranya sampai tidak membuat lebih banyak masalah.
sumber
"Seni Pengembang" sebenarnya memiliki jawaban yang benar jika tujuan Anda adalah menghasilkan produk. Dan jika "pabrik" Anda menghasilkan produk yang memuaskan maka dinginkan.
Tapi...
Jika Anda ingin mempelajari cara-cara baru (dan berpotensi lebih baik) dalam melakukan sesuatu, Anda harus mengubah keadaan. Ini akan menghasilkan kegagalan tetapi hanya melalui kegagalan seseorang benar-benar belajar. Dan melalui pembelajaran baru ini Anda mungkin dapat menghasilkan perangkat lunak yang lebih baik dan lebih menarik.
Ini sebenarnya didukung melalui penelitian neurologis. Jadi begitulah.
sumber