codecomments
คำเตือน

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

มาเริ่มกันดีกว่า

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

Comment ใน code นั้นมีหลายรูปแบบ เช่น

  • รูปแบบ comment ที่เป็นมาตรฐาน ใช้สำหรับการสร้างเอกสาร
  • การ comment เพื่ออธิบายการทำงานของ code ที่อยู่ในแต่ละ method หรือ อธิบายขั้นตอนการทำงาน
  • การ comment เพื่อวางแผนการทำงาน และ การ review ต่อไป
  • การ comment เพื่อบอกขอบเขตของการทำงาน หรือ ใช้งาน
  • Code ที่ใช้สำหรับการ debug

ในการพัฒนาที่ผมเจอมานั้น
ส่วนใหญ่ก็มักจะพบว่า comment ใน code จะส่งผลดังต่อไปนี้

1. Code มันยุ่งเหยิง ยังไงก็ไม่รู้

ทางแนวคิดของทุกๆ คน น่าจะมีความเชื่อที่ว่า
code ที่เราเข้าไปพัฒนามันน่าจะอ่านง่าย เข้าใจง่าย ไม่สับสน
เช่น แต่ละ method มีชื่อ ซึ่งชื่อนั้นมันน่าจะอธิบายการทำงานของตัวมันเองอยู่แล้ว
ไม่น่าจะมีอะไรมาเกินกว่านั้น

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

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

2. ทำให้เกิดความเข้าใจผิด

เราจะรู้ได้อย่างไรว่า comment ใน code มันเกิดขึ้นมาตอนไหน อย่างไร
ถ้าเราใช้งานพวก Source control แล้วก็พอจะไปตามดูได้จากประวิติการ commit code
แต่ถ้าจะกลับไปไล่ดู ก็เป็นเรื่องที่ยากใช่เล่น
ดังนั้น อย่าไปหาเลยนะ เสียเวลา และ เปล่าประโยชน์

ปล. แต่ถ้าคุณและทีม มีความรับผิดชอบในแต่ละ commit แล้วมันก็หาได้ไม่ยากนะ

บางครั้งเราพบว่า comment ใน code จะเกิดขึ้นมาเมื่อเกิด bug
เรามักจะทำการแก้ไขด้วยการ debug
และเราก็มักจะ comment code ส่วนนั้น เพื่อให้รู้ว่าเรากำลังแก้ไขอะไร ตรงไหน
เมื่อแก้ไขเสร็จแล้ว ก็มักจะพบว่า comment เหล่านั้นก็ยังคงอยู่เช่นเดิม
โดย comment เหล่านั้นมักจะไม่ค่อยช่วยอะไรเลย เช่น

  • ชื่อคนแก้ไข
  • วันเวลาแก้ไข
  • สาเหตุแบบหยาบๆ ตามใบงาน
  • บางคนบอกด้วยว่า ห้ามแก้ไขนะ
  • บางครั้งทำการแก้ไข โดยไม่แก้ไข comment อีกนะสิ สนุกมากๆ

บ่อยครั้งที่ comment เหล่านี้ก็ให้เกิดความเข้าใจผิด
เมื่อ bug เกิดขึ้นมาอีกครั้งในบริเวณนั้น
คำถามคือ ใครล่ะที่ต้องเข้ามาแก้ไข และ อ่าน ?
คำตอบคือ ใครก็ไม่รู้ แต่ส่วนใหญ่ไม่ใช่คนที่แก้ไขครั้งก่อนหรอกนะ
ผลที่ได้คืออะไร ?
ก็เกิดความสนุกสนานสิครับ !!

3. Broken Window Theory

เป็นแนวคิดหนึ่ง ที่สามารถอธิบายสั้นๆ ง่ายๆ ได้ดังนี้

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

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

ดังนั้น เราหยุดสร้างสิ่งแย่ๆ ออกไปดีกว่าไหม

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

ดังนั้น ตอบให้ได้ก่อนว่า งานที่คุณทำต้องเขียนไหม
เขียนได้อะไร และ เสียอะไร ?
ไม่เขียนได้อะไร และ เสียอะไร ?

แต่ผมเชื่อว่า comment นั้นมันก็ยังมีข้อดีเยอะดีนะ

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

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

เห็นไหมล่ะ comment มีข้อดีเยอะนะ