อย่าทำ TDD ถ้า…
ไม่นานมานี้ ขณะที่เก๋ไปสอนสกรัมที่ม. วลัยลักษณ์ ผมได้ร่วมสอนคอร์ส Test-Driven Development (TDD) โดยปอนด์กับจั๊วะ
ปรกติคอร์สนี้ราคาที่ละ 7,500 บาท/คน แต่ครั้งนี้เหลือ 399 เพราะ พี่รูฟบอกว่า
ขณะที่กำลังสอน ก็มีคำถามที่น่าสนใจมากจากผู้เรียนท่านหนึ่ง ชื่อ ภวิน ถามว่า
ภ: พี่ขาย TDD ให้ business ซื้อได้ยังไง?
จ: ถามส่วนที่เป็นโค้ชของจั๊วะ หรือถามส่วนที่เป็นโปรแกรมเมอร์ของจั๊วะ?
ส่วนที่เป็นโค้ชของจั๊วะตอบว่า ผมไม่ขาย TDD ให้ business
ผมขาย Automate Aceeptance Test ครับ โดยเฉพาะตอนที่ regression test มันเริ่มกินเวลาเป็นอาทิตย์ ตอนนั้นแค่บอกว่า ลองลงทุนทำสัก test case นึงนะ จะได้ run ซ้ำ ๆ ไปตลอด life time ของ product เลย ตอนนั้นขายง่ายมากเลย
แล้วอาทิตย์ถัดมา business มักจะมาปรึกษาว่าทำไงดี โปรแกรมเมอร์ใช้เวลาเกือบทั้งหมด นั่ง debug หาว่า Automate test ที่มีมันพังตรงไหน ไม่มีเวลาทำอย่างอื่นเลย ตอนนั้นผมค่อยบอกว่า ถ้าทำ TDD จะไม่ต้องเสียเวลา debug (กลับไปอ่านบทความที่ก่อนนี้ ชื่อ ประสบการณ์ TDD เพิ่มเติมได้นะครับ) ตอนนั้นแหละ ผมถึงจะ introduce concept TDD ให้ business รู้จัก
ส่วนที่เป็นโปรแกรมเมอร์ของจั๊วะตอบว่า อย่าทำ TDD ถ้า…
การที่คุณทำ TDD มันยังช้ากว่าการที่คุณเขียนโค้ดแบบเดิม ๆ
ผมเชื่อว่าลูกค้าเค้าจ้างผมมา perform เค้าไม่ได้จ้างผมมา practice ผมคิดว่าการที่นักกีตาร์กดคอร์ดแล้วบอดบนเวที แล้วหัวเราะแหะ ๆ ว่ากำลังฝึกกดวิธีที่ถูกหลักการอยู่มันไม่โอเค
ถ้าผมโชคดี บังเอิญได้อยู่ในที่ ๆ. business ยอมได้ของช้าลงเพราะเค้าสนับสนุนให้ผมทำ TDD เพื่อเปิดพื้นที่ให้ผมได้ฝึกฝนไปด้วย ทำงานไปด้วยได้ ผมจะซาบซึ้งมากว่าองค์กรกำลังลงทุนกับความเก่งของผม เค้าเห็นคุณค่าในตัวผมมาก ๆ และผมจะจงรักภักดีกับที่นั่นไม่ไปไหน
ถ้าผมไม่ได้โชคดีแบบนั้น ผมจะไม่น้อยใจอะไร เพราะศิลปินอาชีพไหน ๆ การฝึกฝนเป็นสิ่งที่ต้องทำนอกเวลางานอยู่แล้ว
เล่าถึงตรงนี้ผมก็อิงถึง vdo ของ Bob Martin เรื่อง “What Killed Smalltalk Could Kill Ruby, Too”
9 ปีที่แล้ว vdo ที่ยาว 1 ชั่วโมงนี้ ทำให้ผมเริ่มฝึกทำ TDD วันละชั่วโมงหลังเลิกงาน ผมซื้อ wristband มาใส่ ตามลุงบ๊อบ และเอา assignment ทั้งหมดที่ผมนึกออกตอนเรียนป. ตรีมาทำใหม่ด้วย TDD เมื่อไหร่ที่ผมแหกกฎ เช่นเขียนเทสเกินโค้ด หรือเขียนโค้ดเกินเทส หรือเขียนโค้ดไป refactor ไป ผมจะดึง wristband ดีดแขนตัวเอง (เหมือนใน vdo นาทีที่ 54) “เจ็บ ร่างกายจะได้จำ” แล้ว undo กลับไปตรงที่มันเขียวครั้งสุดท้าย แล้วเริ่มใหม่ ผมทำแบบนี้อยู่ 1 เดือน ร่างกายผมก็จำกฎ 3 ข้อของ TDD ได้เข้าเส้น
คำว่า “เข้าเส้น” เช่น ระหว่างที่สอนคอร์สที่แล้ว ขณะที่ผมกำลัง live code ให้ทุกคนดู ผมแก้โค้ด แล้วก็พลาดข้ามไปเขียนเทสเพิ่มเลย แล้วก็มีน้องกะตั๊กที่นั่งเรียนอยู่ถามว่า “พี่ไม่ run test เหรอคะ?” ผมเจ็บแปล๊บที่ข้อมือเลย ทั้ง ๆ ที่ wristband อันนั้นมันขาดไปตั้งแต่ 5 ปีก่อนแล้ว
นั่นแหละครับ ถ้าผมไม่ได้อยู่ในที่ ๆ เค้าสนับสนุนให้ผมทำ TDD ผมฝึกเองด้วยวิธีนี้ไม่เกินเดือน ผมควรจะถึงจุดที่สามารถทำ TDD ได้เร็วกว่าเขียนโค้ดแบบเดิมแล้ว และจากจุดนั้น ผมไม่ต้องไปขออนุญาตใครแล้ว เพราะถ้าผมทำงานเร็วกว่าเดิม business ไม่สนใจหรอกว่าผมทำวิธีการอะไร เค้าแค่จะบอกให้ผมทำต่อไป และผมก็จะสามารถ practice และ perform ไปพร้อม ๆ กันได้ :)
ถ้าไม่ได้ดูลุงบ๊อบเล่าวันนั้น วันนี้ผมจะเป็นยังไงนะ วันนี้กลับมาย้อนมองดูแล้วอดทึ่งไม่ได้ว่า 1 ชั่วโมงนั้นจะมีผลกระทบกับชีวิตผมขนาดนี้ ผมรู้สึกโชคดีมาก ๆ เลย ที่ได้ฟังลุงบ๊อบ ใครที่รักการเขียนโค้ด ผมแนะนำให้ลองดูวีดีโอนะ มันเจ๋งมาก
Credits
- ภวิน ที่ถามคำถามจุดประกายทำให้เกิดบล็อกนี้
- พี่รูฟ ที่ทักว่าควร capture ความคิดนี้ไว้ในบทความ
- กะตั๊กที่ทำให้นึกถึง wristband ขึ้นมา
- Bob Martin. This talk of you have me started practicing TDD. It has immensely impact my coding skill.