Sangat sering, saya terjebak ketika memilih keputusan desain terbaik. Bahkan untuk perincian kecil, seperti definisi fungsi, aliran kontrol, dan nama variabel, saya menghabiskan waktu yang sangat lama meneliti manfaat dan pertukaran pilihan saya.
Saya merasa seperti kehilangan banyak efisiensi dengan menghabiskan waktu untuk detail-detail tidak penting seperti ini. Meskipun, saya tahu di belakang pikiran saya bahwa saya dapat mengubah hal-hal ini jika desain saya saat ini tidak berhasil, saya mengalami kesulitan memutuskan dengan tegas pada satu pilihan.
Apa yang harus saya lakukan untuk mengatasi masalah ini?
design
productivity
systems-analysis
pengguna8
sumber
sumber
Jawaban:
Dua aturan sederhana:
Ketika Anda mulai melakukan masing-masing hal ini, Anda akan mendapatkan kepercayaan diri bahwa Anda dapat membuat keputusan sederhana sekarang tanpa mengurangi kemampuan Anda untuk merespons perubahan di kemudian hari.
Ingatlah bahwa pemeriksaan di masa depan berarti membuat kode mudah diubah, tidak mencoba mengantisipasi setiap cara yang mungkin perlu diubah oleh kode Anda.
sumber
Biasanya ketika saya merasa seperti itu artinya saya perlu mencoba:
Jika masalahnya melibatkan sintaks dan potongan kecil, maka:
sumber
Sangat mudah untuk menganggap diri Anda tidak aktif. Bahkan jika Anda berhasil, entah bagaimana, untuk menghasilkan solusi terbaik saat ini yang dapat dengan mudah berubah sebelum Anda menyelesaikan proyek, dan kemudian apa?
Lebih baik memilih solusi yang layak dan menjalankannya, daripada duduk dan memikirkan apa solusi terbaik . Solusi terbaik adalah sulit dipahami dan lebih buruk, subjektif. Jika persyaratan berubah sedikit, solusi Anda mungkin berubah menjadi lebih buruk daripada solusi yang Anda buang karena itu bukan yang terbaik saat itu.
sumber
Saya belajar untuk menghindari kelumpuhan analisis juga, jadi pujian kepada kami =) Ini sering terjadi karena kami ingin melakukan "desain terbaik". Pada kenyataannya, "terbaik" ada di mata yang melihatnya . Formula saya untuk menghindari kelumpuhan analisis, adalah menerapkan prinsip desain yang cukup baik . Bagaimana saya melakukannya? Saya membawa variabel seperti batasan waktu, jadwal dan bertanya pada diri sendiri apa desain paling sederhana yang dapat menyelesaikan pekerjaan (ini tidak berarti yang termudah) tanpa mengurangi kualitas, tetapi pada saat yang sama, saya memastikan bahwa itu dapat diuji dan sebuah terbuka untuk ekstensi ditutup untuk modifikasi (OCP)desain juga. Apa yang saya maksud dengan testable dan OCP? Yah, alih-alih mencari apa yang saya anggap terbaik, saya menganggap desain yang dapat memberi tahu saya ketika segala sesuatunya memburuk dan mencoba melakukan cukup kode yang memungkinkan saya untuk memperbaiki dan meningkatkan nanti. Juga, cobalah untuk memisahkan kode yang akan berubah dengan kode yang tetap sama. Refactoring menjadi lebih mudah, karena kode yang tidak seharusnya diubah lebih aman dari masa depan Anda, Anda atau orang lain.
sumber
Bagaimana dengan membiarkan nyali Anda memutuskan untuk salah satu opsi? Itu harus berjalan cukup cepat dan bergabung dengan baik dengan timeboxing , yang juga diusulkan ammoQ . Anda dapat mencoba batas 1 menit jika opsi sudah ditetapkan, atau 2 menit jika Anda harus menentukannya terlebih dahulu. Atau apa pun yang tampaknya sesuai (didefinisikan sebelumnya). Saat belajar mendengarkan naluri Anda, pilihan intuitif Anda akan menjadi lebih cepat dan lebih baik dengan latihan .
Jika Anda terganggu oleh kekhawatiran tentang kemungkinan memilih yang tidak sempurna, berikut adalah beberapa pemikiran untuk mengatasinya:
Semoga berhasil! :)
sumber
Saya pikir itu hilang dengan sedikit pengalaman. Sebagian besar kelumpuhan saya terjadi karena saya mencoba membayangkan basis kode apa yang akan terlihat lebih jauh ke depan daripada yang saya perlukan sehingga untuk mengatasinya saya hanya melakukan hal yang paling sederhana yang akan berhasil dan kemudian melanjutkan. Setelah proyek memiliki bentuk tertentu, unit kode berulang mulai menonjol dan cukup mudah untuk abstrak pola berulang dan menyederhanakan kode.
sumber
Untuk mengatasi keengganan Anda untuk memutuskan, gunakan timeboxing : atur jam alarm untuk berbunyi dalam beberapa menit; siksa pikiran Anda sampai saat itu, tetapi ketika alarm berbunyi, pilih opsi terbaik yang Anda temukan sampai saat itu.
sumber
Buat prototipe. Ingat, prototipe dibuat untuk dibuang, jadi tidak masalah apa fungsi, nama variabel atau bahkan arsitektur besar yang Anda gunakan. Anda hanya membangunnya untuk membuktikan bahwa itu berhasil.
Setelah Anda membuatnya, dan membuangnya, saya berani bertaruh Anda akan lebih mudah membuat keputusan itu.
sumber
Saya menderita masalah ini juga. Apa yang akan saya katakan adalah bahwa Anda tidak memiliki insentif penyelesaian yang cukup.
Sebagai contoh, ketika saya sedang menulis kode rendering, maka saya memiliki insentif penyelesaian yang besar karena saya tahu bahwa jika saya melanjutkan, saya akan melihat sistem dalam aksi dan memikirkan betapa hebatnya saya untuk texturing quad, atau mengubah vert. Tetapi sekarang setelah saya memfaktorkan ulang (upaya 4, jika Anda ingin tahu) maka saya menderita karena ini banyak pekerjaan dan bahkan jika saya selesai, saya hanya akan melihat quad lama yang sama. Dan saya benar-benar tidak ingin harus refactor lagi dan saya muak melihat quad lama yang sama berulang-ulang, dan itu bukan hadiah untuk saya lagi.
Anda perlu memecahnya menjadi komponen dan hadiahi diri Anda sendiri untuk menyelesaikannya, bahkan jika hanya dengan beberapa konsol i / o yang menunjukkan bahwa itu berfungsi.
sumber
Saya sedang membaca pertanyaan Anda dan memikirkan hal-hal di sepanjang poster yang lain: Anda tidak cocok dengan pekerjaan ini; beri diri Anda batas waktu; lakukan sesuatu yang lain sejenak. Setelah beberapa refleksi, saya tidak yakin ada jawaban yang benar-benar bermanfaat
Masalah dengan masalah mental seperti ini adalah bahwa mereka tidak mudah dipecahkan, mereka adalah bagian dari Anda, dan jelas Anda peduli (terlalu banyak mungkin) tentang pekerjaan Anda, tidak memiliki kepercayaan diri untuk setuju dengan diri sendiri, terlalu tidak berpengalaman untuk mempertimbangkan bahwa Anda adalah pilihan pertama yang benar selama ini, atau terlalu banyak stres karena melakukannya dengan benar. Kenapa lagi Anda khawatir tentang hal sepele seperti itu ?!
Sekarang saya memiliki masalah yang sama, tetapi tidak dengan kode begitu banyak .. biasanya itu apa yang harus untuk makan malam .. pizza atau kari .. hmm ... pizza tapi kemudian kari bagus, tetapi apakah saya merasa seperti kari, pizza lebih murah , tapi kemudian kamu mendapatkan lebih banyak kari, tapi ... dan seterusnya. :)
Jadi saya pikir - mengapa saya tidak memiliki masalah yang sama dengan pengkodean, dan saya pikir itu hanya karena saya memiliki serangkaian pola yang saya gunakan secara teratur. Jika saya membutuhkan definisi fungsi, itu mudah .. itu akan berada dalam nada yang sama dengan setiap definisi fungsi lainnya yang pernah saya kodekan. Jika saya membutuhkan aliran kontrol, pertama-tama saya memutuskan apakah saya memerlukan loop for atau loop sementara dan kemudian membuat kode lama yang sama yang saya gunakan terakhir kali saya membutuhkan salah satu dari hal-hal ini. Hal yang sama berlaku untuk semuanya, apakah saya ingin antrian? Tentu - mari kita potong dan tempel kode antrian 'standar' saya (diarsipkan dari proyek terakhir yang saya kerjakan, atau yang saya ingat menggunakan salah satu dari hal-hal ini). Hasil akhirnya ... Saya hanya khawatir tentang hal-hal baru, dan jujur saja, itu menyenangkan.
Jadi, saran saya adalah mulai membangun perpustakaan potongan kode - Saya dulu mengirim email kepada saya sendiri dan meletakkannya di folder tetapi apa pun yang Anda kerjakan adalah yang terbaik - dan Anda akan mulai tahu apa yang harus dilakukan setiap saat. Anda akan selalu pergi ke kode lama yang Anda tulis dan menyingkirkan masalahnya, siap untuk masalah berikutnya. Anda akan menemukan Anda menjadi pengembang yang jauh lebih cepat (serius, ini adalah satu-satunya cara untuk mendapatkan produktivitas programmer) dan mudah-mudahan akan menemukan waktu untuk bersenang-senang, bukan hal-hal suram sehari-hari yang telah Anda pecahkan berkali-kali lebih.
Tentu saja, bagian terakhir dari semua itu juga penting - semakin banyak pekerjaan yang Anda miliki, semakin sedikit kemewahan yang Anda habiskan untuk berpikir.
sumber
Berikut adalah strategi yang menggabungkan saran oleh Rein Henrichs ( mulai sederhana, refactor ) dan amunisi ( timeboxing ):
x
, kemudian memperbaikinyastring
, laluname
sampai waktunya habis.userHandle
Kemungkinan manfaat dari pendekatan ini:
sumber
Ketika saya sudah melakukan penelitian dan dibiarkan tanpa pilihan terbaik yang jelas, saya memberi diri saya batas waktu (biasanya 5 menit) untuk memilih satu, kemudian hanya bergerak maju dengannya. Bahkan ketika Anda mengalami hambatan, pada titik ini, tidak ada jaminan, Anda tidak akan mendapatkan hambatan yang sama dengan membuat keputusan yang berbeda. Saya tidak bisa memikirkan saat saya menyesali keputusan saya.
sumber
Biasanya alasan Anda tidak dapat memutuskan adalah perbedaannya tidak signifikan, atau Anda tidak memiliki informasi yang cukup.
Dalam hal a) Tetapkan batas waktu untuk membuat opsi yang masuk akal untuk dipertimbangkan. Jangan memutuskan yang mana. Pada akhir waktu, pilih satu (secara acak jika tidak ada preferensi yang jelas) dari opsi yang diidentifikasi, dan batas waktu lainnya. Jika tidak ada keputusan yang jelas dibuat pada akhir waktu, yang sudah dipilih itu. Mulai kode, dan refactor jika Anda salah. Jika bos bertanya mengapa, katakan "Saya membalik koin, Anda punya cara yang lebih baik?"
Dalam hal b) - Anda memerlukan informasi lebih lanjut, dan duduk di atas A besar Anda yang gemuk .... sepanjang hari tidak akan menyediakannya. Keluar dari mode desain dan masuk ke mode pengumpulan informasi. Prototipe, ajukan pertanyaan, baca majalah teknis. Apa pun yang Anda lakukan, jangan tidur terlalu lama.
sumber
Seringkali, solusi terbaik adalah mencoba menjelaskan keputusan Anda kepada seorang kolega. Namun, karena Anda tidak ingin melakukan ini terlalu sering, hal terbaik berikutnya adalah berpikir di atas kertas - baik dengan kertas / pena, atau jendela notepad kosong.
Mulailah dengan menulis apa pun - hanya untuk mengikuti ritme penulisan. Di jendela notepad Anda cukup mengetik "Saya sedang berpikir di atas kertas" dan kemudian melanjutkan dengan aliran kesadaran. Setelah beberapa detik, Anda akan berada dalam ritme penulisan, jadi tekan enter beberapa kali, dan mulailah menjelaskan dilema Anda.
Nyatakan masalahnya, lalu nyatakan solusi yang mungkin, apa yang baik dari masing-masing, dll.
Meskipun tidak selalu berhasil, proses mengeluarkan pikiran dari kepala Anda (RAM) dan ke media eksternal (dokumen notepad) memberi Anda lebih banyak kebebasan untuk membuat koneksi baru, dan melihat keputusan dari berbagai perspektif.
sumber
Saya menderita masalah yang sama. Untuk masalah kecil, cara saya mencoba mengatasinya adalah dengan pergi dengan desain pertama yang saya pikir itu tidak bodoh. Tidak ada gunanya mencari desain yang optimal; sulit jika bukan tidak mungkin untuk beralasan tentang semua nuansa desain yang mungkin Anda pikirkan tanpa menuliskannya. Ketika Anda kode, Anda akan menemukan bahwa Anda dapat membuat perbaikan kecil. Dilakukan dengan benar, saya merasa cukup mudah untuk menyatu pada solusi yang cukup bagus dengan cara ini.
Untuk masalah yang lebih besar, saya pikir ada manfaat dalam memikirkan opsi Anda terlebih dahulu, tetapi timebox itu. Masalah besar memiliki ruang solusi besar, Anda tidak dapat mengevaluasi setiap kemungkinan, Anda juga tidak harus mencoba.
TLDR; Pilih solusi yang masuk akal, perbaiki saat Anda pergi.
Ini juga relevan:
dari http://www.codinghorror.com/blog/2008/08/quantity-always-trumps-quality.html .
sumber
Saya tidak pernah mengerti ini. Ketika saya seorang instruktur, saya akan mengatakan sesuatu seperti:
Tidak terlalu rumit, Anda mungkin berpikir, dan 95% orang menulis sesuatu seperti:
Tetapi terkadang ada orang yang duduk seperti kelinci yang lumpuh di lampu depan. Saya dengan penuh simpati akan bertanya apa masalahnya, dan mereka akan berkata, "Saya tidak tahu harus menyebutnya apa!".
Inilah orang-orang yang harus mencari karier lain. Seperti yang seharusnya Anda lakukan.
sumber