ประสบการณ์ TDD

ประสบการณ์ 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

Community of Practice (CoP) คืออะไร?

Community of Practice (CoP) คืออะไร?

กาลครั้งหนึ่ง… ชมรม Community of Practice (CoP) เป็นคอนเซปต์ที่ถูกกล่าวถึงใน Large Scale Scrum เทียบง่าย ๆ ก็เหมือนชมรมตอนเราเรียน ม. ปลาย นั่นแหละ ใครสนใจเรื่องอะไร ก็ไปเข้าชมรมนั้น แล้วก็ไปทำกิจกรรมร่วมกันในเรื่องที่เราสนใจ เพื่อฝึกฝนและแลกเปลี่ยนความรู้ บางทีอาจจะมี

By Chokchai
Vocal archetypes

Vocal archetypes

ผมกำลังเรียนวิธีใช้เสียงในคอร์ส Stage Academy ของ Vinh Giang ในคอร์ส ผมได้เรียนเกี่ยวกับแม่แบบของเสียง 4 รูปแบบดังนี้ Motivator ผู้จูงใจ เป้าหมายของผู้จูงใจคือการจุดประกายแรงบันดาลใจ องค์ประกอบของการใช้เสียงรูปแบบนี้คือ * เพิ่มความเร็วในการพูด * เปล่งเสี

By Chokchai
เขียน runtests script ให้เป็น executable document กันเถอะ

เขียน runtests script ให้เป็น executable document กันเถอะ

ตอนนี้แล้วผมกล่าวถึงความสำคัญของเอกสารที่สามารถ execute เพื่อตรวจสอบดูว่ามันยังจริงอยู่ไหมได้ในรูปแบบของ unit tests ซึ่งเอาไว้เก็บบริบทของปัญหาที่เรากำลังแก้ หรือเรียกง่าย ๆ ว่า requirement ตอนนี้เราจะมาพูดถึงเอกสารที่ใช้ในการ build software เช่น build script หรือแม้

By Chokchai

Pair programming 4 แบบ

เวลาผมสอนเรื่อง pair programming ปรกติผมจะเล่าคร่าว ๆ ว่า pair programming มี 2 แบบที่ผมใช้บ่อย ๆ คือ ping pong ที่ใช้เวลาคู่ pair ชำนาญพอ ๆ กัน กับ driver-navigator ที่ใช้เวลาความชำนาญต่างกัน ช่วงนี้มีโอกาสได้ pair กับสมาชิกในทีมบ่อย

By Chokchai