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

จักระกับระบบประสาท

จักระกับระบบประสาท

ครูณาส่งหนังสือที่ครูแปล ชื่อ Becoming super natural มาให้ ผมได้ข้อมูลที่ตื่นตาตื่นใจหลายอย่าง หลายอย่างผมก็ยังต้องใช้เวลาค่อย ๆ ทำความเข้าใจไป แต่วันนี้อยากเอาเรื่อง จักระ ทั้ง 8 จุดมาแบ่งปัน จากในหนังสือ ผมได้ลองนั

By Chokchai
Scrum master focus

Scrum master focus

ครั้งแรกที่ผมได้เรียนว่า สกรัมมาสเตอร์ควรแบ่งโฟกัสการโค้ชของตัวเองเป็น 4 เรื่องคือ 1. องค์กร 2. engineering practice 3. product owner 4. ทีม ผมอดคิดไม่ได้ว่าคนบ้าอะไรจะไปเก่งทั้ง 4 อย่างซึ่งมันใช้ความรู้และทักษะที่แตกต่างกันเหลือเกิ

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

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

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

By Chokchai