ได้รับโอกาสให้ไปแบ่งปันมุมมองเรื่อง Software Development Trends 2017
ในงาน IT Trends: Strategic Planning for 2016 จัดโดยสถาบัน IMC
ซึ่งมีหัวข้อที่น่าสนใจมากมาย
ส่วนในเรื่องของ Software Development Trends 2017 นั้นมีเนื้อหาดังนี้

  • ปัญหาที่พบในการพัฒนา software
  • ว่าด้วยเรื่องกระบวนการคิด
  • ว่าด้วยเรื่องของโครงสร้างองค์กร
  • ว่าด้วยเรื่องของทีม
  • ว่าด้วยเรื่องของเทคโนโลยี
  • ว่าด้วยเรื่องของ programming language trend

เป็นหนึ่งในมุมมองของตัวผมเองที่มีต่อการพัฒนา software
มาดูรายละเอียดกันสักหน่อย

ปัญหาหลักที่พบในการพัฒนา 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

ส่วนในโลกของ Mobile development ก็สำคัญมาก ๆ

น่าจะหมดไปแล้วสำหรับเรื่องของภาษาในการเขียน
ประเด็นสำคัญคือ เรื่องของความปลอดภัยของระบบ (Security)
เนื่องจากปัจจุบันเริ่มเข้าสู่ยุดของ Enterprise Mobile App แล้ว
ดังจะเห็นได้ว่ามีความต้องการจากองค์กรใหญ่ ๆ เป็นจำนวนมาก
ทั้งจาก Banking, Telecom และ Insurance เป็นต้น

อีกทั้งยังมีเทคโนโลยีต่าง ๆ ออกมามาอีกมากมาย

เช่น IoT, Blockchain, Data science, Machine Learning, AR และ VR เป็นต้น
คำถามคือ จะเริ่มอย่างไรดี อะไรดี ?
คำตอบคืออะไร ?

ลองถามตัวเราเองสิว่า ปัญหาที่ต้องการแก้ไขคืออะไร ?
ลองถามตัวเราเองสิว่า สิ่งที่ต้องการคืออะไร ?
เมื่อรู้ปัญหาและสิ่งที่ต้องการแล้ว
จึงลงมือหาวิธีการต่อไป

โดย Slide อยู่ที่นี่