2 คะแนน โดย GN⁺ 2025-01-14 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทวิจารณ์ของ David A. Wheeler

    • "Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems" ของ David J. Agans ได้รับการยกย่องว่าเป็นหนังสือการดีบักที่จำเป็นสำหรับนักพัฒนาซอฟต์แวร์และฮาร์ดแวร์
    • หนังสือเล่มนี้อธิบายหลักการพื้นฐานในการค้นหาและแก้ไขบั๊ก แทนที่จะเน้นเทคนิคเฉพาะทาง จึงมีประโยชน์อย่างยิ่งสำหรับนักพัฒนาระดับเริ่มต้นและระดับกลาง
    • หนังสือจัดโครงสร้างโดยยึด "กฎทั้งเก้าข้อ" เป็นแกนหลัก พร้อมคำอธิบายและวิธีนำไปใช้สำหรับแต่ละข้อ
  • กฎทั้งเก้าข้อ

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

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

    • หนังสือเล่มนี้มีประโยชน์สำหรับการเรียนรู้หรือทบทวนหลักการพื้นฐานของการดีบัก และเป็นประโยชน์ทั้งกับผู้เริ่มต้นและผู้เชี่ยวชาญ
    • David A. Wheeler แนะนำหนังสือเล่มนี้อย่างยิ่ง และเน้นย้ำถึงความสำคัญของหลักการพื้นฐาน

1 ความคิดเห็น

 
GN⁺ 2025-01-14
ความเห็นบน Hacker News
  • แม้จะมีแรงยั่วยวนให้แก้โค้ดที่มีบั๊ก แต่การทำโค้ดที่พังอยู่ให้พังหนักกว่าเดิมนั้นง่ายกว่าการซ่อมให้หาย การเริ่มจากตัวอย่างที่ทำงานได้ขนาดเล็กที่สุดแบบตัวอย่างไฟคริสต์มาสเป็นวิธีที่มีประสิทธิภาพในการหาปัญหา

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

  • git bisect มีประโยชน์ในการหาคอมมิตที่ทำให้เกิดปัญหาจากหลายคอมมิต โดยเฉพาะในโค้ดเบสขนาดใหญ่ที่ต้องการหาต้นตอของปัญหาอย่างรวดเร็ว

  • การเข้าใจระบบเป็นเรื่องสำคัญ แต่การอ่านคู่มือทั้งหมดเป็นเรื่องไม่สมจริง จึงต้องใช้แนวทางที่ปฏิบัติได้จริง

  • การแก้ไขไฟล์ที่ถูกต้องบนเครื่องที่ถูกต้องเป็นสิ่งสำคัญ

  • หนังสือที่แนะนำเพื่อฝึกแนวคิดการแก้ปัญหา:

    • "The Martian" by Andy Weir
    • "Zen and the Art of Motorcycle Maintenance"
    • "The Three-Body Problem"
    • "To Engineer Is Human" by Henry Petroski
    • "Surely You're Joking, Mr. Feynman!"
  • กฎเพิ่มเติม:

    • "จงสงสัยว่ามันเป็นความผิดของตัวเอง" ควรสงสัยการเปลี่ยนโค้ดของตัวเองก่อน
    • "เมื่อพบบั๊กแล้ว ให้มองหาปัญหาอื่นที่เกี่ยวข้องด้วย" ปัญหาประเภทเดียวกันอาจเกิดขึ้นในที่อื่นด้วย
    • "ปรับให้เหมาะกับผู้ใช้และโปรแกรมเมอร์ผู้ดูแลรักษาเป็นอันดับแรก"
  • ควรเพิ่มบั๊กเข้าไปเป็นเทสต์ใน CI เพื่อป้องกัน regression และควรตรวจสอบว่า CI ล้มเหลวก่อนแก้และผ่านหลังแก้หรือไม่

  • หลังดีบักเสร็จ งานยังไม่จบ ต้องถามสามคำถามกับทุกบั๊ก:

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