Screen Shot 2558-11-11 at 12.47.45 PM
มาดูกันหน่อยว่า
ข้อมูลแนวโน้มของเทคโนโลยี และ เครื่องมือต่าง ๆ
จาก ThoughtWorks Technology Radar ประจำเดือนพฤศจิกายน 2015 มันเป็นอย่างไรบ้าง

โดยมีสิ่งที่สำคัญ ๆ ดังต่อไปนี้

  • Docker ได้รับความนิยมอย่างมาก ทำให้เกิด ecosystem ขึ้นมา ซึ่งโตวันโตคืน
  • Microservice และเครื่องมือที่เกี่ยวข้องได้รับความนิยม และ เติบโตอย่างมาก
  • เครื่องมือที่เกี่ยวกับ JavaScript มันเกิดขึ้นมามากเกินไปเหลือเกิน จนทำให้สับสนวุ่นวาย เลือกใช้ไม่ถูกเลย
  • ทุก ๆ คน ยังมีปัญหากับเรื่อง Security เสมอ มันไม่เคยหายไปสำหรับการพัฒนา software

มาดูรายละเอียดกันหน่อยดีกว่า

Technology Radar นั้นจะแบ่งออกเป็น 4 หมวด คือ

  1. Techniques
  2. Platforms
  3. Tools
  4. Languages และ Frameworks

ในแต่ละหมวดประกอบไปด้วย 4 กลุ่มย่อย คือ

  1. Adopt ควรนำมาใช้ได้แล้ว
  2. Trial มันแจ่มมาก ๆ ให้ลองนำมาใช้งาน แต่ต้องรับกับความเสี่ยงหน่อยนะ
  3. Assess ต้องทำความรู้จัก และ เข้าใจมันก่อน ว่ามันมีผลอย่างไรบ้าง
  4. Hold เป็นสิ่งที่ควรระวังเป็นอย่างมาก ( Process with caution )

มาดูสิ่งที่น่าสนใจของแต่ละหมวดกันดีกว่า

1. Techniques

การ implement ระบบ Continuous Delivery
ยังเป็นเรื่องท้าทาย และ สำคัญมาก ๆ ของทุก ๆ องค์กร
ดังนั้นจึงมีเทคนิคที่เป็นประโยชน์เกิดขึ้นมาตลอดเวลา
ตัวอย่างเช่น

Decoupling deployment from release
ซึ่งให้แยกกันระหว่างคำว่า Deployment และ Release

  • Deployment ใช้สำหรับการ deploy เพื่อเปลี่ยนแปลง component และ infrastructure
  • Release ใช้สำหรับการเพิ่ม เปลี่ยนแปลง feature สำหรับผู้ใช้งานโดยตรง ซึ่งกระทบกับ business เป็นหลัก

โดยเทคนิคที่ใช้ประกอบไปด้วย feature toggle และ dark launch
นั่นหมายถึงเราสามารถทำการ deploy ได้บ่อยเท่าที่ต้องการ
โดยไม่ทำการ release feature ใด ๆ ออกไปเลย

การ deploy บ่อย ๆ จะช่วยลดความเสี่ยงในการแก้ไขได้มาก
รวมทั้งฝั่ง business สามารถควบคุม feature ที่จะ release ออกไปได้อีกด้วย

Just In Time Design หรือ NoPSD
เป็นเทคนิคในการออกแบบระบบ
ที่พยายามบอกเราว่า ไม่จำเป็นต้องออกแบบระบบทั้งหมดตั้งแต่เริ่มต้น
หรือเรียกว่า Big Design Upfront

ส่วนเครื่องมือในการออกแบบให้ใช้แบบที่ lightweight ที่สุด
เพื่อการเรียนรู้ที่ง่าย และ รวดเร็ว
ซึ่งส่งผลดีต่อการทำงาน การสื่อสารของทีมอีกด้วย

แต่จำไว้ว่า ยังต้องเห็น และ เข้าใจภาพใหญ่ทั้งหมดของระบบนะ

สิ่งที่ชอบมาก ๆ คือ Products over Projects
เป็นเวลาอันยาวนานสำหรับการพัฒนา software
ที่เราจะคิดว่าเป็นการพัฒนา project
ซึ่งมันหมายความว่า
สิ่งที่ส่งมอบต้องอยู่ภายใต้งบประมาณเสมอ
สิ่งที่ส่งมอบต้องอยู่ภายในเวลาที่กำหนดเสมอ

ซึ่งแนวคิดดังกล่าว มันไม่ได้สอดคล้องกับ modern business เลย
ดังนั้น เราต้องเปลี่ยนแนวคิดใหม่ว่า สิ่งที่เราพัฒนาคือ Product
ซึ่ง product จะไม่มี final delivery เหมือนกับ project
แต่ยังคงพัฒนา ปรับปรุงต่อไปเรื่อย ๆ เพื่อสนับสนุน business
โดยแนวคิดนำมาจาก Agile และ Lean Startup นั่นเอง

ลองกลับมามองระบบที่สร้างสิว่า
มันคือ project หรือ product กันแน่ ?

สิ่งที่ควรระมัดระวัง หรือ อย่าใช้เลย ประกอบไปด้วย

  • Gitflow ซึ่ง branch ที่เยอะ ๆ และมีอายุที่ยาวนาน มันไม่ดีเลยทั้งต่อคนพัฒนา และ ระบบ Continuous Integration
  • SAFe เนื่องจากวิธีการนี้นำไปสู่การ release ที่ใหญ่มาก ๆ ซึ่งมันขัดแย้งกับ Agile ดังนั้นแนะนำให้นำแนวคิด Lean มาใช้น่าจะเหมาะสมกว่า ค่อย ๆ ฝึก ค่อย ๆ ปรับปรุงอย่างสม่ำเสมอ น่าจะเป็นวิธีการที่เหมาะสมกว่า
  • Separate DevOps Team การแยก DevOps มาเป็นทีมมันน่ากลัว และ อันตรายมาก ๆ อย่าทำ !!

2. Platforms

เรื่องของ password security ยังคงเป็นเรื่องที่ถกเถียงกันไม่รู้จบ
ใช้ password ที่ง่ายไป ก็ไม่ปลอดภัย
ใช้ password ที่ยากไป ก็กลับลืมง่ายอีก

โดย password กลายมาเป็นจุดอ่อนในเรื่องของ security
ดังนั้นจึงขอแนะนำ Two-factor authentication แบบใหม่
ซึ่งช่วยปรับปรุงให้ security ดีขึ้น
นั่นก็คือ TOTP ( Time-based One-Time Password )

สิ่งที่ควรระมัดระวัง หรือ อย่าใช้เลย ประกอบไปด้วย

  • Application Server ซึ่งมันมี feedback loop หรือขั้นตอนการทำงานที่ช้า รวมทั้งหลายคนได้รับความเจ็บปวดจากมันมาเยอะ ซึ่งปัจจุบันมันเข้าสู่โลกของ container, phoenix server และ Continuous Delivery กันแล้ว มาทำอะไรที่มันง่าย ๆ ดีกว่าไหม ?
  • SPDY ซึ่งแนะนำให้ไปใช้ HTTP2 ดีกว่า
  • Superficial Private Cloud

สิ่งที่แนะนำให้ลองนำมาใช้งาน มีสิ่งที่น่าสนใจ
ส่วนใหญ่เกี่ยวข้องกับ Cloud, Distributed system และ Big Data ทั้งนั้น

  • Apache Mesos
  • Apache Spark
  • Cloudier Impala
  • AWS Lambda
  • Fastly

3. Tools

เครื่องมือที่แนะนำให้ใช้เลย ประกอบไปด้วย

  • Composer เป็นตัวจัดการ dependency library ของ PHP
  • Mountebank เป็นเครื่องมือสำหรับการสร้าง stub และ mock การทำงานผ่าน HTTP, HTTPS, SMTP และ TCP
  • Postman เป็น REST client ผ่าน Google Chrome extension ซึ่งมันช่วยอำนวยความสะดวกอย่างมาก

สิ่งที่ควรระมัดระวัง หรือ อย่าใช้เลย คือ Citrix for development
หรือการพัฒนาโดยใช้ offshore development team
หรือ distributed team
เปลี่ยนมาทำงานร่วมกัน ที่เดียวกัน ทีมเดียวกันดีกว่า
ซึ่งมันช่วยลดเวลา และ ค่าใช้จ่ายลงไปอย่างมาก
รวมทั้งส่งผลดีต่อระบบที่ทำการพัฒนาอีกด้วย

สิ่งที่แนะนำให้ลองนำมาใช้งาน มีสิ่งที่น่าสนใจ คือ

  • BrowserSync ช่วยสำหรับการทดสอบ browser ผ่าน device ต่าง ๆ
  • Carthage สำหรับจัดการ dependency ต่าง ๆ ของ iOS และ OSX project
  • Docker Toolbox ซึ่งมาแทนที่ boot2docker นั่นเอง
  • GitUp เป็นเครื่องมือบน Mac สำหรับช่วยให้การใช้งาน git ง่ายขึ้น และ เข้าใจง่ายขึ้น
  • Gitrob สำหรับการตรวจสอบเรื่อง security ของสิ่งต่าง ๆ ที่อยู่ใน git repository

4. Languages และ Frameworks

ในช่วงหลายปีที่ผ่านมา JavaScript เป็นภาษาโปรแกรมที่ได้รับความนิยมสูงมาก ๆ
แต่ด้วยปัญหาของตัวภาษาเอง
ทำให้มีความพยายามในการสร้าง library ใหม่ ๆ
เพื่อมาแก้ไขปัญหาเหล่านั้น
โดยมีรูปแบบภาษาเป็นของตัวเอง
แต่ยังทำงานอยู่บน JavaScript ไม่ว่าจะเป็น CoffeeScript และ ClojureScript

ปัจจุบันมี ECMAScript 6 ซึ่งเป็น version ใหม่ของ JavaScript ออกมา
ซึ่งได้ทำการแก้ไขปัญหาของ version เดิมไปเยอะมาก ๆ
แถมยังสามารถทำงานกับ browser เก่า ๆ ได้อีกด้วย
ซึ่ง ณ วันนี้แนะนำให้นำ ECMAScript 6 มาใช้ได้แล้ว

ส่วนภาษา Swift 2 กลายเป็นตัวเลือกหลัก
ของการพัฒนาใน Apple ecosystem ไปแล้ว

สิ่งที่แนะนำให้ลองนำมาใช้งาน มีสิ่งที่น่าสนใจ คือ

  • Enliven เป็น template framework สร้างด้วยภาษา clojure ซึ่งแยกส่วนของ code และ HTML ออกจากกันอย่างชัดเจน
  • React.js
  • SignalR คือ library สำหรับการสร้างระบบ realtime web application บน .Net
  • Spring Boot คือ standalone Spring application ช่วยให้สามารถสร้างระบบแบบ micro service ได้ง่าย และ สะดวก

สามารถอ่านเพิ่มเติมได้ที่ Technology Radar
หรือ Download PDF ได้