Reminiscing https://www.monkeyuser.com/2018/reminiscing/

ทำไมหลายคนไม่ชอบการอ่าน code

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

  • Code เข้าใจยาก บางครั้งเราไม่ได้เป็นคนเขียนเอง เพราะบางทีก็ใช้ Generative AI เข้ามาช่วย จึงต้องใช้เวลา “ถอดรหัส” หรือ “เชื่อมจิต” ความคิดของคนเขียน code นั้น แล้วถ้าเป็น code ที่เราเขียนเองเมื่ออาทิตย์ก่อน แต่กลับมาวันจันทร์ก็ลืมไปแล้วว่าคิดอะไรอยู่ตอนนั้น ก็ยิ่งไปกันใหญ่

  • การอ่าน code ไม่มันเท่าเขียน code เพราะตอนเขียน code เราได้สร้างสิ่งใหม่ มันมีความรู้สึกตื่นเต้น และเห็นผลลัพธ์ทันที เช่น การทดสอบผ่าน feature/component ใหม่โผล่บนหน้าจอ ซึ่งการอ่าน code ไม่ได้ให้ความรู้สึกแบบนั้นเสมอไป

  • เราขาดการฝึกฝน แม้ว่าเราอาจอ่าน code ทุกวัน แต่เราไม่ได้ “ฝึก” การอ่านอย่างตั้งใจ (เดี๋ยวจะมาขยายความว่าฝึกอย่างไร) ซึ่งต่างจากการเขียน code ที่เราสามารถหา resource ในการเรียนรู้และฝึกปรับปรุง style ได้ง่ายกว่า

  • เราเอาอคติเข้ามาเกี่ยว อคติมันมาพร้อมกับความเป็นมนุษย์อ่ะนะ ดังนั้นเรามักจะตัดสินว่า “ใครเขียนแบบนี้วะ โคตรแย่ อ่านไม่รู้เรื่องเลย !@*$$!%#!@!#” หรือ “ทำไมเราถึงคิดไม่ได้แบบนี้นะ เราแม่งอ่อนจริง ๆ” สิ่งเหล่านี้สร้างความกดดันและทำให้เราท้อแท้กับการอ่าน code

จะทำยังไงให้อ่าน code เก่งขึ้น หรือเกลียดมันน้อยลง

1. มองการอ่าน code ให้เหมือนการอ่านแผนที่ขุมทรัพย์

แทนที่จะอ่าน code เหมือนอ่านหนังสือจากหน้าแรกจนถึงหน้าสุดท้าย ให้เราคิดว่ามันคือการสำรวจแผนที่ขุมทรัพย์ เราต้องวางแผนในการกระโดดไปมาระหว่าง function, class และ file ที่เกี่ยวข้อง ซึ่งจะง่ายขึ้นหากเรามีและใช้เครื่องมือทุ่นแรงในการกระโดดไปมา อย่างใน IDE จะมี feature ต่าง ๆ ที่มีประโยชน์ เช่น

  • Navigate to Implementation ดูว่า function หรือ class ใด ๆ ถูกใช้งานที่ไหน
  • Find Usages ค้นหาว่า code ชิ้นนี้มีผลกระทบที่ส่วนใดบ้าง
  • Search All ค้นหา keyword ได้ทั้ง project ซึ่งช่วยได้มากเมื่อไม่แน่ใจว่าอะไรอยู่ตรงไหน
  • Debugging compile และ run code ใน debug mode จากนั้นใส่ breakpoint แล้วลอง run คำสั่งเพื่อเข้าใจ flow ในการทำงาน

2. จดบันทึกภาพรวม code ไว้

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

3. ใส่ comment และจัดระเบียบ code

ระหว่างอ่าน code แล้วทำความเข้าใจได้แล้วว่ามันทำงานอย่างไร ทำให้ code อ่านง่ายขึ้นทีละเล็กทีละน้อยโดยไม่ทำให้ behaviour ของ code เปลี่ยนไป เช่น

  • Refactor เพื่อปรับปรุง code อย่างน้อยจัดกลุ่ม code ที่เกี่ยวข้องกันให้มันอยู่ใกล้กัน
  • เพิ่ม “คำใบ้” ที่ช่วยบอกว่าส่วนไหนทำอะไรอยู่โดยการใส่ comment ในส่วนที่ซับซ้อน เพื่อให้คนอื่น (หรือแม้แต่ตัวเองในอนาคต) เข้าใจได้ง่ายขึ้น

4. ตั้งคำถามให้มากขึ้น

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

5. ใช้ test เป็นตัวช่วย

Automated test ไม่ได้มีไว้แค่ตรวจสอบว่า feature ทำงานถูกต้อง แต่ยังเป็นเหมือน documentation ช่วยให้เราเข้าใจ code ด้วย เริ่มจาก

  • ดูชื่อ test case, input, output เพื่อเข้าใจว่า function มันน่าจะทำอะไร
  • ลองปรับ code ให้ test fail เพื่อดูผลกระทบ
  • สร้าง test ใหม่ เพื่อพิสูจน์ความเข้าใจ

6. ตั้งสติก่อนอ่าน code และอย่าได้โทษตัวเองมากเกินไป

อย่าเพิ่งด่วนตัดสิน code ว่าดีหรือแย่เกินไป มองมันเป็นโอกาสเรียนรู้ และอย่ามองว่า code ของตัวเองหรือคนอื่นสะท้อนคุณค่าในการเป็น developer ที่ดีหรือแย่ของคน ๆ นั้น การอ่าน code เป็น “ทักษะ” อย่างนึง เราจะไม่เก่งขึ้นในสิ่งที่เราไม่ฝึก หากเราให้ความสำคัญกับการพัฒนาอย่างสม่ำเสมอ มันจะช่วยเพิ่มความมั่นใจ ประสิทธิภาพ และทำให้เราเกลียดกับการอ่าน code น้อยลง

ขอให้สนุกกับการอ่าน code นะครับ