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

การสร้างทีม

การสร้างทีม

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

By Chokchai
Long lived team

Long lived team

ทุกวันนี้สกรัมเป็นที่นิยมมากในทีมพัฒนาซอฟต์แวร์ จากประสบการณ์ที่ผมพบเจอทีมหลากหลาย มีน้อยทีมนักที่จะทราบว่า สกรัมออกแบบมาให้ทีมอยู่กันเป็น long lived team และน้อยคนยิ่งกว่านั้นที่จะเข้าใจทั้งความหมายของคำว่า long lived และคำว่าทีม Team ทีมไม่ใช่

By Chokchai
เสน่ห์ของ ScrumMaster

เสน่ห์ของ ScrumMaster

บางครั้งผมจะได้ยินคำถามเวลาไปงานแลกเปลี่ยนความรู้กับวง ScrumMaster ว่า ทำไงดี ทีมไม่เปิดใจให้ เข้าถึงทีมยาก ตอนผมนั่งในวงนั้น ผมก็ไม่รู้จะตอบยังไง เพราะผมไม่มีปัญหานี้ วันก่อน มีเพื่อนร่วมงานให้ feedback ผมว่า ผมมีพลังพิเศษ ทำให้คนไว้ใจ อยากเข้ามาปรึ

By Chokchai
ความหมายของที่ซ่อนอยู่ใน Just In Time

ความหมายของที่ซ่อนอยู่ใน Just In Time

วันหนึ่ง มีเด็กน้อยคนหนึ่ง กำลังจะขึ้นเครื่องบิน เด็กน้อยร้องไห้กระจองอแง อยู่ตรง security check เพราะว่าปลาทองที่เค้าจับมาได้ 2 ตัวนั้น ไม่สามารถเอาขึ้นเครื่องได้ เพราะมีน้ำอยู่ ยิ่งเด็กร้องนาน พ่อแม่ก็ยิ่งเครียด แล้วก็

By Chokchai