Legacy Coder

เคยเขียนถึง Legacy Code ไปเมื่อหลายปีก่อน วันนี้จะเล่าเรื่องที่คล้าย ๆ กันนิดนึง

เมื่อประมาณต้นปีพอดีมีโปรเจคแก้โค๊ดระดับค่อนข้างใหญ่ ก็คือ การแก้ไข functionality ที่สำคัญมากอันนึงในทั้ง product เป็นปัญหาที่มีร่วมกันในทุก ๆ function ย่อย ๆ ของ product ซึ่งมีการตัดสินใจว่าจะทำการแก้ปัญหาลักษณะเดียวกันพร้อมกันไปเลย

วิธีการแก้ไขตรงนี้คือมีคนเขียนคลาสที่จัดการเรื่องการคำนวนตรงนี้ เป็นคลาสตรงกลางที่ใช้ร่วมกัน

สิ่งที่ผมต้องทำคือทำการทดสอบว่า function ที่ได้รับมอบหมายมามีปัญหาหรือไม่ ถ้ามีก็ค่อยแก้ แต่ตัวโค๊ดที่ใช้แก้มีการทำมาให้แล้วอย่างที่บอกไว้ข้างบน สิ่งที่ผมพบคือโค๊ดที่มีการเขียนนั้นมีการใช้ API ที่มีปัญหา และที่จริงก็มี API อีกชุดหนึ่งจาก 3rd party ที่สามารถใช้ทดแทนกันได้เลยโดยไม่ต้องเขียนใหม่

ผมเดินไปคุยกับคนที่ดูแลโปรดักท์ตัวนี้ว่า ผมคิดว่าวิธีที่เราใช้นั้นไม่ถูกต้อง การใช้โค๊ดจาก 3rd party ที่มี unit test ครบถ้วนและ functionality ที่ครอบคลุมกว่าจะเป็นประโยชน์กับทีมในระยะยาว อย่างน้อยเราก็ไม่ต้องมานั่งดูแล library ตัวนี้ และมั่นใจได้มากกว่าว่ามันจะไม่สร้างปัญหา

คนที่ผมคุยด้วยก็ตอบว่าเข้าใจในประเด็นที่ผมต้องการจะสื่อ แต่ในขณะเดียวกันเขาก็บอกว่า ไม่ใช่ทุกคนในทีมที่เก่งเหมือนผม …

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

ผมไม่คิดว่าคนที่ผมคุยด้วยเป็นที่ไม่รับฟังอะไร แต่เขาต้องคิดถึงอีกหลายคนที่จะต้องมาเขียนโค๊ดต่อ เขาก็เลยเลือกวิธีที่คนอื่น ๆ ในทีมคุ้นเคย ซึ่งก็เป็นเรื่องที่น่าเศร้าเหมือนกัน อีกปัญหานึงคือตอนที่ผมไปคุยเป็นตอนที่ค่อนข้างสายเกินไปแล้ว ตอนนั้นคือเทสต์กันจะเสร็จหมดแล้วก็เลยต้องปล่อยเลยตามเลย ผมค่อนข้างเสียดายเพราะถ้าสามารถแก้ได้น่าจะลดปัญหาที่อาจจะเกิดขึ้นในอนาคตได้อีกมากทีเดียว (ระบบที่ผมทำงานอยู่ไม่มีการเขียน Unit Test ครับ ดังนั้นเรื่องความมั่นใจในโค๊ดเนี่ยแทบจะ 0 เลย ผมต้องตีไว้ก่อนว่ามันจะมีปัญหาแน่ ๆ )

แต่ถ้าเรามองในมุมของมนุษย์เนี่ย คนเราพอถึงจุดนึงมันก็จะมีภาระเข้ามามากขึ้น บางคนต้องเลี้ยงลูก ดูแลคู่ครอง บางคนติดละครต้องดูทุกคืน (เป็นการบำบัดอย่างหนึ่งนะครับ ทำเป็นเล่นไป) มันมีอะไรอีกหลายอย่าที่ยังต้องทำ คนกลุ่มนี้จะเห็นไม่เรียนรู้อะไรนอกเหนือจากที่มีการสอนกันในที่ทำงาน และถ้าจะมีการสอนก็ต้องทำในเวลางานด้วยนะ ดังนั้นถ้ามันไม่ใช่สิ่งที่ถูกบังคับให้ทำ ไม่มีการสละเวลาในออฟฟิศให้เรียน คนจะไม่เรียนรู้อะไรเลย

ปัญหาที่น่ากลัวพอ ๆ กันคือคนกลุ่มนี้ก็มักจะสอนให้คนใหม่ ๆ ให้ทำวิธีเดียวกับตัวเอง โดยอ้างว่าเป็นวิถีของคนที่มี seniority เขาทำกัน ส่วนตัวผมอยากเห็นคนรุ่นใหม่ ๆ กระตือรือร้นในการเรียนรู้อะไรใหม่ ๆ และสามารถ contribute ความรู้ที่ตัวเองเรียนมที่คนเก่า ๆ เขาไม่เคยเรียนรู้มาในการะทำงานด้วย ไม่ใช่ว่าพอเรียนเรื่องดี ๆ มาแล้วเจอคนเก่า ๆ ล้างสมองให้ทำตามวิธีของตัวเองหมด (โดยอ้างว่าชีวิตการทำงานมันต่างจากการเรียน)

แต่ผมก็คิดนะว่าบางทีเด็กมันก็เป็นแบบนี้มาตั้งแต่แรกแล้วเหมือนกัน ซึ่งก็เป็นเรื่องน่าเศร้าพอสมควร ผมพบว่าเราจะค่อนข้างให้คุณค่ากับคนที่สามารถทำตามวิธีของเราได้ โดยไม่สนว่าเขาอาจจะมีวิธีที่ดีกว่า ซึ่งนั่นหมายถึงคนที่เรียนเก่งมักจะเป็นคนที่ไม่นำเสนอเรื่องใหม่ ๆ แต่มักจะเป็นคนที่ทำตามวิธีของคนอื่นได้มากกว่า (และพอถึงจุดที่ต้องนำเสนอวิธีใหม่ ๆ ก็มักจะทำได้ไม่ดี)

เอาเถอะ ผมคงต้องพยายามจนกว่าจะอยู่ในจุดที่สามารถนำเสนอความคิดของตัวเองได้เต็มที่ ซึ่งก็คงอีกนานทีเดียว 😛

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.