เหตุผลอันชั่วร้าย ที่เราแก้ปัญหาทาง Programming ไม่ได้!!!
ผมพบว่าบางครั้งเราไม่สามารถแก้ปัญหาที่เรา “ควรจะแก้ได้” ในเวลาอันสั้น ให้สำเร็จเสร็จสิ้นได้ตามความคิด หรือความคาดหวังที่วางเอาไว้
เหตุผลนานาๆ นับประการมันจะเกิดขึ้นในกระแสความคิดของเรามากมาย เช่น…
“เราอ่อน”
“มันยาก”
“สงสัยเหนื่อยไป”
“คิดไม่ออกจริงๆหว่ะ”
“อะไรวะ”
แต่ในความเป็นจริง บางครั้งปัญหานี้ไม่ได้เกิดขึ้นกับ Programmer หน้าใหม่เสมอไป แต่กลับกัน ปัญหาที่ผมกำลังพูดถึงอยู่นี้ มัก…
“เกิดขึ้นบ่อย กับ Programmer รุ่นเก๋า ทั้งในด้านเทคนิค และประสบการณ์”
เหตุผลใหญ่ที่ ผมพอสามารถจะสรุปออกมาได้ (ไม่รวมความขี้เกียจคิดนะครับ)
คือ เราคิดเยอะมากจนเกินไป พยายามคิดแต่จะหาวิธีการที่ดีที่สุดออกมาตั้งแต่ครั้งแรกที่แก้ปัญหาเลย นั่นแหละครับ “ปัญหา”!!!
ดังคำกล่าวของท่าน Yoda of Silicon Valley, Prof. Donald Knute กล่าวไว้ว่า
“Premature optimization is the root of all evil.”
ซึ่งมีความหมายอย่างตรงไปตรงมาว่า…
“ การทำ Optimization หรือ การทำให้ประสิทธิภาพมันดีขึ้นก่อนที่จะสามารถแก้ปัญหาได้ เป็นรากฐานของความชั่วร้ายทั้งปวง”
ผมมองว่าคำกล่าวนี้เป็นจริงอย่างไม่มีข้อโต้แย้ง เพราะมองในมุมมองปกติธรรมดาเราจะพบว่าปัญหาที่แก้เสร็จสิ้นแล้ว ต่างหากที่ต้องการวิธีการแก้ปัญหาให้ดีขึ้น มีประสิทธิภาพมากขึ้น ไวขึ้น
แต่ไม่ใช่กับปัญหาที่ยังไม่สามารถแก้ไข หรือหาผลลัพท์ได้ ดังนั้นแล้ว Premature optimization จึงมักเป็น Infinite Traps ที่ล่อลวง Programmer ทุกยุค ทุกสมัยให้มาติดกับมันอย่างดิ้นหลุดได้ยาก
Solution
- Simple solution but it works!
- Then, find many ways to optimize the solution.
เพราะฉะนั้น วิธีการแก้บ่วงนี้ ที่ง่ายที่สุด คือ แก้ปัญหาต่างๆ ด้วยวิธีการที่ง่ายที่สุดให้ได้ก่อนเสมอ ถึงแม้ว่าจะต้อง Brute-force ก็ตาม แล้วจึงหาวิธีที่ดีขึ้นต่อไป แต่ก็ต้องไม่ลืมว่า Brute-force ก็เป็นหนึ่งในเทคนิคที่เรามีไว้ใช้แก้ปัญหานะครับบบ ^^
เราไม่ได้ต้องการวิธีการแก้ปัญหา ( Algorithms ) ที่ยุ่งยาก และซับซ้อน การเลือกใช้วิธีที่ยาก แทนวิธีที่ง่าย และมันไม่เหมาะสมกับรูปแบบของปัญหาเอาซะเลย นั่นแหละ ปัญหา
Credit illustration:
https://www.i-programmer.info/news/112-theory/12396-yodas-donald-knuth-xmas-lecture.html