Real virtue of good code
เป็นเรื่องน่าแปลกมากสำหรับวงการโปรแกรมเมอร์ของเราทั้งเมืองไทยและเมืองนอก (พึ่งไปอ่าน Reddit, Twitter มายาวๆ) ที่เรามักมีมุมมองที่ว่า
“โค้ดที่ดีต้องใช้เวลาทำอย่างใส่ใจ เพื่อเป็นมืออาชีพ เพื่อให้คนอื่นในทีมไม่ปวดหัว”
และเราก็มีมุมมองว่า โปรแกรมเมอร์ที่เป็นมืออาชีพจะทำงานช้าเพื่อรักษา Code quality ราวกับเป็นพ่อพระแม่พระผู้เสียสละเพื่อให้ทีมอยู่รอดก็ไม่ปาน
ผมคิดว่าไม่ใช่
สุดท้ายแล้ว Test-driven development หรือแม้แต่ Modularity, Reusability เทคนิค OOP, Functional programming หรืออะไรก็ตาม
มันมีเป้าหมายเดียว
“Developer productivity”
มันไม่ใช่คาถาสวดมนต์หรือพิธีกรรมบ้าบอคอแตกที่พอทำแล้วจะได้ชื่อว่าเป็น Developer ชั้นหนึ่ง หรือเป็นศีล 25 ข้อที่ต้องรักษาเพื่อให้ได้ชื่อว่าเป็นนักบวชขั้นเปรียญ 3 ในลัทธิโปรแกรมเมอร์
ไม่ใช่เลย เราศึกษาเพื่อให้เร็วมี Productivity มากขึ้นต่างหาก ตรงไปตรงมาและง่าย
แต่หลายๆ ครั้งเราปฏิบัติหรือมีมุมมองกับมันเหมือนเป็นแบบนั้น
หลายๆ ครั้งเราบอกว่าคนที่ดูแลโค้ด เขียนโค้ดดี นี่คือคนที่ยอมช้าเพื่อทีม หรือยอมช้าเพื่อรักษาความเป็นโปรแกรมเมอร์มือหนึ่งไว้
ผมพึ่งอ่านข้อถกเถียงของ Reddit มามีคนนึงเขียนประมาณว่า โปรแกรมเมอร์ที่ทำงานเร็วและ Hack ไปทั่วถือว่าไม่เป็นมืออาชีพ และคนที่ทำงานช้าอย่างระมัดระวังรักษา Code quality เป็นพวกมืออาชีพ
ในวงการ เรามักมีความคิดว่าโปรแกรมเมอร์มีสองแบบ
- พวกทำงานเร็วแต่โค้ดเละ
- พวกทำงานช้าแต่โค้ดมีคุณภาพ
ผมไม่เห็นด้วย
ผมเรียนทั้งหมดมาและคอยศึกษาทั้ง Testing, Architecture เพราะผมอยากทำงานเร็ว อยากเร็วซะจนคนอื่นตามไม่ทัน อยากเร็วซะจนสามารถเขียนอะไรก็ได้ในพริบตาโดยไม่มีปัญหาตามมาจุกจิกภายหลัง
และหลังจากศึกษามาระดับนึง ผมก็ทำอะไรๆ ได้เร็วขึ้นมากจริงๆ
ผมคิดว่า โค้ดที่มีคุณภาพไม่ได้ใช้เวลาสร้างนานกว่าโค้ดเละๆ เลยซักนิด
เราเชื่อว่าโค้ดเละเขียนได้เร็วกว่าโค้ดดีๆ ผมไม่เห็นด้วย
ผมเห็นว่าจริงๆ คือ
“โค้ดแบบที่เราคุ้นชิน เขียนได้เร็วกว่าโค้ดที่เราไม่ชิน”
ต่างหาก และแค่นั้น
และถ้าเราเคยชินกับโค้ดที่ดีแล้ว
เราจะเขียนโปรแกรมได้เร็วขึ้นจริงๆ เร็วกว่าสมัยที่เราชินกับโค้ดที่ไม่ดีมากๆ
อย่างน้อยนั่นคือเรื่องจริงที่เกิดกับตัวผมล่ะนะ
เพราะสุดท้าย โค้ดที่ดีมันไม่ใช่เรื่องของซูเปอร์ฮีโร่ที่สละเวลาเพื่อทีม หรือพิธีกรรมของโปรแกรมเมอร์ Class S ที่ต้องสละเวลาเพื่อบอกว่าฉันเป็นมืออาชีพอะไรทั้งสิ้น
มันง่ายๆ แค่ เราอยากเขียนเร็วขึ้น เราอยากสละเวลาน้อยลง
และพอคุณมองมันด้วยมุมมองแบบนี้แล้ว มองว่า Pattern กับ Practice เป็นแค่เครื่องมือให้เราทำงานเร็วขึ้น
คุณจะตั้งคำถามกับมันได้ดีขึ้น
คุณจะเลือกใช้มันได้ดีขึ้น
คุณจะเห็นประเด็นของมันมากขึ้น
คุณจะเข้าใจที่มาที่ไปและข้อดีข้อเสียของมันมากขึ้น
ซึ่งคุณจะตั้งคำถามกับมันไม่ได้เลย ถ้าคุณเห็นแค่ว่ามันเป็น Virtue หรือแค่ “พิธีกรรม” ของโปรแกรมเมอร์ที่ต้องทำตาม เพื่อให้เป็นมืออาชีพ
และการที่เราโปรโมตว่าโปรแกรมเมอร์ที่ดีต้องทำงานช้าๆ เพื่อให้เกิด Code quality และโปรแกรมเมอร์ที่ทำงานเร็วๆ คือ Hacker
ผมว่าการโปรโมตแบบนี้ นอกจากไม่ตรงความจริงแล้ว ยังทำให้มุมมองต่อการ Coding มันผิดเพี้ยนอีกต่างหาก
สำหรับผม ผมไม่มี Virtue ไม่มีความเป็นซูเปอร์ฮีโร่ ไม่มีความอยากเป็นมืออาชีพอะไรทั้งนั้นแหละครับ
ผมแค่อยากทำงานเร็วเป็นจรวด และผมก็อยากให้ทีมทำงานเร็วเป็นจรวดด้วย
ผมเลยต้องศึกษา Architecture, OOP, Design pattern เพื่อทำให้ทุกคนเขียนโปรแกรมได้เร็วขึ้นกว่านี้
ผมคิดว่าเราควรจะโปรโมตว่า โปรแกรมเมอร์ที่ Productive ทำฟีเจอร์ได้เยอะได้ไว คือคนที่สนใจ Code quality
เพราะ Perception ที่ว่า เรามีพวกปั่นงานไวแต่โค้ดเละ กับพวกทำงานช้าแต่รักษาคุณภาพโค้ดดี ผมว่ามันไม่จริงนะ จากประสบการณ์ผมเจอคนที่โค้ดเร็วเนี่ย ทุกคนแทบจะใส่ใจคุณภาพโค้ดและพูดคุยกันเรื่อง Architecture, Pattern, Practice ได้หมดทุกคนเลยนะ
แต่ก็เป็น Perception ที่พบได้ทั่วไปในวงการจริงๆ ครับ