mooc-780x520
จากหนังสือ 97 Things Every Programmer Should Know
หรือ 97 สิ่งที่นักพัฒนาอย่างเราๆ ท่านๆ ควรที่จะรู้
เป็นหนังสือที่เก่าหน่อย แต่ผมเชื่อว่ามันยังคงคุณค่าต่อการเรียนรู้

โดยเนื้อหาในหนังสือแบ่งออกเป็นเรื่องๆ อธิบายสั้นๆ ได้ใจความ
คิดว่าน่าจะมีประโยชน์ต่อตัวเอง และ คนที่สนใจโดยเฉพาะนักพัฒนา software
ผมจึงนำแต่ละเรื่องมาแปล และ สรุปในแบบที่ผมเข้าใจ
เริ่มจากเรื่องแรกคือ Coding with Reason

Coding with Reason

ในการเขียน code นั้นควรมีเหตุผลในการเขียนเสมอ ไม่ใช่เขียนตามใจฉัน
โดยเหตุผลในการเขียน code ประกอบไปด้วย

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

แต่แปลกนะ ในระบบงานต่างๆ

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

Code ควรที่จะแบ่งออกเป็นกลุ่มย่อยๆ

ในแต่ละ method/function หรือ แต่ละ block ไม่ควรมีจำนวน Line of Code เยอะๆ นะ
ตัวอย่างเช่นไม่น่าเกิน 10 บรรทัด
ยิ่งแต่ละส่วนมีจำนวน Line of Code เยอะเกินไป ก็จะใช้เวลาการตรวจสอบความถูกต้องเยอะเช่นกัน
ดังนั้นลดจำนวน Line of Code ลงน่าจะเป็นทางที่ดีกว่า

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

มีรูปแบบในการเขียน code ที่ดี

ในปัจจุบันมีรูปแบบการเขียน code ที่ดีมากมาย
ซึ่งทุกๆ รูปแบบนั้นสามารถตรวจสอบด้วย Static Code Analyzer ได้ทั้งหมด ดังนี้

  • หลีกเลี่ยงการใช้คำสั่ง goto ผมเชื่อว่าคงไม่มีใครใช้แล้ว
  • หลีกเลี่ยงการใช้งาน Global variable ที่สามารถแก้ไขให้ใช้งานจากที่ไหนๆ ก็ได้ ควรใช้งานได้เฉพาะในส่วนที่เกี่ยวข้องเท่านั้น
    แต่ละตัวแปร ควรมีขอเขตการใช้งานที่แคบที่สุด
  • ทำให้ code อ่านง่ายๆ ด้วยการใช้ spacebar ที่เหมาะสมและเหมือนกันทั้งหมด
  • code ควรที่จะอธิบาายตัวมันเอง ดังนั้นเรื่องของการตั้งชื่อจึงมีความสำคัญมากๆ
  • ถ้าในส่วนการทำงานหนึ่งๆ มีการทำงานที่ซับซ้อน หรือ หลายขั้นตอน ในขั้นแรกให้ทำการแยกออกมาเป็น method/function ใหม่ก่อนเลย
  • แต่ละ method/function ควรที่จะสั้นๆ และทำงานเพียงอย่างเดียว นั่นคือให้ทำการกำหนดจำนวน Line of Code ไปเลย ถ้าเป็นแต่ก่อนจะบอกว่าไม่เกิน 24 บรรทัด หรือ หนึ่งหน้าจอ แต่ในปัจจุบัน 10 บรรทัดก็มากเกินไปแล้ว
  • แต่ละ method/function ควรมีจำนวน parameter ให้น้อยที่สุด ดีที่สุดคือไม่มี parameter เลย หรือมากที่สุดไม่ควรเกิน 4 เนื่องจากยิ่งมีจำนวน parameter มากก็จะเพิ่มหน้าที่และการทำงานสูง รวมทั้งการตรวจสอบความถูกต้องก็ยากและใช้เวลาสูงขึ้น
  • code แต่ละส่วนไม่ควรผูกมัดกัน ควรจะติดต่อสื่อสารกันผ่าน abstraction layer หรือ interface แทน

ทั้งหมดนี้คือ

เหตุผลที่ developer เราควรเขียน code มิใช่เขียนเพียงให้มันเสร็จๆ ไปเท่านั้น