เมื่อสักเดือนสิงหาคมปี 2011 นาย Eric Schmidt ที่ทุกคนคงรู้จักกันดีอยู่แล้ว เคยออกมาบอกว่า "ภายใน 6 เดือน นักพัฒนาจะหันมาชอบทำแอพฯบน Android มากกว่า iOS"
แต่แล้ว จนถึงตอนนี้ ผ่านไปปีครึ่งถ้วน โพลทุกสำนักก็ยังออกมาบอกผลสำรวจที่ไม่เคยเปลี่ยนแปลงว่า "นักพัฒนายังคงชอบที่จะพัฒนาบน iOS มากกว่า Android" และทุกครั้งก็จะมีห้อยท้ายว่า "แต่แอนดรอยด์ก็มีแนวโน้มดีขึ้น" แนวโน้มดีขึ้นมาเป็นปีๆ แต่ก็ยังไม่สามารถชนะ iOS ได้อยู่
ทำไมนะ นั่นสิทำไม?
ช่วงปีที่ผ่านมามีงานแอนดรอยด์เพิ่มเข้ามาเรื่อยๆ แต่ส่วนใหญ่ก็จะพ่วงท้ายมากับ iOS ทุกงาน (คือจะทำแอพฯ iOS แต่อยากให้มันใช้บนแอนดรอยด์ได้ด้วยก็ดี) และพอทำไปเรื่อยๆก็เริ่มปรับราคาให้เหมาะสมกับพลังที่ลงไปในงานถัดๆไปจนลงตัว สุดท้ายก็ได้ตัวเลขมาว่า "ค่าพัฒนาแอพฯแอนดรอยด์สูงกว่า iOS" ต้องยอมรับจริงๆว่าเรื่องนี้ Apple แพ้ราบ ! ฮ่าๆๆๆ (เรียกว่าแพ้ได้มั้ยฟระ)
(ภาพจาก wallpaperswide.com)
ทางลูกค้าส่วนใหญ่จะตกใจเพราะมุมมองของเค้าคือมือถือ iOS มันแพงกว่ามือถือแอนดรอยด์ แล้วทำไมค่าพัฒนาแอพฯแอนดรอยด์ถึงแพงกว่า มันไม่สอดคล้องกัน (ซึ่งจริงๆมันไม่เกี่ยวข้องกัน แต่ในทางความรู้สึกมันก็ห้ามกันไม่ได้)
ทำไมนะ นั่นสิทำไม?
จริงๆปัจจัยทั้งหมดทั้งมวล นักพัฒนาทั้งหลายคงทราบกันดีอยู่แล้ว ด้วยคำคำเดียวที่เป็นปัญหาตลอดมาและตลอดไป
"Fragmentation"
ถึงตอนนี้ปัญหา Fragmentation จะน้อยลงจากเดิมมากแล้ว ตัว API ที่จำเป็นในการใช้งานจะ Base อยู่บน Android 3.0-4.0 ซะเยอะ แต่ทาง Google ก็ฉลาดพอที่จะทำ Support Library ที่ดึงเอาสิ่งจำเป็นเหล่านั้นมาให้นักพัฒนาไปใช้ได้บน Android รุ่นที่ต่ำกว่า ปรบมือให้ แปะ แปะ แปะ แปะ แปะ แปะ (ทำท่าลีด)
ปัญหาเรื่อง API ถือว่ามีน้อยแล้ว แต่ปัญหาอื่นๆก็ยังมีอยู่ หลักๆคือเรื่อง Resolution ของหน้าจอและแรมที่มีต่างกันมากในแต่ละรุ่น โดยหน้าจอเนี่ยเป็นตัวชูโรงแบบไม่ต้องใส่ผงชูรสเลย แค่ทำให้มันใช้ได้บนทุกหน้าจอโดยไม่มีปัญหาก็อ้วกพุ่งแบบโปรเจกไตล์แล้วขอรับ เพราะหน้าจอของแอนดรอยด์เนี่ยอิสระเหลือเกิ๊น Resolution ก็ต่างกัน Ratio ก็ต่าง ขนาดทาง Physical ก็ต่าง สุดท้ายต้องมานั่งลองนั่งปรับจนกว่าจะไม่มีปัญหาทุก Component กินเวลาไป "เกินครึ่ง" ของเวลาพัฒนาแอพฯครับจุดนี้
อีกทั้งหลายต่อหลายรุ่นมีการโม Firmware จนมีปัญหากับ API บางตัวอีก (เช่นกล้อง/Gallery) จนสุดท้ายแทบจะบอกได้ว่า
"ถ้าคุณยังไม่เคยลองบนรุ่นไหน คุณไม่สามารถบอกได้ว่าโปรแกรมคุณจะใช้บนรุ่นนั้นได้หรือเปล่า"
นักพัฒนาทั้งหลาย ยืนยันคำพูดนี้กันมั้ยจ๊ะ? ;)
ซึ่งสิ่งที่ทางลูกค้า(ในที่นี้คือทั้งคนที่มาสั่งทำและ End User)คาดหวังคือ แอพฯต้องทำงานได้บนทุกรุ่น ตั้งแต่มือถือ Low End อย่าง Galaxy Mini ยันมือถือซุปเปอร์ไฮฮ์อย่าง HTC One ซึ่งการทำให้มันใช้ได้บนมือถือเทพๆมันไม่ใช่ปัญหาหรอก ทำได้อยู่แล้ว แต่จะให้ไปทำงานบน Galaxy Mini เนี่ย ... ถ้าทำแอพฯธรรมดาๆ ไม่ได้หวือหวาอะไร ยังไงก็ทำได้ แต่ถ้าโปรแกรมเริ่มหรู เริ่มต้องใช้แรมเยอะ เริ่มต้องใช้ CPU บางทีนักพัฒนาจำเป็นต้องตัด Galaxy Mini ออกจาก Supported List ไปเลย
แต่ลูกค้าไม่ยอมหรอกครับ เพราะอะไรหนะหรอ? ก็เพราะพวกตระกูล Galaxy Mini/Galaxy Y มันเป็นมือถือราคาถูกที่ขายดีมากหนะสิ !! ตายๆๆๆ สรุปปัญหา Fragmentation มันเกิดจากพวกมือถือ Low End ซะส่วนใหญ่ และมือถือพวกนี้ก็ขายดีมากเสียด้วย สุดท้ายจึงต้องทำสิ่งที่เป็นไปไม่ได้ให้เป็นไปได้ด้วยการดึงมันกลับมาเป็นมือถือที่ต้องสนับสนุน
และนี่แหละ ความพยายามที่ต้อง Optimize และแก้ไขโค้ดมหาศาลเพื่อให้มันสนับสนุนมือถือเหล่านี้ จึงเป็นผลให้ค่าพัฒนาแอพฯบนแอนดรอยด์ต้องเพิ่มพูนขึ้นเป็นเท่าทวีคูณ และไม่ใช่ทุกคนที่จะทำตรงนี้ได้ เค้าต้องเป็นคนมีสกิลในการ Optimize มอง CPU เป็นเพื่อน มอง RAM เป็นน้อง มองจอเป็นกิ๊กเลยหละ และคนเหล่านี้ค่าตัวไม่ถูก แถมยังต้องใช้ man-hour เยอะอีก ...
นอกจากนั้นเรื่อง Fragmentation ที่ทำให้โค้ดดิ้งใช้เวลามากขึ้นแล้ว การเทสต์ก็ยังทำให้ค่าใช้จ่ายบวมอีกด้วย อย่าง Quote ที่เขียนไว้ด้านบน ยืนยันว่าถ้าเราอยากจะให้มันสนับสนุนทุกรุ่น เราก็ต้องลองบนทุกรุ่นเท่าที่เป็นไปได้ สุดท้ายก็ต้องซื้อมือถือมาลองกันบานเบอะ หรือไม่ก็ต้องวิ่งยืมกันวุ่นวาย (และส่วนใหญ่ยืมจากแบรนด์มือถือไม่ค่อยจะได้ ต้องไปยืมออฟฟิศเพื่อน ไรงี้)
หลายทีไม่ได้เทสต์เพราะมั่นใจว่ามันต้องทำงานได้แหละน่า ผลคือพอเอาขึ้น Store ได้รับ 1 ดาวมาเชยชมเพราะรุ่นนั้นใช้งานไม่ได้ ... ส่วนรุ่นไหนใช้งานได้เค้าก็ไม่มาโหวต 5 ดาวให้เสียเวลากันเท่าไหร่ ผลที่ตามมาคือหมดกำลังใจ งอแง สิ้นหวัง แต่ถ้ายังไม่หมดกำลังใจ ก็ต้องไปวิ่งหามือถือมาเทสต์เพื่อหยุดการได้ 1 ดาวเสียแต่เนิ่นๆ มิฉะนั้นน้ำตานองเต็มตลิ่ง เราทั้งหลายชายหญิง สนุกกันจริง มีแอพฯหนึ่งดาว ... แล้วจะหาจากไหนหละ สำหรับบริษัทใหญ่ๆคงไม่มีปัญหา แต่ถ้าเป็นบริษัทเล็กๆหรือ Freelance หละก็ ... หึหึ
และพูดได้เลย กว่าจะแอพฯจะนิ่งเสถียร ใช้งานได้ทุกรุ่นอย่างมีปัญหาน้อยที่สุด มันต้องใช้เวลา ไม่ใช่ว่า 1 เดือนเสร็จ 2 เดือนเสร็จ บางทียาวๆไป 6 เดือนเลยก็มี แต่ส่วนใหญ่คนเค้าก็อยากได้เร็วอ่ะโนะ ก็เลยต้องอัด man-hour เพิ่ม ดึงคนระดับเทพมาทำโปรเจคเพิ่มบ้าง บลาๆๆๆ ค่าใช้จ่ายก็บานเข้าไปอีก แต่สุดท้ายก็ลากยาวอยู่ดี แล้วก็ต้องมาคอย Maintain แก้บั๊กโน่นนี่เรื่อยๆ man-hour ก็พูนเรื่อยๆจากปัญหาที่ซ่อนอยู่ตามรุ่นต่างๆ
ปัญหาเหล่านี้ไม่เคยพบใน iOS เพราะมันมีการป้องกัน Fragmentation มาได้ดีมาก เรียกว่าออกแบบแล้วทำได้แน่ๆ นักพัฒนาไม่ต้องมาปวดหัว ปล่อยแล้วมีบั๊กก็แก้ไปสองชั่วโมง แล้วอัพตัวใหม่ (อีก 7 วัน) แต่ไม่ใช่ต้องไปวิ่งหาเครื่องมาเทสต์อีกสองร้อยรุ่น
ณ จุดนี้คงมองเห็นสาเหตุเป็นรูปเป็นร่างกันแล้วว่าทำไมค่าพัฒนาแอพฯ Android ถึงจำต้องสูงกว่า iOS เคยพยายามลดค่าใช้จ่ายตรงนี้ด้วยการไปหาพวก Cross Platform Development Tools แต่แล้วมันก็ยังมีปัญหากับรุ่น Mass เช่น Galaxy Mini/Galaxy Y อยู่ดี
สรุปแล้ว ถ้าอยากจะลดค่าใช้จ่ายการพัฒนาแอพฯแอนดรอยด์ ก็ต้องรับรู้ด้วยว่าโปรแกรมนั้นจำต้องจำกัด Target Device ให้อยู่ในเครื่องที่ "สมเหตุสมผล" กับการทำงานของแอพฯ หรือให้มองกันง่ายๆว่า มันไม่ใช่โปรแกรมสำหรับแอนดรอยด์ หากแต่เป็นโปรแกรมสำหรับ "แอนดรอยด์รุ่นล่าง" "แอนดรอยด์รุ่นกลาง" "แอนดรอยด์รุ่นท็อป" แล้วค่อยมาจับจ่ายใช้สอยว่าจะทำแอนดรอยด์เวอร์ชั่นไหนบ้าง
คนที่จะดีลงานจึงจำต้องมีองค์ความรู้ในการแบ่ง Segment ของ Target Device ได้เช่นกัน ดู Requirement แล้วต้องบอกได้ว่ามันจะใช้ได้บนรุ่นไหนได้บ้างโดยพื้นฐาน ถ้ามีฟีเจอร์นี้แล้วไปลงบนแอนดรอยด์รุ่นล่างด้วย ค่าใช้จ่ายจะเพิ่มขึ้นสองเท่านะ บลาๆๆๆๆ ตรงนี้ต้องอาศัยความชำนาญและฝึกฝนเป็นพิเศษ บางทีต้องดึงโปรแกรมเมอร์ไปคุยงานด้วยซ้ำ
อารมณ์เหมือนว่า iOS มันออกมาแบบเพื่อให้ Designer Lead ส่วน Android ออกแบบมาให้ Developer Lead นั่นแหละ การทำแอพฯบนแอนดรอยด์จึงออกมาลำบากยากเย็นอย่างที่เห็น
คงเห็นภาพคร่าวๆกันแล้วว่าทำไมการพัฒนาแอพฯบนแอนดรอยด์ถึงได้สนุกสนาน(ประชด) ใครจะทำโปรดักส์หรือรับทำแอพฯมือถือก็คิดพิจารณากันดีๆถึงต้นทุนทั้งด้านทรัพย์และเวลากันด้วยละกันนะครับ การทำแอพฯบน iOS คือการจะทำยังไงให้มันดีขึ้น ทำให้ฟีเจอร์เพิ่มขึ้น ส่วนการทำแอพฯบน Android คือการแบ่งเวลาครึ่งนึงหรือเกินครึ่งแก้ปัญหาที่ตามแก้เท่าไหร่ก็ไม่หมด ส่วนอีกครึ่งค่อยทำให้มันดีขึ้น จึงไม่ต้องแปลกใจที่แอพฯ iOS จะดีกว่าแอพฯ Android เสมอ
ส่วนตัวผมชอบทำแอพฯบนแอนดรอยด์นะ มันท้าทายดี แต่ถ้าถามความง่ายและความไม่ปวดหัว ผมก็ยังชอบ iOS มากกว่าอยู่ดี (แต่ไม่ค่อยได้ทำเพราะคนทำแอนดรอยด์นั้นหายาก จึงต้องรับทำแอนดรอยด์ต่อไป)
ทิ้งไว้เท่านี้ ขอบคุณครับ =)