เรื่องที่ 34 ที่นักพัฒนาควรรู้ และ เข้าใจก็คือ Check Your Code First before Looking to Blame Others
ก่อนที่จะโทษคนอื่นหรือสิ่งอื่น ให้ลองมองตัวเองก่อนดีไหม ?
บ่อยครั้งมักพบว่า
เมื่อระบบเกิดทำงานผิดพลาดขึ้นมา
นักพัฒนาส่วนใหญ่ หรือ ทุกคน
จะไม่เชื่อว่า code ที่ตนเองพัฒนาขึ้นมามันทำงานผิดพลาด
เนื่องจากเป็นสิ่งที่ทำใจยากมาก
และเรามักจะได้ยินคำพูดและคำถาม หลังจากนั้นว่า
- ใคร deploy อะไรไปหรือเปล่า ?
- Server ทำงานผิดพลาดหรือเปล่า ?
- Network มีปัญหาหรือเปล่า ?
- Database ถูก lock หรือเปล่า ?
- เป็น bug ของ compiler หรือเปล่า ?
- OS มีปัญหา หรือ update หรือยัง ?
- ใครมาแก้ไข code หรือเปล่า ?
- ข้อมูลผิดหรือเปล่า ?
- เกิด conflict เรื่องของ version หรือเปล่า ?
- ลองที่เครื่องอื่นหรือยัง ?
- clear cache หรือยัง ?
- และอื่นๆ อีกมากมาย
คำถาม
แปลกใจไหม ที่คำถามเหล่านั้น ไม่มีเกี่ยวกับตัวเราเองเลย ?
เขาบอกว่า มันไม่แปลกหรอกนะ
เนื่องจากมันคือ Personal rule อยู่แล้ว กล่าวคือ
Bug อะไรก็ตามที่ไม่สามารถระบุได้ว่าเกิดจากอะไร ตรงไหน
สิ่งที่เราคิดก่อนเลยก็คือ สิ่งอื่นๆ ที่ไม่ใช่ตัวเราเอง
เมื่อเราตั้งสมมุติฐานแล้ว
เราก็เริ่มลงมือค้นหาปัญหา
เพื่อพิสูจน์ให้ได้ว่า มันคือปัญหาจริงๆ นะ
วิธีการต่างๆ ที่เรามักใช้งาน เช่น
- การ debug
- การแยกส่วนการทำงานออกจากกัน
- การ stub ส่วน dependency ต่างๆ
- การทดสอบส่วนต่างๆ
- ตรวจสอบ library ต่างๆ ที่ใช้งาน
- version ของสิ่งต่างๆ ที่ใช้งาน
- ลองไป run บน environment อื่นๆ หรือ เครื่องอื่นๆ
แต่ลองหยุดคิด กันก่อนไหม ?
ลองถามตัวเองสิว่า ทำไมเราต้องมานั่งหาปัญหาแบบนี้ล่ะ
ตัวเราเอง ไม่ได้ทำอะไรหรือเปล่า ?
จึงทำให้เกิดปัญหาเหล่านี้ เช่น
- ทำไมต้องมา debug ล่ะ ?
- ทำไมต้องมานั่งทดสอบล่ะ ?
- ทำไมต้องมาตรวจสอบ library ล่ะ ?
- ทำไมต้องมาตรวจสอบ version ของสิ่งต่างๆ ที่ใช้งาน ล่ะ ?
ลองตอบตัวเองก่อนสิว่า
ตัวเราเองต้องเขียนชุดการทดสอบไว้ไหม ? เช่น unit test, integration, system test ?
ชุดการทดสอบเหล่านั้น สามารถทำงานแบบอัตโนมัติได้ไหม ?
ทดสอบบ่อยไหม ? อย่างน้อยต้องทุกๆ วัน หรือ ทุกๆ การเปลี่ยนแปลงกันไหมเลย ?
ลองคิดดูหน่อยสิว่า
ถ้าคุณทดสอบสิ่งที่ทำอยู่บ่อยๆ
ถ้าคุณทดสอบทั้งระบบอยู่บ่อยๆ
ถ้าคุณ deploy ระบบงานอยู่บ่อยๆ
คุณก็จะเจอปัญหาบ่อยๆ ครั้งละเล็กๆ
จะได้ทำการแก้ไขอย่างรวดเร็ว
ลองคิดดูสิว่า คุณจะเจอปัญหาน้อยลงไปไหม ?
ตอบได้เลยว่า คุณไม่รู้หรอกนะ จนกว่าคุณจะลงมือทำด้วยตัวเอง
เพื่อหาคำตอบจากการลงมือทำ
แต่ว่า เมื่อไรคุณจะเริ่มลงมือทำล่ะ ?
หรือมัวแต่ evaluate อยู่นั่นแหละ จึงไม่ได้ลงมือทำสักที !!!
ดังนั้น ก่อนจะไปโทษสิ่งอื่นๆ ลองกลับมามองตัวเราเองก่อนนะครับ