~/VibeHandbook
PDF ฟรี

บท 12 · 06

สาเหตุที่แท้จริง เทียบกับ อาการ

กับดักที่ล่อใจที่สุดในการดีบักคือแพตช์ที่ทำให้ข้อผิดพลาด หายไป โดยไม่ได้แก้ที่สาเหตุ ถ้า user เป็น undefined และคุณ "แก้" ด้วย if (user) { ... } ข้อผิดพลาดก็จะหยุด — แต่ตอนนี้การสมัครสมาชิกจะไม่ทำอะไรเลยแบบเงียบ ๆ ซึ่งแย่กว่าเดิม: การล่มดัง ๆ อย่างน้อยก็บอกคุณว่ามีอะไรผิดปกติ แต่ตอนนี้ไม่มีอะไรบอกอีกแล้ว คำถามที่แท้จริงคือ ทำไม user ถึงเป็น undefined ตรงนี้? บางทีการค้นหาในฐานข้อมูลอาจล้มเหลว บางทีชื่อฟิลด์อาจถูกเปลี่ยน บางทีอาจขาด await ไปตรงต้นทาง

เมื่อ AI เสนอทางแก้ ให้ถามมันว่า:

  • "นี่เป็นการแก้ที่สาเหตุ หรือแค่ซ่อนอาการ?"
  • "เหตุผล ดั้งเดิม ที่ค่านี้ผิดคืออะไร?"
  • "สาเหตุเดียวกันนี้อาจทำให้อย่างอื่นพังด้วยหรือเปล่า?"

ทางแก้ที่ตรงสาเหตุมักจะทำให้โค้ด ง่ายขึ้น หรือ ชัดเจนขึ้น ส่วนแพตช์ที่แค่แก้อาการมักจะเพิ่มการ์ด (guard), try/catch ที่กลืนข้อผิดพลาดไป หรือค่า default ที่กลบปัญหาที่แท้จริงไว้ ให้ระแวงประเภทหลังนี้ไว้เสมอ มีข้อสังเกตที่ควรเรียนรู้ไว้: ถ้าทางแก้เพิ่มโค้ดที่มีหน้าที่เดียวคือ ป้องกัน การล่ม แทนที่จะ ทำสิ่งที่ถูกต้อง คุณก็น่าจะกำลังแพตช์อาการอยู่ ทางแก้ที่แท้จริงมักจะกำจัดสถานะที่เป็นไปไม่ได้ออกไปทั้งหมด ไม่ใช่แค่รอดพ้นจากมัน

อยากได้แบบออฟไลน์?

ดาวน์โหลดหนังสือทั้งเล่มเป็น PDF หรือ EPUB — ฟรี