Apakah normal untuk memikirkan masalah desain selama berhari-hari tanpa kode yang ditulis? [Tutup]

52

Kadang-kadang saya menatap kosong ke ruang angkasa atau membuat sketsa ide dan menulis beberapa kode palsu di atas kertas. Lalu saya menggaruknya dan mulai lagi, kemudian ketika saya pikir saya punya solusi yang tepat untuk masalah saya mulai menulis kode.

Apakah normal berpikir selama berhari-hari tanpa menulis kode apa pun? Apakah ini pertanda bahwa saya mendekati masalah sepenuhnya salah? Itu membuat saya gugup untuk tidak mendapatkan kode nyata yang ditulis dalam IDE saya.

Kim Jong Woo
sumber
9
Ini sangat tergantung pada masalah dan proses berpikir pribadi Anda. Jika Anda memenuhi tenggat waktu Anda, tidak masalah berapa banyak waktu yang Anda habiskan untuk berpikir dan berapa banyak pengkodean.
yannis
4
Apakah Anda mencoba menggambar komponen Anda di papan tulis? Kadang-kadang ketika saya dihadapkan dengan dilema desain atau algoritma yang kompleks, saya mulai menggambar. Jika Anda terjebak maka mungkin Anda mencoba mencerna terlalu banyak dalam pikiran Anda. Cobalah memecah hal-hal menjadi komponen kecil dan mudah dicerna, kemudian gambarkan bagaimana bagian-bagian yang berbeda ini berinteraksi. Tidak perlu standar formal, saya semacam melakukan UML Poor Man ketika saya di papan tulis.
maple_shaft
2
alih-alih berpikir tentang desain selama berhari-hari daripada mengimplementasikan desain yang buruk dengan cepat
Chani
4
Ya itu! Dan kadang-kadang saya melihat kode yang sudah saya tulis dan saya berharap saya lebih memikirkan desain sebelum menulisnya :-)
Giorgio
2
Ironisnya, Ilmu Komputer seringkali tidak tergantung pada komputer
Ryan Kinal

Jawaban:

60

Bergantung pada masalah yang Anda coba selesaikan, fase desain bisa memakan waktu berminggu - minggu dan berbulan-bulan (jika tidak bertahun-tahun), bukan hanya berhari-hari.

Dibutuhkan pengalaman untuk tidak mulai menghancurkan kode dengan segera. Memikirkan arsitektur dan desain tingkat tinggi harus memakan waktu berhari-hari jika tidak lebih lama - pasti sesuatu yang harus terjadi sebelum Anda mulai menulis kode Anda.

Oded
sumber
1
+1 selama bertahun-tahun. Terlibat dengan grup di mana di ruangan sebelah ada tim yang telah terlibat dalam persyaratan mengumpulkan untuk sistem baru selama 5 tahun, tanpa akhir yang terlihat. Kami benar-benar ragu apakah mereka akan maju lebih jauh.
jwenting
8
@jwenting ... itu juga tidak baik, orang-orang itu mungkin sudah mulai mengetik.
Pemain Grady
8
@ berkelok-kelok, ya, itu disebut metode air terjun, dan masing-masing dari mereka harus dipecat. Jika Anda tidak tahu apa yang Anda coba lakukan dalam setahun, maka Anda tidak akan pernah bisa membawanya ke pasar sebelum teknologi itu sendiri menjadi usang.
riwalk
1
Saya takut apa yang akan terjadi jika mereka mulai mengeluarkan kode, mereka semua adalah analis bisnis tanpa pengetahuan teknis bagaimana pun :)
jwenting
24

Ini biasanya disebut sebagai "Analisis Kelumpuhan"

Itu biasa tapi salah. Pada titik tertentu Anda perlu menguji berbagai ide untuk melihat apa yang paling cocok untuk Anda, kemudian secara bertahap memperbaikinya.

Dianjurkan membaca programmer Pragmatis Khusus Bab 2 bagian tentang "Tracer Bullets"

Morons
sumber
12
Anda salah berasumsi bahwa menghabiskan waktu mendesain sistem Anda adalah salah. Untuk sesuatu yang sepele, hari-hari mungkin terdengar seperti waktu yang lama, untuk sistem besar yang akan menjangkau puluhan ribu atau ratusan ribu baris kode, ini waktu yang terlalu singkat bahkan untuk mendapatkan arsitektur dasar di atas kertas.
jwenting
3
Waktu yang dihabiskan untuk berpikir berhubungan langsung dengan kompleksitas masalah. Tetapi jika dia "gugup untuk tidak mendapatkan kode nyata yang ditulis dalam IDE saya, saya akan" Saya pikir aman untuk menganggap dia perlu memulai.
Moron
7
SAYA TIDAK MELAKUKAN CARA APA SAJA YANG MENGATAKAN "salah menghabiskan waktu mendesain sistem Anda"
Morons
4
@Morons: tidak masalah apa yang Anda katakan, yang penting adalah apa yang orang dengar, dan orang-orang mendengar Anda mengatakan bahwa apa yang OP lakukan itu salah.
whatsisname
5
Istilah "kelumpuhan analisis" menyiratkan bahwa kelebihan waktu dihabiskan untuk menganalisis keputusan. Ini memang masalah nyata, tetapi sama sekali tidak jelas dari pos asli jika itu terjadi dalam situasi saat ini. Jika Anda menghabiskan beberapa hari untuk memikirkan bagaimana menulis suatu fungsi untuk membalikkan suatu string, yaitu kelumpuhan analisis. Jika Anda menghabiskan beberapa hari untuk memikirkan cara menulis kompiler c ++ baru sebelum Anda mulai, itulah yang paling bisa Anda lakukan.
PeterAllenWebb
10

Ini sangat umum. Namun jika Anda mengambil pendekatan "Tes pertama" atau TDD, itu kurang umum dan mungkin membantu Anda merumuskan ide-ide Anda lebih baik.

Bob
sumber
5

Kebiasaan biasanya merupakan hasil dari pendekatan coba-coba untuk berbagai hal dan melanjutkan apa yang memberi kita hasil yang diinginkan dan menghindari yang tidak. Melakukan apa yang kita sukai dan menghindari apa yang tidak kita sukai juga ikut berperan. Itu bekerja sampai batas tertentu karena pada akhirnya, kita akan melakukan sesuatu yang tidak kita sukai untuk mendapatkan bayaran.

Itu tergantung apa yang mengarahkan Anda ke ini dan alasan Anda. Berikut ini beberapa di antaranya:

  • Terlalu sering, Anda harus mengubah kode karena perubahan desain
  • Anda tidak mengubah desain yang buruk karena solusi yang lebih rendah sudah dikodekan
  • Anda lebih suka menggambar dan mendesain daripada menulis penundaan kode
  • harus khawatir tentang sintaks dan detail pengkodean, mengalihkan perhatian Anda dari memikirkan desain yang lebih baik.

Mudah-mudahan, Anda telah menemukan bahwa jika Anda mendesain lebih lama, kode Anda lebih baik. Jika Anda dapat melihat ke belakang dan melihat bahwa tidak masalah berapa lama Anda menghabiskan waktu untuk desain, Anda mungkin ingin mengubahnya. Pertimbangan lain adalah seberapa sering Anda menemukan masalah setelah Anda menulis kode dibandingkan dengan bekerja dengan desain Anda. Jika Anda tidak menemukan masalah sampai setelah Anda menulis beberapa kode, Anda harus mempertimbangkan keseimbangan dan mulai mengkode sesuatu lebih cepat daripada nanti. Mungkin pendekatan ini dapat diterapkan pada penggunaan teknologi yang lebih baru atau fitur yang sangat kompleks.

Saya tidak tahu apakah saya memiliki disiplin untuk tetap dengan satu pendekatan atau yang lain bahkan ketika saya menemukan satu bekerja lebih baik daripada yang lain. Terkadang saya merasa perlu untuk pergi ke papan tulis; yang lainnya keyboard.

JeffO
sumber
4

Ini sangat umum dan saya merasa ini cara yang lebih baik untuk menangani dan memahami banyak hal. Saat mengerjakan sebuah proyek, saya sering macet dan butuh satu atau dua hari untuk memahami bagaimana saya bisa mendekatinya dengan lebih baik. Bahkan setelah masalah selesai, saya menunggu satu hari berlalu. Ini membuat saya lebih segar dan siap.

Ini adalah fenomena alam dan bagus bagi pengembang untuk mencegat waktu dan pikirannya.

Pankaj Upadhyay
sumber
4

Ketika saya mengambil kursus dalam manajemen proyek, salah satu hal yang instruktur terkait dengan kami tentang perencanaan, yang melekat di kepala saya, adalah bahwa aturan praktis yang mereka ajarkan di militer adalah untuk mencari 1/3 dari waktu untuk perencanaan . Jadi, jika Anda memiliki operasi yang mengharuskan Anda untuk menyelesaikan 3 bulan dari sekarang, mencari menghabiskan satu bulan untuk perencanaan sebelum Anda memulai eksekusi.

Scott Whitlock
sumber
4

Dalam pandangan saya, ada tiga pendekatan, masing-masing cocok untuk situasi pengkodean tertentu

  1. Saya telah melihat masalah yang sama sebelumnya, jadi saya punya ide yang bagus tentang pola yang harus diterapkan, dan sudah jelas bagaimana solusi harus berperilaku dan merespons.

    => Gunakan BDD / TDD mulai dari solusi yang diinginkan dan bekerja ke kode. (Ok, kadang-kadang saya curang dan menulis sedikit kode dan kemudian tes - semacam 2. bersarang -. 1. pendekatan).

  2. Saya punya ide bagus tentang pola untuk diterapkan, tetapi saya tidak yakin seperti apa solusinya.

    => Prototipe untuk melihat hal-hal menarik apa yang muncul. Pindah ke 1. saat saya mencari tahu hal-hal menarik yang diinginkan.

  3. Saya tidak yakin pola apa yang diterapkan.

    => Pikirkan masalah itu dan bagaimana berbagai cara mendekati masalah memengaruhi kode. Pindah ke 2) atau 1) tergantung pada hasil latihan itu.

Dengan kata lain, jawabannya adalah favorit insinyur: Itu tergantung.

forforf
sumber
3

Lebih baik menghabiskan satu bulan berpikir dan merancang daripada menyiapkan prototipe cepat berdasarkan desain di bawah standar yang kemudian harus Anda kalahkan. Terutama jika Anda berada di tim; ketika orang lain mulai bergantung pada kode Anda, akan lebih sulit untuk menerapkan desain yang lebih baik dengan API yang berbeda.

TMN
sumber
2

Saya setuju dengan jawaban lain bahwa, pada prinsipnya, meluangkan waktu untuk memikirkan masalah / solusi adalah ide yang bagus. Namun, jika Anda merasa terjebak, saya punya beberapa rekomendasi untuk cara membuat proses perencanaan sedikit lebih koheren:

  • Buat artefak desain. Jadi bagaimana jika Anda tidak menulis kode? Mungkin Anda hanya menulis jurnal pemikiran Anda. Atau sketsa solusi umum. Atau bahkan hanya ringkasan yang sangat bagus dari masalah yang Anda saring dari waktu ke waktu. Saat Anda mempertimbangkan ide dan menerima / menolaknya, simpan log alasan Anda pada subjek. Dengan cara ini, pada akhirnya Anda masih bisa menunjuk barang kiriman dunia nyata sebagai bukti kerja keras Anda.

  • Bicaralah dengan orang-orang! Tidak ada yang seperti memiliki manusia yang hidup dan bernafas dengan siapa untuk mendiskusikan ide. Jika Anda merasa sedang buntu, bicarakan dengan seseorang. Raih seseorang - siapa pun! - dan jelaskan masalahnya kepada mereka. Buat sketsa pemikiran Anda tentang cara mengatasi masalah. Bahkan jika yang mereka lakukan adalah menghirup, menghembuskan napas, dan mengedipkan mata selama sepuluh menit saat Anda mengoceh, kemungkinan Anda akan menemukan wawasan baru hanya dalam proses menjelaskan masalah .

Stephen Gross
sumber
1

Seperti yang dikatakan Satchel Paige, "Kadang-kadang saya duduk dan berpikir, dan kadang-kadang saya hanya duduk."

Saya kira apa yang ia maksudkan adalah bahwa kadang-kadang ada baiknya untuk menjernihkan pikiran Anda karena hal itu dapat membuat Anda memikirkan masalah Anda dengan cara yang berbeda. Jadi, jika Anda tidak menabrak kode Anda mungkin akan menemukan solusi atau ide yang mungkin menghindari Anda sebaliknya. Jadi, ya, itu normal dan praktik yang baik untuk tidak langsung masuk ke pengkodean.

Ada dua cara saya melakukan proses ini sendiri. Saya membuat folder di mana saya memiliki file teks dan gambar apa pun yang terkait dengan proyek. Saya menuliskan ide-ide saya di sana dan mencoba dan menyelamatkan seluruh proses pemikiran sebaik mungkin. Saya juga akan membuat proyek scratchpad di mana saya dapat dengan cepat menguji ide-ide sederhana dari algoritma ke tata letak CSS.

jfrankcarr
sumber
1

Program = Algoritma + Struktur Data

IMHO, proses desain (pemecahan masalah) sepenuhnya memerintah. Detail implementasi (masalah teknis) mengikuti dan menyelesaikan secara alami.

Terry Li
sumber
Saya sangat suka persamaan sederhana itu. +1
Kim Jong Woo
1

Ini kasus pemikiran saya.

  1. Mulai dari awal Pertama-tama dibutuhkan gagasan kasar tentang apa yang Anda inginkan. Coba dapatkan daftar beberapa persyaratan, atau buatlah. Perlu sedikit waktu untuk memikirkan hal-hal di sini. Setelah Anda memiliki setidaknya sebuah karya yang Anda yakin Anda inginkan, mengetahui sebagian besar antarmuka dari karya tersebut, kemudian mulai mengkodekan.

  2. Memperbaiki masalah dengan kode yang ada Pertama-tama, telusuri masalahnya. Ini mungkin memerlukan waktu untuk tidak menulis kode asli (Beberapa kode debug mungkin ditulis, tetapi ini biasanya tidak disimpan). Setelah Anda menemukan masalah, tergantung pada kerumitannya, mulailah menulis kode untuk mencoba dan memperbaikinya. Tidak banyak yang harus dipikirkan begitu bug diketahui. Jika masalah berhasil menjadi cacat desain utama, lihat bagian selanjutnya.

  3. Perubahan desain / fitur utama Ini kemungkinan besar yang akan paling membutuhkan pemikiran. Pemikiran untuk menjaga struktur, kompatibilitas ke belakang, dll. Harus dimasukkan. Memikirkan perubahan terbaik bisa menghemat waktu yang signifikan, tetapi biasanya bagi saya tidak lebih dari beberapa hari.

  4. Menambahkan fitur sederhana Jika tidak ada perubahan desain yang signifikan diperlukan, maka cukup kode dalam fitur Anda, menggunakan beberapa percobaan / kesalahan. Ini seharusnya tidak memerlukan banyak waktu secara umum.

PearsonArtPhoto
sumber
0

Saya tidak akan setuju dengan konsensus yang satu ini. Saya lebih suka mulai membuat prototipe sesuatu segera setelah saya bahkan memiliki ide tertulis-pada-serbet samar tentang bagaimana saya ingin sistem saya bekerja. Hampir tidak mungkin bagi saya untuk memikirkan semua detail kecil yang dapat menyebabkan masalah kecuali saya menentukan hal-hal dengan cara yang sangat tepat. Jika saya hanya mendiskusikan desain dengan orang-orang, terlalu mudah untuk menggerakkan beberapa masalah yang lebih kompleks. Setelah saya menentukan hal-hal seperti ini, mungkin juga secara langsung dalam kode sumber daripada beberapa cara ekspresi lain yang sama persis dan formal tetapi tidak dapat dikompilasi dan dieksekusi.

dsimcha
sumber
3
Ada perbedaan antara mencari tahu detail dan mencari tahu dasar-dasarnya. Misalnya, jika Anda mendesain bahasa, Anda ingin memutuskan apakah bahasa Anda prosedural atau fungsional sebelum Anda berada di dekat papan ketik. Tidak ada yang mengatakan Anda harus mencari tahu detail ketika merencanakan, tetapi Anda perlu tahu ke mana Anda akan pergi.
riwalk
@ Stargazer712: Saya sepenuhnya setuju. Itu sebabnya saya katakan Anda perlu setidaknya ide serbet apa sih yang akan Anda lakukan. Namun, cara pertanyaan ini diajukan, saya membayangkan berhari-hari atau berminggu-minggu pertemuan birokrasi formal, bahkan sebelum mencoba untuk membuat prototipe fitur yang paling berisiko / novel / menarik.
dsimcha
0

Itu tergantung pada apa yang Anda maksud untuk "normal" . Berbicara tentang diri saya, saya pikir kode adalah alat pembelajaran yang hebat. Jadi, ketika menghadapi masalah yang kompleks, saya membuat sketsa di atas kertas tetapi saya juga melakukan beberapa pengkodean berbasis tes. Kode memberi tahu saya bahwa papan tulis tidak dapat mengatakan dan sebaliknya, dan mungkin hasilnya adalah wawasan atau kebutuhan untuk beberapa pertanyaan lagi kepada pakar domain.

Jadi saran sebenarnya adalah: "Gunakan setiap alat pembelajaran yang diperlukan untuk lebih dekat dengan definisi masalah" , tetapi juga "ingat bahwa ini adalah alat belajar, jadi jangan jatuh cinta dengan mereka" baik kode dan sketsa dimaksudkan untuk dibuang .

ZioBrando
sumber
0

Di era pemrograman RAD dan lincah ini, Anda harus mulai mengembangkan segera setelah Anda dapat mengidentifikasi bagian utama dari sistem, detail akan muncul. Karena Perangkat Lunak semakin besar, fokus secara prematur pada setiap detail tunggal tidak akan membawa Anda ke mana pun.

Syed Aqeel Ashiq
sumber
2
Dan tidak berfokus pada detail yang cukup dapat membawa Anda ke suatu tempat yang jauh dari tempat yang lebih baik.
Dunk
@Dunk Saya menggunakan tiga kata: Prematur, setiap, tunggal tentang fokus pada detail. Saya tidak mengatakan untuk memukul keyboard segera, Dapatkan pria melayang.
Syed Aqeel Ashiq