มีโอกาส 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
พูดง่าย ๆ แยกการทำงานต่าง ๆ เป็น function ย่อย ๆ ก่อน จากนั้นทำงานจัดกลุ่ม function อีกที จะได้ modular แบบเป็นธรรมชาติมาก ๆ
ต่อมาเรื่อง readability ของ code มันอ่านยากมาก ๆ (อ่านยากฉิบหาย)
ยกตัวอย่างเช่น มันคืออะไรครับ ลูกพี่ ใกล้จะครบแล้วนะ a-z !! [gist id="74251a4f25623b35c1339cbd9673cefc" file="1.py"] ดังนั้นอย่างน้อย code นั้นควรทำให้อ่านเข้าใจง่าย ๆ หน่อย ทั้งตัวเราเอง และ เพื่อนร่วมงาน มิเช่นนั้น การดูแลรักษามันจะนรกมาก ๆ ทีมควรมีข้อตกลงร่วมกันและ review code บ่อย ๆ ทั้งการตั้งชื่อตัวแปร ทั้งการตั้งชื่อ function ไล่ให้ไปอ่านหนังสือ Clean Code ก่อนเลย ยิ่งถ้าเขียน code ด้วยภาษา Python ก็ช่วยเขียน Doc string ไปด้วยนะ เพราะว่า ใช้ทั้งเขียนคำอธิบาย ใช้ทั้งเขียนตัวอย่างการใช้งาน ใช้ทั้งทดสอบได้อีกด้วย ดังนั้นเขียนเถอะครับ เพื่อลดภาระให้ลูกหลานเรื่อง Logging ของการทำงานอย่าให้ขาด
แต่เก็บเท่าที่จำเป็นต่อการทำงานนะครับ อย่าเยอะ เพื่อให้ช่วยบอกว่า ปัญหามันเกิดตรงไหน อย่างไร ที่สำคัญ ถ้ามันมีเยอะไป มันเปลือง ยิ่งขึ้น production ด้วยแล้ว ยิ่งนรกไปใหญ่ จำไว้ว่า logging ต้องช่วยเรา ไม่ใช่มาสร้างปัญหาให้เรา ยังไม่พอนะ ในแต่ละขั้นตอนของการทำงานควรบันทึก ชุดข้อมูลเข้า ผลลัพธ์ที่ได้ เพื่อให้สำหรับการตรวจสอบ หรือ แก้ไขปัญหาต่อไป มิเช่นนั้นก็จะมั่ว จะเดากันอีก ที่สำคัญยังสามารถนำข้อมูลเหล่านี้ไปใช้ในการทดสอบซ้ำอีกด้วย ตลอดจนเอาไปใช้เรื่องของการปรับปรุง performance อีกปัญหาที่เจอคือ ต้องไป integrate กับระบบงาน
พบว่า เปลี่ยนเมื่อไร กระทบเมื่อนั้น ดังนั้น interface หรือข้อตกลงกับระบบอื่น ๆ นั้น เป็นสิ่งที่จำเป็นมาก ๆ รูปแบบของ input และ output ต้องชัดเจน ถ้าแก้ไข ต้องรู้ว่า ใครบ้างที่ใช้งาน กระทบอะไรบ้าง กระทบกับใครบ้างดังนั้นเรื่องของการทดสอบจึงเป็นสิ่งที่สำคัญมาก ๆ ยิ่งเป็น Automation testing เลยยิ่งดี แต่พบว่าในโลกของ Data Science ไม่เขียนกัน (Software Development ยังน้อยเลยนะ)