移動開發還有未來嗎?

Android入墳之路發表於2019-04-03

移動開發還有未來嗎?

作為一名資深的Android 開發者。從2017年下半年開始,就聽到各種言論,例如“Android 開發涼涼”、“移動端開發沒出路了趕緊轉行”、“要被XXX 替代了” 等等,充分反映了大家焦慮的心態。

移動端開發真的要涼涼了嗎?也經常有粉絲私信我,在群裡聊起這個話題,今天我決定寫下自己的一些看法,供大家參考。

移動端開發的現狀

移動端開發的現狀是什麼?我們可以從自己寫的程式碼中尋找線索。以Android 為例,很多大公司的移動端開發者寫的最多的程式碼是這樣的:

LinearLayout layout = new LinearLayout;

layout.addView(xxxx);

...
複製程式碼

或者也許是這樣的:

public class XXXView extends RelativeLayout {

public XXXView(Context context) {

this(context, null);

}

public XXXView(Context context,

@Nullable AttributeSet attrs) {

this(context, attrs, 0);

}

public XXXView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

initView;

}

private void initView {

LayoutInflater.from(getContext).inflate(R.layout.xxxlayout, this, true);

...

}

public void setData(XXX xxx) {

...

}
複製程式碼

又或者是對著xml 標籤做出各種騷操作——UI 開發。

沒錯,如今移動端技術棧已經愈發趨於成熟完善,對業務來說,就連大公司的工程師也是在做UI 的展示邏輯。大公司產品相對比較完善,後端管控了大部分業務邏輯,客戶端做的就是取到後端的資料,然後通過setText(xxx)展示出來,然後通過介面返回的Boolean 值來判斷View 顯示還是隱藏。

我聽到很多人說,工作幾年感覺自己沒什麼提升,天天都在堆程式碼,隨便找個剛畢業的學生也能分分鐘替代自己,於是就很焦慮。那對於工作幾年的人來說,要想盡可能不讓自己過早的被替代、被淘汰,就需要選一個有潛力的有前景的領域深挖。


移動開發還有未來嗎?

那麼移動端開發的未來在哪裡?

動態化

在聊動態化之前,我們先聊聊Android 的外掛化。

前兩年,外掛化火起來了。為什麼火?因為可以實現Android 應用不發版本的同時動態上線需求,同時熱修復還可以動態的修復線上出現的bug。但是外掛化存在最大的問題是什麼呢?相容性。Android 機型太多太複雜,外掛化框架難免會涉及到系統API 的hook,相容性問題就出現了,開發者會看到莫名其妙的錯誤上報上來卻束手無策。

隨著Android 版本的迭代更新,外掛化這條路越來越不好走,Android P給了開發者們一個訊號:別隨便hook 系統API 了,Google 要開始收口整頓了。外掛化這條路註定無法一直走下去,於是開發者們另闢蹊徑。

最開始是繼續用H5 混合開發的方式,例如老牌Hybrid 框架Cordova,但是效能不盡人意。這時候Facebook 開發出了一個跨時代的框架:React-Native。它提供了一個全新的思路:通過jscore 進行js 解析,使用原生的View 進行渲染,提供橋機制呼叫原生的能力。

React-Native 是第一個真正的高效能的動態化框架,它的出現讓Web 前端和客戶端的界限迅速變得模糊。隨之而來的是各大公司的自研框架,例如阿里巴巴的Weex 和美團點評的Picasso 框架。React-Native 只提供了Android 和iOS 的雙端支援,Weex 擴充套件了思路,提供的Web 端的支援,一個是React 語法糖,一個是Vue 語法糖。Picasso 又不一樣,Picasso 是純TS,DSL 語法樹,寫法實在太簡單,又準備在三端的基礎上提供小程式端的支援。

2018年GMTC 大會上,Flutter 釋出了第一個預覽版,阿里巴巴閒魚團隊已經在閒魚APP 中使用了Flutter 技術。Flutter四年前開始開發,直到去年才有第一個beta 版本。通過Dart 編寫APP,然後編譯成機器碼同時執行在Android 和iOS 上,做到了原生跨平臺,Hot Reload,效能很不錯,可定製性也非常強,連封裝的系統層Dart 程式碼都能改。提供了Web、iOS、Android、React-Native 開發者學習Flutter 的入門文件,也是去年移動端少數的幾個比較火的熱點之一。它的思路不同於React-Native,是一種全新的思路,目前我對Flutter 持樂觀態度。

支付寶的動態方式不同於以上所有,它是完全基於自己的H5 容器進行Hybrid 開發,不過由於核心也是自研的(UC 核心),所以效能各方面都比原生的WebView 好,支付寶裡非常多的頁面都是基於H5 容器開發的,包括支付寶小程式,這也算是一種動態化的方式吧,只不過研發成本太高:自研WebView 核心。

目前來看,動態化的三駕馬車已經初步形成:

  • React-Native 為首的jscore(v8)橋通訊動態化方案;

  • 自研WebView 核心,H5 容器化方案;

  • Flutter(我覺得Flutter 正在發力爭取第三駕馬車的位置)。

動態化改變了移動開發的方式,模糊了Web 前端和客戶端的界限,讓越來越多的人認識了什麼是“大前端”。如果有經驗的開發者們對這個方向進行深入研究,五年內,應該不會被淘汰了(笑)。

移動端機器學習

毫無疑問,移動端機器學習從2017年年底就開始火起來了,TensorFlow 也推出了移動端框架,很多應用都開始在移動端部署機器學習模型,例如相機類應用(FaceU)、電商類應用(唯品會)等,包括離線的機器學習。

如果深挖這個方向,我覺得十年內不會被淘汰。當然了,難度也不小。


移動開發還有未來嗎?

AR & VR

從支付寶的AR 搶紅包、QQ 的AR 踢球等玩法被越來越多的人體驗,AR 走進了人們的視野。對於廣告引流玩法來說,AR 無疑是能帶來巨大收益的。

此前大眾點評親子上線了“親子奇妙日” 活動,就是基於大頭兒子小頭爸爸的AR 玩法。那麼開發AR 引擎的移動開發者自然成了香餑餑,目前AR 主要應用的領域還是廣告變現,不過很多公司也找到了AR 的一些落地場景,比如賣傢俱的電商公司可以通過AR 技術讓使用者在購買之前就能看到實物在自己家裡到底能不能放得下,這能極大的提升使用者的購買體驗。

如果是研究OpenGL、計算機圖形學的移動開發者,可以往AR 引擎開發方向發展,非常有前景。

VR 同理。

移動端音視訊

這個領域最火的產品當之無愧是抖音了,就連我自己都天天刷抖音。除了抖音,還有各大視訊應用,都需要音視訊開發領域的專業開發人員,影像處理、濾鏡、裁剪等等騷操作都是需要專業的音視訊開發知識才能做出來的,研究OpenGL、計算機圖形學的移動開發者在這個領域也有很大的優勢。

據我所知,這方面人才現在缺口依然很大,各大公司求賢若渴,如果在這方面有經驗並且願意深挖的同學,自然是各大公司的香餑餑啦。

移動端區塊鏈

區塊鏈,2018年最火的技術沒有之一。

從人人都在談比特幣到人人都在談區塊鏈,可以看出區塊鏈技術已經被越來越多人熟知。無數區塊鏈公司如雨後春筍般的冒出,連大公司們也按捺不住開始涉足區塊鏈領域。對於移動端來說,區塊鏈應用最多的還是數字錢包。但是未來移動端區塊鏈一定會有更多的落地應用,例如Status。區塊鏈去年大火,移動端的區塊鏈應用還沒開始火,但是也不遠了。

如果有移動開發同學對區塊鏈方向感興趣的,可以開始研究起來了。如果要學習智慧合約開發的同學,我推薦一個非常好的網站:Cryptozombies,絕對是入門solidity 智慧合約開發的精品。

目前移動端的區塊鏈人才還不多,各大公司也沒有在招,但是兩三年內,應該就會爆發了,現在還在探索落地場景的階段,也給了對區塊鏈技術感興趣的移動開發同學學習的時間。改變世界的技術瞭解一下?

移動基礎框架

UI 未來可能都會被動態化技術接管,但是移動基礎框架不會。但凡要開發一個APP,網路請求、日誌處理、資料庫處理、快取、Push 等框架都是不可或缺的,這部分和UI 關係不大,又是APP 的命脈所在。

只要APP 存在,基礎框架就存在。有同學可能要說了,我用okhttp 分分鐘寫一個網路請求出來,沒錯,這是okhttp 已經幫我們做好了很多事。什麼是框架?用一句話總結,我的理解就是:

一種可以讓能力差別較大的開發者寫出功能、效能差不多的程式碼的庫。

不知道大家能不能理解這種說法,我舉個例子:如果使用HttpUrlConnection 來寫網路請求,可能不同能力的開發者寫出來的程式碼不一樣,網路請求的效能和效果也不一樣。但是如果使用了okhttp 庫,只要看一看okhttp 的文件,新手和老手寫出來的程式碼估計差不多,效能和效果也差不多,這就是框架做出的最大的貢獻。

在這些框架的基礎上,P5 寫的程式碼可能和P6、P7 區別不會多大。然而,這些框架總要有人開發,開源的框架往往不能滿足公司業務的需求,需要自研基礎框架。尤其是BAT、TMD 六家公司,移動端框架有大部分都是自研的,越來越多的公司也開始自研,所以如果是在這個方向有經驗的移動開發者,在APP 被淘汰之前,應該都不會被淘汰。這方面對移動開發者的知識深度和廣度都要求相對較高,需要沉澱和學習。

Android 工具類應用

這個就比較特殊了,這類應用我舉個例子:360 手機助手。對於Android 使用者來說,清理記憶體、清理垃圾等已經成為了一種習慣,這方面應用的開發自然是不可少的,而且非常考驗對Android 知識的深度,你們懂得。

結語

上面七個移動端開發方向,是我總結出來的有潛力有前景的方向,各位移動開發同學可以參考,可以選擇一個方向進行深挖,相信一定會有收穫。

嘴上焦慮是沒有意義的,最好的辦法就是付出行動。


相關文章