สัญชาตญาณของนักพัฒนา โค้ดที่อ่านง่าย และประสาทวิทยา: ทำไมเราจึงรู้สึกสบายใจกับโค้ดบางแบบ?
(evan-moon.github.io)การพูดถึง 'โค้ดที่อ่านง่าย' มักถูกมองว่าเป็นเรื่องของรสนิยมส่วนบุคคลหรือขนบปฏิบัติ แต่แท้จริงแล้วเบื้องหลังนั้นมีหลักการทางวิทยาศาสตร์การรับรู้ทำงานอยู่ บทความนี้แยกองค์ประกอบของ 'สัญชาตญาณ' ของนักพัฒนาออกมาผ่านมุมมองประสาทวิทยา และวิเคราะห์ความรู้สึกนามธรรมอย่างความอ่านง่ายให้เป็นโครงสร้างเชิงตรรกะ
-
สัญชาตญาณไม่ใช่เวทมนตร์ แต่คือความชำนาญในการจับคู่รูปแบบขั้นสูง การที่นักพัฒนามากประสบการณ์ได้กลิ่นไม่ดีจากโค้ดทันทีที่เห็น ไม่ใช่แค่ความรู้สึกเลือนลอย แต่มันคือกระบวนการที่ Ventral Striatum ของสมองนำรูปแบบโค้ดจำนวนมากที่เคยเรียนรู้มาเทียบกับโค้ดปัจจุบันแบบเรียลไทม์ กล่าวคือ สัญชาตญาณไม่ใช่การละทิ้งตรรกะ แต่เป็นผลลัพธ์ของ 'การคำนวณความเร็วสูง' ที่ประมวลผลเร็วเกินกว่ากระบวนการเชิงตรรกะจะปรากฏขึ้นมาบนพื้นผิวของความรู้ตัว
-
ข้อจำกัดของหน่วยความจำขณะทำงาน (Working Memory) และภาระทางการรับรู้ หน่วยความจำขณะทำงานของมนุษย์สามารถประมวลผลหน่วยข้อมูล (Chunk) ได้เพียงราว 3~5 หน่วยในคราวเดียว โค้ดที่มีความอ่านง่ายต่ำจะทำให้ทรัพยากรอันจำกัดนี้หมดลง
การกระโดดทางการรับรู้ที่ไม่จำเป็น: โค้ดที่ส่วนประกาศและส่วนทำงานอยู่ห่างกันเกินไป หรือมีความสัมพันธ์เชิงเหตุและผลที่ยุ่งเหยิง จะทำให้สมองต้องทำ 'context switching' อย่างต่อเนื่องเพื่อรักษาบริบทปัจจุบันไว้
การมองเห็นเชิงจิตวิทยา: การที่โค้ดอ่านเข้าใจได้ในพริบตา หมายความว่าสมองสามารถแมปโค้ดนั้นเข้ากับรูปแบบ (Schema) ที่รู้จักอยู่แล้วได้ทันที โดยไม่ต้องผ่านกระบวนการตีความเพิ่มเติม
- การออกแบบโค้ดด้วยการใช้ Chunking สมองจะทำงานได้มีประสิทธิภาพสูงสุดเมื่อรับรู้ข้อมูลเดี่ยว ๆ แบบจัดกลุ่มเป็นหนึ่งหน่วย
ฟังก์ชันและโมดูลที่ออกแบบมาอย่างดีจะนามธรรมตรรกะที่ซับซ้อนให้กลายเป็น 'ชังก์' เดียว ช่วยให้ผู้อ่านเข้าใจบริบทโดยรวมได้แม้ไม่ต้องจำรายละเอียดการทำงานภายใน
แต่การนามธรรมมากเกินไปกลับทำให้ต้องเปิดดูภายใน 'ชังก์' นั้นก่อนจึงจะเข้าใจความหมาย ก่อให้เกิด 'ความไม่มีประสิทธิภาพทางการรับรู้' ที่ทำให้ต้นทุนในการตีความของสมองเกิดขึ้นซ้ำซ้อน
- กฎการอนุรักษ์พลังงานของสมองกับความสม่ำเสมอของโค้ด สมองเป็นอวัยวะที่ใช้พลังงานมากกว่า 20% ของพลังงานทั้งร่างกาย และโดยสัญชาตญาณจะพยายามลดการใช้พลังงาน การตั้งชื่อที่ไม่สม่ำเสมอหรือคอนเวนชันที่แกว่งไปมา จะทำลาย 'แบบจำลองการคาดการณ์' ของสมองและทำให้ต้องใช้พลังงานโดยไม่จำเป็น ในทางกลับกัน โค้ดที่มีกฎชัดเจนจะทำให้สมองอ่านโค้ดในโหมด 'นำทางอัตโนมัติ' และลดความเหนื่อยล้าได้
สรุป: ความอ่านง่ายคือความใส่ใจต่อสมองของเพื่อนร่วมงาน ท้ายที่สุดแล้ว การออกแบบโค้ดที่ดีคือการออกแบบเชิงการรับรู้ที่ช่วยลดพลังงานที่สมองของเพื่อนนักพัฒนาต้องใช้ไปกับการ 'จดจำรูปแบบ' การเพิ่มความอ่านง่ายจึงไม่ใช่แค่ทำให้โค้ดดูสวยขึ้น แต่เป็นการปกป้องทรัพยากรทางการรับรู้ที่มีจำกัดของผู้ร่วมงานด้วยวิธีที่ประหยัดที่สุด
1 ความคิดเห็น
ขอบคุณสำหรับบทความดี ๆ ครับ
โค้ดตัวอย่างโดนใจมากเลยครับ 555