1-IwCK7cXkjdA2bbFI6gvcCQ
เมื่อเขียน code และ ไปดู code ของคนอื่น
เรามักจะเจอกับ code ที่มันสั้นๆแถมทำงานได้ด้วย

คำถามที่มักจะเกิดขึ้นในใจคือ

  • เขียนได้ไงว่ะ ?
  • คิดได้ยังไง ?
  • คนเขียนมันเก่งมากๆ เลย

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

บ่อยครั้งมากๆ ที่มีโอกาส review code และ ดู code จากที่ต่างๆ

พบว่า สิ่งหนึ่งที่นักพัฒนานิยมก็คือ
การเขียน code แก้ไขปัญหาหนึ่ง ให้สั้นที่สุดเท่าที่จะทำได้ !!
หรือจำนวน Line of Code (LoC) น้อยๆ
เพื่อที่จะทำให้เราดูแจ่ม
และ ยิ่งใน web เกี่ยวกับการเขียน code แล้ว เราจะได้การ vote สูงๆ !!
เพราะว่า มันเป้นแนวทางการแก้ไขที่ดูแจ่ม ดูดี samrt มากๆ

แต่คุณรู้ไหมว่า นั่นคือเส้นทางการเขียน code ที่อันตรายมากๆ

จากบทความ Shorter code is inconsiderate เขียนไว้ว่า

code เหล่านั้นคือ crap code

คุณ Brain Kerninghan กล่าวไว้ว่า

“… debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?”

เมื่อคุณลดจำนวน LoC ลงไปนั่นหมายถึง คุณจะต้องเข้ารหัสอะไรบางอย่าง
ลองถามตัวเองหน่อยสิว่า

  • นั่นเป็นวิธีการเขียน code ที่สามารถอ่านได้ง่าย เข้าใจได้ง่าย และ ยั่งยืนไหม ?
  • นั่นเป็นวิธีการเขียน code ที่สามารถหาจุดที่ผิดพลาดได้ง่าย หรือ ยาก ?
  • จำนวน LoC ที่น้อยๆ มันอาจจะไม่ใช่แนวทางของ clean code ก็ได้นะ ?
  • คุณใช้เวลาในการเขียนนานไหม ?
  • ทีมของคุณใช้เวลาในการอ่าน เพื่อทำความเข้าใจนานไหม ?

คำตอบจากคำถามเหล่านี้ มันจะสะท้อน code ที่คุณเขียนขึ้นมาได้

บางครั้งการเขียน code สั้นๆ ก็ไม่ได้ทำเพื่อใคร
แต่ทำเพื่อตัวเราเอง สนองความต้องการของตัวเองล้วนๆ
โดยไม่สนใจใครเลย หรือ ego ล้วนๆ

บางคนบอกว่า code ที่มันยาวๆ และ ซ้ำซ้อน คือ code ที่แย่ๆ
ตอบได้เลยว่า ใช่แล้ว
แต่ code ที่มันสั้นๆ ก็ไม่ได้หมายความว่าเป็น code ที่ดีเช่นกันนะ !!

code ที่สั้น กับ code ที่กระชับได้ใจความ มันต่างกันมากนะครับ
ซึ่งเราต้องพึงระวังไว้อย่างมากมาย

จากบทความเรื่อง Shorter code is inconsiderate ได้ยกตัวอย่างไว้ดังนี้

ตัวอย่างการหา Hamming distance ดังนี้

  • abcde ห่างจาก abcde เท่ากับ 0
  • abcde ห่างจาก edcba เท่ากับ 4
  • abc ห่างจาก abcde เท่ากับ 2

สามารถเขียน code ด้วยภาษา Python แบบสั้นๆ ได้ดังนี้

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

แต่ถ้าเขียน code แบบใหม่ ดังนี้ล่ะ

คำอธิบาย
เป็น code ที่ยาว และ มี comment เพียบเลย
แต่เป็น code ที่อ่าน และ ทำความเข้าใจง่ายกว่าแบบสั้นๆ ไหมนะ ?

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

ดังนั้นให้ลองคิดหน่อย สำหรับการเขียน code นะครับ

ว่า คุณเขียนเพื่อตัวคุณเอง หรือ เพื่อคนอื่นๆ

แต่สิ่งที่อยากจะแนะนำคือ

ให้เขียน code ที่มันอ่านง่าย เข้าใจง่าย
และแน่นอน เขียนเพื่อคนอื่นด้วย
แล้วคุณจะได้รับประโยชน์จากมันมากขึ้น

Reference Website
Shorter code is inconsiderate
Shorter code it better ?