ประสบการณ์ TDD

Share
ประสบการณ์ TDD
source: https://flic.kr/p/HSiD2K

มันมีบางชั่วขณะ ที่ผมอินกับ Test-Driven Development (TDD) มาก จนอยากจะแนะนำทักษะนี้ให้คนเขียนโค้ดทั่วโลกที่สนใจเลย ผมคิดว่า ทักษะนี้มีผลเยอะมาก ๆ กับความรู้ความชำนาญในการเขียนโค้ดของผมทุกวันนี้ แต่ที่ผมไม่เคยอธิบายเป็นคำพูดออกมาได้คือ ทำไมนะ?

เมื่อเช้าตอนกำลังอ่านเกี่ยวกับ remove waste ในหัวข้อ kaizen ในหนังสือ Scaling Lean & Agile Development: Thinking and Organizational Tools for Large-Scale Scrum อยู่ดี ๆ ก็คลิ๊กขึ้นมาว่าทำไม ผมถึงรู้สึกว่า TDD นั้นสำคัญขนาดนี้

ก่อนรู้จัก TDD

ก่อนที่ผมจะรู้จัก TDD ผมก็ให้ความสำคัญกับการฝึกฝนนะ ผมอ่านหนังสือในเวลาว่าง และทุก ๆ วันผมก็ไปทำงาน พยายามเขียนโค้ดอย่างดีที่สุด แต่หลายปีผ่านไป ย้อนมองดูตัวเอง ผมไม่รู้สึกว่าผมเก่งขึ้นเรื่อย ๆ ตามเวลาที่ผ่านไปเลย บางครั้งผมแซวตัวเองในใจว่า ผมไม่เหมือนคนมีประสบการณ์เขียนโค้ดมา 5 ปี เหมือนคนมีประสบการณ์ปีเดียว วน loop 5 รอบมากกว่า 55555

มองให้ลึกกว่านั้น ผมเห็นว่า หลาย ๆ อย่างที่ผมคิด ที่ผมเชื่อ มันมาจากสมมติฐาน มันเวิร์คเพราะแบบนี้มั๊ง มันพังเพราะแบบนี้มั๊ง ออกแบบแบบนี้ดีกว่ามั๊ง ไม่น่าจะทำแบบนี้เลย แต่ถามว่าผมรู้ไหมว่าความเชื่อเหล่านั้นเป็นจริง ผมลองแก้เป็นอีกแบบเพื่อ validate assumption ไหม ไม่มีเวลาหรอกครับ แค่จะทำให้ทันก็จะตายแล้ว

ผมเสียเวลาเยอะนะ กับการ debug เวลามันมีปัญหา แต่ของมันพังก็ต้องซ่อมนี่นา นี่เป็น cost ที่จำเป็น

หลังจากที่ได้รู้จัก TDD นั่งทำ programming kata ฝึกฝนในเวลาว่าง จนชำนาญพอที่จะเอาไปใช้ในการทำงานจริงได้ จนกระทั่งมีประสบการณ์ใช้ทักษะ TDD ในงานจริงมาซักปี ผมก็พบว่าผมเก่งขึ้นกว่าเดิมมาก ผมเป็นคนเขียนโค้ดที่มีประสบการณ์ 2 ปีได้แล้ว แทนที่จะเป็น 1 ปีวน 2 รอบ ผมได้เรียนรู้ว่า…

ทุกแดง คือการประหยัดเวลา debug

source: https://flic.kr/p/a18R4o

ทุกครั้งที่ผม run test แล้วเห็น test fail ผมรู้ทันทีว่าผมทำอะไรผิดไป และเพราะระยะเวลาระหว่าง action กับ feedback มันสั้นมาก มันสนับสนุนการเรียนรู้อย่างทวีคูณเลยถ้าเทียบกับวิธีเดิม

ทุกเขียวเติมความมั่นใจ

source: https://flic.kr/p/YyfQrS

ทุกครั้งที่เขียว ผมไม่ต้องเดาว่าเวิร์คมั๊ง ผมมั่นใจว่าทุก ๆ สมมติฐานที่ผมใส่ไว้ใน test case ทั้งหลาย ยังเป็นจริงอยู่ ผมไม่ได้สร้างความเข้าใจบนผืนทรายของสมมติฐานอีกต่อไป ผมสร้างองค์ความรู้จากพื้นฐานแน่น ๆ ของข้อเท็จจริง

ความมั่นใจที่ถูกเติมครั้งละนิด ๆ ราวกับหยดน้ำนี่แหละ ที่ค่อย ๆ สะสมไปหลาย ๆ ปีจนกลายเป็นทะเลสาบ เป็นออร่าแห่งความมั่นใจ เป็นฮาคิราชันย์ :D

จากสองสิ่งเล็ก ๆ ในทุกแดงและทุกเขียวนี่แหละ ที่ทำให้ผมได้เรียนรู้อย่างก้าวกระโดด วันนี้ที่ผมทำ kata ได้หลายภาษา เช่น PHP, Java, Ruby, Python, Golang, swift, kotlin, C++ เป็นต้น ส่วนหนึ่งเป็นเพราะอาชีพ technical โค้ชเปิดโอกาสให้ได้พบเจอ context ที่หลากหลาย และอีกส่วนหนึ่งก็ต้องขอบคุณ feedback loop อันรวดเร็วในพริบตาจากการทำ TDD นี่แหละ

Read more

กฎของจั๊วะ

กฎของจั๊วะ

ปีนี้ที่อายุ 44 ผม Reflect ตัวเอง และพบว่าหลักการใช้ชีวิตของผมได้มาจากหนังสือ The Seven Habits of Highly Effective People เยอะมาก ใน Habit ทั้ง 7 นี้จะมีเกร็ดเล็กเกร็ดน้อยที่ผมไปศึกษามา แล้วค่อย ๆ เติมเข้าไปเพื่อทำให้ Habit นั

By Chokchai
ขยายกิจการองค์กร

ขยายกิจการองค์กร

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

By Chokchai
คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

คนไม่ใช่สิ่งทดแทนกันได้ (People are not Fungible)

ในปี 2546 นักศึกษาคณะวิทยาศาสตร์ที่เรียนอยู่ที่ศูนย์รังสิตมาตลอดแบบผม ได้มีโอกาสเข้าเมืองไปเรียนที่ธรรมศาสตร์ ท่าพระจันทร์ เป็นครั้งแรก นอกจากจะตื่นตาตื่นใจกับของอร่อยมากมายรอบมหาวิทยาลัยแล้ว บรรยากาศที่ศูนย์ท่าพระจันทร์มันมีมนต์ขลังแปลก ๆ ตัวผมได้

By Chokchai
ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

ทำไม System Analyst ถึงไม่เชื่อ Design จากทีม

บ่อยครั้งที่ผมได้ยินน้อง ๆ ออดส์ทีม (ODT) เล่าว่า งานที่ทำอยู่ไม่ท้าทายเลย เพราะเพียงได้รับ Specification มาจาก System Analyst (SA) หรือ Tech Lead ที่เป็นพนักงาน แล้วน้องก็มีหน้าที่เขียนโค้ดตามนั้นไปอย่างเดียว บ่

By Chokchai