อย่าทำ TDD ถ้า…

อย่าทำ 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.

Read more

เวลาอู้

เวลาอู้

ผมกำลังอ่านหนังสือ Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency ของ Tom DeMarco ซึ่งได้ให้มุมมองใหม่เกี่ยวกับ Slack time หรือเวลาอู้งานกับผม แต่ก่อนจะเล่าว่าผมเห็นอะไร ผมของแบ่งปันมุมมองเวลาผมดูองค์กรก่อนนะ สายการผลิต คนในองค์กรมารวมตั

By Chokchai
สุดยอดทีม (Extraordinary Team)

สุดยอดทีม (Extraordinary Team)

ท้ายหนังสือ Teamwork is an Individual Skill ของ Christopher Avery ได้กล่าวถึงสมการของสุดยอดทีมไว้ดังนี้ครับ Extraordinary Collaboration = Exchange + Expansion + Integrity ผมใช้เวลาอ่านตรงนี้ และอีก 3 บทที่ขยายความเรื่อง Exchange, Expansion และ Integrity อยู่เกือบ 2 สัปดาห์กว่าจะพอเข้าใจมันอย่

By Chokchai
ไล่ตามความฝัน กับ ดูแลตัวเอง

ไล่ตามความฝัน กับ ดูแลตัวเอง

ไล่ตามความฝัน กับ ดูแลตัวเอง ก่อนหน้านี้ผมเคยเล่าถึงขั้วตรงข้าม (Polarity) ระหว่างความคล่องตัวกับความสร้างสรรค์ไปแล้ว ครั้งนี้ผมมองว่า “การไล่ตามความฝัน” และ “การดูแลตัวเอง” (เปรียบเสมือน นักรบ กับ นักรัก) ก็เป็นแสงและเงาของกันและกั

By Chokchai
สกรัมเป็น Empirical process

สกรัมเป็น Empirical process

กระบวนการแก้ปัญหาในโลกแบ่งเป็น 2 แบบ แบบแรกคือ Defined process ซึ่งเป็นกระบวนการที่มีขั้นมีตอนชัดเจน เช่น Waterfall เป็นต้น ส่วนแบบที่สองคือ Empirical process หรือ "กระบวนการเชิงประจักษ์" ซึ่งเป็นการทำไปแล้วก็ปรับไปเรื่อย ๆ สกรัมเป็นแบบหลัง

By Chokchai