จากบทความเรื่อง 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
จากนั้นทำการศึกษาและเรียนรู้เครื่องมือต่าง ๆ
ที่มีประโยชน์ต่อการพัฒนาระบบงาน
เนื่องจากเราไม่จำเป็นต้องสร้างทุกสิ่งขึ้นมาใช้เองนะ
นำเครื่องมือมาช่วยจัดการความซับซ้อนบ้างก็ได้
แต่ต้องเข้าใจเครื่องมือเป็นอย่างดีนะ
เพื่อเลือกเครื่องมือที่เหมาะสมกับงานและปัญหา
มิเช่นนั้นทุกสิ่งทุกอย่างที่คุณเลือกมันจะกลับมาทำร้ายคุณเอง !!