1. 程式人生 > >Android 開發者的下半場

Android 開發者的下半場

2018年,整個移動網際網路進入了下半場。為什麼說已經進入了下半場,談未來,先講歷史,我們來重頭開始捋一捋吧。

2005 年,Google 收購了成立不到兩年的 Android 公司,經過三年多的研發,於 2008年推出了 Android 1.0 ,此時還是搭載塞班系統的諾基亞的天下,業界並不看好 Google 的 Android ,很多人認為最多一年 Google 就會放棄 Android。

2009 年, Android 1.5 出世,HTC G1 和 HTC G2 大賣,此時,國內已經有一批人開始寫 Android 應用開發的入門教材了,儘管現在看來是多麼沒含量、官方文件一字不漏翻譯甚至有翻譯不當的教材,但是人家的確是抓住了時機賺了一把,也感謝這些人,讓英文不佳的開發者快速入門。

2010 年,Android 2.3 面市,本人也是從這個版本開始擁有了第一臺 Android 手機,開始接觸 Android 開發,也就是這時開始 Android 手機的市場佔有開始快速提升,在美國的市場佔有率達到了 30%。而這時,有一個巨頭開始在崩塌,它就是那個鈴聲都能讓人幻聽的諾基亞,一代手機帝國,轟然倒下了。

2011 年中,喬布斯生前的最後一部金典的產品 iPhone 4S 面市,把業界智慧手機品質推到了一個新高度,當時的 Android 手機和 iPhone 比起來,無論是在工業設計還是執行速度、無論是穩定性還是安全性,Android 都是初生的嬰兒。可惜 iPhone 太貴了,在當時看來 ,手持 iPhone 是一種身份的象徵,也就是這個時候,小米橫空出世,讓 Android 市場開啟了千元機的時代,我們應該感謝小米、華為讓我們大多數人快速上手智慧手機。這一年,國內一大批 JavaEE 開發者開始轉 Android 開發了,我就是其中的一員,此時開發手段也是比較原始的,比如網路框架,基本都是在 HttpClient 或 HttpUrlConnection 上手動封裝, 大家都在乾重復的活,程式設計師最不願意乾重復的活,後來才有了 AndroidAsyhcHttp、Volley、Ritrofit…

2012 年,Android 相序推出了 Android 3.x 和 Android 4.x ;3.x 主要用於平板裝置,這個時候 Android 程式設計師開始認識 Fragments,一種為大屏而生的檢視,如今被你我他用得很頻繁;4.x 在流程度和易用性上做了幾次優化,例如動畫繪製二級緩衝升到三級緩衝。

到這個時候國內 Android 開發已經是火得一塌糊塗,學過 Java ,不管你有沒有 Android 經驗,只要你願意從事 Android 開發就能找到待遇不錯的工作;整個行業一片欣欣向榮,隨便一家網際網路公司,不做兩個 App 都不好意思說自己是網際網路公司,那些做渠道、市場的也是豪賺了一把,比如 91、豌豆莢。也醞釀出了第一批 APP ,比如當時我們手機裝得最多的就是 QQ 、微信、360助手、搜狗輸入法、百度地圖、UC瀏覽器、天天動聽、優化大師、墨跡天氣。看到沒有,大多數都是工具屬性,還談不上改變生活,還沒有滴滴打車、還沒有各種 O2O 應用、微信也只是單純的聊天工具。但是大家都看到了移動網際網路即將進入生活的方方面面的趨勢了, 還有好多 APP 要開發,從零到一的開發一款 APP 的機會一大把, 還需要好多 Android 開發者入局幹事情。

2013 年到 2014 年這兩年 google 相序釋出了 4.4 和 5.0,前面講過,早期的 Android 就是初生的嬰孩,安全、效能都存在問題,比如 2012 年,有人讓我寫程式監聽別人的電話、簡訊,居然輕而易舉地就能實現這個功能,可見安全漏洞是多麼明顯,然而在4.4、5.0 上就難了,在後面的 6.x、7.x 就更難了。在效能方面,我覺得 4.4 和 5.0 具有劃時代的意義,4.4 開始 google 開始引入 ART 虛擬機器準備代替 Davik 虛擬機器, 5.0 以後,在摩爾定律的作用下, 手機硬體效能、記憶體也上來了, 徹底廢棄了 Davik, 完全使用 ART ; 為啥 ART 之後為速度就快了?這裡我簡單解釋一點, 瞭解 JVM 的應該比較好理解, Java 位元組碼需要通過 JVM 解釋成目標 CPU 可執行的指令集, 這也是 Java 執行速度慢的原因, 後來出現了 JIT 編譯, 對經常執行的熱區程式碼做一次解釋,解釋成對應目標 CPU 指令集, 放到記憶體中, 下一次執行的時候就直接從記憶體中取出這部分 CUP 指令直接執行, 省去了每次都解釋執行的耗時; Davik 也是有 JIT 特性的, 不過還不夠好;能不能再安裝的時候就提前把要解釋的位元組碼翻譯好? 記憶體允許的話,答案是肯定的, ART 上面就這麼幹的, 這種方式叫做 AOT,即提前編譯。所以我們會發現 5.0 以後安裝程式會比較慢, 但執行速度快了太多, 5.0 以後 Android 和 iOS 的差距越來越小了。

2013 年到 2014 這兩年,移動網際網路進入了新一輪的爆發式增長,真正把草莽叢生、野蠻生長演繹到了極致,記得我在《一個程式設計師的運氣》這篇文章中講過一個故事:一個在 2010 年底還在白石洲和我同學一起住農民房、擠公交的師兄,2014 年的時候已經是身價千萬的副總了; 同一年,另一個公司的年終時候在樓下襬滿了奧迪作為年終獎,它就是 UC。經過兩三年的瘋狂發展,生活的方方面面都可以在手機上進行了,各種 o2o 應用打得不可開交,打的不用再去馬路邊等著、超市到路邊攤都不再需要掏現金、外賣隨叫隨到,移動網際網路真正改變了人民的生活方式…

這個時候整個行業需要從零到一開發 APP 機會少了很多了,到 2015 年的時候很多創業公司第一步想到的不是要開發一個 APP ,而是先開一個微信公眾號。而這個時候 APP 端的開發模式也慢慢在發生變化,各種動畫開源庫、網路開源庫不說,原生開發已經相當成熟了,熱更新外掛化開發也初出鋒芒,摩爾定律的作用下,硬體效能上來了,H5 也越來越多的分擔了頁面任務,Android 開發進入混合開發時代。

提高效率、解放雙手是人類永恆的追求,程式設計師的理想就是要幹到自己“沒活幹”。2015 年底 facebook 推出 React Native,跨平臺、動態性和效能達到雙平衡,我也第一時間研究並寫了 demo,發現上手也快,這種 web 化的開發方式、原生化的體驗一定是趨勢,js 再次發光發熱。2016 年外掛化框架徹底成熟,沒過多久,阿里的 Weex 釋出,和 RN 如出一轍,Android 開發徹底進入混合時代,這個時後對端的架構能力是有要求的,你要考慮你的應用是不真的需要元件化,如果需要,又怎麼把元件、業務外掛、Web 容器、統跳協議等有效結合。

2007 微信小程式面市,跟著文件這個 Demo 輕而易舉,站在創業者的角度,你還會花這麼多成本去開發一個原生的 App 嗎?而且這個時候各個領域、細分領域刮分已經完成,開發新 App 的機會真的沒有多少了。 如今小程式自己形成氣候,各家 App 都想仗著平臺和流量做自己的航母,都要做自己的小程式,真是畸形,從統一的角度看,我還是希望快應用能成。

隨著 RN、Weex、小程式等前端技術的出現,技術發展又完成了一個輪迴,在摩爾定律作用下,歷史是如此的相似。還記得那個曾經差點要了微軟命的瀏覽器公司嗎,你作業系統很牛逼,但是流量入口都在我這,微軟也感覺到了不妙,後來才出現了 IE 瀏覽器,IE 瀏覽器出現後微軟內部也開始了系統派和瀏覽器派兩個派系曠日持久的鬥爭,最終系統派獲勝了,不知道這是不是後來微軟在新網際網路時代衰敗的原因!移動網際網路和PC網際網路的發展軌跡太像了,只不過移動網際網路是螺旋上升的一個輪迴,2008 年到現在,正好十年,十年一輪迴。

下半場

下半場我們的戰場在哪裡?

區塊鏈

2018年初,投資大亨徐小平的一張聊天截圖撼動了整個網際網路圈,可謂一石激起千層浪。一時間,連賣菜大媽都在討論區塊鏈,各類打著區塊鏈的牌子圈錢割韭菜的公司、創業團隊如雨後春筍,直到李笑來的一段錄音流出,感覺大家都被這場“革命”的資本家當傻逼使了,著實為這把大火澆了一盆水。說區塊鏈會比曾經的網際網路革命還要猛烈,我覺得有點喧賓奪主了,區塊鏈只是網際網路這個土壤上長出來的一根藤,只會在有限領域發揮很好的作用。技術上看,區塊鏈不是什麼新技術,是密碼學、分散式、p2p等技術結合經濟學在特定領域的應用。如果你本身在密碼學、安全領域或分散式開發領域有經驗,轉區塊鏈開發又有何難?換個賽道開車而已。不過據我所知的 Android 客戶端開發,95% 是沒有機會也沒自主去從事或深入研究過這方面的技術,所以基本認定區塊鏈不是 Android 開發的下半場,轉崗搞區塊鏈優勢不大。

小程式

RN、Weex、小程式出來的時候,我都有研究過,並且能輕易上手,作為一名 Android 原生開發的我都能輕易上手,更不用說那些前端工程師了,而且現在各家小程式的上層開發技術在我看來都是快消品,五年、十年後他們還在麼?當然如果我們能抽象一下各家小程式背後的技術本質,例如深入研究 JS 執行引擎原理、瀏覽器核心等,那你又管他五年後XX小程式還是WW小程式呢?肯定離不開這些技術本質,這一點很多前端小夥伴一定比我們終端小夥伴玩的溜。

人工智慧

人工智慧並不是什麼新概念了,可以說自計算機誕生就有人思考人工智慧的問題了,不過人工智慧的概念是在 1956 年夏天、美國達特茅斯學院的一次研討會上首次提出的,那次會議聚集了麥卡錫、夏農等業界泰斗,被認為是人工智慧的誕生標誌,史稱達特茅斯會議。此後,每隔一段時間,人工智慧就發展到一個新的階段,例如 1963 年計算機與人類的首次象棋大戰、1996 年深藍計算機戰勝國際象棋大師、1997 年比爾蓋茨的智慧化豪宅建成,推進智慧家居的概念誕生、近些年 Google 的 AlphaGo、無人無人車等,語音、影象識別等技術已經進入多個領域的應用。2018 年,移動網際網路各個方面應用領域進入紅海,各大巨頭都在尋找新的賽場,人工智慧成了“兵家必爭之地”,BAT 等網際網路巨頭都紛紛成了 AI 實驗室…

人工智慧的基礎是資料和演算法,而資料又必須基於連接獲取,需要萬物聯網,強大的資料加演算法作為神經中樞,各種各樣的終端裝置就是神經末梢,神經末梢感知資料通過聯網傳遞到中樞,神經中樞在越來越多的資料餵養下反過來更好的為各個終端提供更精確的決策和服務,這就是馬雲爸爸說過的 DT 時代,2018 年,我們從 IT 時代進入了 DT 時代,紅衣教主周鴻禕 2013 年的時候就說過未來的手機硬體一定是沒有利潤的,甚至揚言要做免費的手機,通過軟體增值來賺錢,而在 DT 時代這一點將會更加明顯,萬物聯網的終端硬體一定不是盈利點,真正的價值還是在資料和服務。作為多年的 Android 開發,我也一直在思考在這個時代,我們的競爭力在哪裡?近年大資料工程師、演算法工程師比較吃香,終端開發有必要轉演算法嗎?如果你抱著五年十年長時間打算,我到覺得未嘗不可。不過我覺得如果對 Android 系統研究的足夠深入,這個時代依然還是我們的時代,萬物聯網,一定會需要一大波終端工程師,而未來的智慧裝置一定需要離線演算法能力,終端要承擔一部分演算法,到時候我們能發揮的空間更大。

如何在下半場走得更遠

無論是上半場還是下半場,我們只是換了個現場而已,在我們一生所學的本領中,有些換了個戰場就不能用了,有些還能繼續使用。

說到這個, 我想起了有個前輩說的一個概念:知識衰竭週期,這裡我拓展為技能衰竭週期。我們一身中所學習的技能,有的很快就過時,稱之為衰竭,有的技能十年、百年都不過時,這裡有個最鮮明對比: 研究心血管的醫生和 fash 程式設計師,醫生完全不用擔心人體心血管結構會變化而自己的技能經驗會淘汰,而十年前比較火的 flash 開發技術如今快面臨淘汰了,所以說學醫的普片越老越吃香,而我們程式設計師不得不不斷學習。既然要學習,我們也考慮下成本和收益,多花些心思在衰竭週期較長的知識、技能上。

從上到下衰竭週期越長,從下到上變化越多同時短期內的需求越多。長遠來看,越是底層的東西越值得我們去研究,底層的搞明白了,上層變化再多都能很快上手,以不變應萬變。以上圖片是我個人 YY 的,一定不全面,但能表達一個意思:技術服務業務, 越是上層的技術越受制於業務,業務千變萬化,上層的技術形態也就千變萬化。