| Tip 36 | You Can't Write Perfect Software |
|---|
เจ็บไหม? ไม่ควรหรอกนะ ยอมรับมันเป็นสัจธรรมของชีวิตเถอะ โอบกอดมันไว้ ฉลองให้มันเลย เพราะ Perfect Software น่ะมันไม่มีจริงหรอก ไม่มีใครในประวัติศาสตร์ของวงการคอมพิวเตอร์ที่เคยเขียน Software ที่สมบูรณ์แบบได้ และมันก็ไม่น่าจะเป็นคุณที่เป็นคนแรกด้วย และถ้าคุณไม่ยอมรับความจริงข้อนี้ คุณก็คงจะเสียเวลาและพลังงานไปกับการไล่ตามความฝันที่เป็นไปไม่ได้
ดังนั้น เมื่อต้องเจอกับความจริงอันน่าหดหู่นี้ แล้ว Pragmatic Programmer จะเปลี่ยนมันให้กลายเป็นข้อได้เปรียบได้อย่างไร? นั่นคือหัวข้อที่เราจะคุยกันในบทนี้
ทุกคนต่างก็คิดว่าตัวเองคือคนขับรถที่ดีคนเดียวในโลก ส่วนคนอื่นน่ะกำลังจะมาชนเรา ขับฝ่าป้ายหยุด เลี้ยวรถไม่มีสัญญาณไฟ มัวแต่พิมพ์มือถือ และชอบทำอะไรไม่ได้มาตรฐานของเราเอาเสียเลย เราจึงต้องขับรถแบบระแวดระวัง (Defensive Driving) คอยมองหาปัญหาที่อาจเกิดขึ้น คาดการณ์สิ่งไม่คาดฝัน และไม่เคยพาตัวเองไปอยู่ในจุดที่จะหาทางออกไม่ได้
การเปรียบเทียบกับการเขียนโค้ดนั้นค่อนข้างชัดเจน เราต้องทำงานร่วมกับ Code ของคนอื่นอยู่ตลอด—ซึ่งอาจจะไม่ได้มาตรฐานสูงส่งของเรา—และต้องจัดการกับ Inputs ที่ไม่รู้ว่าถูกต้องหรือไม่ ดังนั้นเราจึงถูกสอนให้เขียน Code แบบ Defensive ถ้ามีข้อสงสัย เราจะ Validate ข้อมูลทั้งหมดที่เราได้รับ เราใช้ Assertions เพื่อตรวจหาข้อมูลที่ผิดปกติ และไม่ไว้ใจข้อมูลที่อาจมาจากผู้โจมตีหรือพวกป่วน เราตรวจสอบความสอดคล้อง ใส่ Constraints ใน Database Columns และโดยรวมแล้วเราก็รู้สึกดีกับตัวเอง
แต่ Pragmatic Programmers ก้าวไปไกลกว่านั้น พวกเขาไม่ไว้ใจตัวเองด้วยซ้ำ การรู้ว่าไม่มีใครเขียน Perfect Code ได้ รวมถึงตัวเองด้วย ทำให้ Pragmatic Programmers สร้างแนวป้องกันเพื่อรับมือกับความผิดพลาดของตัวเอง เราอธิบายมาตรการป้องกันแรกใน Topic 23, _Design by Contract_: ฝั่ง Client และ Supplier ต้องตกลงกันเรื่องสิทธิและความรับผิดชอบ
ใน Topic 24, _Dead Programs Tell No Lies_, เราต้องการให้แน่ใจว่าเราไม่ได้สร้างความเสียหายในขณะที่เรากำลังแก้ Bugs อยู่ ดังนั้นเราจึงพยายามตรวจสอบบ่อยๆ และให้ Program ยุติการทำงานหากมีอะไรผิดพลาดไป
Topic 25, _Assertive Programming_ อธิบายวิธีการตรวจสอบระหว่างทางแบบง่ายๆ—เขียน Code ที่จะตรวจสอบ (Verify) ข้อสมมติฐานของคุณอยู่เสมอ
เมื่อ Program ของคุณเริ่มมีความซับซ้อนและ Dynamic มากขึ้น คุณจะพบว่าต้องคอยจัดการกับทรัพยากรระบบ (System Resources)—Memory, Files, Devices และอื่นๆ ใน Topic 26, _How to Balance Resources_, เราจะแนะนำวิธีที่จะช่วยให้คุณไม่พลาดทำอะไรหล่น
และที่สำคัญที่สุด เราต้องก้าวไปทีละก้าวเสมอ ดังที่อธิบายไว้ใน Topic 27, _Don't Outrun Your Headlights_, เพื่อให้แน่ใจว่าเราจะไม่ก้าวพลาดตกหน้าผาไป
ในโลกของระบบที่ไม่ได้สมบูรณ์แบบ (Imperfect Systems), ตารางงานที่บีบคั้น, Tools ที่น่าขำ และ Requirements ที่เป็นไปไม่ได้ มาเล่นให้ปลอดภัยกันเถอะ อย่างที่ Woody Allen เคยกล่าวไว้ว่า "เมื่อทุกคนจ้องจะเล่นงานคุณ ความระแวง (Paranoia) ก็นับเป็นการคิดที่ดี"