Mobile Engineer 該選iOS, Android 還是 Cross platform 的 React Native or Flutter 呢?
先從我自己的決定說起,五年前的自己選擇了iOS, 當時iOS門檻較高(不管是在知識上或是硬體上),所以會的人相對較少,在這樣的情況下薪水自然比較優渥。且碎片化問題相對較少,只有Apple一家公司。
而且最重要的是潮啊!感覺能夠拿著Mac工作好像走路都會有水痕一般
有什麼差別呢?
那實際上為什麼門檻比較高呢? 第一個是由於當時的程式語言,當時iOS的程式語言為Objective C 一個古老寫起來又有些難懂的語言。比起Android當時主流的Java 或是 React Native的JavaScript 不管是可讀性又或是易學性,就差了不少,學習曲線較高。(當然還有一些觀念上的差異,這邊就不描述)
另一方面是硬體,大家都知道你要寫iOS第一件要做的是不是買書,而是買一台電腦,而且是Apple的電腦。沒錯!Apple就是這麼小氣,只有在自家的系統上才有編譯器有辦法寫iOS。當然坊間有所謂的黑蘋果(指說用自己組裝的電腦然後去安裝蘋果的作業系統)但是時常會有數不清的相容性問題,考慮到時間成本,假如真的想寫iOS還是買一台Mac吧!
那既然這麼麻煩,為什麼又說問題比較少呢?第一個是平台一致性,基本上iOS只能執行在Apple的手機上,也就是iPhone上。而Apple了不起一年也就出1-2支手機,不管是螢幕大小的一致性。或是作業系統版本的一致性都大勝過Android手機。(iPhone作業系統的升級率到下一個版本出來前,每年都有80%以上,而Android因為受限於各家廠商支援的意願,升級率基本上是看天吃飯)
那這個會影響到什麼呢?
假如使用者一直不升級系統,代表所寫的程式也必須不斷支援舊的系統。不管每年推出了什麼更新更好的東西,很大機率是不能使用的,只能供在那邊祈禱某天使用者手機都壞了,可以換新的手機。因為舊的系統不支援,當然Android有推出support library,可以讓開發者在一定程度上使用新的東西。不過依舊會有相容性問題。
只有一家廠商有什麼好處?
基本上測試,iOS只需要測試幾個螢幕大小。就可以保證在大多數的手機上不會跑版或是有意想不到的效果或bug。那Android呢?由於有數以百計的廠商推出Android手機,螢幕大小也不一,甚至有奇形怪狀的螢幕(方形,有個洞,有很多洞之類的)。非常難以保證使用者在使用時的品質。另外,各家廠商都喜歡做各種辨識度高的客製化,這也是為什麼明明都是Android系統,但是Samsung的手機介面跟小米出的長得這麼不一樣。當然他們都還是需要通過Google auto machine的測試,但是每家時常都會專門為這測試去改動程式碼讓測試通過。 在這樣的情況下,Android的開發就相對困難,明明在Google的手機上看起來都好好的。在Samsung的手機上,可能狀態列無法覆蓋,或是因為沒有back key而整個流程出問題。各式各樣的問題都可能發生。更不用說在那些所謂的白牌的手機上。很多根本連Google的測試都沒有通過。完全就是看天吃飯,整個畫面出問題都不奇怪。
都在說iOS的好,那在當時Android有什麼優勢呢?
第一個是開發門檻較低,你只要有電腦,就可以寫Android。在這樣的情況下自然社群的資源會比較多。就能夠找到任何問題的答案,對於新手來說是非常大的幫助!
第二個是因為Android其實是一個開源的計畫。也就是說只要你有心,你就可以下載整個核心的代碼來看(當然是要有心,筆者真心是覺得真的是看一輩子也看不完)在這樣的情況下,很容易的發現問題並且回報,有很大的機率會修復在明年的版本中! 而且也是因為這樣Android的自由度比較高,很多iOS做不出來的功能,在Android上都能實現,還能將Android應用在各種裝置上,所以現在很多IoT的系統其實核心都是Android。就連我們常玩的Switch都是!
綜合以上就是粗略我當時選擇往iOS走的原因。當時Cross platform並不紅,且功能性非常有限,所以並不在考慮之列。
那五年過去了,現在有什麼不同了呢?
第一個是程式語言,就在我做選擇之後的隔年,Apple就推出了全新的程式語言 Swift,整個平易近人了許多。和Google後來推出的Kotlin有些相似。且都為開源的程式語言。所以就語言上,像在兩者差異並不大
至於薪資的部分,在Senior這部分其實並沒有什麼差異,Android雖然寫的人多,但是寫得好的人永遠都少,需求也永遠都在。至於 Junior就看各公司了 最近幾年並不覺得薪資差異很大。畢竟現在買Mac電腦也不像當時比較遙不可及,現在買台Mac mini可能還比某些Windows電腦耐用和便宜。入門門檻已經沒有差很多了。不過由於Android的應用非常廣,目前Android的職缺是會多於iOS的
其餘的部分倒是沒有改變非常的多,iOS需要測試的解析度種類雖然變多了,但是相比於Android還是少。iOS升級率依然領先,由於Apple依然控管所有的Swift套件,基本上還是黑箱,雖然Swift本身開源。
那假如以一個新手要選擇的話,應該要怎麼選擇呢?
筆者認為可以先看看自己的需求
- 最快上手,或是希望能夠同時完成兩個平台的專案:我會說React Native的JavaScript是相對簡單一些的,而且能夠同時產出兩個平台的程式,感覺很划算,假如同時又寫過一些網頁,那簡直更棒了。但是考慮到成為資深以後,你還是必須鑽研iOS或是Android來使整個功能更完整。或許直接一開始就專注在某一平台也不錯。不過假設要以最短時間上手來說,我會推薦React Native
- 希望能夠有較多的社群幫助,不希望被一家公司綁住,還能夠跨足更多產業:那當然是Android了,社群豐富且活躍,且不用擔心Google哪天不見了Android沒地方可以用,也不用參加一堆貴桑桑的Event,(Apple的年度開發者大會硬是比Google貴了3倍)。且在iOS的世界,基本上就是Apple說的算,基本上就算是他推出的IDE出了問題,iOS工程師們硬著頭皮也要用下去。所以假如你不希望被各種限制,或許Android是不錯的選擇
- 那假如你都不在乎以上那些,或者Apple是你的信仰的:不用說了,那就是iOS了。多說無益!
Flutter的部分並沒有很熟悉,需要多查些資料才能補上,就不描述了。
簡單來說他是Google推出的一個框架,跟React Native一樣能供同時產出兩個平台的程式,差別是React Native是Facebook出的框架主要語言是JavaScript,而Flutter是Dart。
以上討論單純為個人看法,為入門的比較,很多的細節也沒有比較到。尤其在各個不同公司和產業中,由於需求的不同,所以以上各種的工程師也各有需求。並沒有好壞之分。
如果有沒有討論到的地方,歡迎來信來訊討論 :)
最後,想跟所有正在做選擇的人,各平台並沒有好壞之分,先找出自己的喜好,再從個平台中找出適合自己的來專研,才能夠做得長久做得開心!
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!