過了30歲後的人很多都會感受到一個問題:從大學畢業到邁入30歲其實只是一瞬,感覺沒做什麼,還沒瀟灑完,還沒耍帥夠就聽著身邊的人開始叫你大叔、大哥了。而30歲後更恐怖,你感覺時間越過越快,職業危機的死神早已悄悄的站在你身後了。
黃金時期與技術熱點對於技術人,從大學畢業到30歲是一個黃金時期,這個時期需要積蓄足夠的力量,在30歲左右爆發,否則35歲多數人會走下坡路,不排除有大器晚成的,但是大器晚成的前提也是在早年做了充分的準備。正是由於技術人的黃金時間有限,因此大家都希望抓住技術趨勢,趕上風口。近10年技術圈的瞬息萬變結合技術人的黃金時期有限,技術人也變得越來越浮躁,越來越焦慮。
首先列出最近幾年技術圈的熱點技術(這裡只是做出舉例,時間點未必完全準確):
2010年2011年:Android和iOS在中國發芽生根,很多Java開發和塞班開發投入了Android和iOS的懷抱。2012年2013年:Html5定稿,挑戰Android和iOS。2014年2015年:Android和iOS大火,勢不可擋,培訓機構傾巢出動。2015年2016年:前端火爆,Android和iOS逐漸開始飽和,大資料開始熱門。2017年:人工智慧火爆,前端逐漸開始飽和,小程式正式上線。2018年:區塊鏈火爆,新聞鋪墊蓋地。
從2010到2018年,技術熱點不斷的變更,在Android和iOS最火爆之時,大家都在討論Android和iOS如何開發,哪個技術會替代它們。而當人工智慧、區塊鏈火爆時,更多人討論著如何進軍它們,很少人再去關注Android和iOS。從Android、iOS和前端的火爆到它們飽和也就短短2年時間,那麼最近火爆的人工智慧和區塊鏈會不會再走Android和前端的老路呢?所謂物極必反,在2010年Java開發人員鋪天蓋地的,Android開發極其有前途,誰又能想到8年後的今天,Java開發仍舊老當益壯,Android卻像2010年的Java一樣。
同樣再過8年呢?我們誰也說不準,也許Android老當益壯,人工智慧和區塊鏈早已被新的技術熱點蓋過。
技術熱點變更太頻繁了,短短8年換了好幾撥,而技術人員的黃金時期也就8年,這就意味著,我們需要在最短的時間選好需要從事的技術,前期可以搖擺不定,不斷嘗試,但是在後期一定要堅定一門技術棧,這門技術棧就是你安身立命的本事和跳板。為何說是跳板,因為技術做到後期,拼的不完全是技術了(技術是前提),你可能需要帶團隊,更深刻的理解和運用職場的規則,這裡就不展開說了。
Android面臨的挑戰因為我是做Android開發的(最早是Java開發),就來說一下Android的目前形勢,有很多技術開始蠶食Android,包括 RN、小程式和前端,這些都不足以對Android帶來太大的威脅,因為它們只能蠶食不能替代。目前最大的威脅是谷歌的Fuchsia,谷歌是何用意,現在誰也猜不準,如果谷歌的Fuchsia不是用來替代Android的,那麼Android會存活很久(具體參照Windows);如果是來替代Android的並且谷歌大力推廣Fuchsia,Android會在未來的5年面臨生死存亡的挑戰。
未知會帶給人們恐懼和焦慮,如果你覺得Android沒前途會滅亡,令你十分恐懼和焦慮,那麼我建議你換一個你覺得有前途的技術,因為不看好Android的話,也很難有所作為,這也是對自己負責,記住你的黃金時期就那麼幾年。
其實在大方向講,任何一個行業都有有一個成長週期,Android經歷了2011-13年的野蠻生長後,已經進入了成熟期,這個階段絕大部分企業對Android崗位的需求迴歸“理性”,不是懂一點Android基礎就能找到工作的年代,這時候再從0起步可能比較晚,但Android市場卻普遍缺乏高階人才。
目前Android市場上初中級的工資6K到18K不等,高階大概在20K-35K,很多朋友初中級開發者卡在20K這個門檻始終邁不過去,想要學習又不知道該怎麼著手,大多從做上層應用開始,到做 Framework 層就淺嘗輒止。
這裡我找來一則高階Android開發的招聘要求:
這是小米在拉勾上的招聘要求,相當於p5到p6級別,除開學歷的要求外,我們可以看到它在Android基礎要求之外,把JNI/NDK/Framework,甚至JS、Server端開發也作為了提升點,是全棧方向的雛形。我覺得大家可以經常在招聘網站裡看看現在的企業需要什麼技術,當然也不能把企業要求的都學了。我這裡大致總結了一下,Android開發人員的發展方向:
第一,橫向提升。
比如服務端開發,我們做Android開發很多時候,要依賴於服務端介面返回資料,可以自己試著搭建一下,至少要對服務端的結構理論、服務與服務之間通訊、聚合是什麼樣的流程也是需要有所耳聞。
第二,縱向重塑。
一直以來,做Android開發有這麼兩個說法,如果是做應用開發,往應用架構方向發展比較合適,如果是做系統層開發,往往底層驅動比較合適。這裡我是比較贊同的,那具體應該學習什麼呢?
1.移動架構:架構展示層: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components;架構層:模組化->元件化->外掛化->沙盒/雙開技術,比如可以雙開微信,類似Docker, 每個頁面都是外掛,類似Vue.js中每個頁面都是元件。
2.基礎進階:這個方向可能比較多,比如VIEW、Android動畫機制、四大元件工作原理、多媒體技術等等。我們平常在工作中碰到的View滑動衝突問題、其實透過掌握View工作機制和Android觸控事件體系就能輕易解決掉。還有對於需要開發絢麗的動畫效果,那麼對於檢視動畫和屬性動畫一些特性必須有一定的瞭解。Android 中的四大元件工作機制其實底層應用的是Binder機制,我們不妨從 AIDL 這個介面來了解 Binder。
JNI 和 NDK 開發也是比較常見,特別對於一些做 SDK 專案為主的,這一塊開發流程也是需要掌握,NDK開發(含JNI)也是用人單位區分應聘者的手段之一,企業不一定要用到,但是可以透過是否掌握NDK來篩選人才。
3.語言學習開發語言:這裡我要糾正一下學習語言不是跨行業,比如Kotlin可以說是Android世界的頭等公民了。再有時下比較火的Python和GO,另外做底層C/C++是必不可少的。
4.原始碼:要求能看懂並且熟悉原始碼(自己選幾個第三方庫的也可以),要做到熟悉原始碼及其實現原理。並且要做到能自己二次封裝(或自己貢獻三方庫)三方庫。這樣一來,你就會在維護中慢慢成為這個技術塊的專家了。我覺得輸出倒逼輸入是一個不錯的學習方式。
其實學習的方向還有很多,這裡就不給大家一一羅列了,因為不同行業不同專案需要學習進階的技能都不一樣,可以說360度發展。
Android如何學習這是一個十分寬泛的問題,總的來說是分為工作學習和業餘學習。工作學習首先儘量選擇專案靠譜,團隊技術好的工作,這方面對很多人來說並不可控。我們就假設你在普通的專案和普通的團隊,不要只關注你的一畝三分地,你不僅要完全熟悉你負責的模組還要理解其他人寫的模組,站在專案整體的角度來審視這個專案,它的架構和最佳化是否足夠好,嘗試著進行改進。對於你負責的模組要不斷檢視,是不是有更好的寫法,試著重構。
業餘學習方面,就是不斷的輸入輸出,可以看部落格、書和影片,其中影片的效率是最低的。然後寫筆記或者部落格,輸出你的想法,因為你看懂了不代表你就會了。最近Android相關的技術出現了很多,比如RN、Kottin、Java新特性和Flutter等等,如果是專案用到就好好學,如果沒用到大概瞭解就行,要把主要精力放在更深層次的知識點上,比如Android底層原始碼、效能最佳化、外掛化、熱修復和元件化等等。如果你不知道學什麼,可以參考以下我的知識體系來跟我一起學習。
系統的學習路線文章最後我給大家準備了一份系統的學習思維導圖,還有相關的學習資源,這些資料也都是我開發這麼多年一點一點的累積整理出來的,今天完全無償的分享給大家就是想今年寒冬我們程式設計師能好過一點,希望大家都能工作順利,事業有成。
接下來就需要梳理知識,提升儲備了!(Android移動架構師七大專題學習資源)
架構師築基必備技能:深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IOAndroid高階UI與FrameWork原始碼:高階UI晉升+Framework核心解析+Android元件核心+資料持久化360°全方面效能調優:設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化解讀開源框架設計思想:熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件JetpackNDK模組開發:NDK基礎知識體系+底層圖片處理+音影片開發微信小程式:小程式介紹+UI開發+API操作+微信對接Hybrid 開發與Flutter:Html5專案實戰+Flutter進階知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結。
然後再是透過原始碼來系統性地學習
只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。
真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。
再閱讀前輩的一些技術筆記,幫助提升
《960全網最全Android開發筆記》
刷大廠面試題備戰,增加大廠透過率
歷時半年,整理了這份市面上最全面的安卓面試題解析大全。
1.可以透過目錄索引直接翻看需要的知識點,查漏補缺。2.五角星數表示面試問到的頻率,代表重要推薦指數
《379頁Android開發面試寶典》
以上文章中的資料,均可以免費分享給大家來學習,
資料太多,全部展示會影響篇幅,暫時就先列舉這些部分截圖;