![移動開發還有未來嗎?](http://p2.ttnews.xyz/loading.gif)
作者 | 曹立成
本文經授權轉自InterestDriven(ID:hello123android)
我是一名 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 知識的深度,你們懂得。
結語
上面六個(七個)移動端開發方向,是我總結出來的有潛力有前景的方向,各位移動開發同學可以參考,可以選擇一個方向進行深挖,相信一定會有收穫。
嘴上焦慮是沒有意義的,最好的辦法就是付出行動。
積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千里;不積小流,無以成江海。騏驥一躍,不能十步;駑馬十駕,功在不捨。鍥而舍之,朽木不折;鍥而不捨,金石可鏤。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鱔之穴無可寄託者,用心躁也。
閱讀更多 CSDN 的文章