Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

สรุปสิ่งที่แบ่งปันเรื่อง Software Developement Trends 2017

$
0
0

ได้รับโอกาสให้ไปแบ่งปันมุมมองเรื่อง 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 อยู่ที่นี่ [slideshare id=70207379&doc=sck-software-developmenttrends-2017-161216150619&w=640&h=480]

Viewing all articles
Browse latest Browse all 1997

Trending Articles