Bagaimana saya harus merencanakan dan memulai proyek?

20

Setiap kali saya memulai sebuah proyek, saya memutuskan pada saat-saat penting untuk sepenuhnya mengubah kelas inti dan terjebak dalam kesalahan yang tidak jelas. Saya mencoba perencanaan di tingkat lanjut dan biasanya memulai dengan langkah yang baik tetapi kemudian saya melakukannya lagi di lain hari dan memutuskan ingin melakukannya dengan 'cara lain'.

Apakah ada standar, semacam, ketika memulai proyek seperti memetakan kelas dan memulai dengan tes unit? Apa itu konvensi yang baik ketika merencanakan dan memulai proyek menengah.

Proyek terakhir dan dimulai adalah simulator gerak proyektil - Saya tahu, dapat diprediksi.

Will03uk
sumber
Pilih desain dan tetap menggunakannya. Sepertinya Anda menemukan alasan untuk mengubah desain Anda.
Ramhound
Apakah pertanyaan Anda terkait dengan aspek desain proyek atau fakta bahwa Anda keberatan berubah dan Anda mengubah seluruh ruang lingkup proyek?
Noname
2
@Ramhound: "Pilih desain dan tetap menggunakannya" berfungsi dengan baik, selama Anda memilih desain setelah menulis dan menguji kode.
kevin cline
Saya mungkin akan mengambil sedikit bacaan tentang pola desain dan desain OO. Itu membantu saya. Jika karena saya pikir Anda seorang pemula maka saya akan merekomendasikan Head First Design Patterns.
Darren Young

Jawaban:

19

Ketika Anda merencanakan, jangan merencanakan semua hal yang mungkin tentang aplikasi terlebih dahulu. Rencanakan langkah-langkah kecil. Apa fungsi minimum absolut yang Anda perlukan untuk mulai menggunakan aplikasi? Mulai dari sana.

Ketika Anda memulai proyek Anda, hanya kode keluar fungsi minimum absolut. Ketika Anda melakukan kode keluar, pastikan Anda menulis kode yang baik dan bersih dengan enkapsulasi cerdas . Ini akan meminimalkan kesalahan yang datang dari membuat perubahan di lain waktu.

Iterate pada fungsionalitas minimum itu sampai Anda puas dengannya. Kemudian mulailah menambahkan fungsionalitas dan peningkatan baru, satu per satu. Sekali lagi fokus pada penulisan kode yang baik dan bersih dengan enkapsulasi cerdas.

Jika Anda merencanakan langkah-langkah kecil dan menulis kode bersih itu akan meminimalkan jumlah perubahan yang Anda perlu lakukan. Pada saat Anda selesai menulis fitur pertama itu, Anda seharusnya sudah mengadopsi pola-pola dasar fondasi aplikasi Anda. Jika ada masalah dengan fondasi itu, fitur Anda berikutnya harus dengan cepat mengungkapkan masalahnya. Akan lebih mudah untuk melihat bagaimana karya tersebut terintegrasi bersama. Perubahan yang Anda lakukan harus, pada titik ini, menyebabkan gangguan minimal.

Mike Cellini
sumber
+1: Ini adalah jawaban yang bisa saya dapatkan di belakang. Rencanakan minimum absolut dan tambahkan sesuai rencana, tetapi tambahkan minimum.
Joel Etherton
Sederhana, tetapi ini bekerja dengan sangat baik; Terima kasih.
Will03uk
Mungkin jelas, tetapi Anda juga harus ingat ketika merencanakan untuk minimum, bahwa aplikasi perlu diperluas. Saya bekerja sebagian besar pada proyek-proyek Web dan jika saya tidak akan merencanakan semuanya, itu akan menjadi kekacauan total.
Frederik Witte
7

Tampaknya perencanaan Anda tidak membantu. Itu tidak mengherankan karena Anda tidak memiliki pengalaman yang cukup untuk membuat rencana yang layak. Solusinya sederhana. Berhentilah merencanakan terlalu banyak. Hanya menerima bahwa Anda akan menulis dan menulis ulang kode saat Anda pergi. Tidak apa-apa, karena kodenya gratis, kecuali waktu Anda. Jika Anda menulis aplikasi UI, mulailah dengan jendela kosong dan tambahkan sedikit demi sedikit sampai Anda selesai. Ketika Anda memiliki lebih banyak pengalaman, proyek Anda akan berjalan lebih cepat. Khawatir karena Anda mengubah kode seperti siswa musik yang mengkhawatirkan semua catatan yang terbuang dalam praktik.

kevin cline
sumber
2
+1 jika pertanyaannya hanya tentang proyek pribadi kecil. Sering mengubah dan menulis ulang kode pada proyek-proyek itu juga merupakan pertanda baik: itu berarti bahwa pengembang memikirkan pendekatan yang lebih baik atau cara untuk menyelesaikan masalah yang sama. Yang akan bermasalah adalah menulis kode jelek dan tidak pernah memikirkannya lagi.
Arseni Mourzenko
4

Tidak ada yang benar-benar tahu apa yang akan menjadi desain terbaik sampai mereka sudah mengkodekan sejumlah itu. Oleh karena itu, rahasia desain yang baik adalah untuk mengenali bahwa draf pertama Anda pasti suboptimal, dan berencana untuk menulis ulang porsi yang lebih kecil lebih awal dan lebih sering . Alih-alih menghapus program yang hampir lengkap, tulis ulang garis atau fungsi atau kelas segera setelah Anda mengenali kekurangannya.

Pemrogram berpengalaman yang baik biasanya tidak melakukannya dengan benar pada draft pertama. Apa yang datang dengan pengalaman adalah kemampuan untuk mengenali desain yang buruk lebih cepat, dan kemampuan untuk menulis ulang lebih cepat.

Karl Bielefeldt
sumber
3

Dalam pengalaman saya, masalah ini hilang ketika Anda memiliki lebih banyak pengalaman - Anda merasakan apa yang berhasil dan yang tidak. Selain itu, enkapsulasi yang baik dapat menurunkan biaya perubahan desain. Modul Anda yang dienkapsulasi dengan lebih ketat, semakin murah untuk diubah nantinya. Anggap itu motivasi yang sangat baik untuk menjaga kelas Anda terpisah.

DeadMG
sumber
1

Ada dua aspek untuk mendesain aplikasi. Yang pertama adalah memutuskan apa yang bisa dilakukan aplikasi Anda. Yang kedua adalah merancang cara melakukannya. Perubahan pada apa yang dilakukannya cukup signifikan dan tergantung pada kematangan aplikasi (dan perubahan arah aplikasi) paling baik didekati sebagai penulisan ulang alih-alih bekerja kembali.

Aspek kedua adalah bagaimana. Menggunakan pengujian unit dan praktik pengembangan tangkas, Anda dapat meminimalkan dampak mengubah bagaimana fungsi tertentu dicapai melalui refactoring. Bagian dari belajar bagaimana memanfaatkan teknik-teknik tersebut adalah latihan praktik latihan.

Saya akan memberikan saran yang telah saya berikan berulang kali. Pilih proyek kesayangan. Tulis sesuai kemampuan Anda. Pelajari sesuatu yang baru, dan terapkan apa yang telah Anda pelajari untuk meningkatkan cara Anda mendekati pengembangan proyek itu.

Misalnya, mulai dengan daftar Todo. Sederhanakan ... pada awalnya jangan khawatir tentang penyimpanan basis data. Dapatkan itu berfungsi. Sekarang mulailah membangun di atas fondasi itu. Mungkin Anda ingin mempelajari MVVM dan WPF ... Anda sudah tahu cara mengimplementasikan daftar todo di memori, sehingga Anda memiliki satu masalah yang lebih sedikit untuk dipecahkan. Sekarang Anda ingin membuatnya di mana banyak pengguna dapat memuat daftar todo mereka dari database. Anda telah memecahkannya dalam memori dan presentasi yang terpisah, sehingga Anda dapat fokus pada pembelajaran akses data. Dari sana Anda dapat memperluas aplikasi untuk memiliki model domain yang lebih kompleks (misalnya mengubah dari daftar Todo ke solusi manajemen proyek), antarmuka web, atau bahkan membuatnya berjalan di perangkat seluler. Kunci untuk membuat pekerjaan ini adalah untuk memilih sesuatu yang dapat Anda capai sehingga Anda dapat menandai kemajuannya dan Anda dapat tumbuh seiring waktu.

Michael Brown
sumber
0

Dalam pengalaman saya, desain sistem sering memakan waktu lebih lama atau lebih lama daripada pengkodean yang sebenarnya. Ketika Anda mengatakan "merencanakan terlebih dahulu" apa yang sebenarnya Anda rencanakan? Mungkin pergi ke sekolah tua dan menggunakan salah satu metodologi desain yang dicoba dan diuji. Atau sekolah dulu dan tulis kode pseudo sebelum menulis kode aktual.

Saya pikir Anda harus bertanya pada diri sendiri mengapa Anda mengubah banyak hal pada saat-saat genting daripada bertahan dengan rencana semula. Apakah rencana semula salah? Atau apakah Anda memiliki momen wawasan yang menunjukkan cara yang lebih baik untuk melakukan sesuatu. Apakah sebenarnya lebih baik atau hanya berbeda?

Brian
sumber
0

Saat Anda mendapatkan exp, Anda harus menulis ulang / menggaruk dan memulai dari awal, lebih jarang. Tuliskan masalah yang Anda coba selesaikan. Tuliskan deskripsi kelas yang tidak jelas yang menurut Anda akan Anda perlukan, tulis bagaimana interaksi tersebut perlu. Dapatkan gagasan tentang bagaimana semuanya akan berfungsi kemudian kode. Jangan menghabiskan banyak waktu menulis setiap properti, metode kelas Anda. Pada tahap ini Anda mencoba untuk mendapatkan tampilan 50 kaki dari apa yang seharusnya Anda lakukan. Setelah Anda mulai mengkode jika Anda perlu menuliskan lebih detail, lakukanlah. Jika tidak hanya memulai coding.

Ominus
sumber
0

Alasan Anda mendapati hal ini begitu sulit adalah karena Anda memiliki ide, tetapi Anda tidak benar-benar memiliki gagasan lengkap tentang apa yang ingin Anda lakukan. Jika Anda melakukan proyek Anda sendiri dan Anda tidak memiliki pelanggan untuk memberi tahu Anda apa yang mereka inginkan, maka terserah Anda untuk menjadi pelanggan Anda sendiri. Tempatkan diri Anda pada posisi pelanggan dan mulailah membangun daftar harapan yang tidak mungkin.

Dengan kata lain, ketika Anda mulai, jangan mendesain APA SAJA !!! .

Setelah Anda memiliki daftar besar hal-hal yang Anda ingin sistem lakukan, prioritaskan semuanya dan tentukan fungsionalitas minimum apa yang akan membuat sistem dasar berjalan. Ini bisa berupa fungsi dasar tunggal, atau seluruh layar, tetapi perlu sesuatu yang Anda rasakan - karena pelanggan-akan cukup berguna untuk menguji.

Jadi, Daftar keinginan fitur + prioritas dasar = Persyaratan .

Setelah Anda memiliki semua itu, lakukan desain tingkat yang sangat tinggi. Duduk dan pikirkan apa yang dibutuhkan sistem Anda untuk menjalankan beberapa prioritas pertama. Ubah pikiran Anda jika Anda mau, tetapi di sinilah Anda mungkin ingin melonjak beberapa kode atau konfigurasi sistem untuk mempelajari lebih lanjut tentang apa yang mungkin. Hanya cukup jauh untuk memvalidasi ide dasar Anda tentang suatu desain.

Yaitu: SEKARANG Anda bisa memanjakan desakan desainer Anda .

Setelah selesai, Anda mulai mengimplementasikan fitur-fitur Anda. Buat untuk setiap fitur spesifikasi fungsional dasar. Ini bisa sesederhana kumpulan pernyataan fitur. Kartu cerita jika Anda suka. Ini memungkinkan Anda untuk sedikit mengembangkan ide dalam pikiran Anda, dan untuk membuat seperangkat pernyataan yang akan menjadi spesifikasi yang akan Anda uji dan membangun penerapannya.

Cry Havoc, biarkan anjing-anjing ... Kode !!

Dari sana, terapkan tes Anda untuk mencocokkan spesifikasi Anda, lalu untuk setiap tes, tulis kode Anda. Bangun, "lepaskan", lalu ulangi dengan fitur berikutnya sampai Anda memutuskan proyek itu cukup lengkap.

Ini benar-benar turun ke pengalaman, tetapi pendekatan yang saya temukan ini adalah formula sederhana untuk membantu Anda memusatkan pikiran Anda pada apa yang perlu dilakukan, daripada terjebak dalam siklus penundaan yang tak berkesudahan karena mencoba melakukan terlalu banyak pada sekali.

S.Robins
sumber
0

Setelah Anda melakukan dasar-dasar seperti menetapkan tujuan proyek, mendapatkan daftar persyaratan, dan mengunci semua antarmuka ke sistem eksternal.

Maka Anda perlu melakukan use case atau "cerita" untuk setiap interaksi pengguna. Volume telah ditulis tentang apa yang membuat use case atau cerita yang "baik" dan ada banyak variasi. Use case adalah alat desain paling efektif yang pernah saya jumpai. Mereka membantu mengambil fungsionalitas yang hilang pada saat yang sama dengan menghilangkan persyaratan yang tidak perlu dan menghapus desain Anda sampai ke esensialnya. Seperti yang saya katakan, metodologi berbeda-beda tetapi sebagian besar praktisi sepakat untuk: -

  • teks bahasa Inggris yang ringkas dan ringkas.
  • "Goal Driven" berfungsi dengan sangat baik, yaitu "Monyet mendapat anggur" lebih baik daripada "Monyet Menekan tombol merah".
  • melarang terminologi teknis. Tidak ada "pulldowns", "kotak teks". Kasing yang baik harus independen dari teknologi antarmuka apa pun. Anda harus dapat menggunakan kasing untuk sistem berbasis HTML dan menggunakannya untuk sistem yang diaktifkan suara tanpa perubahan pada kasing itu sendiri. (ini sangat sulit dilakukan tetapi tidak sia-sia!).
  • Bertujuan untuk mengurangi jumlah kata dari draft pertama Anda hingga 50%, singkirkan langkah-langkah dan kata-kata yang tidak perlu.

Daripada Anda siap untuk menentukan kelas utama Anda:

UML- Bahasa Pemodelan Universal. Apakah alat standar untuk merancang kelas. Anda menentukan anggota publik dan metode masing-masing kelas dan menghubungkan mereka bersama dalam model grafis yang jelas dan ringkas.

Dalam hubungannya dengan diagram urutan, model data, Anda dapat memverifikasi dan meningkatkan desain Anda sebelum pengkodean terjadi.

James Anderson
sumber
0

Alihkan fokus Anda pada hasil yang ingin Anda peroleh dan timbang potensi keuntungan dari belajar / mencoba implementasi baru dengan risiko menuruni jalan yang membuat Anda kembali ke titik awal.

Jika Anda benar-benar kembali ke titik awal, semua tidak hilang karena Anda memperoleh pengalaman.

Jika Anda memiliki tenggat waktu (sepertinya Anda memprogram untuk bersenang-senang) maka ini sangat sulit. Jika Anda terus berjalan satu arah, Anda berisiko menggunakan metode yang ketinggalan zaman seiring berjalannya waktu. Jika Anda terus ke arah lain, Anda berisiko konsekuensi menghasilkan output pada tingkat lebih lambat (tingkat lebih lambat bervariasi tergantung pada hasil petualangan belajar Anda).

Saya terbiasa melakukan pekerjaan, menyelesaikan pekerjaan dengan cepat tahun demi tahun, dan kemudian suatu hari saya menyadari bahwa saya menjadi tidak mutakhir dalam keahlian saya.

Aaron Anodide
sumber