ทำไมบางครั้งไม่คิดเกี่ยวกับบั๊กช่วยให้คุณแก้ปัญหาได้? [ปิด]


12

เมื่อวานนี้ฉันใช้เวลาช่วงบ่ายในการแก้ไขข้อบกพร่องซึ่งฉันคิดว่าไม่สำคัญ ฉันเดินวนเป็นวงกลมโดยไม่มีเงื่อนงำสิ่งที่ผิด การเขียนซ้ำส่วนใหญ่ของรหัส ตรวจสอบ SO ยังไม่มีความสุข

ดังนั้นฉันกลับบ้านเดินสุนัขดูทีวีเล็ก ๆ และก่อนที่ฉันจะเข้านอนบิงโกฉันตระหนักถึงความผิดพลาดที่เห็นได้ชัดที่ฉันทำ เช้านี้มันใช้เวลาประมาณ 10 นาทีในการแก้ไข

ในขณะที่ฉันอยู่ที่บ้านฉันไม่ได้คิดถึงปัญหาอย่างแข็งขัน แต่การพาตัวเองออกจากสถานการณ์ทำให้ฉันสามารถแก้ไขได้

มันไม่ใช่ครั้งแรกที่มันเกิดขึ้นและฉันรู้ว่ามันเป็นวิธีที่ใช้กันทั่วไปในการแก้ปัญหาการเขียนโปรแกรม ฉันเคยได้ยินคนที่ฝันถึงคำตอบ

ทำไมจึงใช้งานได้

บางทีสิ่งที่สำคัญกว่านั้นคือมีคำแนะนำที่ดีเกี่ยวกับเวลาที่คุณควรหยุดพักจากปัญหาระยะเวลาที่ควรหยุดพักและหลังจากทิ้งระยะเวลานานเท่าใดที่ปัญหาจะหยุดมีประสิทธิภาพ

ฉันคิดว่าฉันกำลังพยายามหาวิธีเพิ่มประสิทธิภาพการประมวลผลจิตใต้สำนึก (หรือสิ่งที่เกิดขึ้น)


3
ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับการเขียนโปรแกรมเพียงอย่างเดียวคุณสามารถถามคำถามเดียวกันนี้ในหลาย ๆ สาขา
ozz

1
หากเพียงแลกเปลี่ยนวิทยาศาสตร์ความรู้ความเข้าใจอยู่ในเบต้า!
Matt Ellen

1
เพราะการคิดเป็นกระบวนการที่ลึกลับ
davidk01


4
คำถามนี้ดูเหมือนจะอยู่นอกหัวข้อเนื่องจากเป็นเรื่องเกี่ยวกับกระบวนการคิดของการแก้ปัญหาทั่วไปและไม่ซ้ำกับสาขาการเขียนโปรแกรมหรือเทคโนโลยี

คำตอบ:


22

การจดจ่อกับปัญหามากเกินไปจะป้องกันไม่ให้คุณถอยหลัง เมื่อคุณดีบักรหัสของคุณคุณมักจะทำแบบทดสอบซ้ำโดยไม่จำเป็น

ยิ่งคุณพยายามมากเท่าไหร่ก็จะยิ่งล้มเหลวและหงุดหงิดมากขึ้น ความเครียดที่เพิ่มขึ้นและความยุ่งยากทำให้สิ่งต่าง ๆ แย่ลง

นั่นเป็นเหตุผลที่บ่อยครั้งเพื่อนร่วมงานสามารถดูไหล่ของคุณและชี้ปัญหา (และวิธีแก้ปัญหา) ได้ในเวลาไม่กี่วินาที

พวกเขาไม่อยู่ในสภาพจิตใจเดียวกับคุณ

ฉันมักจะพยายามหยุดดูแลช่วงระยะเวลาหนึ่งและกลับมาพร้อมกับจิตใจที่สงบขึ้นไม่กี่ชั่วโมงต่อมา

แต่เทคนิคที่มีประสิทธิภาพมากที่สุดคือเพียงแค่ ... ขอความช่วยเหลือ


9
+1 เมื่อคุณขอความช่วยเหลือคุณมักจะกำหนดปัญหาในแง่ที่คนอื่นเข้าใจดังนั้นในกระบวนการนั้นคุณจะได้รับความเข้าใจมากขึ้น เช่นเมื่อคุณโพสต์หัวข้อในเว็บไซต์ถามตอบหรือฟอรัมทันทีคุณจะได้รับแนวคิดว่าจะดำเนินการต่อไปอย่างไร
Aditya P

1
+1 และ +1 สำหรับ @AdityaGameProgrammer เช่นกัน: การอธิบายปัญหานั้นมีประโยชน์มากแม้จะอธิบายให้คนจินตนาการ - หรือแอ็คชั่นหรือโรงงานหรืออะไรก็ตาม - มักจะทำให้เกิดความคิดใหม่เหมือนกัน (ดังที่อธิบายไว้โดยหลายคน) .
Matthew Frederick

6

หากคุณประสบปัญหามาระยะหนึ่งจิตใจของคุณจะติดตามรูปแบบที่คุณติดตั้งระหว่างการพัฒนา กล่าวอีกนัยหนึ่งคุณพัฒนา "จุดด่างดำ" ชั่วคราวสำหรับสิ่งที่อยู่นอกกรอบจิตที่คุณตั้งค่า

สละความคิดของคุณในขณะที่ช่วยเอาตัวกรองนี้ออกและช่วยให้คุณครุ่นคิดมากกว่าโดยไม่ต้องใช้ตัวกรอง

สิ่งที่ช่วยฉันได้บ่อยครั้งในกรณีเช่นนี้คืออธิบายให้คนอื่นฟังว่าทำไมมันถึงใช้งานได้ (เมื่อไม่มี) - โดยปกติครึ่งหนึ่งของคำอธิบายของคุณคุณจะรู้ว่าคุณทำผิดในเหตุผลของคุณหรือขั้นตอนใดที่คุณพลาด

นอกเหนือจากการพัฒนาตัวกรองทางจิตในระหว่างการพัฒนาสมองของคุณเป็นแบบมัลติเธรดจำนวนมากและมักจะทำให้เกิดปัญหาซึ่งเป็นส่วนหนึ่งของกระบวนการไร้สติ บางครั้งฉันใช้สิ่งนี้โดยเรียนรู้ทุกสิ่งที่ฉันสามารถทำได้เกี่ยวกับปัญหาในช่วงบ่ายจากนั้นปล่อยให้ปัญหาอยู่ที่วันหรือ 2 วันก่อนจะแก้ปัญหา


1
ฉันอ่านเกี่ยวกับศาสตราจารย์ที่จะเก็บตุ๊กตาหมีไว้บนโต๊ะด้านนอกสำนักงานของเขา ก่อนที่นักเรียนจะขอความช่วยเหลือจากพวกเขาพวกเขาต้องอธิบายปัญหาของพวกเขากับหมีก่อน
Michael K

ดูสวยคล้ายกับสิ่งที่เจฟฟ์แอดเขียนในบล็อกของเขาที่นี่blog.codinghorror.com/rubber-duck-problem-solving จริง ๆ แล้วฉันคิดว่านี่จะช่วยได้มาก กี่ครั้งที่คุณมีคำถามที่เขียนครึ่งหนึ่งของ SO แล้วจึงตระหนักถึงคำตอบ? ฉันมีเวลาค่อนข้างน้อย :)
Rémi

5

ฉันไม่ใช่นักจิตวิทยา แต่เมื่อคุณจดจ่อกับปัญหาเดียวมากเกินไป (การค้นหาจุดบกพร่อง) คุณมักจะสูญเสียมุมมองสำหรับระบบที่ใหญ่ขึ้น แต่บ่อยครั้งคำตอบนั้นไม่ได้ "ลงที่นี่" ซึ่งคุณกำลังมองหามันอยู่ แต่ในที่อื่น - คุณไม่สามารถมองเห็นจุดนั้นได้

ดังนั้นสิ่งที่คุณต้องทำคือออกจากสนามเพลาะและเริ่มดูระบบทั้งหมดจากมุมมองที่กว้างกว่าเดิมอีกครั้ง มีแนวโน้มที่จะเพิกเฉยต่อข้อเท็จจริงนี้ที่คิดว่า "ฉันรู้ว่ามันอยู่ที่นี่จริง ๆ ฉันยังไม่พบเลย" มันเกิดขึ้นกับเราทุกคนตลอดเวลา ฉันจะได้รับไปยังจุดที่ฉันรู้ว่า "ฉันไม่สามารถหาข้อผิดพลาดโดยใช้เทคนิคการแก้จุดบกพร่องที่ดีจึงมีจะเป็นที่อื่น" และยังคงไม่ได้ใช้สิ่งที่ถูกต้องและใช้เวลาพัก - สมองของมนุษย์เป็นเช่น สิ่งที่ตลก

อย่างไรก็ตามมันไม่ได้เป็นอย่างที่คุณทำไม่ว่าจะไปห้องน้ำคุยกับเพื่อนร่วมงานหรือเดินสุนัข ฉันเคยไปที่ร้านใกล้เคียงเพื่อซื้อลูกอมเมื่อฉันติดอยู่และทันทีที่ฉันใส่แจ็คเก็ตของฉันลงบนหัวของฉัน - ทุกครั้ง มันอาจเป็นเรื่องดีที่จะดื่มน้ำมาก ๆ ในระหว่างที่คุณเขียนโปรแกรม มันบังคับให้คุณหยุดพักทุกขณะแล้วไปเยี่ยมห้องน้ำและปะทะกันมีเหตุผลที่บังคับให้คุณแยกออกจากสนามเพลาะ


4

จากประสบการณ์ส่วนตัวของฉันและสิ่งที่ฉันได้เห็นในนักพัฒนารุ่นเยาว์ที่ฉันฝึกเราทุกคนเข้าถึงปัญหากับข้อสันนิษฐานและความคาดหวัง เราสมมติว่าฟังก์ชั่น x ทำงาน y เพื่อสร้างผลลัพธ์ z มันมีอยู่เสมอดังนั้นทำไมจึงต้องมีการเปลี่ยนแปลง เมื่อเรามุ่งเน้นที่ปัญหามากขึ้นเราคิดว่าเราได้ครอบคลุมพื้นฐานและปัญหาต้องซับซ้อนกว่าเดิมมากเมื่อเราพูดถึงปัญหา แนบล้ากับรายการที่เพิ่มขึ้นของสิ่งที่เราคิดว่าเป็นจริง แต่ยังไม่ได้รับการยืนยันจริงและคุณตั้งค่าตัวเองสำหรับช่วงเวลา "WTF" ที่สมบูรณ์ในภายหลัง

ในภายหลังก็ต่อเมื่อคุณตัดการเชื่อมต่อจากปัญหาที่สามารถโยนสมมติฐานและย้อนกลับไป นอกจากนี้เรามักจะแก้ไขปัญหาที่ด้านหลังของปัญหาอื่นที่เราเพิ่งแก้ไข ฉันแก้ไข A แต่มันพัง B ตอนนี้ฉันต้องแก้ไข B ดังนั้นเราจึงมีแรงผลักดันและทิศทางที่เรากำลังเดินทางอยู่ (ซึ่งทำให้สมมติฐานของเรายากที่จะยกเลิกการเชื่อมโยง) เมื่อคุณกลับไปที่การแก้ปัญหา B ปัญหา A จะไม่สดในใจของคุณอีกต่อไปเพื่อป้องกันโอกาสที่จะเกิดขึ้น คุณสามารถที่จะแก้ไขปัญหาโดยปราศจากการรับรู้ล่วงหน้าและนี่จะเปิดเส้นทางใหม่ของการคิดและมุมมองใหม่ในการมองปัญหา

ตอนนี้เมื่อใดก็ตามที่ผู้อยู่ใต้บังคับบัญชาขอความช่วยเหลือจากพวกเขาพวกเขารู้ว่าคำถามแรกที่พวกเขาต้องตอบคือ "สมมติฐานของคุณคืออะไร" แม้แต่การพยายามตอบปัญหานั้นก็สามารถช่วยลบคุณออกจากบล็อกจิตได้


3

ฉันเดาว่าสมองของคุณเช่นกล้ามเนื้อเหนื่อย การหยุดพักช่วยให้พักได้เติมออกซิเจน / น้ำมันเชื้อเพลิงและเริ่มทำงานอีกครั้ง

การออกไปเดินเล่นหรือออกกำลังกายมักเป็นวิธีที่ดีเมื่อคุณติดอยู่กับบางสิ่ง แม้ว่าคุณจะไม่มีช่วงเวลา "ยูเรก้า" แต่ก็มักจะช่วยให้คุณกลับมาและใช้วิธีการใหม่ในการแก้ปัญหา


3

ฉันชอบที่จะเรียกมันว่าเวลาฟักตัวในความคิดและปัญหา

มโนธรรมย่อยของคุณยังคงดำเนินการแก้ไขปัญหาจากการรับรู้ของคุณในแนวทางที่ไม่ใช่เชิงเส้น สิ่งนี้คล้ายกับสิ่งที่เกิดขึ้นเมื่อคุณเรียนรู้สิ่งใหม่ก่อนที่คุณจะหลับนอน จิตใจของคุณมีเวลาที่จะ 'จัดเรียงข้อมูล' ในรูปแบบที่สามารถเข้าถึงได้ด้วยความยืดหยุ่นที่มากขึ้น

นอกจากนี้อีกหนึ่งเคล็ดลับที่เป็นประโยชน์สำหรับการเอาชนะการติดอยู่ในข้อผิดพลาดที่เรียกว่าสารภาพ de-ดักฟัง นี่คือที่ที่คุณติดต่อกับบุคคลอื่นที่ไม่ทราบปัญหาและคุณเริ่มอธิบายปัญหา ฉันพบว่าบ่อยกว่านั้นไม่ได้โดยเพียงแค่พูดออกมาดัง ๆ ปัญหาการแก้ปัญหาอยู่ในใจ

ตรวจสอบลิงค์จิตเหล่านี้: เคล็ดลับความคิดสร้างสรรค์และการ งีบหลับปัญหา


2

“ เราทุกคนถูกแทงด้วยกุหลาบใน บางครั้งน่าเศร้าเมื่อเรามีสมาธิ กับความเจ็บปวดมากมายที่เราลืมเกี่ยวกับความงามของดอกกุหลาบ”


2

ฉันแก้ไขข้อบกพร่องที่สำคัญหลายอย่างในอาชีพของฉันในช่วงเวลาอาบน้ำ

ฉันไม่ใช่นักจิตวิทยา แต่ฉันเดาว่าความแตกต่างคือ:

  • นั่งอยู่หน้าคอมพิวเตอร์ฉันเห็นซอร์สโค้ดเบรกพอยต์printfเอาต์พุต ...

  • ในห้องน้ำรหัสทำงานในใจของฉัน


1

ฉันเคยพบปรากฏการณ์เดียวกันและอ้างว่ามองปัญหาด้วยมุมมองที่แตกต่างขณะที่ฉันใช้เวลาอยู่ห่างจากมัน (ยิ่งห่างออกไปมากเท่าใด

แต่มีเคล็ดลับอีกอย่างที่ฉันพบว่าทำในสิ่งเดียวกันโดยส่วนใหญ่แล้ว: อธิบายรหัสให้เพื่อนร่วมงานทราบ ไม่ใช่สำหรับพวกเขาที่จะจับแมลงของคุณแม้ว่าพวกเขาอาจ; เพื่อบังคับให้คุณย้อนกลับไปและอธิบายตรรกะของรหัสในทุกระดับที่เกี่ยวข้อง ฉันไม่เคย (แม้ว่าคำเตือนที่เป็นธรรม - ขนาดของกลุ่มตัวอย่างมี จำกัด ) สามารถแก้ไขข้อบกพร่องโดยไม่รู้ตัวซึ่งรอดพ้นจากการรักษาผู้ร่วมงานรายนี้


1

เมื่อเร็ว ๆ นี้ฉันได้ใช้เทคนิค Pomodoroขอบคุณคำแนะนำจากใครบางคนในเว็บไซต์นี้และคิดว่ามันเป็นคำตอบที่ดีสำหรับคำถามของคุณเกี่ยวกับเวลาและระยะเวลาในการพัก โดยพื้นฐานแล้วคุณได้มุ่งเน้นไปที่ปัญหาเป็นเวลา 25 นาทีตามด้วยการหยุดพักสั้น ๆ 3-5 นาทีจากนั้นพักอีกต่อไปทุก 4 รอบ พวกเขาอ้างถึงการศึกษาเพื่อสำรองข้อมูล แต่โดยทั่วไปฉันพบว่าช่วงเวลาเหล่านั้นมีประสิทธิภาพมาก

ฉันคิดว่าช่วงเวลา 25 นาทีจะทำให้ฉันไม่ได้ "อยู่ในโซน" ซึ่งผู้คนอ้างว่าใช้เวลา 15 นาทีหรือมากกว่านั้น ในทางตรงกันข้ามกับเวลานี้ฉันได้รับในโซนเกือบจะในทันที ฉันคิดว่านั่นเป็นเพราะมันง่ายกว่ามากที่จะป้องกันตัวเองจากความฟุ้งซ่านเมื่อฉันรู้ว่าฉันต้องทำให้มันเป็นเวลา 25 นาทีเท่านั้น นอกจากนี้ยังง่ายต่อการเลื่อนการขัดจังหวะภายนอกเพียง 25 นาที มันยากมากก่อนหน้านี้เมื่อฉันพยายามที่จะคาดเข็มขัด 4 ชั่วโมงก่อนอาหารกลางวัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.