Cross platform application คืออะไร

เมื่อเร็วๆ นี้ ผมมีต้องให้ความเห็นลูกค้ารายนึง เกี่ยวกับว่าควรจะเลือกใช้ วิธีการพัฒนาแบบ Native หรือ Cross Platform ผมคิดว่านี่น่าจะเป็นคำถามสุด classic เวลาจะเริ่มพัฒนา App มือถือ ว่าเราควรจะใช้ technology แบบไหนดี?

ขอเกริ่นก่อน Native คือ การพัฒนา App แบบเขียนโปรแกรมเฉพาะเจาะจงบน platform นั้นๆ ในที่นี้จะพูดถึง Android และ iOS

ส่วน Cross Platform จริงๆ มีหลายตัว แต่ขอยกมาเฉพาะตัวเด่นๆ คือ Xamarin, Flutter, React Native, และ Kotlin Native
- Xamarin คือ Cross Platform เจ้าแรกๆ มาจากฝั่ง Microsoft ใช้ .NET และมี Xamarin Form สำหรับสร้าง Native UI
- Flutter เป็น Framework จากฝั่ง Google โดยใช้ภาษา Dart, Flutter มี UI Framework เป็นของตัวเอง ไม่ได้ใช้ Native UI, render โดยใช้ GPU ซึ่งจะ smooth มาก
- React Native จาก Facebook ใช้ technology เดียวกับ web แต่ render DOM ด้วย Native UI
- Kotlin Native จากค่าย Jetbrains ใช้วิธีแปลงภาษา Kotlin เป็น Native code เลย ไม่มี UI framework เป็นของตัวเอง

และมี Cross Platform อีกรูปแบบหนึ่งเรียกว่า Hybrid คือการ develop ด้วย web technology แล้ว run บน Native โดยใช้ WebView เช่น ซึ่งมี Framework เรียกว่า Cordova

คราวนี้ลองมาเปรียบเทียบรูปแบบการพัฒนาต่างๆ โดยผมจะให้คะแนนเต็ม 5 (เป็นความคิดเห็นส่วนตัว)

ขนาดของทีม

Native: 0 คะแนน — ต้องมี 2 ทีม iOS และ Android
Xamarin: 4 คะแนน — ใช้ทีมเดียวได้เลย (แต่อาจจะต้องมีทีมย่อย iOS และ Android)
Flutter: 4 คะแนน — ใช้ทีมเดียว (แต่อาจต้องมี Native part-time มาช่วย)
React Native: 4 คะแนน — ใช้ทีมเดียว (แต่อาจต้องมี Native part-time มาช่วย)
Kotlin Native: 1 คะแนน — ถึงจะใช้ทีมเดียวกันได้ แต่ก็ต้องแบ่งเป็น iOS กับ Android อยู่ดีเพื่อทำ UI แต่ข้อดีคือสามารถใช้ Business Logic ร่วมกัน และทีมแชร์กันได้
Cordova: 4 คะแนน — ใช้ทีมเดียว (แต่อาจต้องมี Native part-time มาช่วย)

User Experience

Native: 5 คะแนน — ไฟล์เล็ก เปิดเร็ว ลื่นไหล Performance ดี
Xamarin: 3 คะแนน — ในแง่ User Experience เทียบเท่า Native แต่มี Overhead จากการมี VM
Flutter: 5 คะแนน — ตัว Framework สร้างมาเพื่อเน้นเรื่อง User Experience
React Native: 3 คะแนน — เหตุผลเดียวกับ Xamarin
Kotlin Native: 5 คะแนน — เหมือนกับ Native
Cordova: 1 คะแนน — DOM กับ JS ยังไงก็ไม่สามารถทำให้ลื่นไหลได้

Learning Curve

Native: 3 คะแนน — ต้องเรียนรู้ Android SDK และ iOS SDK
Xamarin: 1 คะแนน — เอาเข้าจริง Xamarin Learning Curve ค่อนข้างสูงเหมือนกัน มี Xamarin Form ซึ่งอาจต้องเขียน View ของตัวเองและปรับต่างกันสำหรับ iOS และ Android ต้องรู้ Android SDK และ iOS SDK ด้วยเช่นกัน
Flutter: 3 คะแนน — เรียนวิธีใช้ Widget ต่างๆ รวมถึงภาษา Dart
React Native: 4 คะแนน — เรียน Components ต่างๆ ของ React Native
Kotlin Native: 2 คะแนน — เรียนรู้เหมือน Native แต่ซับซ้อนกว่าตรงที่ต้องเข้าใจการใช้ Kotlin Native บน iOS
Cordova: 5 คะแนน — Web น่าจะหา resource ได้ง่ายมาก

Development

Native: 5 คะแนน — ecosystem, IDE และ tool ต่างๆ ของ Native นี่ค่อนข้างแข็งแรงอยู่แล้ว
Xamarin: 5 คะแนน — ทำทุกอย่างได้ผ่าน Visual Studio มี UI Designer, ecosystem ของ .NET ก็ค่อนข้างครบ
Flutter: 2 คะแนน — ecosystem ของ Dart ยังเล็กมากๆ และ Flutter ก็เพิ่งเกิดไม่นาน
React Native: 5 คะแนน — ใช้ ecosystem ของ Web
Kotlin Native: 4 คะแนน — หัก 1 คะแนนเพราะสถานะยังเป็น Beta
Cordova: 5 คะแนน — ใช้ ecosystem ของ web มี IDE, tools, libraries ให้เลือกเยอะมาก

Native Inter-op

Native: 5 คะแนน
Xamarin: 2 คะแนน — สามารถใช้ library native ได้ผ่าน Binding และ Component ที่ได้จาก Xamarin ไม่สามารถใช้กับ Native ได้โดยตรง
Flutter: 4 คะแนน — Flutter สามารถใช้ Native library ผ่าน Platform channel ได้ และ Native project สามารถใช้ Flutter ได้
React Native: 4 คะแนน — React Native สามารถใช้ Native library ผ่าน Native Module ได้ สามารถสร้าง Native UI Component ได้ และ Native project สามารถใช้ React Native ได้
Kotlin Native: 5 คะแนน — สามารถเรียก function ข้ามกันได้เลย
Cordova: 4 คะแนน — สามารถใช้ Native library ได้ผ่าน WebView และ Native project สามารถใช้ WebView ได้

Platform อื่นๆ

Native: 0 คะแนน — ถ้าจะทำ Platform อื่นต้องมีทีมเพิ่ม
Xamarin: 2 คะแนน — Xamarin Forms เอามาทำ Windows App ได้ Business logic ที่เขียนด้วย C# สามารถใช้ได้ในหลาย Platform (รวมถึงสามารถแปลงเป็น js ได้)
Flutter: 1 คะแนน — ถ้าจะทำ Platform อื่นต้องมีทีมเพิ่ม (แต่ +1 คะแนนเพราะอนาคตสามารถ support Fuchsia OS)
React Native: 3 คะแนน — มี React Native for Web และ React Native XP เพื่อ render เป็น web ได้ (ทั้ง client side และ server side)
Kotlin Native: 1 คะแนน — สามารถ Share Business Logic ได้ (รวมถึงแปลงเป็น js)
Cordova: 5 คะแนน — Cordova support เกือบทุก Platform รวมถึงทำ desktop app ได้ด้วย โดยใช้ Electron

สรุป

คะแนนนี่เป็นความคิดเห็นส่วนตัวนะครับ Cordova คะแนนนำก็ไม่ได้หมายความว่าผมเลือก Cordova ทุกครั้ง Cordova นี่ในแง่ Project Management นี่ถือว่าดีที่สุด ใช้คนน้อย หาคนง่าย ทำได้เร็ว ลงได้หลาย Platform ส่วนเรื่อง UI/UX ก็หาทาง optimize เอา

แต่ถ้าเน้นลูกเล่นของ UI คงต้องตัด Cordova ไป React Native หรือ Flutter ส่วน Kotlin Native นี่ผมมองว่าเหมือน Native แต่ใช้กรณีมี Core business logic

และหากใช้หลักการมองตัวเลือกเป็น Spectrum แทนที่จะเลือกตัวใดตัวหนึ่งไปเลย เราก็จะเห็นอีกทางเลือกนึงคือ ลูกผสม เช่น Flow หลักเป็น Native และใช้ React Native, Flutter หรือ WebView สำหรับ Flow รองๆ เพื่อประหยัดต้นทุน หากเป็น App ใหญ่ๆ setup แบบนี้ผมว่าก็น่าสนใจเหมือนกัน

การพัฒนา Application แบบใดที่เป็นแบบ cross platform

การพัฒนาแอพแบบ cross-platform เป็นการชี้ให้เห็นถึงกระกวนการการสร้างแอพที่สามารถทำงานได้บนหลายแพลตฟอร์ม ทำได้โดยใช้เครื่องมือต่างๆ เช่น React Native, Xamarin และ Flutter ซึ่งแอพที่ทำขึ้นมาสามารถปรับใช้ได้ทั้งบน iOS และ Android.

Driver มีประโยชน์อย่างไรต่อการทำงานกับคอมพิวเตอร์

สำหรับ Driver นั้น ทำหน้าที่ในการส่งข้อมูลจาก ระบบปฏิบัติการ (OS) ไปยัง ฮาร์ดแวร์ หรือ แอปพลิเคชัน เพื่อสั่งว่าอุปกรณ์และซอฟต์แวร์นั้น ๆ ควรทำงานอย่างไร ในอีกมุมนึง Driver ก็เปรียบเสมือนตัวที่คอยแปลคำสั่ง (Translate) การสื่อสารระหว่างระบบปฏิบัติการให้กลายเป็นรูปแบบที่อุปกรณ์ฮาร์ดแวร์สามารถเข้าใจตรงกันได้

คำว่า Cross Platform คือข้อใด

ข้ามแพลตฟอร์ม หรือ หลายแพลตฟอร์ม (อังกฤษ: Cross-platform) หมายถึงการที่โปรแกรมคอมพิวเตอร์ ภาษาโปรแกรม ระบบปฏิบัติการ หรือ ซอฟต์แวร์ชนิดอื่น ๆ สามารถทำงานได้ในหลายแพลตฟอร์มคอมพิวเตอร์ ตัวอย่างเช่น โปรแกรมคอมพิวเตอร์สามารถทำงานได้บนไมโครซอฟท์วินโดวส์ สำหรับสถาปัตยกรรม x86 และ Mac OS X บน PowerPC.

การ Boot เครื่องมีกี่แบบ

ประเภทของการบู๊ตเครื่องการบู๊ตเครื่อง คือ ขั้นตอนที่คอมพิวเตอร์เริ่มโหลดระบบปฏิบัติการเข้าไปไว้ ในหน่วยความจ า RAM สามารถแบ่งออกเป็น 2 ลักษณะด้วยกันคือ  โคลบู๊ต (Cold boot)  วอร์มบู๊ต (Warm boot)