Mengapa tidak memikirkan bug terkadang membantu Anda menyelesaikannya? [Tutup]

12

Kemarin saya menghabiskan sebagian besar sore hari mencoba memperbaiki bug, yang saya anggap sepele. Aku berputar-putar, tidak tahu apa yang salah. Menulis ulang sebagian besar kode. Memeriksa pada SO. Masih tidak ada sukacita.

Jadi saya pulang, berjalan anjing, menonton TV kecil dan tepat sebelum saya pergi tidur, bingo saya menyadari kesalahan yang jelas saya buat. Pagi ini butuh waktu sekitar 10 menit untuk memperbaikinya.

Ketika saya di rumah, saya tidak aktif memikirkan masalahnya. Namun mengeluarkan diri dari situasi memungkinkan saya untuk menyelesaikannya.

Ini bukan pertama kalinya terjadi, dan saya tahu itu adalah cara yang cukup umum untuk menyelesaikan masalah pemrograman. Saya bahkan pernah mendengar orang memimpikan jawabannya.

Mengapa ini bekerja?

Mungkin yang lebih penting, apakah ada panduan yang baik tentang kapan Anda harus istirahat dari suatu masalah, berapa lama istirahat itu, dan setelah berapa lama meninggalkan masalah berhenti menjadi efektif?

Saya kira saya sedang berusaha mencari cara untuk mengoptimalkan pemrosesan bawah sadar ini (atau apa pun yang terjadi)

Jeremy French
sumber
3
Saya tidak yakin ini hanya berkaitan dengan pemrograman, Anda bisa mengajukan pertanyaan yang sama di banyak bidang.
ozz
1
Kalau saja pertukaran tumpukan ilmu kognitif dalam versi beta!
Matt Ellen
1
Karena berpikir adalah proses misterius.
davidk01
4
Pertanyaan ini tampaknya di luar topik karena ini adalah tentang proses pemikiran penyelesaian masalah umum dan tidak unik untuk bidang pemrograman atau teknologi.

Jawaban:

22

Terlalu fokus pada masalah membuat Anda tidak bisa mundur. Saat Anda men-debug kode Anda, Anda cenderung mengulangi tes yang sama.

Semakin banyak Anda mencoba, semakin banyak Anda gagal dan Anda menjadi sangat frustrasi. Meningkatnya stres dan frustrasi membuat segalanya menjadi lebih buruk.

Itu sebabnya cukup sering, seorang kolega dapat secara kebetulan, melihat ke belakang, dan menunjukkan masalah (dan solusi) dalam beberapa detik.

Mereka tidak dalam kondisi mental yang sama seperti Anda.

Saya sering mencoba untuk berhenti menjaga periode waktu tertentu dan kembali dengan pikiran yang lebih tenang beberapa jam kemudian.

Tapi teknik yang paling kuat adalah ... meminta bantuan .

Walter
sumber
9
Memberi +1 saat Anda meminta bantuan, Anda cenderung mendefinisikan masalah dengan istilah yang dapat dipahami orang lain sehingga dalam proses itu Anda mendapatkan pemahaman yang lebih. seperti ketika Anda memposting topik di situs Q&A atau forum segera Anda mendapatkan ide bagaimana melanjutkan selanjutnya ..
Aditya P
1
+1 dan +1 untuk @AdityaGameProgrammer juga: mendeskripsikan masalahnya sangat membantu bahkan menggambarkannya ke orang imajiner - atau figur aksi atau tanaman atau apa pun - sering memicu pemikiran baru yang sama (seperti dijelaskan oleh banyak orang) .
Matius Frederick
6

Jika Anda telah mengerjakan suatu masalah untuk beberapa waktu, pikiran Anda mengikuti pola yang Anda siapkan selama pengembangan. Dengan kata lain, Anda mengembangkan "bintik hitam" sementara untuk hal-hal di luar kerangka mental yang Anda buat.

Melepaskan pikiran Anda dari masalah untuk sementara waktu membantu menghilangkan filter ini dan memungkinkan Anda untuk merenungkan semuanya tanpa filter di tempat.

Apa yang sering membantu saya dalam kasus-kasus seperti ini adalah untuk menjelaskan kepada orang lain mengapa itu harus bekerja (ketika tidak) - biasanya di tengah-tengah penjelasan Anda, Anda akan menyadari di mana Anda salah dalam alasan Anda atau langkah apa yang Anda lewatkan.

Selain mengembangkan filter mental selama pekerjaan pengembangan, otak Anda secara multi-threaded dan sering terus membahas masalah sebagai bagian dari proses yang tidak sesuai. Saya kadang-kadang menggunakan ini dengan mempelajari semua yang saya bisa tentang suatu masalah di sore hari, kemudian membiarkan masalahnya terletak satu atau dua hari sebelum mengerjakan solusi.

rsp
sumber
1
Saya membaca tentang seorang profesor tertentu yang akan menyimpan boneka beruang di atas meja di luar kantornya. Sebelum siswa meminta bantuannya, mereka terlebih dahulu menjelaskan masalah mereka kepada beruang.
Michael K
Terlihat sangat mirip dengan apa yang ditulis Jeff Atwood di blog-nya di sini blog.codinghorror.com/rubber-duck-problem-solving . Saya benar-benar berpikir ini bisa sangat membantu. Berapa kali Anda memiliki setengah pertanyaan tertulis untuk SO dan kemudian menyadari jawabannya? Saya punya beberapa waktu ini :)
Rémi
5

Saya bukan psikolog, tetapi ketika Anda terlalu berkonsentrasi pada satu masalah (menemukan bug), Anda cenderung kehilangan pandangan untuk sistem yang lebih besar. Namun seringkali jawabannya bukan "di sana" di mana Anda saat ini mencarinya tetapi di tempat lain - yang tidak dapat Anda lihat pada saat itu.

Jadi yang perlu Anda lakukan adalah keluar dari parit dan mulai melihat keseluruhan sistem dari sudut pandang yang lebih umum - lagi. Orang cenderung mengabaikan fakta ini dengan berpikir, "Aku benar-benar tahu itu ada di sini, aku belum menemukannya". Itu terjadi pada kita semua, setiap saat. Aku bahkan sampai ke titik di mana aku tahu "Saya tidak bisa menemukan bug menggunakan baik teknik debugging sehingga memiliki berada di tempat lain" dan masih tidak mengambil hal yang benar dan istirahat - otak manusia adalah suatu hal yang lucu.

Namun, itu benar-benar tidak mempedulikan apa yang Anda lakukan - apakah itu pergi ke kamar mandi, berbicara dengan rekan kerja atau mengajak anjing berjalan. Saya biasa pergi ke toko terdekat untuk membeli permen ketika saya macet dan segera setelah saya memakai jaket, solusinya muncul di kepala saya - hampir setiap saat. Mungkin juga merupakan hal yang baik untuk minum banyak air selama Anda pemrograman. Ini memaksa Anda untuk istirahat setiap sekarang dan kemudian mengunjungi kamar mandi dan zap, ada alasan yang memaksa Anda untuk keluar dari parit.

perdian
sumber
4

Dari pengalaman pribadi saya dan apa yang saya saksikan di pengembang junior yang saya latih, kita semua mendekati masalah dengan asumsi dan harapan. Kami menganggap fungsi x melakukan tugas y untuk menghasilkan hasil z. Selalu begitu, jadi mengapa itu harus berubah? Ketika kita semakin fokus pada masalah, kita mengasumsikan bahwa kita telah membahas dasar-dasarnya dan masalahnya memang harus jauh lebih rumit daripada ketika kita mengatasinya semula. Lampirkan kelelahan pada daftar hal-hal yang kami anggap benar tetapi belum benar-benar diverifikasi, dan Anda mengatur diri Anda untuk momen "WTF" yang lengkap nanti.

Baru setelah Anda memutus diri dari masalah, asumsi tersebut dapat dibuang dan ditelusuri kembali. Selain itu, kami biasanya menangani masalah di balik masalah yang berbeda yang baru saja kami selesaikan. Saya memperbaiki A tetapi rusak B, sekarang saya harus memperbaiki B. Jadi kami sudah memiliki momentum dan arah yang kami tuju (yang membuat asumsi kami semakin sulit untuk dipisahkan). Ketika Anda kembali ke memecahkan masalah B, masalah A tidak lagi segar dalam pikiran Anda menghalangi kemungkinan potensial. Anda dapat mengatasi masalah tanpa prasangka, dan ini membuka jalan pemikiran baru dan sudut pandang baru dalam memandang masalahnya.

Sekarang, setiap kali seorang junior meminta bantuan saya, mereka tahu pertanyaan pertama yang harus mereka jawab adalah "Apa asumsi Anda?". Bahkan berusaha menjawab masalah itu dapat membantu menghilangkan Anda dari hambatan mental Anda.

Joel Etherton
sumber
3

Saya kira otak Anda, seperti otot, lelah. Beristirahat memungkinkan untuk beristirahat, top up dengan oksigen / bahan bakar dll dan mulai bekerja lagi.

Pergi jalan-jalan atau berolahraga sering kali merupakan pendekatan yang baik ketika Anda benar-benar terjebak dengan sesuatu. Bahkan jika Anda tidak memiliki momen "eureka", sering kali Anda dapat kembali dan mengambil pendekatan baru untuk menyelesaikan masalah.

Steve
sumber
3

Saya suka menyebutnya waktu inkubasi pada ide dan masalah.

Sub-hati nurani Anda masih terus memproses masalah dari kesadaran Anda dengan pendekatan non-linear. Ini sangat mirip dengan apa yang terjadi ketika Anda mempelajari sesuatu yang baru sebelum Anda tidur siang. Pikiran Anda memiliki waktu untuk 'mendefragmentasi' informasi ke dalam cara-cara yang dapat didekati dengan fleksibilitas yang lebih besar.

Selain itu, tip bermanfaat lainnya untuk mengatasi macet pada bug, disebut confessional de-bugging . Di sinilah Anda mendekati orang lain yang tidak tahu masalahnya dan Anda mulai menjelaskan masalahnya. Saya menemukan lebih sering daripada tidak, bahwa dengan hanya mengatakan dengan keras masalah, solusinya terlintas dalam pikiran.

lihat tautan psikis ini: kiat kreativitas & masalah tidur siang

Adamizer
sumber
2

"Kita semua mendapatkan ditusuk oleh naik kadang-kadang. Sayangnya ketika kita berkonsentrasi begitu banyak pada rasa sakit yang kita lupa tentang keindahan mawar."

Malam gelap
sumber
2

Saya memperbaiki beberapa bug penting dalam karir saya, selama waktu mandi.

Saya bukan seorang psikolog tapi saya kira perbedaannya adalah:

  • duduk di depan komputer, saya melihat kode sumber, breakpoint, printfoutput ...

  • di kamar mandi, kode berjalan di pikiranku.

ohho
sumber
1

Saya telah mengalami fenomena yang sama, dan menghubungkannya dengan melihat masalah dengan perspektif yang berbeda saat saya menghabiskan waktu darinya (lebih banyak waktu menyiratkan perspektif yang lebih jauh, kira-kira).

Tetapi ada trik lain yang saya temukan menyelesaikan hal yang sama sebagian besar waktu: menjelaskan kode kepada rekan kerja. Bukan untuk mereka menangkap bug Anda, meskipun mereka mungkin; itu untuk memaksa Anda mundur dan menjelaskan logika kode di semua level yang relevan. Saya tidak pernah (meskipun peringatan yang adil - ukuran sampel terbatas) mampu memecahkan bug yang lolos dari perawatan menggambarkan-ke-rekan kerja ini.

Rex Kerr
sumber
1

Saya baru-baru ini menggunakan teknik pomodoro berkat saran dari seseorang di situs ini, dan berpikir itu memberikan jawaban yang baik untuk pertanyaan Anda tentang waktu dan lamanya istirahat. Pada dasarnya, ini membuat Anda fokus pada masalah selama 25 menit, diikuti dengan istirahat pendek 3-5 menit, lalu istirahat lebih lama setelah setiap 4 siklus itu. Mereka mengutip beberapa penelitian untuk mendukungnya, tetapi secara anekdot saya telah menemukan interval tersebut sangat efektif.

Saya telah berpikir rentang 25 menit akan membuat saya tidak mendapatkan "di zona," yang diklaim orang membutuhkan waktu sekitar 15 menit. Sebaliknya, dengan pengaturan waktu ini saya mendapatkan di zona hampir segera. Saya pikir itu karena jauh lebih mudah untuk menjaga diri saya dari gangguan ketika saya tahu saya hanya perlu menyimpannya selama 25 menit. Lebih mudah untuk menunda gangguan eksternal hanya dalam 25 menit. Sebelumnya jauh lebih sulit ketika saya berusaha untuk bekerja keras selama 4 jam sebelum makan siang.

Karl Bielefeldt
sumber