ได้รับโอกาสให้ไปแบ่งปันมุมมองเรื่อง Software Development Trends 2017
ในงาน IT Trends: Strategic Planning for 2016 จัดโดยสถาบัน IMC
ซึ่งมีหัวข้อที่น่าสนใจมากมาย
ส่วนในเรื่องของ Software Development Trends 2017 นั้นมีเนื้อหาดังนี้
- ปัญหาที่พบในการพัฒนา software
- ว่าด้วยเรื่องกระบวนการคิด
- ว่าด้วยเรื่องของโครงสร้างองค์กร
- ว่าด้วยเรื่องของทีม
- ว่าด้วยเรื่องของเทคโนโลยี
- ว่าด้วยเรื่องของ programming language trend
ปัญหาหลักที่พบในการพัฒนา software
นั่นคือ สิ่งที่ลูกค้าคิดไม่ตรงกับสิ่งที่อยากได้ นั่นคือ สิ่งที่ทีมพัฒนาทำไม่ตรงกับที่ลูกค้าคิดและอยากได้ นั่นคือ ขั้นตอนการพัฒนาที่ยุ่งยากทำให้รู้ปัญหาในภาพรวมได้ช้า นั่นคือ ต่างคนต่างทำงานเพื่อให้งานของตัวเองเสร็จ (Responsibility) แต่ไม่ได้สนใจผลที่ตามมาว่าจะเป็นอย่างไร ? เช่น ทีม requirement ก็พยายามทำเอกสารทั้งหมดของ requirement ออกมาให้เสร็จตามแผนที่กำหนด ทีมออกแบบก็พยายามทำตามเอกสาร requirementให้เสร็จตามแผนที่กำหนด ทีมพัฒนาก็พยายามพัฒนาระบบตามการออกแบบให้เสร็จตามแผนที่กำหนด ทีมทดสอบก็พยายามหาข้อผิดพลาดให้ได้มากที่สุดให้เสร็จตามแผนที่กำหนด จะพบว่าแต่ละทีมมีเป้าหมายที่แตกต่างกัน แต่ละทีมต้องรอกัน แต่ละทีมเหมือนคนตาบอดไม่รู้ requirement ที่แท้จริง ทำให้พบว่า ถ้าทีมแรก ๆ เข้าใจผิด ก็จะผิดไปทั้งหมด คนที่วางแผนงานไม่ใช่คนที่ทำ ปล. ถ้าให้คนทำงานวางแผนก็จะทำไม่ได้ เพราะว่าไม่เคยทำ !! รวมทั้งยังมีปัญหาอื่น ๆ อีกมามายส่งผลให้ส่งมอบงานไม่ตรงตามเวลา หรือจะตรงก็ไม่มีคุณภาพที่ดี หรือมีข้อผิดพลาดต่าง ๆ มากมาย และยากต่อการดูแลรักษาที่น่าแปลกก็คือ เรามักจะพบเจอปัญหาลักษณะนี้ ซ้ำแล้วซ้ำอีก เหมือนการฉายหนังซ้ำ !!
ดังนั้นจึงแนะนำให้เราหยุดคิดกันก่อน (Start with Thinking)
ว่าปัญหาจริง ๆ มันคืออะไร ไม่ใช่มัวแต่หาคนผิด !! ลองมาพิจารณาสิว่าปัญหามาจากอะไร ?- ขั้นตอนการทำงานที่วุ่นวายหรือไม่ ? (Process)
- ต่างคนต่างทำงานหรือไม่ ?
- คุณภาพของ software มันแย่หรือไม่ ?
- คุณภาพของคนเป็นอย่างไร ?
โดยที่โครงสร้างขององค์กรมันจะสะท้อนไปยังโครงสร้างของ software ที่พัฒนา
มักจะพบว่า ในองค์กรขนาดใหญ่จะมีระบบเชื่อมต่อกันเป็นจำนวนมาก ในแต่ละระบบล้วนมีทีมหรือแผนกดูแลแยกกันไป แต่ละทีมก็ดูเฉพาะระบบของตนเอง ไม่ได้สนใจว่าภาพรวมของ product เป็นอย่างไร ดังนั้นเมื่อเกิดปัญหาขึ้นมา แต่ละคน แต่ละทีมก็จะป้องกันตนเอง หรือโยนความผิดออกไปให้คนอื่นเสมอ ดังนั้นองค์กรต้องมีการปรับเปลี่ยนคนและโครงสร้าง ซึ่งผมชอบแนวทางจากหนังสือ Team of Teams แสดงดังรูปมาถึงโครงสร้างของ software ที่พูดถึงกันมาก ๆ คือ Microservice
ข้อดีของ Microservice นั้นดีมาก ๆ แต่ก่อนอื่นลองกลับมาดูระบบงานปัจจุบันก่อนว่าเป็นอย่างไร ทำการจัดกลุ่มของ service ได้หรือยัง ? ทำการสรุป dependency ต่าง ๆ ของแต่ละ service หรือยัง ? ทำการสรุปความซับซ้อนและวุ่นวายของระบบหรือยัง ? ถ้ายัง ลงมือทำก่อนเลย ยังไม่ต้องไปคิดถึงอะไรทั้งนั้น ? ทำให้เรารู้และเข้าใจในสิ่งที่ไม่รู้ก่อน หลังจากนั้นจึงมาทำความเข้าใจกับ Microservice ซึ่งถูกออกแบบว่าให้ fail นั่นหมายความว่า เราไม่ต้องว่าจะ fail ประเด็นหลักคือ เรารู้หรือไม่ว่า service มันจะ fail ? เราสามารถ restart service นั้นกลับคืนมาได้อย่างรวดเร็วหรือไม่ ? ยิ่ง service มีจำนวนมาก การ deploy แบบ manual คงไม่เพียงพอ ดังนั้นเรื่องของ automated deployment จึงสำคัญ ดังนั้นเรื่องของ automated testing จึงสำคัญ ดังนั้นเรื่องของ automated infrastructure จึงสำคัญ รวมไปถึงแนวคิด DevOps, Infrastructure as Code, Continuous Delivery และ Test-Driven Development (TDD)มาดูเรื่องของ Programming language trend กันบ้าง
พบว่าภาษาที่ได้รับความนิยมยังเป็นกลุ่มเดิม เช่น Java, C, C++, C#, PHP, JavaScript และ Python เป็นต้น แต่กลับพบว่ามีแนวโน้มที่ลดลง นั่นหมายความว่า มีภาษาใหม่ ๆ เกิดขึ้นมา เพื่อแก้ไขปัญหาเฉพาะด้านมากขึ้น หรือที่เรียกว่า Domain Specific Language (DSL) ตัวอย่างเช่น ภาษา Scala, Clojure, Groovy, Rust, Dart, D และ R เป็นต้น แสดงดังรูปส่วน programming language อีกกลุ่มที่น่าสนใจก็คือ Data Science
ประกอบไปด้วย- SQL
- Hadoop
- Python
- Java
- R
- Hive
- Pig