22/09/2026 23:26น.

วันแรกที่ต้องอ่านโค้ดที่คนอื่นเขียน เริ่มตรงไหนก่อน
#อ่านโค้ด
#codebase
#entry point
#data flow
#Git
#โปรแกรมเมอร์มือใหม่
เวลามีน้องๆ ที่เพิ่งเข้าทำงานที่แรกถามทีมเราว่า "พี่ครับ วันแรกเขาให้ผมอ่านโค้ดของระบบที่ทีมทำกันมาสามปี ผมควรเริ่มตรงไหน" คำตอบที่เราตอบบ่อยที่สุดคือ "อย่าเพิ่งเปิดไฟล์แรก"
ฟังดูแปลก เพราะสิ่งที่เกือบทุกคนทำในวันแรกคือเปิดโฟลเดอร์โปรเจกต์ แล้วไล่อ่านจากบนลงล่างเหมือนอ่านหนังสือ ซึ่งเป็นวิธีที่ทำให้หมดแรงเร็วที่สุด
บทความนี้เลยอยากตอบให้ชัดว่า ถ้าคุณต้องทำความเข้าใจ codebase ที่ไม่ได้เขียนเอง ควรไล่ตามลำดับไหน และทำไมลำดับนั้นถึงประหยัดเวลากว่าการอ่านทีละไฟล์มาก
ทำไมการอ่านไล่ทีละไฟล์ถึงไม่เวิร์ก
โค้ดไม่ได้ถูกเขียนเรียงตามลำดับที่มันทำงาน ไฟล์ที่ชื่อขึ้นต้นด้วย a อาจถูกเรียกเป็นอันดับสุดท้าย หรือไม่ถูกเรียกเลยก็ได้ การไล่อ่านตามโครงสร้างโฟลเดอร์จึงเหมือนอ่านพจนานุกรมเพื่อเรียนภาษา คุณจะรู้จักคำเยอะมาก แต่ยังพูดไม่ได้สักประโยค
เป้าหมายจริงของคุณคือการตอบให้ได้ว่า เมื่อผู้ใช้กดปุ่มหนึ่งครั้ง เกิดอะไรขึ้นบ้างตามลำดับ การรู้แค่ว่ามีไฟล์อะไรอยู่ในโปรเจกต์บ้างตอบคำถามนั้นไม่ได้ และคำถามนั้นคือสิ่งที่ทำให้คุณแก้บั๊กตัวแรกได้จริง
ลำดับที่เราแนะนำ
1. หา entry point ให้เจอก่อน
ทุกระบบมีจุดที่โปรแกรมเริ่มทำงาน เว็บแอปมักเป็นไฟล์ที่ตั้งค่า route ส่วน service ฝั่งหลังบ้านมักเป็นฟังก์ชัน main หรือไฟล์ที่ชื่อประมาณ server หรือ app
วิธีที่เร็วกว่าการเดาจากชื่อไฟล์คือ เปิดไฟล์ตั้งค่าของโปรเจกต์ (package.json, go.mod, Makefile, Dockerfile) แล้วดูว่าคำสั่งที่ใช้รันจริงเรียกอะไร คำสั่งนั้นจะชี้ไปที่ entry point เสมอ เพราะเครื่องต้องรู้ ไม่ใช่แค่คนที่รู้
2. เลือกหนึ่ง feature แล้วไล่ตามมันไปจนสุด
อย่าพยายามเข้าใจทั้งระบบพร้อมกัน เลือกมาหนึ่งอย่างที่เล็กและจบในตัว เช่น หน้า login หรือปุ่มลบรายการหนึ่งปุ่ม แล้วไล่ตามเส้นทางของมันตั้งแต่ผู้ใช้กด จนข้อมูลลงฐานข้อมูล
ระหว่างไล่ คุณจะเจอ pattern ที่ทีมนี้ใช้ซ้ำทุกที่โดยอัตโนมัติ เช่น ทุก request ผ่าน middleware ตัวไหน error ถูกจัดการที่ชั้นไหน ข้อมูลถูก validate ตรงไหน พอรู้ pattern แล้ว feature ที่สองจะใช้เวลาน้อยลงมาก เพราะโครงเหมือนกัน
3. อ่าน data flow ก่อนอ่าน logic
คำถามที่ควรตอบให้ได้ก่อนคือ ข้อมูลมาจากไหน ถูกแปลงรูปกี่ครั้ง แล้วไปจบที่ไหน ส่วนรายละเอียดว่าแต่ละฟังก์ชันคำนวณอะไร เก็บไว้ทีหลังได้
เหตุผลคือ bug ส่วนใหญ่ที่คนใหม่ต้องแก้ มักเกิดจากข้อมูลไม่ได้อยู่ในรูปที่ฟังก์ชันคาดไว้ มากกว่าเกิดจาก logic ที่คำนวณผิด ถ้าคุณเห็นเส้นทางของข้อมูลชัด คุณจะเดาได้เร็วขึ้นมากว่าควรไปวาง log ตรงไหน
4. ใช้ประวัติของ Git เป็นเอกสาร
codebase ส่วนใหญ่มีเอกสารไม่ครบ แต่ทุก codebase มีประวัติครบ ถ้าเจอโค้ดที่ดูแปลกและไม่เข้าใจว่าทำไมต้องเขียนแบบนี้ ให้ดูว่าบรรทัดนั้นถูกแก้ครั้งล่าสุดเมื่อไหร่และด้วยเหตุผลอะไร
เครื่องมือที่ตรงที่สุดสำหรับงานนี้คือ git log -L ซึ่งตามประวัติของ "ช่วงบรรทัดหนึ่ง" ในไฟล์เดียว แทนที่จะไล่ทั้งไฟล์ เอกสารทางการของ Git อธิบายรูปแบบการใช้งานไว้ที่ git-scm.com/docs/git-log ในหัวข้อ Line Range Options
โค้ดที่ดูเหมือนเขียนผิด บ่อยครั้งคือโค้ดที่ถูกแก้เพราะเคยมีปัญหาจริง การรู้เรื่องนี้ก่อนจะช่วยให้คุณไม่ไป "ทำความสะอาด" สิ่งที่มีเหตุผลอยู่แล้ว ซึ่งเป็นความผิดพลาดที่คนใหม่ทำบ่อยที่สุดอย่างหนึ่ง
สิ่งที่ยังไม่ต้องรีบเข้าใจ
ตรงนี้สำคัญพอๆ กับลำดับข้างบน เพราะการพยายามเข้าใจทุกอย่างพร้อมกันคือสาเหตุที่คนท้อในสัปดาห์แรก
ยังไม่ต้องรีบเข้าใจ ไฟล์ตั้งค่าของ CI ทั้งหมด สคริปต์ deploy ทุกตัว โค้ดที่ไม่มีใครแตะมาสองปี และ test ทั้ง suite สิ่งเหล่านี้สำคัญ แต่มันจะเข้าใจง่ายขึ้นมากหลังจากคุณเข้าใจ flow หลักแล้ว ไม่ใช่ก่อน
ถ้าโค้ดมันแย่จริงๆ ล่ะ
บางทีคุณอ่านแล้วรู้สึกว่าโค้ดนี้เขียนไม่ดีจริงๆ ความรู้สึกนั้นอาจถูกก็ได้ แต่ในสัปดาห์แรกเรายังแยกไม่ออกระหว่าง "โค้ดแย่" กับ "โค้ดที่เรายังไม่เข้าใจบริบทของมัน"
วิธีที่ปลอดภัยกว่าคือจดไว้เฉยๆ อย่าเพิ่งเสนอแก้ แล้วกลับมาอ่านโน้ตตัวเองอีกทีตอนผ่านไปหนึ่งเดือน ข้อไหนที่ยังคิดเหมือนเดิม ข้อนั้นน่าจะจริง และตอนนั้นคุณจะมีหลักฐานพอที่จะเสนอได้ด้วย
สรุป
การอ่าน codebase ที่คนอื่นเขียน คือการเลือกเส้นทางเดียวแล้วเดินให้จบ มากกว่าการอ่านให้ครบทุกไฟล์
หา entry point ก่อน เลือกหนึ่ง feature ไล่ data flow ให้เห็นทั้งเส้น แล้วใช้ประวัติของ Git ตอบคำถามว่าทำไม ส่วนอย่างอื่นค่อยๆ เก็บทีหลังได้
และถ้าสัปดาห์แรกคุณยังงงอยู่ นั่นไม่ได้แปลว่าคุณไม่เก่ง codebase ที่ทีมสิบคนช่วยกันเขียนมาสามปี ไม่มีใครอ่านจบในวันเดียว คนที่ดูเหมือนเข้าใจเร็ว ส่วนใหญ่แค่เคยผ่านลำดับนี้มาก่อนแล้วเท่านั้น
🔵 Facebook: Superdev School (Superdev) superdev.school.th
📸 Instagram: superdevschool superdevschool
🎬 TikTok: superdevschool superdevschool
🌐 Website: www.superdevacademy.com superdevacademy.com
FAQ: คำถามที่พบบ่อยเกี่ยวกับบทความนี้
รวมคำถามและคำตอบที่ช่วยให้คุณเข้าใจเนื้อหาในบทความนี้ได้ดียิ่งขึ้น