Saturday, February 1, 2014

Taxi สิงคโปร์


วันนี้มีโอกาสได้ไปร่วมงาน NJUG (Narisa Java User Group) Meetup #7 จริงๆเราก็ไม่ได้อยู่ใน Group นี้ตั้งแต่แรกหรอก แต่เห็นมี Event ใน Facebook แล้วเห็นคนที่จะไปร่วมงานก็เป็นพี่ๆที่เรารู้จักซะส่วนใหญ่ ก็เลยถือโอกาสขอเข้าไป Join เลยละกัน

มีเรื่องนึงที่คุยกันแล้วเรารู้สึกชอบและอยากแบ่งปันมากจนต้องเอามาเขียน blog ก็คือเรื่อง "Taxi สิงคโปร์" เรื่องนี้เริ่มจากประโยคที่เราพูดว่า 
"มีคนบอกว่า เขียน TDD (Test Driven Development) ไปทำไม เสียเวลาจะตาย"
เพียงเท่านั้นแหล่ะ พี่รูฟ และ พี่ดีน ก็ร้อง "อ่าาาาาาาาห์" ออกมาพร้อมกัน แล้วพี่รูฟก็บอกให้พี่ดีน เล่าเรื่อง Taxi สิงคโปร์ให้ฟัง...


จากรูปข้างบนนี้ จะเห็นว่ามีจุดอยู่ 2 จุด คือ จุด start และจุด finish เปรียบเหมือนกับจุดเริ่มต้นกับปลายทางบนถนนที่สิงคโปร์ ซึ่งระหว่าง 2 จุดนี้ มีถนนอยู่ 2 เส้นทางให้เลือกเดินทาง
  • เส้นทางแรก (เส้นบน) จำกัดความเร็วอยู่ที่ 60 กิโลเมตรต่อชั่วโมง
  • เส้นทางที่ 2 (เส้นล่าง) ไม่จำกัดความเร็ว แต่มีไฟแดงอยู่เป็นระยะๆ
เรื่องมันมีอยู่ว่า มี programmer อยู่คนนึง จะไปทำงานตอนเช้า แต่เพราะค่าที่จอดรถที่สิงคโปร์มันแพง เค้าก็เลยต้องนั่ง taxi ไปทำงานทุกวัน และด้วยความที่เป็น programmer สุดขยัน เค้าก็อยากเขียนโปรแกรมขณะอยู่บนรถ taxi ด้วย ดังนั้น เพื่อให้การเขียนโปรแกรมเป็นไปอย่างราบรื่น เขาก็มักจะบอก taxi ตอนขึ้นรถว่า "ไปทางที่จำกัดความเร็วนะ จะได้เขียน code นิ่งๆ" หลังจากนั้น programmer คนนั้นก็มักจะก้มหน้าก้มตาเขียนโปรแกรมไปเรื่อยๆ จนเวลาผ่านไปซักแป้ป เขาเงยหน้าขึ้นมาจากคอม ก็พบว่าคนขับ taxi ไปทางที่มีไฟแดง!? programmer คนนั้นก็งง ว่าทำไมไม่ไปตามทางที่เขาบอกนะ ก็เลยเอาใหม่ วันต่อมาก็ทำเหมือนเดิม บอก taxi ให้ไปทางจำกัดความเร็วนะ แต่ผลสุดท้าย taxi ก็ยังเลือกไปทางที่มีไฟแดงอยู่ดี เป็นแบบนี้ทุกวันๆ..

มีใครรู้ไหมว่าเพราะอะไร...?

ก็เพราะว่า คนขับ Taxi "เสพย์ติดความเร็ว" หน่ะสิ.. 
คนขับ taxi มักจะรู้สึกดีทุกครั้ง เมื่อได้เหยียบคันเร่งจนสุด เพื่อให้รถได้วิ่งไปด้วยความเร็ว speed สูงๆ พอเจอไฟแดงก็เหยียบเบรก เอี๊ยดดดดด! เบรกเสร็จแล้วก็ฟินที่ได้เหยียบคันเร่ง พร้อมกับเตรียมตัวฟินอีกครั้งเมื่อไฟกำลังจะเขียว

เรื่องนี้บอกอะไรกับเรา...?

..พวกเราชาว programmer ก็เหมือนคนขับ taxi นั่นแหล่ะ "เสพย์ติดความเร็วในการเขียน code" ขอแค่เริ่มเปิดคอมมา แล้วได้เขียน code เลยก็ฟินแล้ว โดยที่ไม่ได้ตระหนักว่าผลสุดท้ายมันจะออกมาดีหรือไม่ดี ขอแค่มันเสร็จได้อย่างที่ต้องการและรวดเร็วก็มีความสุข

เหตุผลนึงที่ programmer มักจะไม่ตระหนักถึงวิธีการ คิดแค่ว่าอยากให้เสร็จเร็วๆอย่างเดียว ก็คือ programmer มักจะคิดว่าเพราะงานของเขาคือเขียน code ส่วนเรื่อง test ไม่ใช่เรื่องของเขา เรื่อง debug ก็ไม่เรียกว่าเป็นงาน ดังนั้น ใครๆก็มักจะอยากจบงานของตัวเองให้เร็วที่สุด โดยไม่ได้มองดูภาพรวมเลยว่า หาก programmer เขียน code และ test ไปพร้อมๆกัน แม้ว่างานมันจะออกมาช้ากว่าการที่รีบๆ code ให้เสร็จ แต่เมื่อลองดูระยะยาวและมองไปในอนาคตแล้ว หากถึงเวลาที่ต้องแก้หรือต้องเพิ่มอะไรเข้าไป เราก็สามารถแก้ได้อย่างมั่นใจว่าจะไม่ไปกระทบกับของเก่าและของที่มีอยู่จะไม่พัง

เห็นรึยังหล่ะ ว่าเวลาที่ใช้ทั้งหมด มันน้อยกว่าเวลาที่ต้องใช้ของแบบแรกเห็นๆ!!



"ทำงานเป็น Team ถ้าจะเขียน TDD คนเดียวก็ได้ แต่ทำๆไปแล้วมันจะเหนื่อย มันจะหมดแรง ถ้าอยากให้คนอื่นทำ TDD ด้วย ก็ต้องทำให้เขาเห็นก่อน ว่าไม่ทำแล้วมันส่งผลเสียยังไง ทำแล้วจะดีขึ้นยังไง set goal ร่วมกันให้ได้ ค่อยๆทำไปทีละนิด เดี๋ยวมันก็ดีเอง :) "