Photo by KOBU Agency on Unsplash

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

ในทางตรงกันข้าม จูเนียร์โปรแกรมเมอร์หลายคน พอคุยกันยังไม่ทันเสร็จดี จะเปิดไฟล์ขึ้นมา คิดอะไรไม่ออกใส่ For loop ทันทีเลย ไม่ได้เช็คดูด้วยซ้ำว่าไอ้โค้ดที่จะแก้นี่มันรันผ่านอยู่รึเปล่า

อันนี้ผมเจอบ่อยมาก พอผ่านไปสองช.ม. ก็จะเห็นว่านั่งงมบั๊ก ไม่แน่ใจว่าพังตรงไหน

คำถามคือ ควรจะคิดอะไร วางแผนอะไรบ้าง?​ ผมเสนอดังนี้ครับ

  1. ทำความเข้าใจโค้ดปัจจุบันก่อน

ถ้าไม่ใช่โค้ดที่เค้าเขียนประจำ สิ่งแรกที่ต้องทำคือเริ่มคุ้ยโค้ดครับ ถ้าส่วนที่ต้องแก้จะโดนหลาย Object เราควรจะเริ่มจากเขียนคลาสต่างๆลงในกระดาษ แล้วขีดเส้นโยงกันไปมาว่ามันมีความสัมพันธ์กันยังไง

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

  1. กำหนด input และ output ของโค้ดส่วนที่จะแก้

ถ้ายังไม่รู้ว่าข้อมูลขาเข้าและขาออกเป็นอะไร เขียนโค้ดให้ถูกไม่ได้หรอกครับ . กรณีที่เราเติม Method ใหม่เข้าไป Input กับ Output ก็คือ Method signature นั่นเอง พยายามกำหนดให้ชัดเจนก่อนเขียนไส้ในลงไป ส่วน . กรณีที่มีหลาย Object ก็พยายามกำหนดให้ interface ว่าแค่ละ Object จะรับส่งค่าอะไร ผ่าน Method ไหนบ้าง ลำดับการเรียกเป็นยังไง ถ้าซับซ้อนมาก ลองเขียน Sequence diagram ออกมาก่อนก็ดี

  1. ดราฟขั้นตอนใหญ่ๆของการทำงานออกมา

เช่น

  1. แก้คลาส A ก่อน แล้วใส่ public method ใหม่ ลงไป
  2. เขียนเทสต์ทดสอบ Edge case ของ คลาส A ให้เรียบร้อย
  3. Refactor ให้โค้ดเพื่อลด Duplicated code ในคลาส A ที่มาจากที่เราใส่ไปเมื่อกี้
  4. แก้คลาส B ให้มาเรียกใช้ Method ใหม่นี้
  5. อัพเดตเทสต์โค้ดของคลาส B ถ้าจำเป็น ….

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

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

  1. เขียน Psuedo โค้ดก่อนเริ่มลงมือเขียน method

เช่น

1
2
3
4
// Verify that the input data is correct
// Fetch a list of items from database
// Iterate through the list and call another method to calculate output
// Return output in the correct format

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


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

หลักๆคือ อย่าใจร้อนครับ ก่อนจะทำอะไร คิดและวางแผนให้ดีก่อนลงมือ การเขียนโปรแกรมเป็นงานละเอียด

พรุ่งนี้เริ่มทำงาน ลองเอาไปทดลองใช้กันนะครับ ผมเสนอให้ลองข้อ 3 ก่อน เป็นเทคนิคที่ทำให้ผมรู้สึกว่าทำงานเร็วและมีระบบมากขึ้น


---

ติดตามบทความสำหรับโปรแกรมเมอร์ทั้งด้านได้ที่ Facebook page Not about code หรือ Twitter @notaboutcode บทความของเพจจะเน้นเนื้อหาที่นำไปใช้ได้กับชีวิตจริง แต่ไม่ยึดติดกับเทคโนโลยีหรือภาษา เช่น System Design, Continuous Delivery, Testing, Career, etc.

สำหรับท่านที่อยากสนับสนุนผู้เขียน รบกวนช่วยแชร์โพสต์ในเฟสบุ้คให้กับเพื่อนๆที่น่าจะสนใจหัวข้อพวกนี้ด้วยครับ