จากบทความเรื่อง 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 ด้วยแล้ว ยิ่งไปกันใหญ่ แสดงดังรูปมีหลาย ๆ คนคิดจะแก้ไขและปรับปรุงให้ดีขึ้น
แต่เมื่อเข้ามาแก้ไขกลับพบว่า การแก้ไขมันมีข้อขัดแย้งต่อโครงสร้างระบบปัจจุบันเหลือเกิน ดังนั้นมีเพียงสองทางให้เลือกคือ- อย่าไปยุ่งกับมัน
- เขียนใหม่เถอะ
ลองถามตัวเราเองสิว่า จะเลือกทางไหน ?โดยผลต่าง ๆ ที่เกิดขึ้นมาล้วนมีสาเหตุมาจาก ระบบงานโตขึ้นทุกวัน ความซับซ้อนของระบบก็สูงขึ้นทุกวัน จนเราไม่สามารถควบคุมและจัดการมันได้ ถ้าเราในฐานนะนักพัฒนา software ไม่สามารถควบคุมความซับซ้อนของระบบที่พัฒนาได้แล้ว ความยุ่งยาก ความวุ่นวาย ซึ่งเป็นต้นเหตุของหายนะต่าง ๆ ย่อมเกิดขึ้นอย่างแน่นอน และ หลีกเลี่ยงไม่ได้เลย
ดังนั้นนักพัฒนาที่ดีต้องมีความสามารถดังนี้
- จัดการความซับซ้อนของระบบได้ด้วยแนวปฏิบัติที่ดี
- รู้และเข้าใจในตัว framework และ เครื่องมือ ที่นำมาใช้เป็นอย่างดี ไม่ใช้เพราะว่าเห็นเขาใช้หรืออยากใช้
อย่าลืมว่าของที่มันดี ถ้าอยู่ในมือของคนที่ไม่เข้าใจ ถ้าอยู่ในมือของคนที่ไม่มีความสามารถ มันก็กลับกลายเป็นสิ่งที่แย่ได้เช่นกัน
คำถามคือ แล้วต้องทำอย่างไรบ้าง ?
สิ่งที่นักพัฒนาที่ดีควรต้องทำก่อนคือ การจัดการความซับซ้อนให้ลดน้อยลงไปให้ได้ นั่นคือ ต้องทำการปรับปรุงความสามารถต่าง ๆ ขึ้นมา ลองถามตัวเราเองสิว่า รู้แล้วเข้าใจสิ่งต่าง ๆ เหล่านี้หรือไม่ ? ถ้ายังศึกษาซะ- SOLID principles
- Design patterns
- Refactoring
- Code smell
- Testing
- รูปแบบต่าง ๆ ของ Architecture
จากนั้นทำการศึกษาและเรียนรู้เครื่องมือต่าง ๆ
ที่มีประโยชน์ต่อการพัฒนาระบบงาน เนื่องจากเราไม่จำเป็นต้องสร้างทุกสิ่งขึ้นมาใช้เองนะ นำเครื่องมือมาช่วยจัดการความซับซ้อนบ้างก็ได้ แต่ต้องเข้าใจเครื่องมือเป็นอย่างดีนะ เพื่อเลือกเครื่องมือที่เหมาะสมกับงานและปัญหามิเช่นนั้นทุกสิ่งทุกอย่างที่คุณเลือกมันจะกลับมาทำร้ายคุณเอง !!