คิดและวางแผนก่อน(แก้)โค้ด
อีกหนึ่งในนิสัยที่ผมเห็นโปรแกรมเมอร์เก่งๆมีกัน คือเค้าจะคิดค่อนข้างถี่ถ้วนลงมือเขียน(หรือแก้)โค้ด พอคุยกันเสร็จ เค้าจะหยิบสมุดหรือกระดาษขึ้นมาขีดๆเขียนๆไดอะแกรม เพื่อเช็คความเข้าใจก่อนก่อน เพื่อให้มีแผนคร่าวๆในหัวก่อนจะเริ่มเขียน
ในทางตรงกันข้าม จูเนียร์โปรแกรมเมอร์หลายคน พอคุยกันยังไม่ทันเสร็จดี จะเปิดไฟล์ขึ้นมา คิดอะไรไม่ออกใส่ For loop ทันทีเลย ไม่ได้เช็คดูด้วยซ้ำว่าไอ้โค้ดที่จะแก้นี่มันรันผ่านอยู่รึเปล่า
อันนี้ผมเจอบ่อยมาก พอผ่านไปสองช.ม. ก็จะเห็นว่านั่งงมบั๊ก ไม่แน่ใจว่าพังตรงไหน
คำถามคือ ควรจะคิดอะไร วางแผนอะไรบ้าง? ผมเสนอดังนี้ครับ
- ทำความเข้าใจโค้ดปัจจุบันก่อน
ถ้าไม่ใช่โค้ดที่เค้าเขียนประจำ สิ่งแรกที่ต้องทำคือเริ่มคุ้ยโค้ดครับ ถ้าส่วนที่ต้องแก้จะโดนหลาย Object เราควรจะเริ่มจากเขียนคลาสต่างๆลงในกระดาษ แล้วขีดเส้นโยงกันไปมาว่ามันมีความสัมพันธ์กันยังไง
ถ้าโค้ดตรงไหนอ่านยาก ไม่ค่อยเข้าใจ ลองจะหยิบเทสต์มานั่งรันดู หรือเติมเทสต์เพื่อลองเช็คสมมติฐานว่าเข้าใจโค้ดส่วนที่จะแก้จริงๆ ถ้าไม่มีเทสต์โค้ด ก็ลองปริ้นท์ค่าต่างๆออกมานั่งดู หรือกดไล่ใน Debugger ดูก่อน
- กำหนด input และ output ของโค้ดส่วนที่จะแก้
ถ้ายังไม่รู้ว่าข้อมูลขาเข้าและขาออกเป็นอะไร เขียนโค้ดให้ถูกไม่ได้หรอกครับ . กรณีที่เราเติม Method ใหม่เข้าไป Input กับ Output ก็คือ Method signature นั่นเอง พยายามกำหนดให้ชัดเจนก่อนเขียนไส้ในลงไป ส่วน . กรณีที่มีหลาย Object ก็พยายามกำหนดให้ interface ว่าแค่ละ Object จะรับส่งค่าอะไร ผ่าน Method ไหนบ้าง ลำดับการเรียกเป็นยังไง ถ้าซับซ้อนมาก ลองเขียน Sequence diagram ออกมาก่อนก็ดี
- ดราฟขั้นตอนใหญ่ๆของการทำงานออกมา
เช่น
- แก้คลาส A ก่อน แล้วใส่ public method ใหม่ ลงไป
- เขียนเทสต์ทดสอบ Edge case ของ คลาส A ให้เรียบร้อย
- Refactor ให้โค้ดเพื่อลด Duplicated code ในคลาส A ที่มาจากที่เราใส่ไปเมื่อกี้
- แก้คลาส B ให้มาเรียกใช้ Method ใหม่นี้
- อัพเดตเทสต์โค้ดของคลาส B ถ้าจำเป็น ….
เขียนเสร็จแล้ว เอาขั้นตอนพวกนี้เป็นเช็คลิสต์เวลาทำงาน วิธีนี้จะทำให้เราได้ทบทวนก่อนว่าเราลืมอะไรรึเปล่า เวลาทำงานก็จะมีสมาธิขึ้น เพราะเราโฟกัสให้เสร็จไปทีละอย่าง
ส่วนใหญ่แผนนี้ไม่ค่อยตรงตามที่ทำจริงหรอกครับ พอทำๆไปก็จะพบว่าลืมนู่นติดนี่ ก็ปรับตามเห็นสมควร แต่การมีภาพรวมให้เราเห็นก่อน จะทำรอบคอบ ไม่ลืมนู่นลืมนี่ และให้ทำงานได้เร็วขึ้น
- เขียน Psuedo โค้ดก่อนเริ่มลงมือเขียน method
เช่น
|
|
เสร็จแล้วค่อยเริ่มลงมือเขียนไปทีละส่วนครับ อย่าทำพรวดเดียว เขียนช้าๆแต่ชัวร์ๆว่าแต่ละเสต็ปถูกต้องแล้ว ก่อนจะไปต่อ
หมดแล้วครับ 4 ข้อที่ผมทำบ่อย อันนี้ไม่ได้ตายตัวนะครับ เลือกใช้ตามที่เรารู้สึกว่าเหมาะสม ผมเชื่อว่าหลายๆคนก็ทำบางอย่างใน 4 ข้อนี้กันอยู่เป็นประจำ
หลักๆคือ อย่าใจร้อนครับ ก่อนจะทำอะไร คิดและวางแผนให้ดีก่อนลงมือ การเขียนโปรแกรมเป็นงานละเอียด
พรุ่งนี้เริ่มทำงาน ลองเอาไปทดลองใช้กันนะครับ ผมเสนอให้ลองข้อ 3 ก่อน เป็นเทคนิคที่ทำให้ผมรู้สึกว่าทำงานเร็วและมีระบบมากขึ้น
---
ติดตามบทความสำหรับโปรแกรมเมอร์ทั้งด้านได้ที่ Facebook page Not about code หรือ Twitter @notaboutcode บทความของเพจจะเน้นเนื้อหาที่นำไปใช้ได้กับชีวิตจริง แต่ไม่ยึดติดกับเทคโนโลยีหรือภาษา เช่น System Design, Continuous Delivery, Testing, Career, etc.
สำหรับท่านที่อยากสนับสนุนผู้เขียน รบกวนช่วยแชร์โพสต์ในเฟสบุ้คให้กับเพื่อนๆที่น่าจะสนใจหัวข้อพวกนี้ด้วยครับ