คำว่า Coding Dojo ก่อนอื่นเราลองแยกคำออกเป็นสองคำก่อน คือ Coding และ Dojo
- Coding ความหมายนี้ตรงตัว หมายถึงการเขียนโค้ด (Code) หรือเขียนโปรแกรมนั้นแหล่ะครับ
- Dojo คำนี้ในภาษาญี่ปุ่นเป็นคำสองคำที่รวมกัน “Do-โด” หมายถึง วิถีหรือหนทาง “Jo-โจ” หมายถึงสถานที่ เมื่อรวมกันแล้วหมายถึง สถานที่ซึ่งเป็นที่ฝึกวีถีต่าง ๆ ที่เข้าใจง่ายๆเช่น โรงฝึกวิชาศิลปะการป้องกันตัว
ดังนั้นถ้าพูดให้เข้าใจง่าย Coding Dojo คือกระบวนการหนึ่งในการพัฒนาทักษะการเรียนรู้ในการเขียนโปรแกรม โดยที่รูปแบบการฝึกหลักๆ มี 3 แบบดังต่อไปนี้
1. KATA (คาตะ)
Kata (คาตะ) แปลตรงตัวหมายถึง แบบอย่าง อธิบายเพิ่มเติมแบบเข้าใจง่าย ๆ เช่น คาตะในคาราเต้ จะบ่งบอกถึงลักษณะเด่นของแต่ละสำนัก เปรียบเสมือนกระบวนท่าเอกลักษณ์ อีกทั้งยังบ่งบอกระดับความสามารถของแต่ละบุคคลได้ด้วย
ถ้าเชื่อมโยงกับการเขียนโปรแกรม ที่ดัง ๆ เราจะนึกถึงได้เช่น
- การเขียนโปรแกรมแบบ TDD (Test-Driven-Development)
- การเรียนรู้ภาษาใหม่ Learning New Language
- การ Refactoring Code
Kata คือทำการฝึกฝนทักษะที่สำคัญอย่างสม่ำเสมอ
เป้าหมายของการทำ Kata คือทำการฝึกฝนทักษะที่สำคัญอย่างสม่ำเสมอ โดยที่ซ้อมกับการแก้ปัญหา โดยที่ไม่ได้เน้นการแก้ปัญหายาก แต่เน้นการเข้าใจถึงขั้นตอนการคิดการเขียนโปรแกรมเพื่อแก้ปัญหาให้ถูกรูปแบบมากกว่า
2. WASA (วาสะ)
Wasa (วาสะ) แปลว่า เทคนิค ลีลา ชั้นเชิง ในการฝึก Wasa เทียบได้กับการฝึก Kata แบบสองคน คือมีฝ่ายรุกและฝ่ายรับ ถ้ามาประยุกต์ใช้กับ Coding
คนนึงเขียน Unit test แล้วให้อีกหนึ่งคนเขียนโปรแกรม
เราจะจำลองให้เลือกโจทย์มาเหมือนทำ Kata แล้วให้คนนึงเขียน Unit test แล้วให้อีกหนึ่งคนเขียนโปรแกรมมาทำให้ Unit Test ผ่าน เน้นไปเชิงการเรียนรู้ที่จะเข้าใจแนวคิดการเขียนโปรแกรมของอีกคน อีกทั้งฝึกการวิเคราะห์หรือวิจารณ์การเขียนโปรแกรมของอีกคนนึง
3. RANDORI (รันโดริ)
Randori (รันโดริ) คือการฝึกซ้อมแบบจริง โดยใช้แนวความคิดว่า นักเรียนสองคนใช้เทคนิคต่างๆที่ตนเรียนรู้เพื่อการเอาชนะอย่างเต็มกำลัง
ทุกคนจะผลัดกันเขียนโปรแกรมและ unit test สลับไปเรื่อยๆให้ครบทุกคน
รูปแบบนี้จะมีคนร่วมมากกว่าสองคนขึ้นไป โดยที่เราอาจจะขึ้นจอทีวีใหญ่ๆ หรือโปรเจคเตอร์ เราจะทำการเลือกโจทย์ มีคนนึงเขียน unit test และ เขียนโปรแกรมให้ unit test ผ่าน แต่ทุกคนจะผลัดกันเขียนโปรแกรมและ unit test สลับไปเรื่อยๆให้ครบทุกคน รูปแบบนี้เน้นบรรยากาศการฝึกที่สนุกและได้เรียนรู้แนวคิดที่หลากหลายมากขึ้นในการแก้โจทย์
เริ่มต้นง่ายๆสำหรับตัวเราเองก่อน
การเริ่มเรียนเขียนโปรแกรม เราสามารถเริ่มต้นที่ตัวเราเองก่อนได้ ก่อนที่จะไปเขียนโปรแกรมร่วมกับคนอื่น
1. เรียนรู้พื้นฐานของภาษา
ก่อนอื่นเลือกและอ่าน programming basic ของแต่ละภาษาเพื่อเข้าใจ Fundamental ที่จำเป็น Safaribookonline เป็น เว็บที่ผมชอบมากที่สุดเพราะหนังสือสำหรับ programmer มีเยอะมาก สามารถอ่านคำแนะนำได้จาก “Self Learning Tool – เครื่องมือสำหรับการเรียนด้วยตัวเอง”
2. ซ้อมเขียนโปรแกรม
ตั้งเป้า ซ้อมมือในการ coding วันละ 1 topic เช่น Hello World, variables, arrays หรืออาจจะใช้ตัวช่วยอีกตัว คือ เข้าไปทำโจทย์ Tutorial – 30 Days of Code ที่ Hackerrank.com จะมีหัวข้อที่เป็นพื้นฐาน ให้เราได้ลองทำตาม ก็ช่วยเราเริ่มต้นได้ง่ายขึ้น

3. ฝึกแก้โจทย์ปัญหา
เลือกโจทย์ในการแก้ปัญหาจาก http://codingdojo.org/kata/ เช่น เริ่มจากการแก้ปัญหาง่าย ๆ ซึ่งปัญหาที่ยอดนิยมเลยคือ FizzBuzz เป็นโจทย์ที่ว่า ถ้าเราได้รับ input ตัวเลขที่หารด้วย 3 ลงตัวให้ return คำว่า “Fizz” ถ้าหารด้วย 5 ลงตัวให้ return “Buzz” ถ้าหารลงตัวทั้ง 3 และ 5 ก็ให้ return “FizzBuzz”
4. ฝีก Pair Programming กับเพื่อน
หลังจากที่คล่องแล้ว อาจจะลองหาโจทย์ที่ยากขึ้น ทำ Pair Programming กับเพื่อน หรือแม้กระทั้งลองรีวิว code เรากับ code คนอื่นในโจทย์เดียวกัน จะทำให้เราได้มุมมองในการ coding มากขึ้น
การเขียนโปรแกรมด้วยภาษาใหม่หรือเทคนิคใหม่ ยังไงเราก็ต้องเริ่มต้นที่ก้าวแรก การเริ่มแบบค่อยๆเป็นค่อยๆไป และมีวินัยจะช่วยให้เราไปถึงเป้าหมายได้ ขอแค่ได้เริ่มและทำอย่างสม่ำเสมอ ยังไงก็ดีกว่าแค่คิดแต่ไม่ได้เริ่มลงมือ อย่างแน่นอน

ข้อมูลและแนวคิดที่ได้นี้ ได้มาจากหนังสือ The Clean Coder: A Code of Conduct for Professional Programmers ของ Robert C. Martin ลองเข้าไปหามาอ่านเพิ่มเติมได้ครับ
