Haruskah saya khawatir jika saya menyelesaikan banyak masalah saya dengan cara yang sama?

13

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?

Bryan Harrington
sumber
Jika Anda terus mengulangi sendiri, mengapa tidak membuat komponen yang dapat digunakan kembali?
Kugel
Belum tentu, jika itu cara yang baik untuk menyelesaikannya :)
haylem
4
Jika Anda mengulangi diri sendiri sepanjang waktu, maka tulislah perpustakaan.
Ayub
@Bryan Harrington telah menghadapi masalah yang sama persis sendiri, saya harus mengatakan bahwa saya bekerja pada domain yang berbeda seperti dari logika bisnis (di tempat kerja) ke pemrograman kernel (di rumah) dan dari bekerja pada C # (di tempat kerja) hingga C ++ (di rumah) banyak membantu saya. Saya juga sudah terbiasa membaca kode sumber terbuka di sini ada beberapa tautan :) Juga, Anda dapat membaca GOF
Chani

Jawaban:

26

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
+1 untuk poin terakhir "tanyakan pada diri Anda apakah masih bagus atau mungkin industri sudah maju". Terlalu sering Anda melihat programmer baik menjadi ketinggalan zaman, dan buruk karena mereka terjebak di belakang kurva dan tidak meningkatkan keterampilan mereka
CaffGeek
12

Jika itu bekerja dengan baik, sebut saja itu pola desain. Jika tidak, tetapi Anda tidak tahu yang lebih baik, itu adalah antipattern palu emas.

pengguna281377
sumber
1
Ini. Ini hanya masalah jika Anda menemukan diri Anda memaksakan solusi Anda pada masalah yang tidak berhasil. Jika semua masalah Anda adalah paku, Anda harus menggunakan palu, tetapi jika Anda mencoba palu di sekrup, Anda harus mundur.
Satanicpuppy
@ Setanpuppy ... terkadang kita tidak memiliki obeng dan memiliki masalah yang perlu diperbaiki SEKARANG. Dalam hal ini palu adalah alat terbaik yang tersedia pada waktu tertentu.
CaffGeek
@Chad - analogi yang sangat akurat
normanthesquid
5

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?

Jon Hopkins
sumber
4

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.

Fanatic23
sumber
3

Belum tentu, jika itu cara yang baik untuk menyelesaikannya :)

Biasanya ketika mengerjakan "solusi", saya melakukan hal-hal ini dalam urutan:

  • kesederhanaan ,
  • dapat digunakan kembali ,
  • dan hanya kinerja terakhir .

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 :))

haylem
sumber
2

Selama masalah diselesaikan dengan cara yang efisien, tidak perlu khawatir.

Manoj R
sumber
2

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.

Gaurav
sumber
2

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.

Javier
sumber
2

Jika Anda memecahkan masalah itu bagus. Dan tidak masalah bagaimana caranya sampai tidak membuat lebih banyak masalah.

Dainius
sumber
0

"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.

ElGringoGrande
sumber