看到一篇文章中提到“最近幾年國內(nèi)的初級Android程序員已經(jīng)很多了,但是中高級的Android技術(shù)人才仍然稀缺“,這的確不假,從我在百度所進(jìn)行的一些面試來看,找一個適合的高級Android工程師的確不容易现使,一般需要進(jìn)行大量的面試才能挑選出一個比較滿意的。為什么中高級Android程序員不多呢旷痕?這是一個問題碳锈,我不好回答,但是我想寫一篇文章來描述下Android的學(xué)習(xí)路線苦蒿,期望可以幫助更多的Android程序員提升自己殴胧。由于我也是從一個菜鳥過來的,所以我會結(jié)合我的個人經(jīng)歷以及我對Android學(xué)習(xí)過程的認(rèn)識來寫這篇文章佩迟,這會讓這篇文章更加真實团滥,而并非紙上談兵。
我的工作經(jīng)歷
前面說到报强,我也是從一個Android菜鳥過來的灸姊。其實這句話放在任何人的身上都是適用的,即大家都是一步步過來的秉溉,因此作為初學(xué)者也不必因為技術(shù)差而郁悶力惯,同理碗誉,高手也不要看不起一些所謂的菜鳥,因為這不公平父晶,技術(shù)只有在同等的工作年限上才具有一定的可比性哮缺,也許你眼中的菜鳥只是個工作半年的新手,而你已經(jīng)工作5年甲喝,可想而知尝苇,這根本不具有可比性,搞不好別人5年后可以達(dá)到比你更高的技術(shù)高度埠胖。
我有若干個技術(shù)QQ群糠溜,群里(481798332)的小伙伴對我的工作經(jīng)歷比較感興趣,剛好在這里我就做下介紹直撤。我是碩士研究生畢業(yè)非竿,我已經(jīng)工作3年零3個月了,職位上從最開始的騰訊初級工程師變成了現(xiàn)在的百度Android資深工程師谋竖。最開始我并不是做Android的红柱,先是做了半年的C++,接著做了3個月的Web前端圈盔,然后公司內(nèi)部轉(zhuǎn)崗做Android到至今豹芯,純Android工作年限的話其實是2.5年。但是我認(rèn)為我的Android工作經(jīng)驗(注:工作年限不等同于工作經(jīng)驗)不止2.5年驱敲,我投入大量的業(yè)余時間在Android開發(fā)上,并且我習(xí)慣去思考問題宽闲、總結(jié)問題并將其融會貫通众眨,因此我的Android技術(shù)在短時間內(nèi)有了很大的提升。
在Android學(xué)習(xí)過程中容诬,初學(xué)者踩過的坑我也都踩過娩梨,我也深深地知道大家在學(xué)習(xí)過程中最棘手的問題是什么。舉個例子览徒,在3年前狈定,我想在SlidingMenu中放入一個ListView,發(fā)現(xiàn)二者總是不能很好地一起工作习蓬,這肯定是由于滑動沖突的問題纽什,我也知道,但是不知道怎么解決躲叼。我就去學(xué)校圖書館翻遍了所有的Android書籍芦缰,無果。大家肯定都知道原因枫慷,為什么我無法從書中查找到問題的答案让蕾,因為入門書不講滑動沖突浪规,所謂的高級編程書也不講。還有一個問題探孝,我曾經(jīng)以為view.post(runnable)可以讓runnable的run方法在線程中執(zhí)行笋婿,所以我就在run方法里面去做耗時的操作,現(xiàn)在想想我當(dāng)時是多菜啊顿颅,因此我曾經(jīng)也是菜鳥萌抵。
直到若干年后的某一天,我終于琢磨透了滑動沖突的事元镀,然后我就把解決問題的思想寫在了CSDN博客上绍填,但是好像看得人并不多,很多人并不能體會我的用心栖疑,后來我博客的訪問量越來越大讨永,這才慢慢地得到了一些人的關(guān)注。后來有一天我有了寫書的契機遇革,我想到了我最開始學(xué)習(xí)Android時所踩過的坑卿闹,想到滑動沖突對我的困擾,為了更好地傳播我的技術(shù)經(jīng)驗萝快,為了讓更多的人少踩一些坑锻霎,為了讓更多地人成為Android高級工程師,我毅然決定將Android開發(fā)中最重要的揪漩、最疑難的旋恼、最容易困擾大家的、成為高級工程師所必備的知識點和盤托出奄容,這就是《Android開發(fā)藝術(shù)探索》存在的原因以及意義冰更。書的反響怎么樣呢?從目前讀者的評價來看昂勒,內(nèi)容基本無差評蜀细,我收到了很多讀者的肯定以及感謝,這說明很多人能夠理解我的用心戈盈。
說了那么多奠衔,言歸正傳,下面說下Android學(xué)習(xí)路線的話題塘娶,本文打算從4個階段來對Android的學(xué)習(xí)過程做一個全面的分析归斤,分別為Android初級、中級血柳、高級以及資深工程師官册,具體請看下面的分析。同理难捌,本篇學(xué)習(xí)路線仍然只針對Android應(yīng)用開發(fā)膝宁,不針對Rom開發(fā)和逆向工程等鸦难。這里虛擬一位“小明”的角色,在這里小明就是Android初學(xué)者的代表员淫。
初級工程師
小明之前完全沒接觸過Android開發(fā)合蔽,是個應(yīng)屆生,他的待遇是13k介返,然后小明以校招的身份進(jìn)入了百度拴事,然后小明需要怎么學(xué)習(xí)才能成為初級工程師呢?這個時候圣蝎,小明對編程基礎(chǔ)刃宵、數(shù)據(jù)結(jié)構(gòu)、C語言都有一定基礎(chǔ)徘公,Java語法什么的也都掌握的比較好牲证,Android才有java語言,無奈的是小明并不會搞Android关面。
小明首先需要購買一本Android入門的書籍坦袍,為了更快地學(xué)習(xí)Android,小明業(yè)余時間也都用來一邊看書一邊照著書中的例子敲代碼等太,結(jié)果2周時間小明就把這本書學(xué)了一遍捂齐。看完這本書后缩抡,小明對Android的歷史奠宜、結(jié)構(gòu)、代碼規(guī)范等都有了一個大概的了解缝其,并且挎塌,小明已經(jīng)可以寫出一些簡單的Activity了。這個時候在小明眼里内边,Android開發(fā)很簡單很好玩,通過在xml中擺放一些按鈕文本框什么的就可以做一些界面了待锈。
小明開始跟著他的技術(shù)導(dǎo)師做需求漠其,一些簡單的小需求小明自然是不在話下了。突然有一天來了一個需求竿音,該需求要求小明在Activity中為一個button加一個動畫效果和屎,小明慌了:“完全沒接觸過,書上也沒有講春瞬,怎么辦呢柴信?”小明冷靜了下,打開了百度搜索宽气,輸入“Android 動畫”随常,打開前幾個鏈接潜沦,小明恍然大悟,照著網(wǎng)上的例子把需求給實現(xiàn)了绪氛。后來導(dǎo)師告訴他:“學(xué)好Android唆鸡,官方文檔是必須看的,既全面又權(quán)威”枣察。然后小明如獲至寶争占,花了一年時間把上面的guide和training都看了一遍,并且他還動手抄了幾個小例子序目。
有一天臂痕,小明又需要做一個動畫相關(guān)的需求,這可難不倒小明猿涨,它熟練地打開了www.baidu.com握童,輸入“Android 動畫”,突然他楞了一下:”總不能每次寫動畫都要百度一下吧嘿辟!“舆瘪,于是他在CSDN開了一個博客,把動畫相關(guān)的知識點都寫上去红伦,為的是后面再寫動畫相關(guān)的代碼就不用百度去搜了英古,事實如何呢?后面再寫動畫相關(guān)的代碼昙读,小明的確不用再去百度搜了召调,因為通過寫一篇動畫博客,他把動畫相關(guān)的細(xì)節(jié)都已經(jīng)記住了蛮浑,這樣他就可以不用再去參考任何文檔了唠叛,后來小明還學(xué)會了把一些瑣碎的不方便放在博客上的東西寫到了印象筆記上面,什么時候忘了10秒鐘以內(nèi)都可以快速找回來沮稚,而不是花10分鐘去再次搜索一遍艺沼。
這里總結(jié)一下,Android入門的時候蕴掏,需要有一本入門書障般,好好學(xué)習(xí)書中的內(nèi)容,同時花一年時間把Android官方文檔中的training和guide看一遍盛杰,同時通過寫博客和記筆記的方式來做總結(jié)挽荡,建議讓自己的每篇博客都有價值些。通過一年時間的學(xué)習(xí)即供,相信每個人都可以達(dá)到中級工程師的水平定拟。
**技術(shù)要求:
- 基本知識點
比如四大組件如何使用、如何創(chuàng)建Service逗嫡、如何進(jìn)行布局青自、簡單的自定義View株依、動畫等常見技術(shù) - 書籍推薦
《第一行代碼 Android》、《瘋狂Android》**
中級工程師
**小明經(jīng)過一年的努力學(xué)習(xí)終于成為Android中級工程師了性穿,月薪變成了17k勺三。到了中級工程師,已經(jīng)可以在公司里干很多體力活了需曾,但是一些很重要的任務(wù)小明還不能一個人承擔(dān)起來吗坚,這個時候小明需要學(xué)習(xí)的內(nèi)容就很多了,如下所示:
- AIDL:熟悉AIDL呆万,理解其工作原理商源,懂transact和onTransact的區(qū)別;
- Binder:從Java層大概理解Binder的工作原理谋减,懂Parcel對象的使用牡彻;
- 多進(jìn)程:熟練掌握多進(jìn)程的運行機制,懂Messenger出爹、Socket等庄吼;
- 事件分發(fā):彈性滑動、滑動沖突等严就;
- 玩轉(zhuǎn)View:View的繪制原理总寻、各種自定義View;
- 動畫系列:熟悉View動畫和屬性動畫的不同點梢为,懂屬性動畫的工作原理渐行;
- 懂性能優(yōu)化、熟悉mat等工具
- 懂點常見的設(shè)計模式**
學(xué)習(xí)方法
閱讀進(jìn)階書籍铸董,閱讀Android源碼祟印,閱讀官方文檔并嘗試自己寫相關(guān)的技術(shù)文章,需要有一定技術(shù)深度和自我思考粟害。在這個階段的學(xué)習(xí)過程中蕴忆,有2個點是比較困擾大家的,一個是閱讀源碼悲幅,另一個是自定義View以及滑動沖突孽文。
如何閱讀源碼呢?這是個頭疼的問題夺艰,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細(xì)節(jié)不可自拔沉衣,要關(guān)注代碼的流程并盡量挖掘出對應(yīng)用層開發(fā)有用的結(jié)論郁副。另外仔細(xì)閱讀源碼中對一個類或者方法的注釋,在看不懂源碼時豌习,源碼中的注釋可以幫你更好地了解源碼中的工作原理存谎,這個過程雖然艱苦拔疚,但是別無他法。
**如何玩轉(zhuǎn)自定義View呢既荚?我的建議是不要通過學(xué)習(xí)自定義view而學(xué)習(xí)自定義view稚失。為什么這么說呢?因為自定義view的種類太多了恰聘,各式各樣的絢麗的自定義效果句各,如何學(xué)的玩呢!我們要透過現(xiàn)象看本質(zhì)晴叨,更多地去關(guān)注自定義view所需的知識點凿宾,這里做如下總結(jié):
- 搞懂view的滑動原理
- 搞懂如何實現(xiàn)彈性滑動
- 搞懂view的滑動沖突
- 搞懂view的measure、layout和draw
- 然后再學(xué)習(xí)幾個已有的自定義view的例子
- 最后就可以搞定自定義view了兼蕊,所謂萬變不離其宗**
大概再需要1-2年時間初厚,即可達(dá)到高級工程師的技術(shù)水平。我個人認(rèn)為通過《Android開發(fā)藝術(shù)探索》和《Android群英傳》可以縮短這個過程為0.5-1年孙技。注意产禾,達(dá)到高級工程師的技術(shù)水平不代表就可以立刻成為高級工程師(受機遇、是否跳槽的影響)牵啦,但是技術(shù)達(dá)到了亚情,成為高級工程師只是很簡單的事。
**技術(shù)要求:
- 稍微深入的知識點
AIDL蕾久、Messenger势似、Binder、多進(jìn)程僧著、動畫履因、滑動沖突、自定義View盹愚、消息隊列等 - 書籍推薦
《Android開發(fā)藝術(shù)探索》栅迄、《Android群英傳》**
高級工程師
小明成為了夢寐以求的高級工程師,月薪達(dá)到了20k皆怕,還拿到了一丟丟股票毅舆。這個時候小明的Android水平已經(jīng)不錯了,但是小明的目標(biāo)是資深工程師愈腾,小明聽說資深工程師月薪可以達(dá)到30k+憋活。
**為了成為Android資深工程師,需要學(xué)習(xí)的東西就更多了虱黄,并且有些并不是那么具體了悦即,如下所示:
- 繼續(xù)加深理解”稍微深入的知識點“中所定義的內(nèi)容
- 了解系統(tǒng)核心機制:
1. 了解SystemServer的啟動過程
2. 了解主線程的消息循環(huán)模型
3. 了解AMS和PMS的工作原理
4. 能夠回答問題”一個應(yīng)用存在多少個Window?“
5. 了解四大組件的大概工作流程
6. … - 基本知識點的細(xì)節(jié)
1. Activity的啟動模式以及異常情況下不同Activity的表現(xiàn)
2. Service的onBind和onReBind的關(guān)聯(lián)
3. onServiceDisconnected(ComponentName className)和binderDied()的區(qū)別
4. AsyncTask在不同版本上的表現(xiàn)細(xì)節(jié)
5. 線程池的細(xì)節(jié)和參數(shù)配置
6. … - 熟悉設(shè)計模式,有架構(gòu)意識**
學(xué)習(xí)方法
這個時候已經(jīng)沒有太具體的學(xué)習(xí)方法了辜梳,無非就是看書粱甫、看源碼和做項目,平時多種總結(jié)作瞄,盡量將知識融會貫通從而形成一種體系化的感覺茶宵。同時這個階段對架構(gòu)是有一定要求的,架構(gòu)是抽象的宗挥,但是設(shè)計模式是具體的乌庶,所以一定要加強下設(shè)計模式的學(xué)習(xí)。關(guān)于設(shè)計模式的學(xué)習(xí)属韧,最近一本新書推薦給大家《Android 源碼設(shè)計模式解析與實戰(zhàn)》安拟,既可以學(xué)習(xí)設(shè)計模式,又可能體會到Android源碼中的設(shè)計思想宵喂,我最近也在閱讀此書糠赦。
**技術(shù)要求:
- 稍微深入的知識點
- 系統(tǒng)核心機制
- 基本知識點的細(xì)節(jié)
- 設(shè)計模式和架構(gòu)
- 書籍推薦
《Android開發(fā)藝術(shù)探索》、《Android 源碼設(shè)計模式解析與實戰(zhàn)》锅棕、《Android內(nèi)核剖析》**
資深工程師
這個階段的程序員也許并沒有太具體的學(xué)習(xí)路線了拙泽。