Apakah itu pertanda buruk bahwa saya sering mendesain ulang ketika saya mengembangkan proyek?

39

Ketika saya pertama kali memulai pemrograman, saya berasumsi bahwa suatu hari saya akan sampai pada titik di mana saya akan memulai proyek dengan duduk dan membuat sketsa diagram UML dari semua kelas, maka cukup banyak berpegang teguh pada itu. Saya sekarang telah pemrograman selama beberapa tahun dan tidak berubah seperti itu. Ketika saya menjalani proyek, saya sering berkata

  • "Hei, aku perlu kelas untuk melakukan _ _. Aku tidak memikirkan itu sebelumnya."
  • "Tunggu, fungsi ini seharusnya berada di kelas itu, bukan yang ini. Aku akan memindahkannya."
  • "Ini seharusnya dua kelas, bukan satu. Aku akan membaginya."
  • "Aku harus membuat ketiga kelas yang berdiri sendiri ini mewarisi dari satu kelas abstrak."
  • Dll, dan sebagainya.

Apakah itu pertanda buruk bahwa saya sering mendesain ulang seperti ini ketika saya melanjutkan? Apakah ini berarti saya seorang programmer yang buruk atau apakah ini normal?

lucy berair
sumber

Jawaban:

41

Ini adalah bagian normal dari perkembangan. Dua prinsip inti dari Desain Berkelanjutan adalah:

  1. Anda tidak maha tahu, Anda tidak bisa mengetahui seluruh sistem dari awal hingga akhir sebelum Anda mulai.
  2. Desainnya tidak statis. Ini lebih lazim ketika sebuah proyek telah digunakan untuk waktu yang lama dan masalah yang sekarang dipecahkan bukanlah masalah yang diselesaikannya saat pertama kali ditulis.

Pandangan pribadi saya tentang masalah ini adalah bahwa Anda harus memiliki ide bagus tentang desain makro , tetapi biarkan desain mikro berkembang. Cara lain untuk mengungkapkannya adalah bahwa desain tingkat tinggi (yang sejauh ini saya pakai dengan alat pemodelan UML) kemungkinan besar akan tetap statis selama umur proyek. Desain terperinci dari metode mana yang melakukan apa dan hirarki kelas harus bebas untuk dapat ditempa.

Ketika Anda benar-benar tidak tahu banyak tentang masalah yang Anda selesaikan, Anda akan membuat lebih banyak kesalahan langkah awal. Namun, setelah Anda bekerja cukup lama, desain keseluruhan akan mulai menetap di tempat dan refactoring yang Anda bicarakan adalah semua yang diperlukan untuk menjaga kode tetap rapi.

Berin Loritsch
sumber
3
+1, inilah mengapa saya selalu merasa ngeri ketika orang berbicara tentang objek bersambung ke dalam database -> dan bagaimana jika besok kelas Anda telah meledak di beberapa bagian, bagaimana Anda membatalkan deserialisasi tanpa menyimpan kode lama? Saya lebih suka alternatif Protobuf (kelas khusus untuk penyimpanan / pertukaran pesan) di mana kelas inti Anda bebas untuk berkembang, dan Anda hanya perlu menyesuaikan lapisan serialisasi / deserialisasi.
Matthieu M.
@Matthieu - Anda menulis migrasi basis data. Ini jarang membutuhkan lebih dari satu jam untuk menulis dan menguji. Ruby on Rails memiliki fasilitas yang sangat bagus untuk migrasi basis data.
kevin cline
1
@ kevin: kami tidak memiliki database yang sama, saya kira, tambang saya berisi beberapa ratus juta baris. Migrasi bukan opsi.
Matthieu M.
+1 - terlalu bangga / keras kepala untuk mengakui bahwa Anda melakukan kesalahan bukanlah hal yang baik. Beberapa orang melihat mengakui kesalahan Anda sebagai tanda minggu, tetapi sebagian besar mungkin akan menghargai Anda untuk itu, dan tentu saja jika strategi Anda untuk mengatasi kesalahan serius adalah dengan menyangkal bahwa itu adalah kesalahan, kesalahan kedua sangat mungkin berakibat fatal.
Steve314
12

Apa yang Anda lakukan secara populer disebut sebagai "refactoring". Jika Anda pernah berhenti melakukan itu maka Anda dalam kesulitan.

Faktanya adalah sebagian besar kode adalah kompleks dan manusia, bahkan yang cukup pintar, tidak dapat memahaminya sekaligus.

ElGringoGrande
sumber
10

Tidak, Anda tampaknya mengikuti YAGNI dan refactoring dari contoh yang diberikan. Tidakkah menurut Anda lebih baik untuk memiliki solusi yang lebih baik ini dan dapat melakukannya daripada tidak pernah memikirkan sesuatu lagi?

Pengembangan perangkat lunak tangkas biasanya memiliki praktik untuk mengakomodasi ini yang sangat berbeda dari model air terjun.

JB King
sumber
5

Tidak apa-apa (kecuali desain ulang ini selalu perbaikan besar, atau dibangun kembali dari awal). Jangan khawatir. Akan lebih baik untuk memulai dengan diagram UML di awal proyek, tetapi jangan mengukirnya di batu karena Anda akan hampir selalu menemukan bahwa hal-hal berubah saat Anda bekerja. Anda dapat mempelajari teknik-teknik baru yang tidak Anda ketahui di awal, Anda mungkin ingin menanamkan beberapa fitur dengan cara yang belum Anda ketahui selama desain awal, persyaratan bisnis berubah, kadang-kadang tidak diketahui selama desain awal yang hanya bisa diperhitungkan nanti, dll ...

Apa yang penting adalah untuk pergi dan memperbarui dokumen-dokumen UML awal sehingga mereka mencerminkan perubahan signifikan dalam desain, pengembang masa depan yang lain (termasuk Anda) bisa berakhir sangat bingung. Ini bisa sulit, dan seringkali membutuhkan disiplin (dan waktu) yang baik.

Sangat sangat sangat jarang untuk memulai dengan desain, dan mematuhinya 100% sampai implementasi. Saya pribadi belum pernah melihat hal seperti itu terjadi, kecuali untuk program yang sangat kecil dan sepele.

FrustratedWithFormsDesigner
sumber
6
Langkah 1: Buat diagram UML. Langkah 2: Tulis kode. Langkah 3: Buang diagram UML agar tidak ada yang pernah melihatnya dan menjadi bingung tentang bagaimana sebenarnya kode itu bekerja.
kubi
4

Apa yang Anda lakukan benar-benar normal (asalkan Anda tidak sepenuhnya memulai dari awal setiap kali). Saya sudah melakukan ini selama lebih dari dua puluh tahun, dan ini masih merupakan proses berulang.

Satu-satunya waktu Anda akan dapat merancang semuanya di muka dan berpegang teguh pada itu adalah jika Anda memecahkan masalah yang sama persis yang Anda pecahkan terakhir kali, dan bahkan kemudian Anda mungkin dapat menemukan ruang untuk perbaikan.

John Bode
sumber
2

Saya sama sekali bukan pengembang yang sangat berpengalaman, tetapi saya juga melakukannya. Selama beberapa tahun terakhir, kemampuan saya untuk secara mental membangun arsitektur yang diperlukan telah meningkat pesat. Namun, ketika saya menulis perangkat lunak, tidak peduli berapa banyak perencanaan yang saya lakukan, selalu ada tempat yang perlu sedikit didesain ulang. Bintik-bintik yang tidak saya sadari akan saya ulangi sampai kode benar-benar ditulis.

Maksud saya dari posting ini adalah untuk mengatakan bahwa saya melakukan segalanya dalam daftar Anda dan saya tidak merasa hal-hal itu selalu buruk kecuali mereka terjadi terus-menerus dan memiliki efek negatif nyata pada produktivitas Anda.

Piper Merriam
sumber
0

Itu disebut proses berulang dan itu konsep dasar dalam semua teknik pengembangan perangkat lunak modern.

vartec
sumber