คุณรู้ว่าพวกเขาข้อผิดพลาดที่ไม่เหมาะสม ในที่ที่มันดูเหมือนว่าเครมลินเพิ่งกระโดดเข้าไปในชิปของคุณและทำบางสิ่งบางอย่างให้เลอะ คุณเดินเล่นเขียนเรื่องเรียกลุงหรือเปล่า
คุณรู้ว่าพวกเขาข้อผิดพลาดที่ไม่เหมาะสม ในที่ที่มันดูเหมือนว่าเครมลินเพิ่งกระโดดเข้าไปในชิปของคุณและทำบางสิ่งบางอย่างให้เลอะ คุณเดินเล่นเขียนเรื่องเรียกลุงหรือเปล่า
คำตอบ:
สำหรับปัญหาที่น่ากลัวจริงๆกลยุทธ์ของฉันมักจะเป็นดังนี้
การทดลองและ google พยายามแก้ปัญหาต่อไป ส่วนใหญ่เวลานี้แก้ปัญหาได้ในหนึ่งชั่วโมงหรือน้อยกว่า
ดังนั้นมันจึงไม่ได้ผล หยุดพัก. ทานกาแฟคุยเรื่องที่ไม่เกี่ยวข้องกับเพื่อนร่วมงาน ผลักปัญหาออกจากใจของคุณ เมื่อคุณมองปัญหา 5 หรือ 10 นาทีหลังจากนั้นคุณกำลังมองจากมุมมองที่แตกต่างออกไปเล็กน้อย ส่วนใหญ่เวลานี้ใช้งานได้
ในกรณีนี้มันไม่ได้ ดังนั้นใช้เวลาอีก 10 - 30 นาทีดูมัน จากนั้นโทรหาเพื่อนร่วมงาน แต่ก่อนที่คุณจะทำบันทึกบางอย่าง; คุณต้องการแสดงปัญหาทำซ้ำจากนั้นทำรายการสิ่งที่คุณได้ลองและที่สำคัญที่สุดพิสูจน์ว่าคุณได้ลองแล้ว ดังนั้นควรทำแห้งก่อน ตั้งเครื่องหมายหนังสือไว้ในรหัสให้ปิดเอกสารที่เปิดฟุ่มเฟือยอื่น ๆ ด้วยวิธีนี้คุณอาจแก้ปัญหาด้วยตัวคุณเองหรือเมื่อคุณแสดงให้เห็นถึงปัญหาที่คุณไม่ต้องเสียเวลา
ขอให้เพื่อนร่วมงานของคุณทำให้คุณพิสูจน์สมมติฐานทั้งหมดของคุณ setter นั้นถูกเรียกจริงหรือไม่? เป็นวิธีการที่คืนสิ่งที่คุณอ้างว่าจริง ๆ หรือไม่ คุณคิดว่าวัตถุนั้นไม่เป็นโมฆะ - แสดงให้พวกมันเห็นว่าไม่เป็นโมฆะ
เวลาส่วนใหญ่ที่แสดงให้เห็นถึงปัญหาจะทำให้คุณตระหนักว่าคุณยังไม่ได้ลองทุกโอกาสหรือเพื่อนร่วมงานของคุณจะเห็นความผิดพลาด
ถ้านั่นไม่ได้ผลก็ถึงเวลาที่จะจริงจัง จัดทำเอกสารสิ่งที่คุณพยายามทำสิ่งที่คุณพยายามทำแล้วและทำไมมันไม่ทำงาน ส่งอีเมลถึงเพื่อนร่วมงานของคุณทั้งหมด โพสต์ไว้บน SO ณ จุดนี้เอกสารควรเป็นคำถาม SO ที่สมบูรณ์แบบ
ในขณะที่คุณรอการตอบกลับ google google google ลองเปลี่ยนคำถามที่คุณมีทุกครั้ง เปิดแท็บขึ้นมาจำนวนหนึ่ง คุณอาจจะไม่ได้รับคำตอบจากจุดนี้ แต่คุณกำลังมองหาความคิดความเป็นไปได้วิธีต่าง ๆ ในการเข้าถึงปัญหา
ทำอย่างอื่นถ้าคุณใช้เวลา 5 ชั่วโมงกับปัญหาในการทิ้งเวลาไว้อีกวัน บางทีคุณอาจได้รับคำตอบที่มีประโยชน์ บางทีเมื่อคุณโจมตีปัญหาในวันถัดไปมันจะชัดเจน
หากไม่ได้ผลก็ใช้เวลาในการหาทางออกที่แตกต่าง บางทีคุณอาจใช้วิธีการอื่นซึ่งเป็นเทคโนโลยีที่แตกต่างออกไป บางทีคุณควรพิจารณาละทิ้งคุณลักษณะนี้ไปก่อน คุณเรียกเก็บเงินจากลูกค้าเป็นรายชั่วโมงหรือไม่ คุณทำงานให้กับ บริษัท ในแอปภายในหรือไม่ คุณต้องเพิ่มสิ่งนี้ให้กับเจ้าของและบอกพวกเขาว่า "ดูสิฉันใช้เวลาไปกับเรื่องนี้ชั่วโมงแล้วและไม่มีความคืบหน้าผลประโยชน์ต้นทุนคุ้มค่าหรือไม่" คุณไม่ต้องการไปหาเจ้านายของคุณและบอกพวกเขาว่าคุณใช้เวลา 16 ชั่วโมงในการแก้ปัญหาเท่านั้นเพื่อให้พวกเขาหันหลังและพูดว่ามันไม่ใช่สิ่งสำคัญเลยและข้ามมันไปสำหรับการเปิดตัวครั้งนี้ คุณต้องรู้ก่อนหน้านี้
และถ้ามันไม่ทำงาน ทางเลือกเดียวของคุณคือหลีกเลี่ยงปัญหาหรือค้นหาความเชี่ยวชาญในอุตสาหกรรม ถามผู้เชี่ยวชาญด้านเทคโนโลยีเกี่ยวกับตัวสั่นด้วยความตื่นเต้น ส่งอีเมลถึงผู้ให้บริการเทคโนโลยีของคุณ
เลิก. ไม่ไม่ใช่งานของคุณ! เพิ่งตื่นแล้วกลับบ้าน คุณทำเสร็จทั้งวันหรือวันหยุด 19 เท่าจากทั้งหมด 20 ครั้งเมื่อคุณกลับมาที่ปัญหาถัดไปโซลูชันจะนำเสนอตัวเองภายในหนึ่งชั่วโมง
ก่อนถึงสิบชั่วโมงฉันจะได้รับความช่วยเหลือ
หนึ่งคำtimebox
ตั้งเวลาที่ จำกัด ในการทำงานกับบางสิ่งและหากยังไม่ได้รับการแก้ไขให้ย้ายไปทำอย่างอื่นแล้วกลับมาในวันถัดไปด้วยมุมมองใหม่
ดวงตาคู่นั้นและอีกดวงตาหนึ่งมีค่ามากกว่าทุกครั้งที่คุณเสียเวลาจ้องมองอะไรบางอย่าง
ฉันจะไม่ใช้จ่ายเกินกว่า 45 นาทีถึงหนึ่งชั่วโมงเพื่อพยายามแก้ปัญหาในการนั่งเพียงครั้งเดียวซึ่งเป็นการฝ่าฝืนกฎหมายว่าด้วยผลตอบแทนที่ลดลง
อธิบายปัญหาให้คนอื่นฟัง
โดยการอธิบายปัญหาให้ผู้อื่นคุณต้องชี้แจง: นี่มักจะช่วยให้คุณเห็นวิธีแก้ปัญหา
(หนึ่งในนิตยสารคอมพิวเตอร์ระดับมืออาชีพของสหราชอาณาจักรเคยเสนอขายกระดาษแข็งขนาดเท่าชีวิตจริงของโปรแกรมเมอร์อาวุโสโดยเฉพาะเพื่อจุดประสงค์นี้)
ฉันพบว่าการนอนหลับที่มีปัญหา (บางครั้งสองสามวัน) ก็สามารถช่วยได้เช่นกัน
ฉันมีแผนสามขั้นตอน:
แต่ละสเตจคือการยกระดับหากขั้นตอนก่อนหน้าล้มเหลว มีเกือบทุกอย่างที่ฉันสามารถทำงานได้ในขั้นตอนที่ 2
นอนเหนือมัน
มิฉะนั้นโทรหาใครบางคนที่อยู่ใกล้ ๆ และขอให้เขาดูรหัสอย่างรวดเร็ว
ข้อผิดพลาดบ่อยครั้งซึ่งจะทำให้คุณใช้เวลานานในการค้นหา (เนื่องจากรหัสของคุณ) พบได้ง่ายมากโดยผู้อื่น
คุณสามารถดูว่าการลุกขึ้นเดินไปเดินมาและการคิดถึงปัญหาช่วยให้คุณค้นหาวิธีแก้ไขได้หรือไม่ ไม่ว่าคุณจะยืนหรือเดินไปเดินมาจริงๆให้ลองหนีจากคอมพิวเตอร์ขณะที่คุณกำลังคิด
ฉันมักจะทำหนึ่งในสามของ:
หนึ่งในสามคนนี้ทำงานที่ดีในการเบี่ยงเบนความสนใจของตัวเองออกจากสถานการณ์ในมือ ฉันพบว่าการรบกวนช่วยให้สมองจิตใต้สำนึกของฉันเคี้ยวบางสิ่งบางอย่างในขณะที่ หลังจากผ่านไปหนึ่งชั่วโมงหรือประมาณนี้แบมก็มีทางออก :-)
สร้างชุดการทดสอบเพื่อกำหนดเป้าหมายข้อบกพร่องที่แน่นอนและแยกมันออก
เพียงแค่กำจัดรหัสที่ดี .. ในขณะที่จำลองข้อบกพร่อง จนกว่าคุณจะกำหนดเป้าหมายชิ้นส่วนที่แน่นอนของรหัสข้อผิดพลาด จากนั้นติดตามรหัส
การอ่านที่แนะนำ: Pragmatic Programmerโดยเฉพาะตอนที่ 10: Tracer bullets
คำแนะนำทั้งหมดนี้ยอดเยี่ยมมาก อย่างไรก็ตามฉันใช้เทคนิคบ่อยครั้งที่ฉันไม่ได้กล่าวถึง ทำรายการเพื่อจัดระเบียบความคิดของคุณเกี่ยวกับปัญหา หากฉันมีปัญหาเหนียวโดยเฉพาะฉันมักจะเขียนหลายรายการเช่น: ข้อเท็จจริงข้อสันนิษฐานคำถามอาการ ฯลฯ ฉันพบว่าบ่อยครั้งในกระบวนการจัดระเบียบสิ่งต่าง ๆ ด้วยวิธีนี้ฉันค้นพบสมมติฐานที่ฉันไม่ได้ตระหนักถึงฉัน ( บ่อยครั้งที่คำถามนั้นไม่ถูกต้อง) คำถามที่ฉันไม่ทราบว่าต้องถามคำถามวิธีเรียงลำดับอื่น ๆ ที่ฉันสามารถตรวจสอบได้ ฯลฯ
แก้ไข:
คำตอบสั้น ๆ :
ถาม: คุณจัดการข้อผิดพลาดที่แปลกประหลาดจริง ๆ ที่ทำให้คุณงงงวยนานกว่า 10 ชั่วโมงได้อย่างไร?
ตอบ: ให้แน่ใจว่าสิ่งเหล่านั้นจะไม่เกิดขึ้น: เข้าใจการออกแบบของคุณรู้รหัสของคุณเรียนรู้วิธีใช้ดีบักเกอร์ของคุณ
คำอธิบาย:
"ในที่ที่ดูเหมือนว่าเครมลินเพิ่งกระโดดลงไปลึกเข้าไปในชิปของคุณและทำอะไรซักอย่าง"
สิ่งนี้ไม่ควรเกิดขึ้น หากเป็นรหัสของคุณคุณควรมีความคิดที่ดีเกี่ยวกับสิ่งที่ทำให้เกิดข้อผิดพลาดก่อนที่จะพยายามแก้ไข
ยิ่งเมื่อคุณเขียนรหัสของคุณคุณควรรู้อยู่แล้วว่าทำไมและทำไมจึงน่าจะล้มเหลว
ต้องบอกว่า - ถามเพื่อน, โพสต์บน SO, retracing และย้อนกลับขั้นตอนของคุณและหยุดพัก - คำแนะนำทั้งหมดที่กล่าวถึงข้างต้นจะช่วย
อีกอย่างคือคุณต้องรู้จักเครื่องมือของคุณ - ชุดเครื่องมือการดีบัก การบันทึกข้อความที่จุดต้องสงสัยในรหัสของคุณตรวจสอบสแต็คการโทรอย่างระมัดระวังโดยใช้เบรกพอยต์แบบมีเงื่อนไขและนาฬิกา ฯลฯ ทักษะการแก้ไขข้อบกพร่องไม่ใช่พิเศษ - เป็นส่วนหนึ่งของการเขียนโปรแกรม
ฉันมีปัญหาที่คล้ายคลึงกันเกิดความเสียหายกับหน่วยความจำที่ชัดเจนใน Objective-C ซึ่งฉันพยายามมาหลายชั่วโมง แต่จากนั้นฉันและเพื่อนร่วมงานของฉันเพิ่งออกไปเดินเล่นเพื่อทานอาหารกลางวันและฉันอธิบายปัญหา (และสิ่งหนึ่งที่เกี่ยวข้องกับการกำจัดวัตถุในวิธีการเริ่มต้น) และอธิบายปัญหาทั้งหมดให้กับตัวเอง
(รายละเอียดที่น่าสนใจ: โดยทั่วไปฉันเริ่มต้นและส่งคืนวัตถุไปยังสิ่งอื่นนอกเหนือจากตัวเองดังนั้นจึงมีสอง allocs แต่มีเพียงหนึ่งวัตถุที่ถูกส่งกลับหน่วยความจำขยับและบ้าคลั่งล่มและดีบักไม่ทราบว่าจะทำอย่างไรกับ มันทั้ง)
อาบน้ำ.
แฟนๆ ของRodney McKay ?
อย่างจริงจัง แต่ถ้ามีหนึ่งคนธรรมดาสามัญในหมู่ทุกคำตอบเหล่านี้ก็จะหยุดพักและทำอย่างอื่น
ฉันชอบที่จะคิดว่ามันเป็นการผลักไสปัญหาให้กับจิตใต้สำนึกของคุณ แม้ว่าเราจะไม่รู้จักมิฉะนั้นจิตใจของเรา (ดูเหมือนจะ) ยังคงทำงานในปัญหาที่เกิดขึ้นแม้ในขณะที่เรากำลังทำบางสิ่งบางอย่างอื่นเช่นการอาบน้ำ
ทีละขั้นตอนลงไปในการชุมนุม ใครเรียกว่าอะไรจุดพักในการเข้าถึงหน่วยความจำ ที่มักจะจับข้อบกพร่องอย่างรวดเร็วจริง
ถ้าไม่เดินเล่น
การรวมกันของสิ่งเหล่านี้:
หลีกหนีจากมันซักพักหนึ่งเพื่อที่จะได้นั่งบนหลังเตา นอนหลับพักผ่อนกินเดินอะไรก็ได้
ตรวจสอบปัญหาเพิ่มเติมมีอะไรอีกที่ทำผิดมีอาการอะไรอีกบ้างที่คุณสามารถพบได้
วิจัยปัญหาดูว่าคุณสามารถค้นหาอะไร อย่าลืมลองใช้คำหลักอื่น
ลองอะไรที่แตกต่างกัน หลีกเลี่ยง เทคนิคการดีบักที่แตกต่างกัน เครื่องมือตรวจสอบ คอมพิวเตอร์เครื่องอื่น
พูดคุยกับใครสักคน แม้ว่าพวกเขาจะไม่สามารถช่วยเหลือหรือไม่ใช่โปรแกรมเมอร์ แต่บางครั้งการพูดคุยก็จะทำให้หลอดไฟความคิดนั้นเกิดขึ้น
เริ่มต้นใหม่! หากเหมาะสมให้ลองรีสตาร์ทคอมพิวเตอร์เซิร์ฟเวอร์ ฯลฯ หากไม่มีอะไรอื่นคุณสามารถใช้เวลาคิด
สอบถาม StackOverflow! เราพร้อมให้ความช่วยเหลือ
ฉันไม่ชอบคำตอบที่ได้รับการโหวตมากที่สุดเพราะแม้ว่าบางครั้งก็ใช้งานได้บางครั้งคุณก็ต้องคิดออกในวันเดียวกันดังนั้นสิ่งที่ฉันแนะนำในลำดับนี้คือ:
ยืนยันว่าไม่เพียงเกิดขึ้นกับคุณ สิ่งนี้สามารถช่วยคุณประหยัดเวลาได้มาก บางทีคุณอาจถอนการติดตั้งองค์ประกอบที่จำเป็นหรือทำการเปลี่ยนแปลงในสภาพแวดล้อมของคุณและข้อยกเว้นจะถูกกลืนบางส่วนในรหัสของคุณ หากเกิดขึ้นเฉพาะคุณฉันจะใช้เครื่องมือเปรียบเทียบสภาพแวดล้อม ฉันเพิ่งอ่านเกี่ยวกับซอฟต์แวร์ที่เรียกว่า Envy ซึ่งอนุญาตให้คุณทำเช่นนั้นแม้ว่าจะไม่ใช่ฟรีแวร์ แต่มีราคา 10 USD
เกิดขึ้นกับทุกคน? ไม่เป็นไรตอนนี้ดูประวัติบนโค้ดและตรวจสอบการเปลี่ยนแปลงล่าสุดที่อาจทำให้เกิดข้อผิดพลาดไม่ว่าโดยตรงหรือโดยอ้อม
ไม่มีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้? หากเป็นข้อผิดพลาดที่เฉพาะเจาะจงมาก (ข้อยกเว้น) ให้เรียก 'stackoverflow' ตอนนี้ไม่ได้ฟังดูดีกว่า 'google it' แต่ฉันรู้สึกดีที่จะบอกว่าฉันค้นหา stackoverflow ครั้งแรกสำหรับการวิจัยการเขียนโปรแกรมมากกว่า google หากเป็นปัญหาที่ทราบกันดีมีโอกาสมากที่คุณจะพบวิธีแก้ปัญหาที่นี่ ถ้าไม่เช่นนั้นโพสต์คำถามบนไซต์ stackexchange ที่เกี่ยวข้อง คุณอาจได้รับคำตอบที่รวดเร็วมากหรือไม่เช่นนั้นคำถามของคุณก็จะอยู่ที่นั่นในขณะที่คุณทำการค้นคว้าเพิ่มเติม นั่นเป็นประโยชน์
หากคุณไม่พบคำตอบออนไลน์หรือไม่ใช่ข้อผิดพลาดทั่วไปให้ทำตามขั้นตอนของรหัสทีละขั้นตอนตรวจสอบว่าผลลัพธ์ที่ได้จากแต่ละขั้นตอนเหมาะสมกับผลลัพธ์ที่คุณคาดหวังหรือไม่ เริ่มต้นจนจบในแต่ละวิธีและจากล่างขึ้นบนในโซลูชันที่ทำเป็นชั้น (เช่นหากคุณกำลังแก้ไขปัญหาประสิทธิภาพให้เริ่มต้นด้วยรหัสที่ดึงข้อมูลมาไม่ควรเริ่มต้นใน UI หากคุณสามารถระบุได้อย่างรวดเร็วว่าขั้นตอนแรกเป็นปัญหา)
หากหลังจากผ่านไปสองสามครั้งคุณยังไม่พบสิ่งผิดปกติให้โทรหาใครบางคนเพื่อพูดคุยเกี่ยวกับเรื่องนี้ อย่างที่ใครบางคนพูดไปแล้วการพูดเรื่องนี้ออกมาดัง ๆ จะทำให้หลอดไฟสว่างขึ้นได้ บวกกับการเขียนโปรแกรมคู่มีประโยชน์จริงๆ
เมื่อมาถึงจุดนี้ถ้าเป็นไปได้ให้เดินออกไปสักพักหรือทั้งวัน ฉันอ่านทวีตที่แท้จริงมากเมื่อวานนี้ที่พูดว่า "ฉันเข้านอนคิดว่า 'วิธีการที่ fck' และตื่นขึ้นมาคิด 'แต่แน่นอน'" จริงอยู่
หากคุณยังไม่มีคำตอบฉันกล้าพูดได้ว่าคุณสามารถลองปรับเปลี่ยนเป็นงาน / วิธี / ฟังก์ชั่นเล็ก ๆ ได้ เฮนรี่ฟอร์ดพูดบางอย่างเช่น 'ไม่มีงานที่ซับซ้อนจนไม่สามารถทำได้โดยการแบ่งงานให้เล็กลง' ณ จุดนี้หากวิธีการแก้ปัญหานั้นซับซ้อนเกินไปและคุณไม่สามารถหาคำตอบได้ด้วยตัวเองหรือด้วยความช่วยเหลือของคนอื่น แม้ว่าคุณจะไม่ได้รับการยอมรับ แต่ก็สามารถช่วยคุณหาเหตุผลได้
เพิ่มการใช้เครื่องมือลงในรหัสของคุณ
ทวีตเกี่ยวกับมัน ??
คุณต้องก้าวถอยหลัง คติประจำใจของฉันคือ 'หากปัญหายากเกินไปคุณจะแก้ไขปัญหาที่ผิด' สมมติฐานของคุณคืออะไร อย่าไว้ใจอะไรเลย
ข้อพิสูจน์ถึงสิ่งนี้คือ 'ปัญหาที่น่าประหลาดยิ่งขึ้น จุดแข็งของคอมพิวเตอร์คือตรรกะของคอมพิวเตอร์ดังนั้นคุณจึงไม่สามารถชนะด้วยเหตุผล คุณมีสมองและต้องคิดออก
ในยุคปัจจุบันมีสิ่งอื่น ๆ อีกมากมายที่โต้ตอบกับระบบ - ไฟร์วอลล์, AV, สปายแวร์, การอัปเดตอัตโนมัติที่เกิดขึ้นทุกคืน - คุณต้องจัดการกับเป้าหมายที่เคลื่อนไหว
Google มัน สแต็คโอเวอร์โฟลว์ โพสต์ไว้ในฟอรัม โดยทั่วไปหากคุณไม่สามารถแก้ปัญหาได้เพียงลำพังให้คนอื่นช่วย