什么是中年危機
根據權威數據顯示,國內IT程序員鼎盛時期是在25-27歲左右,30歲對于程序員而言完全是一個38線,接著就是轉業轉崗的事情,這一點在業界也算是一個共識了。
大學畢業步入IT行業普遍年齡也是在22歲左右,然而22-30歲之間也就是8年左右的時間,那么27歲也就是職業生涯“中年”的開始,那么作為程序員的你有準備好如何度過“中年危機”嗎?
當程序猿到了28歲左右的“中年危機”就不一樣了,這個年紀也是程序猿們工作積累的高峰期,有的程序猿已經換了好幾份工作,也有的程序猿們一直在一家企業做了好幾個大型項目,甚至有些程序猿已經擔當起了項目負責人這個角色,薪資也從幾千漲到了上萬元。還沒有成家立業的伙伴們家里人就開始張羅婚事了,然后就是買車買房要小孩,也是養家糊口成了我們的首要任務之一。
這里總結一下,Android入門的時候,需要有一本入門書,好好學習書中的內容,同時花一年時間把Android官方文檔中的training和guide看一遍,同時通過寫博客和記筆記的方式來做總結,建議讓自己的每篇博客都有價值些。通過一年時間的學習,相信每個人都可以達到中級工程師的水平。
技術要求:
- 基本知識點
比如四大組件如何使用、如何創建Service、如何進行布局、簡單的自定義View、動畫等常見技術 - 書籍推薦
《第一行代碼 Android》、《瘋狂Android》
中級工程師
小明經過一年的努力學習終于成為Android中級工程師了,月薪變成了17k。到了中級工程師,已經可以在公司里干很多體力活了,但是一些很重要的任務小明還不能一個人承擔起來,這個時候小明需要學習的內容就很多了,如下所示:
- AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;
- Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用;
- 多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等;
- 事件分發:彈性滑動、滑動沖突等;
- 玩轉View:View的繪制原理、各種自定義View;
- 動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;
- 懂性能優化、熟悉mat等工具
- 懂點常見的設計模式
學習方法
閱讀進階書籍,閱讀Android源碼,閱讀官方文檔并嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀源碼,另一個是自定義View以及滑動沖突。
如何閱讀源碼呢?這是個頭疼的問題,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細節不可自拔,要關注代碼的流程并盡量挖掘出對應用層開發有用的結論。另外仔細閱讀源碼中對一個類或者方法的注釋,在看不懂源碼時,源碼中的注釋可以幫你更好地了解源碼中的工作原理,這個過程雖然艱苦,但是別無他法。
如何玩轉自定義View呢?我的建議是不要通過學習自定義view而學習自定義view。為什么這么說呢?因為自定義view的種類太多了,各式各樣的絢麗的自定義效果,如何學的玩呢!我們要透過現象看本質,更多地去關注自定義view所需的知識點,這里做如下總結:
- 搞懂view的滑動原理
- 搞懂如何實現彈性滑動
- 搞懂view的滑動沖突
- 搞懂view的measure、layout和draw
- 然后再學習幾個已有的自定義view的例子
- 最后就可以搞定自定義view了,所謂萬變不離其宗
大概再需要1-2年時間,即可達到高級工程師的技術水平。我個人認為通過《Android開發藝術探索》和《Android群英傳》可以縮短這個過程為0.5-1年。注意,達到高級工程師的技術水平不代表就可以立刻成為高級工程師(受機遇、是否跳槽的影響),但是技術達到了,成為高級工程師只是很簡單的事。
技術要求:
- 稍微深入的知識點
AIDL、Messenger、Binder、多進程、動畫、滑動沖突、自定義View、消息隊列等 - 書籍推薦
《Android開發藝術探索》、《Android群英傳》
高級工程師
小明成為了夢寐以求的高級工程師,月薪達到了20k,還拿到了一丟丟股票。這個時候小明的Android水平已經不錯了,但是小明的目標是資深工程師,小明聽說資深工程師月薪可以達到30k+。
為了成為Android資深工程師,需要學習的東西就更多了,并且有些并不是那么具體了,如下所示:
- 繼續加深理解”稍微深入的知識點“中所定義的內容
- 了解系統核心機制:
- 了解SystemServer的啟動過程
- 了解主線程的消息循環模型
- 了解AMS和PMS的工作原理
- 能夠回答問題”一個應用存在多少個Window?“
- 了解四大組件的大概工作流程
- …
- 基本知識點的細節
- Activity的啟動模式以及異常情況下不同Activity的表現
- Service的onBind和onReBind的關聯
- onServiceDisconnected(ComponentName className)和binderDied()的區別
- AsyncTask在不同版本上的表現細節
- 線程池的細節和參數配置
- …
- 熟悉設計模式,有架構意識
學習方法
這個時候已經沒有太具體的學習方法了,無非就是看書、看源碼和做項目,平時多種總結,盡量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關于設計模式的學習,最近一本新書推薦給大家《Android 源碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android源碼中的設計思想,我最近也在閱讀此書。
技術要求:
- 稍微深入的知識點
- 系統核心機制
- 基本知識點的細節
- 設計模式和架構
- 書籍推薦
《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》
寫在最后
最后我想說:對于程序員來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己,從來都是我們去適應環境,而不是環境來適應我們!
這里附上上述的技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司2021年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由于篇幅有限,這里以圖片的形式給大家展示一部分。
相信它會給大家帶來很多收獲:
上述【高清技術腦圖】以及【配套的架構技術PDF】可以點擊下面鏈接免費獲取
Android學習PDF+架構視頻+面試文檔+源碼筆記
圖】以及【配套的架構技術PDF】可以點擊下面鏈接免費獲取**
Android學習PDF+架構視頻+面試文檔+源碼筆記
當程序員容易,當一個優秀的程序員是需要不斷學習的,從初級程序員到高級程序員,從初級架構師到資深架構師,或者走向管理,從技術經理到技術總監,每個階段都需要掌握不同的能力。早早確定自己的職業方向,才能在工作和能力提升中甩開同齡人。