mess-00
จากบทความเรื่อง Why it happens to your code again and again?
อธิบายการพัฒนาระบบ web application ด้วย RoR (Ruby on Rails)
ซึ่งเป็น framework หลักของการพัฒนาระบบด้วยภาษา Ruby
โดยในช่วงแรกของการพัฒนาระบบนั้นจะราบรื่นและรวดเร็ว
ไม่ว่าจะเป็นการเพิ่ม gem หรือ library ต่าง ๆ เข้าไป
ทุกอย่างมันแจ่มมาก ๆ

แต่เมื่อเวลาผ่านไปเรากลับพบว่า


ยิ่งทำการเพิ่ม feature ใหม่ ๆ เข้ามา
ยิ่งทำการเพิ่ม gem หรือ libray ต่าง ๆ เข้ามา
การพัฒนากลับยิ่งช้าลง
การพัฒนาเป็นแบบปะผุไปวัน ๆ หรือ ทำให้มันเสร็จ ๆ ไป
code ของแต่ละส่วนผูกมัดกันเหลือเกิน
แก้ไขจุดหนึ่งกระทบไปอีกหลายจุด
ยิ่งทำการ update version ของ gem หรือ library ด้วยแล้ว ยิ่งไปกันใหญ่
แสดงดังรูป

cycle

มีหลาย ๆ คนคิดจะแก้ไขและปรับปรุงให้ดีขึ้น

แต่เมื่อเข้ามาแก้ไขกลับพบว่า
การแก้ไขมันมีข้อขัดแย้งต่อโครงสร้างระบบปัจจุบันเหลือเกิน
ดังนั้นมีเพียงสองทางให้เลือกคือ

  1. อย่าไปยุ่งกับมัน
  2. เขียนใหม่เถอะ

ลองถามตัวเราเองสิว่า จะเลือกทางไหน ?

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

ถ้าเราในฐานนะนักพัฒนา software
ไม่สามารถควบคุมความซับซ้อนของระบบที่พัฒนาได้แล้ว
ความยุ่งยาก ความวุ่นวาย ซึ่งเป็นต้นเหตุของหายนะต่าง ๆ
ย่อมเกิดขึ้นอย่างแน่นอน และ หลีกเลี่ยงไม่ได้เลย

ดังนั้นนักพัฒนาที่ดีต้องมีความสามารถดังนี้

  • จัดการความซับซ้อนของระบบได้ด้วยแนวปฏิบัติที่ดี
  • รู้และเข้าใจในตัว framework และ เครื่องมือ ที่นำมาใช้เป็นอย่างดี ไม่ใช้เพราะว่าเห็นเขาใช้หรืออยากใช้

อย่าลืมว่าของที่มันดี
ถ้าอยู่ในมือของคนที่ไม่เข้าใจ
ถ้าอยู่ในมือของคนที่ไม่มีความสามารถ
มันก็กลับกลายเป็นสิ่งที่แย่ได้เช่นกัน

คำถามคือ แล้วต้องทำอย่างไรบ้าง ?

สิ่งที่นักพัฒนาที่ดีควรต้องทำก่อนคือ
การจัดการความซับซ้อนให้ลดน้อยลงไปให้ได้
นั่นคือ ต้องทำการปรับปรุงความสามารถต่าง ๆ ขึ้นมา

ลองถามตัวเราเองสิว่า
รู้แล้วเข้าใจสิ่งต่าง ๆ เหล่านี้หรือไม่ ? ถ้ายังศึกษาซะ

  • SOLID principles
  • Design patterns
  • Refactoring
  • Code smell
  • Testing
  • รูปแบบต่าง ๆ ของ Architecture

จากนั้นทำการศึกษาและเรียนรู้เครื่องมือต่าง ๆ

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

มิเช่นนั้นทุกสิ่งทุกอย่างที่คุณเลือกมันจะกลับมาทำร้ายคุณเอง  !!