Saat mengembangkan algoritme, apakah melewatkan fase pena & kertas merupakan kebiasaan buruk? [Tutup]

8

Saya mendengar banyak orang mengatakan bahwa ketika mengembangkan algoritma Anda harus terlebih dahulu menggunakan pena dan kertas, diagram alur dan apa yang tidak, sehingga Anda dapat fokus pada algoritma itu sendiri, tidak khawatir tentang implementasi algoritma tersebut (yaitu, Anda berurusan dengan satu masalah pada suatu waktu).

Namun, sebagian besar waktu saya merasa lebih mudah untuk benar-benar mengembangkan algoritma saya dengan cepat. Artinya, saya berpikir sedikit tentang masalah sampai saya tahu arah umum yang harus diambil, dan kemudian saya mulai menulis kode dan membuat perubahan sampai algoritma muncul dan berfungsi.

Apakah ini kebiasaan buruk yang harus saya coba ubah?

Daniel Scocco
sumber

Jawaban:

11

Beberapa pengembangan algoritmik mungkin memerlukan banyak pengujian dan penyetelan coba-dan-kesalahan, karena orang dapat menemukan bahwa asumsi yang akan masuk ke dalam desain kertas yang ketat ternyata tidak cukup akurat ketika diberikan data nyata dan kendala kinerja.

Mungkin iterasi (think-code-test-think-code-test ...), daripada hanya pilihan baik-atau-untuk "kebiasaan" yang optimal.

hotpaw2
sumber
3

Ada juga jalan tengah, yang biasa saya gunakan. Tidak terlalu banyak berpikir sebelumnya, dan tidak tersesat ke dalam detail kode saya ...

TDD (Test driven development) membuat Anda berpikir sedikit, lalu membuatnya bekerja; lalu pikirkan sedikit lagi tentang apa yang Anda butuhkan, kemudian membuatnya bekerja, memiliki jaring keamanan yang digunakan Case Anda sebelumnya tetap bekerja setiap saat ... Langkah-langkahnya adalah:

  1. Tulis tes (yaitu Use Case).
  2. Perhatikan itu gagal, buat kegagalan itu bisa dimengerti.
  3. Tulis kodenya.
  4. Perbaiki kode dan tes.
KLE
sumber
2

Ini tergantung pada kebiasaan berpikir Anda dan kompleksitas algoritma.

Pena dan kertas menawarkan pemikiran "bentuk bebas" tanpa berteriak pada setiap karakter yang Anda ketikkan.

Beberapa dari kita yang menggunakan pena dan kertas, meluangkan waktu untuk menyesuaikan batas lingkaran, mencoba nilai yang berbeda, dll.

Jadi, saya kira bahwa menulis kode secara langsung mendorong pendekatan test-first sedangkan pena dan kertas mempromosikan pendekatan think-first. Sudah pasti bahwa jika tugas itu sepele, Anda dapat kode itu dengan cepat (jika Anda cukup berpengalaman) tetapi algoritma yang kompleks mungkin akan memerlukan pendekatan pengembangan yang berbeda.

Diagram membantu dalam beberapa kasus, tetapi ini mengharuskan Anda terbiasa dengan mereka dan telah menggunakannya sebelumnya.

Tidak ada kesempatan
sumber
Itulah sebabnya saya bertanya. Saya pikir pendekatan "think-first" akan membuat Anda menjadi programmer yang lebih baik dalam jangka panjang. Terima kasih atas jawabannya.
Daniel Scocco
Ya, tetapi apakah Anda tipe pria seperti itu? Beberapa orang mengembangkan kode secara iteratif melalui percobaan dan kegagalan dan tidak akan belajar dengan cara lain.
NoChance
2

Saya pikir pendekatan Anda adalah yang lebih umum. Jika algoritme itu sangat rumit atau sulit, akan sulit untuk mengetahui algoritme sekaligus mengimplementasikannya, tetapi secara umum saya ragu itu membantu kebanyakan orang.

Tapi saya tidak akan, katakanlah, membuat aturan untuk grammer dan mengimplementasikan parser untuk itu tanpa menuliskan aturan di atas kertas (atau mungkin dengan beberapa alat khusus yang tidak saya miliki) terlebih dahulu, atau menerapkan B-Tree tanpa pseudo- kode tersedia.

Saya tidak akan mengatakan Anda memiliki kebiasaan buruk kecuali jika itu merugikan Anda, dan saya pikir Anda akan memperhatikannya.

psr
sumber
Gotcha, dan ya saya pikir untuk proyek yang lebih besar / lebih kompleks saya cenderung menghabiskan lebih banyak waktu di atas kertas.
Daniel Scocco
2

Siapa "banyak orang" ini? Dan apakah mereka memprogram untuk mencari nafkah? Apa yang Anda lakukan adalah persis apa yang kebanyakan programmer lakukan, setidaknya sebagian besar yang saya tahu. Ada sedikit kegunaan untuk kertas ketika lebih cepat untuk mengetik, dan sedikit digunakan untuk pseudo-code saat pemrograman dalam bahasa tingkat tinggi. Kadang-kadang saya memang menggunakan pena dan kertas untuk memvisualisasikan algoritma yang rumit (misalnya memutar pohon), tetapi kebanyakan saya mulai dengan kode tingkat tinggi dan secara bertahap mengisi kekosongan.

Seperti KLE, saya pikir ini bekerja lebih baik setelah pengembangan yang digerakkan oleh tes. Dengan asumsi Anda akan menulis tes, Anda sebaiknya menulisnya terlebih dahulu.

kevin cline
sumber
0

Anda dapat membuat desain sambil membuat kelas rintisan, metode dan tes tetapi Anda bisa macet saat membuat detail

untuk hal-hal yang sangat kompleks (kompiler dan semacamnya) desain pena dan kertas (atau setidaknya pada alat desain semacam) akan membantu membuat Anda tetap di jalur dan mata pada seluruh gambar dan menghindari pilihan desain yang buruk dan bahkan membiarkan Anda memilih pola desain tertentu dari awal

tetapi pada akhirnya itu tergantung pada seberapa baik Anda dapat terus melihat gambaran besarnya

aneh ratchet
sumber
0

Saya akan merekomendasikan sketsa arah umum (fase "pena & kertas") sebelum melompat ke implementasi untuk menghemat waktu dengan menyingkirkan persyaratan / kendala yang paling jelas .

Kemudian Anda dapat menyetelnya di jalan mengingat Anda tidak pernah dapat menebak semuanya pada awalnya karena hambatan lebih lanjut mungkin / akan muncul kemudian dalam pengembangan, karena berbagai alasan.

Dengan begitu Anda tahu ke mana Anda akan pergi tetapi Anda masih bisa beradaptasi dengan perubahan.

wildpeaks
sumber
0

1. Jumlah persiapan yang dibutuhkan biasanya sebanding dengan kompleksitas dari apa yang Anda lakukan. Tidak masuk akal untuk menulis & menulis 2 hari penuh untuk algoritme yang digunakan sekali dalam seperempat, berjalan satu jam dengan singlethread pada satu mesin saja. Masuk akal untuk menulis & membuat kertas tiga minggu-man (jika perlu) untuk merancang modul kompensator fluks kinerja tinggi baru yang akan dapat memproses setengah juta permintaan per jam dan harus dijalankan 24/7/365 tanpa downtime.

2. Anda dapat mengetahui apakah itu kebiasaan buruk dalam 30 detik jika Anda melihat solusi apa yang Anda koding. Anda bertanya apakah itu kebiasaan yang baik atau buruk. Yah, itu tergantung kamu. Jika Anda seorang pembelajar lambat di awal karir pemrograman Anda, mungkin ide yang bagus untuk menulis semuanya dengan detail penuh. Jika Anda memiliki beberapa tahun pengalaman, itu akan cukup untuk hanya memikirkannya selama 5 menit dan kemudian lakukan saja. Tentu saja masih berkenaan dengan 1. di atas.

Intinya

Hanya kode Anda yang memberitahukan apakah Anda membutuhkan lebih banyak atau lebih sedikit pulpen & kertas. Jangan biarkan orang lain mendikte Anda, tetapi cari tahu sendiri. Itu membuat Anda terus belajar.

Penafian: Ini mungkin bukan apa yang disebut pemikiran umum dan akal sehat. Tidak apa-apa. Atur saja bookmark dan bacalah lagi dalam lima tahun atau lebih.

JensG
sumber