มาดูกันหน่อยว่า
ข้อมูลแนวโน้มของเทคโนโลยี และ เครื่องมือต่าง ๆ
จาก ThoughtWorks Technology Radar ประจำเดือนพฤศจิกายน 2015 มันเป็นอย่างไรบ้าง
โดยมีสิ่งที่สำคัญ ๆ ดังต่อไปนี้
- Docker ได้รับความนิยมอย่างมาก ทำให้เกิด ecosystem ขึ้นมา ซึ่งโตวันโตคืน
- Microservice และเครื่องมือที่เกี่ยวข้องได้รับความนิยม และ เติบโตอย่างมาก
- เครื่องมือที่เกี่ยวกับ JavaScript มันเกิดขึ้นมามากเกินไปเหลือเกิน จนทำให้สับสนวุ่นวาย เลือกใช้ไม่ถูกเลย
- ทุก ๆ คน ยังมีปัญหากับเรื่อง Security เสมอ มันไม่เคยหายไปสำหรับการพัฒนา software
Technology Radar นั้นจะแบ่งออกเป็น 4 หมวด คือ
- Techniques
- Platforms
- Tools
- Languages และ Frameworks
- Adopt ควรนำมาใช้ได้แล้ว
- Trial มันแจ่มมาก ๆ ให้ลองนำมาใช้งาน แต่ต้องรับกับความเสี่ยงหน่อยนะ
- Assess ต้องทำความรู้จัก และ เข้าใจมันก่อน ว่ามันมีผลอย่างไรบ้าง
- Hold เป็นสิ่งที่ควรระวังเป็นอย่างมาก ( Process with caution )
1. Techniques
การ implement ระบบ Continuous Delivery ยังเป็นเรื่องท้าทาย และ สำคัญมาก ๆ ของทุก ๆ องค์กร ดังนั้นจึงมีเทคนิคที่เป็นประโยชน์เกิดขึ้นมาตลอดเวลา ตัวอย่างเช่น Decoupling deployment from release ซึ่งให้แยกกันระหว่างคำว่า Deployment และ Release- Deployment ใช้สำหรับการ deploy เพื่อเปลี่ยนแปลง component และ infrastructure
- Release ใช้สำหรับการเพิ่ม เปลี่ยนแปลง feature สำหรับผู้ใช้งานโดยตรง ซึ่งกระทบกับ business เป็นหลัก
การ 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
- 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 ซึ่งมันช่วยอำนวยความสะดวกอย่างมาก
- 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 ได้ง่าย และ สะดวก