Kata กันเถอะ

Tassaneewan Noita
2 min readJun 12, 2021

สวัสดีค่ะ ช่วงว่างๆ นี้ (ว่างมั้ยนะ) รอจบปี 4 และรอสัมภาษณ์งาน ระหว่างนี้ก็กำลังเตรียมตัวสำหรับสัมภาษณ์งานค่ะ ทำให้มีเวลาคิดทบทวนไปตอนช่วงฝึกงานเมื่อปีที่แล้วว่าได้ทำอะไรไปบ้างก็ทบทวนได้ว่า สิ่งนึงที่ทำให้เรามีความรู้และเข้าใจในการเขียน Test (ไม่มากก็น้อยค่ะ) ก็คือ การทำ Kata ตอนช่วงฝึกงานนั่นเองและบวกกับอยากเขียน blog (ที่ค้างไว้) วันนี้ก็เลยอยากจะมีเขียนไว้ และบอกว่า kata มันดีนะ!

เริ่มยังไงนะ…

ตอนที่เข้าไปฝึกงานวันแรก สิ่งแรกที่ได้ทำคือ การทำ kata ตอนนั้นคือ ไม่รู้เลยว่ามันคืออะไร? ทำยังไง? และทำแบบไหน? พี่ๆ ที่ฝึกงานก็อธิบายว่า kata คือการทำอะไรซ้ำ เป็นการฝึกฝนตัวเอง [อ่านเพิ่มเติม: https://www.somkiat.cc/kata-is-way-to-learn-tdd/] ขอย้อนไปนิดนึงค่ะว่า เข้าไปฝึกงานที่ Pronto Tools ตอนนั้นอยู่ ปี 3 เทอม 2 ตำแหน่งที่ฝึกเป็นตำแหน่ง Software Engineer ค่ะ แน่นอนค่ะว่า kata ที่จะทำต้องเกี่ยวกับการ coding ซึ่ง ณ เวลานั้นทำไม่เป็นเลยแต่การทำ kata ของที่นี่เราจะได้ไป pair programming กับพี่ๆ ค่ะ

โจทย์ที่ได้

โจทย์ก็เป็นโจทย์ธรรมดาที่ดูแล้วจะง่ายก็คือ FizzBuzz ในตำนานนั่นเอง ซึ่งโจทย์มีอยู่ว่า ถ้าตัวเลขใดหารด้วย 3 ลงตัวให้ return Fizz และถ้าตัวเลขใดๆ หารด้วย 5 ลงตัวให้ return buzz แต่ถ้าหารทั้ง 3 และ 5 ลงตัวให้ return FizzBuzz ดูๆ แล้วก็เขียนได้ใช่มั้ยคะ โจทย์ง่ายๆ แล้วมันฝึกเราเพิ่มตรงไหน?

นั่นนะสิ่… ฝึกเพิ่มตรงไหนนะ?

นอกจากให้ pair programming และทำโจทย์แล้ว ก่อนลงมือทำโจทย์จริงๆ ก็จะต้องเขียน Test ก่อนนนน อ้า! พอมาถึงตรงนี้ คนที่อ่านอยู่น่าจะรู้แล้วนิดนึงว่ามันคือ TDD หรือ Test-Driven Development ค่ะ ซึ่งพี่ๆ ที่ฝึกงานก็อธิบายค่ะว่า เราเขียน Test Case ไปทีละอันก่อนแล้วลอง RUN ให้ไม่ผ่าน (Failing Test) จากนั้นให้อีกคนที่ pair กับเราเขียนให้ผ่าน (passed) แล้วก็ Refactor code ที่เขียนผ่านแล้ว และคู่ pair จะเขียน Test Case อันต่อไปให้เราแก้ไขและเขียน Test ให้ผ่านสลับกันทำไปอย่างนี้จนกว่าจะผ่านหมดทุก Test Case ที่ได้เขียนลงไป อ่านมาจนถึงตรงนี้แล้ว ก็จะขอนำเอาหน้า code ที่ได้ Kata ไปตอนฝึกงานมาให้ทุกคนได้ดูกันค่ะ

import unittestdef fizzBuzz(number):
if number % 3 == 0 and number % 5 == 0:
return "FizzBuzz"
elif number % 3 == 0:
return "Fizz"
elif number % 5 == 0:
return "Buzz"
return number
class FizzBuzzTest(unittest.TestCase):
def test_input_6_should_return_Fizz(self):
actual = fizzBuzz(6)
expected = "Fizz"
self.assertEqual(actual, expected)
def test_input_10_should_return_Buzz(self):
actual = fizzBuzz(10)
expected = "Buzz"
self.assertEqual(actual, expected)
def test_input_2_should_return_2(self):
actual = fizzBuzz(2)
expected = 2
self.assertEqual(actual, expected)
def test_input_15_should_return_FizzBuzz(self):
actual = fizzBuzz(15)
expected = "FizzBuzz"
self.assertEqual(actual, expected)
unittest.main()

จะสังเกตุเห็นได้ค่ะว่าในแต่ละ method ที่เขียนใน class จะมีการตั้งชื่อตัวแปรให้อ่านเข้าได้ง่าย แต่กว่าจะมาเป็นหน้าตาแบบนี้ก็ต้องปรับและแก้กันไปค่ะ (จริงๆ อาจจะเพิ่ม Test case เข้าไปอีกก็ได้นะคะ) นอกจากนี้แล้ว เราสามารถปรับโจทย์ให้ยากขึ้นหรือจะเปลี่ยนโจทย์ที่ทำก็ได้ค่ะ และขอสรุปสิ่งที่ได้ฝึกฝนในการทำ kata คือ

  1. ฝึกฝนเรื่องการสื่อสาร และการทำงานกับผู้อื่น เพราะว่า โปรแกรมเมอร์ส่วนใหญ่ จะมีปัญหาเรื่องนี้
  2. ฝึกในเรื่องของการเขียน Test แบบที่เป็น TDD ถึงแม้ว่าโจทย์อาจจะง่าย แต่มันทำให้เราเข้าใจได้มากที่สุด พอถึงเวลาที่เราจะต้องเขียนอะไรที่ซับซ้อนขึ้น ในการทำตรงนี้เป็นตัวช่วยที่ทำให้นึกถึงการเขียน Test แบบ TDD ได้ดีเลยละค่ะ
  3. เป็นการแลกเปลี่ยนความคิดเห็นของเรากับคู่ pair
  4. ทำให้เราได้ลองอะไรใหม่ๆ เช่น การเขียน code ด้วย editor VIM มันละค่ตเท่เลยค่ะ ตรงจุดนี้เป็นเหตุผลที่ทำให้ชอบแต่ง Terminal ด้วยหล่ะ ฮ่าๆ ใครมี theme สวยๆ แนะนำได้นะคะ
  5. skill ในการเขียน code ที่เพิ่มขึ้น เพราะเราอยู่กับมันทุกวัน ทำมันบ่อยๆ เหมือนกฏ 10000 ชั่วโมงจากหนังสือแนวสารคดีจิตวิทยาเล่มหนึ่งที่ชื่อว่า Outliers, The Story of Success เขียนโดยนักเขียนชื่อดัง Malcolm Gladwell ไปตามอ่านๆ กันได้ค่า
  6. เพิ่มทักษะของการพิมพ์ดีด อันนี้คือเรื่องจริงค่ะ เพราะตอนที่ไปฝึกงาน พี่ๆ ทุกคน skill การพิมพ์เทพมากๆ มีแรงบันดาลให้เราอยากจะเพิ่มและฝึกฝน skill ตรงนี้ หลังจากจบฝึกงานได้ 2 เดือนก็ทำ kata ในการฝึกพิมพ์ดีดนี่แหละค่ะ ซึ่งก็พิมพ์เร็วขึ้นมากกว่าตอนก่อนที่จะไปฝึกงานค่ะ

การทำ Kata แต่ละวันจะได้ทำประมาณ 30 นาที ก่อนเริ่มงานเป็นการ warn up ก่อนเริ่มทำงานในแต่ละวันที่ดีทีเดียวเลยค่ะ และการฝึกฝนทุกวันมายเชื่อว่าจะทำให้เราเชี่ยวชาญและมองเห็นอะไรบางอย่างมากกว่าคนที่ฝึกฝนน้อยกว่าแน่นอนค่ะ เหมือนกับตัวเองในเมื่อวานที่ฝึกฝนไปแล้ว และวันนี้ฝึกฝนมันอีก มันทำให้เราดีขึ้นกว่าเมื่อวานแน่นอนค่า เพราะเราได้เรียนรู้และมีทักษะเพิ่มขึ้น

ขอบคุณทุกคนที่เข้ามาอ่านค่า :) คิดถึงตอนฝึกงานนนน ❤

--

--