Melakukannya vs Desain Perangkat Lunak yang Solid?

17

Dengan waktu yang hampir tidak cukup di tangan kami untuk menyelesaikan permainan yang kami buat, bagaimana Anda bisa mencapai keseimbangan yang baik antara arsitektur perangkat lunak yang solid dan membuat kemajuan yang baik untuk menyelesaikan semuanya?

Tantangan pribadi saya: Bagaimana kalau hari ini menjadi efektif dan berpikir jangka panjang? Plus, saat Anda melakukannya Anda mungkin ingin mempelajari hal-hal baru di jalan daripada menggunakan pola berulang yang sama dengan yang Anda gunakan selama 5 tahun terakhir?

jmp97
sumber

Jawaban:

20

Semakin sedikit pengalaman yang Anda miliki, semakin banyak waktu yang Anda buang dengan desain di muka. Membuat desain yang baik adalah sesuatu yang akan Anda pelajari dengan melakukannya dan kemudian melihat / mengevaluasi bagaimana hasilnya. Beberapa keputusan memiliki implikasi yang luas tetapi tidak jelas. Setelah beberapa permainan, Anda mungkin akan dapat membuat desain awal yang cukup solid dan akan membayar untuk menginvestasikan lebih banyak waktu ke tahap ini.

Moto saya: menyelesaikan sesuatu di tempat pertama, tetapi gunakan akal sehat Anda untuk mendeteksi komponen apa yang lebih penting daripada yang lain dan merancang itu dengan cukup baik, dalam batas waktu Anda. Misalnya, jika AI sangat penting untuk gim Anda, pastikan Anda dapat dengan mudah memperpanjang / mengubahnya nanti. Atau, jika Anda akan menulis komponen yang akan Anda gunakan di setiap gim, rancanglah agar dapat digunakan kembali. Lacak waktu Anda dan jangan menjadi liar dalam mendesain. Tetapkan batas waktu desain dan setelah itu, mulailah meretas semuanya untuk mendapatkan batas waktu rilis Anda. Tetapi pastikan Anda mencatat poin apa yang perlu di-refactoring / mendesain ulang sesudahnya dan menghitung dalam beberapa waktu sebelum Anda memulai permainan berikutnya untuk meningkatkan hal-hal itu, sehingga mereka tidak bisa menggigit Anda kembali!

Saran yang bagus: jika Anda harus memilih di antara dua opsi, jangan berlama-lama membahas detail. Paling sering, tidak ada "baik" atau "buruk". Dalam beberapa situasi, A akan lebih baik, dalam beberapa, B akan menjadi, dan secara keseluruhan, perbedaan antara keduanya mungkin tidak selalu sepadan dengan waktu.

Ada banyak pengalaman yang bisa Anda peroleh dalam mendesain perangkat lunak atau game, jadi pastikan Anda meluangkan waktu Anda untuk penelitian (misalnya membaca buku tentang desain, membaca tentang pengalaman orang lain, berbicara dengan sesama programmer tentang desain Anda, dll ... ).

Nef
sumber
7
+1, saran yang bagus. Jangan biarkan diri Anda tertangkap oleh Paralisis Analisis yang terkenal karena ini tidak ada artinya. Sedangkan refactoring adalah alat yang hebat untuk meluruskan kekurangan masa lalu, jadi jangan takut untuk melakukan kesalahan.
Michael Klement
1
Ahh. Analisis Kelumpuhan . Musuh terbesarku! Saya harus membangun sebuah game di mana Analisis Paralisis dilayani sebagai End-Boss. Saya mulai dengan merancang arsitektur game terlebih dahulu ... Tidaaaak! Lelucon: Jawaban yang bagus dan komentar yang bagus!
bummzack
12

Orang-orang buruk dalam memprediksi masa depan. Ini terutama berlaku untuk gim, di mana persyaratan dapat berubah setiap hari.

Ada prinsip yang disebut YAGNI , alias "Kamu Tidak Akan Membutuhkannya", yang pada dasarnya mengatakan bahwa kamu tidak boleh menerapkan sesuatu sampai kamu tahu kamu akan membutuhkannya.

Saya telah melihat begitu banyak sistem macet dengan kekakuan arsitektur yang tidak benar-benar menggunakannya karena fitur-fitur yang orang pikir perlu tidak pernah digunakan.

Filosofi pribadi saya adalah Lakukan Hal Sederhana yang Mungkin Dapat Bekerja . Yang sedang berkata, ada perbedaan antara Getting It Done dan Hacking Shit Together. Menulis kode dengan tujuan tidak boleh menyiratkan melakukan hal-hal yang menghasilkan "bau kode" seperti membuat semuanya publik, memiliki kelas gumpalan yang melakukan segalanya, atau lusinan hal lain yang menandakan kode "buruk".

Tetrad
sumber
8

Ini mengevaluasi kebenaran dalam pola pikir saya hari ini:

  • Pragmatisme atas Ideologi
  • (1) Buat itu berhasil (2) kemudian buatlah dengan benar - lewati jika Anda lupa langkah 2
  • Lepaskan!
  • Terlalu banyak desain di muka akan membuang-buang waktu
  • TDD dan Clean Code mengarah ke desain perangkat lunak yang lebih sederhana dan lebih stabil
jmp97
sumber
Bisakah Anda menguraikan tentang melakukan pengembangan berbasis tes dalam pengaturan game? Selain dari beberapa logika dasar, saya tidak pernah menemukan program yang sangat interaktif sangat cocok untuk hal semacam ini. Juga, Anda menautkan ke halaman disambiguasi;)
drxzcl
2
@Ranieri Jika Anda menarik garis antara bagian-bagian yang berinteraksi dengan perangkat keras grafis dan input pengguna, pengujian langsung dilakukan.
Jonathan Fischoff
@Ranier Terima kasih, perbaiki tautannya. Saya setuju bahwa datang dengan tes pertama untuk simulasi interaktif atau permainan server-klien bisa rumit. Selain tes unit Anda, Anda mungkin ingin memiliki beberapa tes fungsionalitas tingkat tinggi dan mungkin sesi pemutaran yang berjalan pada interval tertentu. Dalam kasus apa pun, memikirkan tes terlebih dahulu kemungkinan akan membuahkan banyak skenario. Temukan beberapa tampilan menarik di gamedev.stackexchange.com/questions/1905/…
jmp97
5

Saya teman software prototyping cepat. Terutama selama pengembangan game. Ini bagus untuk belajar cepat, menguji dan menggunakan hal-hal. Untuk dekat dengan pemrograman perangkat keras atau algoritma yang rumit adalah metode terbaik untuk saya.

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

Versi Rapid Prototype saya harus memiliki kerak prototipe yang tepat:

  • Antarmuka input yang ramah untuk mengkonfigurasi arahan dan pengaturan variabel atau data.
  • Pengecualian dan penanganan kesalahan yang stabil.
  • Online suka fungsi debuger tetapi pada level apa yang Anda butuhkan.
  • Antarmuka keluaran ramah max untuk menunjukkan atau menangkap hasil pada semua cara yang mungkin dan diperlukan.

Keuntungan:

  • Anda dapat meningkatkan kerak RapidPrototype selama pengembangan keseluruhan.
  • Anda dapat melihat dan mengatur kode Anda dengan banyak cara.
  • Anda hanya bisa fokus pada teori dan masalah yang perlu Anda pecahkan.
  • Anda dapat dengan cepat mengembangkan bagian-bagian baru proyek dan mencobanya dengan hal-hal akhir lainnya.
  • Anda dapat memberikan hal-hal baru untuk digunakan dalam pengisian konten lebih cepat dan menyelesaikannya nanti. (Terutama dalam kotak pasir)
  • Anda dapat dengan mudah menggambarkan dan menunjukkan prinsip atau solusi kepada orang lain. On line.
  • Prototipe fungsional dan transparan adalah sumber informasi terbaik untuk kode akhir (siapa pun dapat melakukannya).

Jika Anda melakukannya dengan baik, Anda dapat memiliki versi debug / pelajari yang sebenarnya dari produk Anda pada akhirnya.
Kami menggunakannya dalam proyek kami dan kami senang dengan itu.

samboush
sumber
1
Ini adalah saran yang cukup bagus, walaupun saya akan merekomendasikan waktu atau jenis sumber daya lain yang terikat pada loop, setelah itu Anda hanya keluar (0) dan mencoba prototipe lain.
@ Jo Wreschnig - Rencana waktu dapat dimasukkan dalam AnalysingResults (), tapi saya pikir Anda dapat menggunakan RapidPrototype untuk sementara waktu dan menyelesaikannya nanti atau memasukkannya ke dalam rencana. Lebih baik terjebak di sana selamanya :). Dalam RapidPrototype Anda dapat mensimulasikan fungsionalitas juga. Cukup berguna dalam banyak hal.
samboush
1

Lihat pengembangan perangkat lunak tangkas . Meskipun itu bukan peluru perak, itu bertujuan untuk melakukan keduanya (menyelesaikannya dan memiliki desain perangkat lunak yang solid).

lindon fox
sumber
2
Saya tidak berpikir ada metodologi pengembangan yang tidak mengklaim "menyelesaikannya dan memiliki perancang perangkat lunak yang solid".
@Joe Saya pikir banyak metodologi "kelas berat" cenderung lebih memilih CYA daripada perangkat lunak yang solid. Memang, banyak dari pengalaman non-gesit saya cenderung menjadi "itu tidak perlu benar, itu harus sekarang," sedangkan "lincah" bertujuan untuk mengatakan "itu harus benar sekarang, tetapi lakukan semua yang Anda bisa untuk membuat hal-hal yang benar saat Anda melanjutkan. "
dash-tom-bang
Saya berpendapat bahwa pengembangan tangkas memiliki pengaruh yang sangat kecil pada apakah kode itu solid atau tidak. Inti dari gesit adalah menghabiskan seluruh waktu pengembangan Anda hanya pada hal-hal yang penting. Kode masih bisa berantakan pada pengiriman, karena kualitas kode (atau kurangnya hutang teknis) jarang menjadi ukuran keberhasilan dalam pengiriman.
Magnus Wolffelt