Anda tahu mereka, kesalahan-kesalahan yang TIDAK masuk akal. Di mana sepertinya GREMLIN hanya melompat jauh ke dalam chip Anda dan mengacaukan sesuatu. Apakah Anda berjalan-jalan, menulis barang, menelepon paman?
Anda tahu mereka, kesalahan-kesalahan yang TIDAK masuk akal. Di mana sepertinya GREMLIN hanya melompat jauh ke dalam chip Anda dan mengacaukan sesuatu. Apakah Anda berjalan-jalan, menulis barang, menelepon paman?
Jawaban:
Untuk masalah yang benar-benar mengerikan itu, strategi saya biasanya berjalan sebagai berikut.
Eksperimen dan google. Terus berusaha memecahkan masalah. Sebagian besar waktu ini menyelesaikan masalah dalam satu jam atau kurang.
Jadi itu tidak berhasil. Istirahat. Minum kopi, bicara tentang sesuatu yang tidak berhubungan dengan seorang rekan. Singkirkan masalah itu dari pikiran Anda. Ketika Anda melihat masalah 5 atau 10 menit kemudian Anda melihatnya dari sudut pandang yang sedikit berbeda. Sebagian besar waktu ini berhasil.
Dalam hal ini tidak. Jadi habiskan 10 - 30 menit untuk melihatnya. Kemudian teleponlah seorang kolega. Tetapi sebelum Anda melakukannya, buat beberapa catatan; Anda ingin menunjukkan masalahnya, mereproduksinya, kemudian mendaftar hal-hal yang telah Anda coba, dan yang paling penting buktikan bahwa Anda telah mencobanya. Jadi lakukan dry run dulu. Tetapkan beberapa tanda buku dalam kode, tutup semua dokumen terbuka yang berlebihan, dll. Dengan cara ini Anda dapat menyelesaikan sendiri masalah tersebut, atau saat Anda menunjukkan masalah, Anda tidak akan membuang-buang waktu.
Mintalah kolega Anda untuk membuat Anda membuktikan semua asumsi Anda. apakah setter itu benar-benar dipanggil? Apakah metode itu benar-benar mengembalikan apa yang Anda klaim itu? Anda berpikir objek itu bukan nol - tunjukkan pada mereka itu bukan nol.
Seringkali, menunjukkan masalah akan membuat Anda menyadari bahwa Anda belum mencoba semua kemungkinan atau kolega Anda akan melihat kesalahan Anda.
Jika itu tidak berhasil, saatnya untuk serius. Dokumentasikan dengan tepat apa yang Anda coba lakukan, apa yang telah Anda coba, dan mengapa itu tidak berhasil. Email ini ke semua kolega Anda. Posting di SO. Pada titik ini dokumen harus menjadi pertanyaan SO yang sempurna.
Sambil Anda menunggu tanggapan, google google google. Coba setiap permutasi dari pertanyaan yang Anda miliki. Buka banyak tab. Anda mungkin tidak akan mendapatkan jawaban pada titik ini, tetapi Anda sedang mencari ide, kemungkinan, berbagai cara untuk mendekati masalah.
Lakukan sesuatu yang lain, jika Anda telah menghabiskan 5 jam pada masalah, waktunya untuk meninggalkannya untuk hari lain. Mungkin Anda akan mendapat respons yang bermanfaat. Mungkin ketika Anda menyerang masalah keesokan harinya itu akan menjadi jelas.
Jika tidak ada yang berhasil, saatnya mencari solusi yang berbeda. Mungkin Anda bisa menggunakan metode yang berbeda, teknologi yang berbeda. Mungkin Anda harus mempertimbangkan untuk meninggalkan fitur untuk saat ini. Apakah Anda menagih klien per jam? Apakah Anda bekerja untuk perusahaan di aplikasi internal? Anda perlu menyampaikan ini kepada pemilik dan memberi tahu mereka "lihat, saya sudah menghabiskan waktu x jam untuk hal ini dan tidak membuat kemajuan, apakah manfaat biaya sepadan?". Anda tidak ingin pergi ke bos Anda dan memberi tahu mereka bahwa Anda menghabiskan 16 jam untuk masalah hanya bagi mereka untuk berbalik dan berkata, itu tidak penting, lewati saja untuk rilis ini. Anda perlu mengetahuinya lebih awal.
Dan jika itu tidak berhasil? Nah, satu-satunya pilihan Anda adalah tetap berusaha mengatasi masalah atau mencari keahlian industri. Tanya pakar teknologi di twitter. Email penyedia teknologi Anda.
Berhenti. Tidak, bukan pekerjaanmu! Bangun dan pulang. Anda selesai untuk hari atau akhir pekan. 19 kali dari 20 saat Anda kembali ke masalah berikutnya, solusinya akan muncul dengan sendirinya dalam waktu satu jam.
Sebelum sepuluh jam berlalu, saya akan mendapat bantuan.
Satu kata,, timebox
tentukan waktu terbatas untuk mengerjakan sesuatu, dan jika itu tidak diselesaikan, beralihlah ke sesuatu yang lain dan kembalilah keesokan harinya dengan perspektif yang segar.
Itu dan satu set mata lain, selalu bernilai lebih dari waktu kapan pun Anda bisa membuang waktu untuk menatap sesuatu.
Saya tidak akan pernah menghabiskan lebih dari 45 menit hingga satu jam untuk mencoba menyelesaikan sesuatu dalam satu kesempatan, itu melanggar hukum pengembalian yang semakin berkurang.
Jelaskan masalahnya kepada orang lain.
Dengan menjelaskan masalahnya kepada orang lain, Anda harus mengklarifikasi: ini sering memungkinkan Anda melihat solusinya.
(Salah satu majalah komputer profesional Inggris pernah mengusulkan penjualan potongan karton seukuran seorang programmer senior yang khusus untuk tujuan ini.)
Saya menemukan masalah tidur (kadang-kadang selama beberapa hari) juga dapat membantu.
Saya punya rencana tiga langkah:
Setiap tahap merupakan peningkatan jika langkah sebelumnya gagal. Hampir selalu ada hal lain yang produktif yang dapat saya kerjakan pada tahap 2.
Saya biasanya melakukan salah satu dari ketiganya:
Salah satu dari ketiganya melakukan pekerjaan yang baik untuk mengalihkan perhatian dari situasi yang dihadapi. Saya menemukan gangguan, biarkan otak bawah sadar saya mengunyah sesuatu untuk sementara waktu. Setelah sekitar satu jam dari ini, bam, ada solusinya :-).
Bangun test Harness untuk menargetkan Cacat yang tepat dan Isolasikan itu
Terus hilangkan kode yang bagus .. sambil mereplikasi kerusakan. Sampai Anda menargetkan potongan kode yang tepat membuat kesalahan. Kemudian lacak kodenya.
Bacaan yang disarankan: Programmer Pragmatis Secara Khusus Bab 10: Pelacak peluru
Semua saran ini luar biasa. Namun, saya cukup sering menggunakan teknik yang tidak saya lihat disebutkan. Buat daftar untuk mengatur pemikiran Anda tentang masalah tersebut. Jika saya memiliki masalah yang sangat lengket, saya biasanya menulis beberapa daftar seperti: Fakta, Asumsi, Pertanyaan, Gejala, dll. Saya menemukan bahwa seringkali dalam proses mengatur hal-hal dengan cara ini saya menemukan asumsi yang tidak saya sadari ( yang sering berubah menjadi salah), pertanyaan yang tidak saya sadari perlu ditanyakan, permutasi lain yang dapat saya periksa, dll.
Edit:
Jawaban singkatnya:
T: Bagaimana Anda menangani kesalahan yang sangat aneh yang membuat Anda bingung selama lebih dari 10 jam?
A: Pastikan itu tidak pernah terjadi: pahami desain Anda, ketahui kode Anda, pelajari cara menggunakan debugger Anda.
Penjelasan:
"Di mana sepertinya gremlin hanya melompat jauh ke dalam keripikmu dan mengacaukan sesuatu"
Ini seharusnya tidak pernah terjadi. Jika ini kode Anda, Anda harus memiliki ide yang sangat bagus tentang apa yang menyebabkan kesalahan sebelum Anda berusaha memperbaikinya.
Lebih jauh lagi, ketika Anda menulis kode Anda, Anda harus sudah tahu di mana dan mengapa itu kemungkinan gagal.
Setelah mengatakan itu - meminta rekan kerja, memposting di SO, menelusuri kembali dan memutar kembali langkah Anda dan mengambil istirahat - semua saran yang disebutkan di atas akan membantu.
Hal lain, adalah Anda harus tahu alat Anda - alat debugging Anda. Mencatat pesan di titik-titik yang dicurigai dalam kode Anda, memeriksa tumpukan panggilan Anda dengan hati-hati, menggunakan breakpoints bersyarat dan jam tangan, dll. Keterampilan debugging bukan tambahan - mereka adalah bagian dari pemrograman.
Saya memiliki masalah yang sama, memori yang jelas rusak di Objective-C, yang saya perjuangkan selama berjam-jam. Tetapi kemudian saya dan rekan-rekan saya hanya berjalan-jalan untuk makan siang, dan saya menjelaskan masalahnya (dan satu hal yang berkaitan dengan deserialisasi objek dalam metode init-nya), dan pada dasarnya menjelaskan seluruh masalah kepada diri saya sendiri.
(detail techy: pada dasarnya, saya menginisialisasi dan mengembalikan suatu objek ke sesuatu yang lain daripada diri sendiri, jadi ada dua allocs, tetapi hanya satu objek kembali. Memori bergeser dan menjadi gila, crash, dan debugger tidak benar-benar tahu apa yang harus dilakukan dengan itu juga).
Mandi.
Setiap Rodney McKay fans?
Namun, dengan serius, jika ada satu kesamaan di antara semua jawaban ini, Anda perlu istirahat dan melakukan sesuatu yang lain .
Saya suka menganggapnya sebagai menurunkan masalah ke alam bawah sadar Anda. Bahkan jika kita tidak sadar, pikiran kita (tampaknya) terus bekerja pada masalah, bahkan ketika kita sedang melakukan sesuatu yang lain, seperti mandi .
Kombinasi dari semua ini:
Jauhi itu untuk sementara waktu sehingga bisa duduk di atas kompor Anda. Tidur, istirahat, makan, jalan-jalan, terserah.
Periksalah masalahnya lebih lanjut, apa lagi yang salah, gejala apa yang bisa Anda temukan?
Cari tahu masalahnya, lihat apa yang bisa Anda temukan. Ingatlah untuk mencoba kata kunci yang berbeda
Coba sesuatu yang berbeda . Bekerja di sekitar. Teknik debugging yang berbeda. Seorang validator. Komputer yang berbeda.
Bicaralah dengan seseorang . Sekalipun mereka tidak dapat membantu, atau bahkan bukan seorang programmer, terkadang berbicara akan memicu ide bola lampu
Mengulang kembali! Jika sesuai, coba nyalakan kembali komputer Anda, server, dll. Jika tidak ada yang lain, Anda dapat menggunakan waktu untuk berpikir.
Tanyakan StackOverflow! Kami di sini untuk membantu
Saya benar-benar tidak menyukai jawaban yang paling banyak dipilih, karena meskipun kadang-kadang berhasil, kadang-kadang Anda hanya perlu mencari tahu di hari yang sama, jadi yang saya sarankan, dalam urutan ini, adalah:
Konfirmasikan bahwa itu tidak hanya terjadi pada Anda. Ini dapat menghemat banyak waktu. Mungkin Anda menghapus komponen yang diperlukan, atau membuat perubahan di lingkungan Anda, dan pengecualian sedang ditelan di suatu tempat dalam kode Anda. Jika itu hanya terjadi pada Anda, saya akan menggunakan alat perbandingan lingkungan. Baru-baru ini saya membaca tentang perangkat lunak yang disebut Envy, yang memungkinkan Anda melakukan hal itu, meskipun bukan freeware, harganya 10 USD.
Terjadi pada semua orang? Baik, sekarang lakukan Lihat Riwayat pada kode dan verifikasi untuk perubahan terbaru yang mungkin menyebabkan kesalahan, baik secara langsung maupun tidak langsung.
Tidak ada perubahan terbaru? Jika itu adalah kesalahan yang sangat spesifik (pengecualian), 'stackoverflow it'. Sekarang itu tidak terdengar lebih baik daripada 'google it' tapi saya merasa senang untuk mengatakan saya pertama kali mencari stackoverflow untuk penelitian pemrograman daripada google. Jika ini masalah yang sangat diketahui, sangat mungkin Anda akan menemukan solusinya di sini. Jika tidak, maka posting pertanyaan di situs pertukaran stackex terkait. Anda mungkin mendapatkan jawaban yang sangat cepat, atau bahkan jika tidak, pertanyaan Anda akan ada di luar sana saat Anda melakukan penelitian lebih lanjut. Itu manfaatnya.
Jika Anda tidak menemukan jawaban online atau itu bukan kesalahan umum, maka berjalanlah melalui kode langkah demi langkah, memeriksa apakah hasil yang diperoleh dari setiap langkah masuk akal untuk hasil yang Anda harapkan. Pergi mulai untuk menyelesaikan pada setiap metode, dan dari bawah ke atas pada solusi berjenjang. (yaitu jika Anda memecahkan masalah kinerja, mulailah dengan kode yang mengambil catatan. Tidak masuk akal untuk memulai di UI jika Anda dapat menentukan dengan cepat jika langkah pertama adalah masalahnya).
Jika setelah melalui kode beberapa kali Anda masih belum menemukan apa yang salah, hubungi seseorang untuk membicarakannya. Seperti yang sudah disebutkan seseorang, membicarakannya dengan keras bisa menyalakan bola lampu. Ditambah pemrograman pasangan sangat berguna.
Pada titik ini, jika memungkinkan, berjalanlah untuk beberapa waktu atau untuk hari itu. Saya membaca tweet yang sangat benar kemarin yang mengatakan "Saya pergi tidur sambil berpikir 'bagaimana sih' dan bangun berpikir 'tapi tentu saja'". Benar sekali.
Jika Anda masih belum memiliki jawaban, saya berani mengatakan Anda dapat mencoba refactoring menjadi tugas / metode / fungsi yang lebih kecil. Henry Ford mengatakan sesuatu seperti 'Tidak ada tugas yang begitu rumit yang tidak dapat diselesaikan dengan memecahnya menjadi tugas yang lebih kecil'. Pada titik ini, jika solusinya terlalu rumit dan Anda belum menemukan sendiri atau dengan bantuan orang lain, perbaiki kode menjadi tugas yang lebih kecil. Bahkan jika Anda tidak akhirnya melakukannya, itu dapat membantu Anda menemukan alasannya.
Tambahkan instrumentasi ke kode Anda.
Tweet tentang itu ??
Anda harus mundur. Moto saya adalah 'jika masalahnya terlalu sulit maka Anda memecahkan masalah yang salah'. Apa asumsi Anda? tidak percaya apapun.
Akibat wajarnya adalah 'semakin aneh masalahnya, semakin aneh solusinya'. Kekuatan komputer adalah logikanya sehingga Anda tidak bisa menang dengan logika. Anda punya otak dan harus memikirkannya.
Di zaman modern ada begitu banyak hal lain yang berinteraksi pada sistem - firewall, AV, Antispyware, pembaruan otomatis terjadi setiap malam - Anda harus berurusan dengan target yang bergerak.