前言
該文章是筆者參加 Android 巴士線下交流會(huì)成都站 的手寫講稿虛擬場(chǎng)景,所以大家將就看一下。
開(kāi)始
大家好,我是劉世麟,首先感謝安卓巴士為我們創(chuàng)造了這次奇妙的相遇?,F(xiàn)場(chǎng)的氛圍也讓我十分激動(dòng)。
職場(chǎng)競(jìng)爭(zhēng)力,從來(lái)都是我們關(guān)注的話題,所以我今天給大家分享一下:《Android 初學(xué)者,如何快速提升職場(chǎng)競(jìng)爭(zhēng)力》。
在今年 4 月,全球互聯(lián)網(wǎng)引來(lái)了一個(gè)歷史性的轉(zhuǎn)折點(diǎn):隨著流量分析工具 StatCounter 的報(bào)告,Android 首次超越 Windows,成為用戶訪問(wèn)互聯(lián)網(wǎng)最常用的操作系統(tǒng)!Android 不僅在移動(dòng)領(lǐng)域,在全操作系統(tǒng)內(nèi),都成為了當(dāng)之無(wú)愧的霸主!無(wú)論你有志于成為領(lǐng)先企業(yè)的 Android 工程師,還是想成為改變世界的獨(dú)立開(kāi)發(fā)者,我希望你們?yōu)榇硕湴粒。。?/p>
即便如此,大家覺(jué)得 Android 開(kāi)發(fā)就業(yè)形勢(shì)可觀嗎?
答案是不可觀。我這絕對(duì)不是危言聳聽(tīng),隨著近年來(lái) O2O 公司的大幅度倒閉,互聯(lián)網(wǎng)公司燒錢嚴(yán)重,很多公司根本燒不起,所以很多開(kāi)發(fā)者隨著企業(yè)的倒閉再次卷入了求職的浪潮之中。
我想請(qǐng)問(wèn)一下,在場(chǎng)的各位,現(xiàn)在用的共享單車都用的是哪家的?
想必基本都是小黃車和小橙車?,F(xiàn)在 ofo 和膜拜兩家獨(dú)大,前段時(shí)間還能看到的悟空單車現(xiàn)在已經(jīng)銷聲匿跡,因?yàn)樗鼰黄疱X,ofo 和膜拜一個(gè)月免費(fèi)騎行足以讓它直接倒下,而就職于悟空單車的 Android 程序員可能因此被辭職。
Android 行業(yè)發(fā)展年限并不久,所以最開(kāi)始接觸 Android 的那一批人,現(xiàn)在極有可能還在 Android 領(lǐng)域,再加上近年來(lái)各大培訓(xùn)機(jī)構(gòu)和高校向社會(huì)中注入了很大一部分的 Android 開(kāi)發(fā)人才,所以造成了現(xiàn)在供大于求的窘境。可能有人經(jīng)歷或者聽(tīng)說(shuō)過(guò) 14 年 Android 會(huì)寫一個(gè) ListView 的適配器就能找到不錯(cuò)的工作吧,你現(xiàn)在會(huì)用這些能找到工作嗎?
所以這個(gè)時(shí)候,出色的開(kāi)發(fā)能力能讓你的開(kāi)發(fā)職業(yè)生涯更加順風(fēng)順?biāo)?/p>
下面我想結(jié)合我的經(jīng)歷給大家講一下幾點(diǎn):
- 如何系統(tǒng)化學(xué)習(xí) Android 技術(shù)?(Android 知識(shí)體系)
- 企業(yè)到底需要什么樣的 Android 開(kāi)發(fā)人才?(Android 市場(chǎng)行情)
- Android 學(xué)習(xí)的方式都有哪些?(Android 學(xué)習(xí)方式)
- 對(duì) Android 學(xué)習(xí)和提升的一些建議。(Android 提升建議)
Android 知識(shí)體系

重點(diǎn)看我們 PPT 中的圖。在 Android 開(kāi)發(fā)的過(guò)程中,需要很多很多的知識(shí),而有些知識(shí)也很難為其分類,在這里,我把它們分為上述五個(gè)部分:UI、架構(gòu)、性能、NDK、其他,其他則可以細(xì)化為代碼風(fēng)格,學(xué)習(xí)能力,第三方庫(kù)等。
UI方面
首先是 UI 方面,我相信大多數(shù)人都是開(kāi)發(fā) Android 應(yīng)用的,所以 UI 的知識(shí),必不可少。UI 一共分為三部分:繪制、布局和觸摸反饋。要想寫出漂亮的 UI 搭配動(dòng)畫,這需要花費(fèi)巨量的時(shí)間,可能已經(jīng)有特別多的朋友和我一樣,在一直跟進(jìn)扔物線(朱凱)的 HenCoder 系列了。如果你可以寫出非常漂亮的控件或者動(dòng)畫框架并開(kāi)源出來(lái),我相信,你找份好工作已經(jīng)沒(méi)有問(wèn)題了。架構(gòu)方面
這個(gè)方面是卡年限的一個(gè)東西。隨著工作的需要以及閱歷(看代碼)的增長(zhǎng),我們總是會(huì)越來(lái)越不滿意自己寫的代碼模塊,比如我,就深受這個(gè)的苦惱,我經(jīng)常會(huì)出現(xiàn)三個(gè)月前寫的代碼,自己都看不下去,強(qiáng)迫癥的我,一定會(huì)把它翻寫的。但如果項(xiàng)目周期短的你,千萬(wàn)不要像我一樣做。
當(dāng)你不斷改寫封裝自己的代碼的時(shí)候,你可能就已經(jīng)涉及到了架構(gòu)方面的知識(shí)啦。架構(gòu)方面的知識(shí)主要包括設(shè)計(jì)思想,及其選擇合適架構(gòu)的能力,這兩者通常來(lái)講是相輔相成的。每一種新的架構(gòu)或設(shè)計(jì)思想問(wèn)世往往是用來(lái)解決實(shí)際問(wèn)題的,他們解決問(wèn)題的側(cè)重點(diǎn)各不相同,因此在什么時(shí)候采用什么架構(gòu)或設(shè)計(jì)就非??简?yàn)程序員的閱歷了。通常這部分的知識(shí)學(xué)起來(lái)最為困難,因?yàn)樗粌H僅是一種思想,如果你的代碼量不多,或者接觸的項(xiàng)目比較小的話,你往往會(huì)很少觸及到這部分的知識(shí),最后自然而言又忘了。
所以在這方面我建議大家在工作之余,多參考 GitHub 上開(kāi)源的完整項(xiàng)目,也要多寫點(diǎn)自己的項(xiàng)目,提升自己的代碼量和架構(gòu)能力。性能方面
性能方面相信開(kāi)發(fā)稍大型 APP 的工程師體會(huì)尤其深刻了。隨著 APP 工程的體量越來(lái)越大,開(kāi)發(fā)功能越來(lái)越多,你會(huì)發(fā)現(xiàn)原來(lái)非常流暢的 APP 可能會(huì)出現(xiàn)卡頓、OOM、ANR 等現(xiàn)象,除了前面韓神所提到的內(nèi)存泄漏,可能你還會(huì)因?yàn)槠渌麊?wèn)題導(dǎo)致性能表現(xiàn)不夠優(yōu)秀。而這部分的只是相對(duì)比較零散,也很難總結(jié),更多的就是你的經(jīng)驗(yàn)積累,所以多年經(jīng)驗(yàn)的程序猿更受企業(yè)的青睞。NDK方面
這一方面的知識(shí)比較特殊,很多 Android 開(kāi)發(fā)工程師在初中級(jí)階段可能都不會(huì)涉及到。在開(kāi)發(fā)中我們可能只會(huì)在特定的領(lǐng)域才會(huì)用到 NDK 進(jìn)行開(kāi)發(fā),由于我也沒(méi)遇到過(guò),所以暫不多講。
Android 市場(chǎng)分析
總體上,目前市面上可以將互聯(lián)網(wǎng)公司分為兩類:
沒(méi)有實(shí)體產(chǎn)品的,以軟件產(chǎn)品為主的互聯(lián)網(wǎng)公司(其中相當(dāng)一部分為外包);
有實(shí)體產(chǎn)品的,將硬件和軟件結(jié)合起來(lái)的互聯(lián)網(wǎng)公司。
我們暫且把它們稱呼為 A 類和 B 類。
A 類公司往往偏向于 UI 及其架構(gòu),性能稍次,并且大多數(shù)中小型企業(yè)會(huì)要求應(yīng)聘者能熟練掌握市場(chǎng)上流行的開(kāi)源庫(kù)以節(jié)約開(kāi)發(fā)成本。這類公司開(kāi)發(fā)的 APP 往往是純虛擬的產(chǎn)品 —— 社交通訊、各類工具、資源聚合等。這些產(chǎn)品因?yàn)楦?jìng)爭(zhēng)激烈,功能需求變化也快,所以版本迭代的速度會(huì)非???。這個(gè)時(shí)候,一個(gè)好的架構(gòu)就可以節(jié)省許多時(shí)間,它能快速的響應(yīng)需求,并迅速添加新的功能模塊。UI 也是重點(diǎn),在兩個(gè) APP 功能差不多的情況下,拼的就是用戶體驗(yàn)了,其中用戶最能感受到的就是兩點(diǎn),首先是界面是否美觀,動(dòng)畫是否自然;其次才是 APP 是否流暢。
A 類公司對(duì)人才的需求大概是這樣。

而對(duì)于 B 類公司,他們因?yàn)橛袑?shí)體產(chǎn)品,因此往往會(huì)要求應(yīng)聘者具有某種特殊的技能,例如藍(lán)牙,WIFI等。
這類公司往往偏向于性能及 NDK,UI 稍次。在目前的大環(huán)境下,這類公司多數(shù)都在物聯(lián)網(wǎng)產(chǎn)業(yè)鏈上,以智能硬件、智能家居、機(jī)器人居多,而這類公司的話,大部分其實(shí)都是傳統(tǒng)企業(yè)轉(zhuǎn)型而來(lái),因此其開(kāi)發(fā)的產(chǎn)品比較注重功能的完善及響應(yīng)速度,UI 的話反而會(huì)稍微丑陋一些。畢竟消費(fèi)者買的是實(shí)體產(chǎn)品,配套的 APP 就算再丑也得用不是么。
他們對(duì)人才的需求往往是這樣的:

明確自己想去什么樣的公司,或者對(duì)哪一類的業(yè)務(wù)更感興趣,會(huì)有助于你更有的放矢地學(xué)習(xí)技能。
Android 學(xué)習(xí)方式?
我認(rèn)為最主要的一點(diǎn)就是主觀能動(dòng)性,或者說(shuō)興趣,如果你對(duì) Android 開(kāi)發(fā)沒(méi)有太大的興趣,那么還是盡早換方向吧。有了興趣,自然是確立一個(gè)比較正確的學(xué)習(xí)路線。據(jù)說(shuō)我們參會(huì)的還有一些應(yīng)屆畢業(yè)生或者還沒(méi)開(kāi)始工作的朋友??赡苓€在學(xué)習(xí)中很迷茫,我這里先給大家說(shuō)一下我的學(xué)習(xí)經(jīng)歷。
學(xué)習(xí) Android 無(wú)非幾種方式:
看書類
此類可能比較全面,但也意味著過(guò)時(shí)的問(wèn)題,我不是非常提倡,但書籍是人類進(jìn)步的階梯,你們可以考慮。其實(shí)我也買了挺多相關(guān)書籍,但自從習(xí)慣在網(wǎng)絡(luò)上學(xué)習(xí)后就不看了。線上課程直播或者錄播
這個(gè)可能是初學(xué)者當(dāng)下比較受歡迎的學(xué)習(xí)方式了,但所講知識(shí)通常比較基礎(chǔ),而且學(xué)習(xí)速度慢,但效率確實(shí)挺高的。這也是我在入門 Android 的時(shí)候用的最多的方式。采用這種方式學(xué)習(xí)的時(shí)候通常會(huì)有一個(gè)毛病,就是喜歡邊看邊寫,這是我不提倡的,我提倡看一段寫一段。在前期你可以不用一整段都看完,以小節(jié)的方式學(xué)習(xí)后再寫代碼。前期可能你會(huì)覺(jué)得自己像在背代碼一樣,但我不可否認(rèn),這確實(shí)是效率挺高的方法。但真的太費(fèi)時(shí)了,至少我在工作后沒(méi)用過(guò)這種方案。看博文、看別人的開(kāi)源項(xiàng)目、看官方文檔、官方例子代碼
這是我現(xiàn)在用的最多的一種學(xué)習(xí)提升方式。一般可以通過(guò)上面的看書或者看錄播的方式學(xué)習(xí)到完整的基礎(chǔ)組件和代碼編寫,但這時(shí)候你用基礎(chǔ)的組件實(shí)現(xiàn)出來(lái)的東西美觀度通常比較局限。但當(dāng)你加入公司后,產(chǎn)品會(huì)設(shè)計(jì)出各種新穎的效果,而這些效果并不能通過(guò)原生控件實(shí)現(xiàn),這時(shí)候,網(wǎng)上超大量的資源就涌現(xiàn)出來(lái)了。掌握 GitHub 正確的搜索姿勢(shì),通常能讓你事半功倍。而這個(gè)時(shí)候,一個(gè)熟悉的英文閱讀能力和理解能力將展現(xiàn)的淋漓盡致。隨著開(kāi)發(fā)經(jīng)驗(yàn)的積累,你會(huì)發(fā)現(xiàn)你的開(kāi)發(fā)速度直線飆升。
Android 提升建議
成為一名Android開(kāi)發(fā)者很容易,但是要成為一名成功的、突出的Android開(kāi)發(fā)者卻不那么容易。這需要付出很多的努力,耐心,奉獻(xiàn)和毅力才能做到。
我并沒(méi)有什么捷徑或者簡(jiǎn)單的方法來(lái)告訴你讓你成為一名成功的開(kāi)發(fā)者。但如果你愿意全身心投入并付出努力的話,你肯定會(huì)得到你應(yīng)得的成功的。
應(yīng)大家的請(qǐng)求,我這里給大家提供一些提升建議,僅供參考。
開(kāi)始閱讀更多的代碼
大部分的開(kāi)發(fā)者都不會(huì)抽時(shí)間去閱讀其他開(kāi)發(fā)者所寫的代碼,他們大多數(shù)時(shí)間只是花在寫他們已經(jīng)知道的事情上。但那并不利于你成長(zhǎng)為一名優(yōu)秀的開(kāi)發(fā)者,也不會(huì)增長(zhǎng)你的見(jiàn)識(shí)。我建議大家閱讀同事的代碼,讓你對(duì)你們的項(xiàng)目更加了解,當(dāng)你對(duì)公司的產(chǎn)品代碼足夠了解后,你給老板提加薪的時(shí)候才更有底氣。
有的人會(huì)說(shuō),咱們公司就我一個(gè) Android 開(kāi)發(fā)者,我看誰(shuí)的代碼呢?GitHub 上那么多優(yōu)秀的開(kāi)源應(yīng)用和類庫(kù),我建議你們?nèi)ラ喿x并開(kāi)始學(xué)習(xí)它們,每天 30 分鐘的代碼閱讀量是個(gè)非常好的開(kāi)始。你將會(huì)驚訝的發(fā)現(xiàn),還有如此多美妙的東西是你沒(méi)見(jiàn)過(guò)的。克服對(duì)未知的害怕
Android 系統(tǒng)很大,非常大。你不可能在一兩個(gè)月內(nèi)完全掌握它。隨著學(xué)習(xí)越深入,你會(huì)發(fā)現(xiàn)越多的內(nèi)容需要學(xué)習(xí)。作為一名初學(xué)者,很容易也很正常地出現(xiàn)這種對(duì)未知恐懼的害怕。我也不例外,曾經(jīng)我學(xué)習(xí) RxJava 的時(shí)候,我看了很多很多的博文,包括扔物線朱凱的那篇出名的《給Android開(kāi)發(fā)者的RxJava詳解》,但持續(xù)了整整一個(gè)周,依然不懂,這時(shí)候覺(jué)得 RxJava 真是太難了。在這種時(shí)候,不妨先放下它一段時(shí)間,過(guò)些日子再去學(xué)習(xí)你會(huì)覺(jué)得如魚得水的。比如我,前面就在GitHub 上開(kāi)源了 RxJava2Examples(附帶整個(gè)系列 RxJava 2 文章) 嘗試去克服對(duì)未知的恐懼吧,學(xué)習(xí)那些你確實(shí)需要用到的東西,能夠讓你開(kāi)始手頭正在構(gòu)建的應(yīng)用,然后慢慢地開(kāi)拓你的視野。嘗試開(kāi)始寫博客
寫博客或許是一件相當(dāng)費(fèi)時(shí)的事,或許你寫的博客只是閱覽了多篇文章后的總結(jié)而以,或許你寫的博客一點(diǎn)都不深入,但但是!?。e人的永遠(yuǎn)是別人的,作為一個(gè)已經(jīng)寫了很多博文的我來(lái)說(shuō),我所收獲到的東西,不是這點(diǎn)時(shí)間能比擬的。因?yàn)橹挥心阕銐蚨?,你才能講給別人聽(tīng)。開(kāi)始貢獻(xiàn)開(kāi)源庫(kù)
GitHub 上有很多很棒的開(kāi)源庫(kù),但由于一些特殊的原因可能作者并沒(méi)有時(shí)間維護(hù)它。嘗試去為開(kāi)源庫(kù)貢獻(xiàn)你的源碼,你會(huì)得到非常非常非常大的反饋的??赡苓@里有的人也知道,我在去年有維護(hù) ImagePicker 圖片選擇庫(kù),我在里面貢獻(xiàn)了不少代碼,雖然后面由于一些時(shí)間原因停止維護(hù)了,但我收獲非常大。具體收獲,這個(gè)只能意會(huì)。
除了為別人開(kāi)源庫(kù)貢獻(xiàn),你也可以開(kāi)源自己的代碼。圖片壓縮在項(xiàng)目中挺常用的,在編寫我們公司的項(xiàng)目的時(shí)候,我自己寫了圖片壓縮,后面覺(jué)得挺好用的,所以直接把它開(kāi)源到了 GitHub 上。這個(gè)過(guò)程非常的 nice,不僅學(xué)習(xí)到了特別多的知識(shí),而且通過(guò)大家的測(cè)試,我的開(kāi)源庫(kù)的伸展性更佳。開(kāi)源的過(guò)程有很多的東西是需要你學(xué)習(xí)的,而且這有助于你成為一名優(yōu)秀的開(kāi)發(fā)者。
- 花一些時(shí)間來(lái)學(xué)習(xí) Android 最佳實(shí)踐
要使自己比其他開(kāi)發(fā)者更加出眾,并能構(gòu)建出整潔美觀而又功能完善的應(yīng)用,你需要開(kāi)始學(xué)習(xí)一些 Android 開(kāi)發(fā)最佳實(shí)踐。除此之外,你還應(yīng)該多去關(guān)注市場(chǎng)發(fā)展,看看最近流行的庫(kù)都是怎么用,并嘗試閱讀它們。
寫在最后
本次我的分享也接近尾聲了,感謝你們?cè)诎倜χ谢ㄉ弦幌挛鐏?lái)這里聆聽(tīng)我們的宣講,希望在接下來(lái)的日子,我們共同成長(zhǎng),一起進(jìn)步!??!