Screen Shot 2558-01-06 at 9.59.14 AM
เรื่องที่ 22 ที่นักพัฒนาควรรู้ และ เข้าใจก็คือ Choose Your Tools with Care
ควรเลือกเครื่องมือให้เหมาะสมกับงาน

ในปัจจุบันนี้ มีระบบน้อยมากๆ ที่เริ่มพัฒนาจากศูนย์
เนื่องจากนักพัฒนาส่วนใหญ่ จะเริ่มต้นพัฒนาระบบ
ด้วยการนำสิ่งที่มีอยู่มาใช้งานก่อนเลย
ตัวอย่างเช่น เครื่องมือพัฒนา component, library และ framework ต่างๆ
ทำไมนะ ?

ข้อดีของการนำสิ่งที่มีอยู่แล้วมาใช้เลย มีอะไรบ้าง ?

  • เนื่องจากระบบงานมันจะต้องใหญ่ และ มีความซับซ้อนตามขนาดของระบบที่ใหญ่ขึ้น ดังนั้นแทนที่เราจะต้องสนใจส่วนการทำงานต่างๆ ใน code ก็ให้ไปสนใจเฉพาะ business logic ดีกว่านะ ทำให้เราพัฒนาระบบงานได้รวดเร็วขึ้น
  • สิ่งที่นำมาใช้มันมีคุณภาพที่ดีอยู่แล้ว นั่นคือ bug ต่างๆ ก็จะน้อยตามลงไป รวมทั้งมีผู้ใช้งานจำนวนมาก ทำให้หาคนมาพัฒนาได้ง่าย รวมทั้งการแก้ไขปัญหาต่างๆ ก็จะง่ายเช่นกัน
  • ในการดูแลรักษา และ พัฒนา นั้นคือ คน ดังนั้นแทนที่จะสร้างใหม่ ก็ซื้อเลยดีกว่า มันถูกกว่าเยอะ

อย่างไรก็ตามในการเลือกเครื่องมือที่เหมาะสมนั้น

ควรจะเป็นไปตาม business requirement มากกว่า technical requirement
ซึ่งมีคำแนะนำในการเลือกเครื่องมือดังนี้

  • เครื่องมือต่างๆ มันจะเหมาะสมในแต่ละบริบท หรือ สิ่งแวดล้อม ถ้าใช้ผิดก็ส่งผลเสียมากมาย เช่น infrastructure, control model, data model และ การติดต่อสื่อสาร เป็นต้น ซึ่งมันส่งผลทำให้ architecture ระหว่าง application และ เครื่องมือ ไม่สัมพันธ์กัน ทำให้เราต้องทำการแก้ไขด้วยวิธีการ Hack และแก้ไขเฉพาะหน้าให้มันทำงานได้ หรือ workaround นั่นเอง ส่งผลทำให้ code ของระบบมันซับซ้อนขึ้นไปเรื่อยๆ …. ระบบของคุณเป็นไหม ?
  • เครื่องมือต่างๆ ล้วนมี lifecycle ที่แตกต่างกัน เช่น การ upgrade ระบบอาจจะทำได้ยาก และ กินเวลานาน ทั้งเรื่องของการเพิ่มความสามารถใหม่ การแก้ไข bug การเปลี่ยนแปลงการออกแบบ ซึ่งมันส่งผลให้เกิดความเข้ากันไม่ได้ หรือ incompatibility ของเครื่องมือแต่ละอัน และตอนนั้นเองเครื่องมือที่คุณเคยบอกว่ามันสุดยอดมากๆ จะกลายเป็นของห่วยๆ เต็มไปด้วยปัญหาทันที
  • เครื่องมือบางตัวจำเป็นต้องทำการ configuration เช่น อยู่ในรูปแบบไฟล์ XML และมักพบว่า configuration มันจะโตขึ้นอย่างรวดเร็ว กลายเป็นว่าเราไม่สามารถควบคุมมันได้ ทำให้ configuration กลายมาเป็นปัญหา เนื่องจากมันซับซ้อนมากๆ ยากต่อการดูแลรักษา และ ยากต่อการเพิ่มความสามารถใหม่ๆ
  • ผูกติดกับ Vendor นั่นคือ จะต้องใช้เครื่องมือต่างๆ ของ vendor นี้เท่านั้นนะ เพราะว่า เราต้องการมาตรฐานกลาง !! สุดท้ายมันส่งผลอะไรต่อทีมและบริษัทบ้างล่ะ เช่น ค่าใช้จ่ายเรื่อง licence ที่สูงขึ้นตามการใช้งาน การผูกติดกับ vendor ทำให้มีปัญหาเรื่อง performance, maintain ขึ้นทุกวัน จะเปลี่ยนก็เปลี่ยนไม่ได้ เพราะว่าใช้แบบผูกติดไปแล้วเยอะมากๆ สุดท้ายคือ ทำใจ ใช้ๆ มันไปเถอะ !!
  • บางทีมบอกว่าจะใช้ free software แต่ก็พบว่าจริงๆ แล้วมันไม่ฟรีหรอกนะ เนื่องจากถ้าไม่มีความรู้ความเข้าใจ หรือ ไม่พยายามที่จะศึกษามัน ก็ต้องทำการซื้อ service ต่างๆ ด้วยเช่นกัน นั่นมันไม่ใช่ทางที่ถูกเลยใช่ไหม ?
  • ว่าด้วยเรื่องของ Licence ของ software/tool ที่นำมาใช้ บางทีมบอกว่า software/tool ที่มันเป็น GNU Licence นั้นน่ากลัวมาก เพราะว่าใครๆ ก็แก้ไข code ได้ … ถ้ายังคิดแบบนี้แสดงว่าไปอยู่หลังเขามาอย่างแน่นอน !!

สิ่งที่ขอแนะนำในการเลือกเครื่องมือ

ให้ทำการลดปัญหาต่างๆ ลง ด้วยการเริ่มต้นแบบเล็กๆ
โดยให้เลือกเฉพาะเครื่องมือ component, library และ framework ที่จำเป็นเท่านั้น
อย่าไปเผื่อโน่น นี่ นั่น เยอะ

อย่าไปยุ่งกับพวก low-level infrastructure มากนั้น เช่น protocol ต่างๆ
ก็ใช้พวก middleware ซะ เพื่อลดการจัดการลงไป
แต่ก็ไม่ใช่เอะอะก็จะใช้ middleware ไปซะหมดนะ
ไม่งั้นก็จะกลับไป ณ จุดที่คุณยืนอยู่แน่นอน

และให้พยายามแยกเครื่องมือที่เลือก
ให้แยกออกจากกันตาม business requirement
อย่าพยายามทำให้แต่ละเครื่องมือมันผูกติดกันแน่น
ไม่เช่นนั้นเมื่อเกิดปัญหา และ requirement เปลี่ยนขึ้นมา
ชีวิตของคุณจะนรกมากๆ
ถ้าเรียนผูกได้ ก็ต้องเรียนแก้เป็น เช่นกัน

ดังนั้นแต่ละส่วนควรติดต่อกันผ่าน interface
และแบ่งการทำงานเป็น layer ซะ
เมื่อเปลี่ยนแปลงจะไม่ต้องเจ็บปวดมากนัก

ปัจจุบันคุณเลือกเครื่องมือในการพัฒนาอย่างไร ?
ยังผูกติดกับ vendor อยู่ไหม ?
เคยใช้ free software หรือ open source ไหม ?
ยังๆ ไม่พัฒนาสัก feature เลย แต่ระบบงานซับซ้อนแล้ว ?
มีปัญหากับเครื่องมือที่เลือกใช้ไหม ?

อย่าลืมกันนะครับว่า

Individuals and interactions over processes and tools