มีโอกาส review code ของชาว Data Science หรือบางที่เรียกว่า Data Science Team/Project
ซึ่ง code ต่าง ๆ ที่เขียนขึ้นมานั้นมันทำงานได้ดีตามที่ต้องการ
เขียนจากทั้งนักพัฒนาจริง ๆ และ ไม่ใช่จากสายนักพัฒนา
แน่นอนว่า มันไม่แปลกอะไรเลย

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

Make it Work ก่อน
แต่อย่าลืม Make it Right นะ

อย่างแรกแยก code ให้เป็นกลุ่มงาน หรือ Modular หน่อยนะ

ให้แยกตามหน้าที่การทำงานไป เช่น

  • การ pre-processing data เช่น clean up, outlier และ null value เป็นต้น
  • การ analyze data
  • การ training data
  • การ visualize data

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

พูดง่าย ๆ แยกการทำงานต่าง ๆ เป็น function ย่อย ๆ ก่อน
จากนั้นทำงานจัดกลุ่ม function อีกที
จะได้ modular แบบเป็นธรรมชาติมาก ๆ

ต่อมาเรื่อง readability ของ code มันอ่านยากมาก ๆ (อ่านยากฉิบหาย)

ยกตัวอย่างเช่น
มันคืออะไรครับ ลูกพี่
ใกล้จะครบแล้วนะ a-z !!

ดังนั้นอย่างน้อย
code นั้นควรทำให้อ่านเข้าใจง่าย ๆ หน่อย
ทั้งตัวเราเอง และ เพื่อนร่วมงาน
มิเช่นนั้น การดูแลรักษามันจะนรกมาก ๆ
ทีมควรมีข้อตกลงร่วมกันและ review code บ่อย ๆ
ทั้งการตั้งชื่อตัวแปร ทั้งการตั้งชื่อ function
ไล่ให้ไปอ่านหนังสือ Clean Code ก่อนเลย

ยิ่งถ้าเขียน code ด้วยภาษา Python
ก็ช่วยเขียน Doc string ไปด้วยนะ
เพราะว่า
ใช้ทั้งเขียนคำอธิบาย
ใช้ทั้งเขียนตัวอย่างการใช้งาน
ใช้ทั้งทดสอบได้อีกด้วย
ดังนั้นเขียนเถอะครับ เพื่อลดภาระให้ลูกหลาน

เรื่อง Logging ของการทำงานอย่าให้ขาด

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

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

ปัญหาที่เจอคือ ต้องไป integrate กับระบบงาน

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

ดังนั้นเรื่องของการทดสอบจึงเป็นสิ่งที่สำคัญมาก ๆ
ยิ่งเป็น Automation testing เลยยิ่งดี
แต่พบว่าในโลกของ Data Science ไม่เขียนกัน (Software Development ยังน้อยเลยนะ)

เรื่องเพิ่มเติมคือ

มีปัญหาว่า ทำไม code ชุดนี้มันช้าลง
ทั้ง ๆ ที่มันเคยเร็ว !!
ตอบยากสุด ๆ กลับไปดูเรื่อง Logging และผลบันทึกในแต่ละขั้นตอนก็จะช่วยได้มา
กับเรื่องที่หนักหน่อยคือ Big-O ของ algorithm ต่าง ๆ หรือขั้นตอนการทำงานว่าเป็นอย่างไร

สุดท้ายจริง ๆ คือ ใช้ Version Control ที่ดี ๆ เถอะครับ

code จะได้ไม่ทับกันไปมา
ตอนนี้แก้ปัญหา code ทับกันด้วย เขียนคนละไฟล์ คนละ folder ไปเลย
ซึ่งไม่ขอแนะนำนะครับ !!

ขอให้สนุกกับการเขียน code ครับ