前言
該文章是筆者參加 Android 巴士線下交流會成都站 的手寫講稿虛擬場景噪舀,所以大家將就看一下魁淳。
開始
大家好飘诗,我是劉世麟,首先感謝安卓巴士為我們創(chuàng)造了這次奇妙的相遇〗绻洌現(xiàn)場的氛圍也讓我十分激動昆稿。
職場競爭力,從來都是我們關注的話題息拜,所以我今天給大家分享一下:《Android 初學者溉潭,如何快速提升職場競爭力》净响。
在今年 4 月,全球互聯(lián)網(wǎng)引來了一個歷史性的轉折點:隨著流量分析工具 StatCounter 的報告喳瓣,Android 首次超越 Windows馋贤,成為用戶訪問互聯(lián)網(wǎng)最常用的操作系統(tǒng)!Android 不僅在移動領域畏陕,在全操作系統(tǒng)內(nèi)配乓,都成為了當之無愧的霸主!無論你有志于成為領先企業(yè)的 Android 工程師惠毁,還是想成為改變世界的獨立開發(fā)者犹芹,我希望你們?yōu)榇硕湴粒。鞠绰。?/p>
即便如此腰埂,大家覺得 Android 開發(fā)就業(yè)形勢可觀嗎?
答案是不可觀蜈膨。我這絕對不是危言聳聽屿笼,隨著近年來 O2O 公司的大幅度倒閉,互聯(lián)網(wǎng)公司燒錢嚴重翁巍,很多公司根本燒不起刁卜,所以很多開發(fā)者隨著企業(yè)的倒閉再次卷入了求職的浪潮之中。
我想請問一下曙咽,在場的各位蛔趴,現(xiàn)在用的共享單車都用的是哪家的?
想必基本都是小黃車和小橙車±欤現(xiàn)在 ofo 和膜拜兩家獨大孝情,前段時間還能看到的悟空單車現(xiàn)在已經(jīng)銷聲匿跡,因為它燒不起錢洒嗤,ofo 和膜拜一個月免費騎行足以讓它直接倒下箫荡,而就職于悟空單車的 Android 程序員可能因此被辭職。
Android 行業(yè)發(fā)展年限并不久渔隶,所以最開始接觸 Android 的那一批人羔挡,現(xiàn)在極有可能還在 Android 領域,再加上近年來各大培訓機構和高校向社會中注入了很大一部分的 Android 開發(fā)人才间唉,所以造成了現(xiàn)在供大于求的窘境绞灼。可能有人經(jīng)歷或者聽說過 14 年 Android 會寫一個 ListView 的適配器就能找到不錯的工作吧呈野,你現(xiàn)在會用這些能找到工作嗎低矮?
所以這個時候,出色的開發(fā)能力能讓你的開發(fā)職業(yè)生涯更加順風順水被冒。
下面我想結合我的經(jīng)歷給大家講一下幾點:
- 如何系統(tǒng)化學習 Android 技術军掂?(Android 知識體系)
- 企業(yè)到底需要什么樣的 Android 開發(fā)人才轮蜕?(Android 市場行情)
- Android 學習的方式都有哪些?(Android 學習方式)
- 對 Android 學習和提升的一些建議蝗锥。(Android 提升建議)
Android 知識體系
重點看我們 PPT 中的圖跃洛。在 Android 開發(fā)的過程中,需要很多很多的知識终议,而有些知識也很難為其分類税课,在這里,我把它們分為上述五個部分:UI痊剖、架構韩玩、性能、NDK陆馁、其他找颓,其他則可以細化為代碼風格,學習能力叮贩,第三方庫等击狮。
UI方面
首先是 UI 方面,我相信大多數(shù)人都是開發(fā) Android 應用的益老,所以 UI 的知識彪蓬,必不可少。UI 一共分為三部分:繪制捺萌、布局和觸摸反饋档冬。要想寫出漂亮的 UI 搭配動畫,這需要花費巨量的時間桃纯,可能已經(jīng)有特別多的朋友和我一樣酷誓,在一直跟進扔物線(朱凱)的 HenCoder 系列了。如果你可以寫出非常漂亮的控件或者動畫框架并開源出來态坦,我相信盐数,你找份好工作已經(jīng)沒有問題了。架構方面
這個方面是卡年限的一個東西伞梯。隨著工作的需要以及閱歷(看代碼)的增長玫氢,我們總是會越來越不滿意自己寫的代碼模塊,比如我谜诫,就深受這個的苦惱漾峡,我經(jīng)常會出現(xiàn)三個月前寫的代碼,自己都看不下去猜绣,強迫癥的我灰殴,一定會把它翻寫的。但如果項目周期短的你掰邢,千萬不要像我一樣做牺陶。
當你不斷改寫封裝自己的代碼的時候,你可能就已經(jīng)涉及到了架構方面的知識啦辣之。架構方面的知識主要包括設計思想掰伸,及其選擇合適架構的能力,這兩者通常來講是相輔相成的怀估。每一種新的架構或設計思想問世往往是用來解決實際問題的狮鸭,他們解決問題的側重點各不相同,因此在什么時候采用什么架構或設計就非扯嗖螅考驗程序員的閱歷了歧蕉。通常這部分的知識學起來最為困難,因為他不僅僅是一種思想康铭,如果你的代碼量不多惯退,或者接觸的項目比較小的話,你往往會很少觸及到這部分的知識从藤,最后自然而言又忘了催跪。
所以在這方面我建議大家在工作之余,多參考 GitHub 上開源的完整項目夷野,也要多寫點自己的項目懊蒸,提升自己的代碼量和架構能力。性能方面
性能方面相信開發(fā)稍大型 APP 的工程師體會尤其深刻了悯搔。隨著 APP 工程的體量越來越大骑丸,開發(fā)功能越來越多,你會發(fā)現(xiàn)原來非常流暢的 APP 可能會出現(xiàn)卡頓妒貌、OOM者娱、ANR 等現(xiàn)象,除了前面韓神所提到的內(nèi)存泄漏苏揣,可能你還會因為其他問題導致性能表現(xiàn)不夠優(yōu)秀黄鳍。而這部分的只是相對比較零散,也很難總結平匈,更多的就是你的經(jīng)驗積累框沟,所以多年經(jīng)驗的程序猿更受企業(yè)的青睞。NDK方面
這一方面的知識比較特殊增炭,很多 Android 開發(fā)工程師在初中級階段可能都不會涉及到忍燥。在開發(fā)中我們可能只會在特定的領域才會用到 NDK 進行開發(fā),由于我也沒遇到過隙姿,所以暫不多講梅垄。
Android 市場分析
總體上,目前市面上可以將互聯(lián)網(wǎng)公司分為兩類:
沒有實體產(chǎn)品的输玷,以軟件產(chǎn)品為主的互聯(lián)網(wǎng)公司(其中相當一部分為外包)队丝;
有實體產(chǎn)品的靡馁,將硬件和軟件結合起來的互聯(lián)網(wǎng)公司。
我們暫且把它們稱呼為 A 類和 B 類机久。
A 類公司往往偏向于 UI 及其架構臭墨,性能稍次,并且大多數(shù)中小型企業(yè)會要求應聘者能熟練掌握市場上流行的開源庫以節(jié)約開發(fā)成本膘盖。這類公司開發(fā)的 APP 往往是純虛擬的產(chǎn)品 —— 社交通訊胧弛、各類工具、資源聚合等侠畔。這些產(chǎn)品因為競爭激烈结缚,功能需求變化也快,所以版本迭代的速度會非橙砉祝快红竭。這個時候,一個好的架構就可以節(jié)省許多時間码党,它能快速的響應需求德崭,并迅速添加新的功能模塊。UI 也是重點揖盘,在兩個 APP 功能差不多的情況下眉厨,拼的就是用戶體驗了,其中用戶最能感受到的就是兩點兽狭,首先是界面是否美觀憾股,動畫是否自然;其次才是 APP 是否流暢箕慧。
A 類公司對人才的需求大概是這樣服球。
而對于 B 類公司,他們因為有實體產(chǎn)品颠焦,因此往往會要求應聘者具有某種特殊的技能斩熊,例如藍牙,WIFI等伐庭。
這類公司往往偏向于性能及 NDK粉渠,UI 稍次。在目前的大環(huán)境下圾另,這類公司多數(shù)都在物聯(lián)網(wǎng)產(chǎn)業(yè)鏈上霸株,以智能硬件、智能家居集乔、機器人居多去件,而這類公司的話,大部分其實都是傳統(tǒng)企業(yè)轉型而來,因此其開發(fā)的產(chǎn)品比較注重功能的完善及響應速度尤溜,UI 的話反而會稍微丑陋一些倔叼。畢竟消費者買的是實體產(chǎn)品,配套的 APP 就算再丑也得用不是么靴跛。
他們對人才的需求往往是這樣的:
明確自己想去什么樣的公司缀雳,或者對哪一類的業(yè)務更感興趣渡嚣,會有助于你更有的放矢地學習技能梢睛。
Android 學習方式?
我認為最主要的一點就是主觀能動性识椰,或者說興趣绝葡,如果你對 Android 開發(fā)沒有太大的興趣,那么還是盡早換方向吧腹鹉。有了興趣藏畅,自然是確立一個比較正確的學習路線。據(jù)說我們參會的還有一些應屆畢業(yè)生或者還沒開始工作的朋友功咒∮溲郑可能還在學習中很迷茫,我這里先給大家說一下我的學習經(jīng)歷力奋。
學習 Android 無非幾種方式:
看書類
此類可能比較全面榜旦,但也意味著過時的問題,我不是非常提倡景殷,但書籍是人類進步的階梯溅呢,你們可以考慮。其實我也買了挺多相關書籍猿挚,但自從習慣在網(wǎng)絡上學習后就不看了咐旧。線上課程直播或者錄播
這個可能是初學者當下比較受歡迎的學習方式了,但所講知識通常比較基礎绩蜻,而且學習速度慢铣墨,但效率確實挺高的。這也是我在入門 Android 的時候用的最多的方式办绝。采用這種方式學習的時候通常會有一個毛病伊约,就是喜歡邊看邊寫,這是我不提倡的八秃,我提倡看一段寫一段碱妆。在前期你可以不用一整段都看完,以小節(jié)的方式學習后再寫代碼昔驱。前期可能你會覺得自己像在背代碼一樣疹尾,但我不可否認,這確實是效率挺高的方法。但真的太費時了纳本,至少我在工作后沒用過這種方案窍蓝。看博文、看別人的開源項目繁成、看官方文檔吓笙、官方例子代碼
這是我現(xiàn)在用的最多的一種學習提升方式。一般可以通過上面的看書或者看錄播的方式學習到完整的基礎組件和代碼編寫巾腕,但這時候你用基礎的組件實現(xiàn)出來的東西美觀度通常比較局限面睛。但當你加入公司后,產(chǎn)品會設計出各種新穎的效果尊搬,而這些效果并不能通過原生控件實現(xiàn)叁鉴,這時候,網(wǎng)上超大量的資源就涌現(xiàn)出來了佛寿。掌握 GitHub 正確的搜索姿勢幌墓,通常能讓你事半功倍。而這個時候冀泻,一個熟悉的英文閱讀能力和理解能力將展現(xiàn)的淋漓盡致常侣。隨著開發(fā)經(jīng)驗的積累,你會發(fā)現(xiàn)你的開發(fā)速度直線飆升弹渔。
Android 提升建議
成為一名Android開發(fā)者很容易胳施,但是要成為一名成功的、突出的Android開發(fā)者卻不那么容易捞附。這需要付出很多的努力巾乳,耐心,奉獻和毅力才能做到鸟召。
我并沒有什么捷徑或者簡單的方法來告訴你讓你成為一名成功的開發(fā)者胆绊。但如果你愿意全身心投入并付出努力的話,你肯定會得到你應得的成功的欧募。
應大家的請求压状,我這里給大家提供一些提升建議,僅供參考跟继。
開始閱讀更多的代碼
大部分的開發(fā)者都不會抽時間去閱讀其他開發(fā)者所寫的代碼种冬,他們大多數(shù)時間只是花在寫他們已經(jīng)知道的事情上。但那并不利于你成長為一名優(yōu)秀的開發(fā)者舔糖,也不會增長你的見識娱两。我建議大家閱讀同事的代碼,讓你對你們的項目更加了解金吗,當你對公司的產(chǎn)品代碼足夠了解后十兢,你給老板提加薪的時候才更有底氣趣竣。
有的人會說,咱們公司就我一個 Android 開發(fā)者旱物,我看誰的代碼呢遥缕?GitHub 上那么多優(yōu)秀的開源應用和類庫,我建議你們?nèi)ラ喿x并開始學習它們宵呛,每天 30 分鐘的代碼閱讀量是個非常好的開始单匣。你將會驚訝的發(fā)現(xiàn),還有如此多美妙的東西是你沒見過的宝穗。克服對未知的害怕
Android 系統(tǒng)很大户秤,非常大。你不可能在一兩個月內(nèi)完全掌握它讽营。隨著學習越深入虎忌,你會發(fā)現(xiàn)越多的內(nèi)容需要學習泡徙。作為一名初學者橱鹏,很容易也很正常地出現(xiàn)這種對未知恐懼的害怕。我也不例外堪藐,曾經(jīng)我學習 RxJava 的時候莉兰,我看了很多很多的博文,包括扔物線朱凱的那篇出名的《給Android開發(fā)者的RxJava詳解》礁竞,但持續(xù)了整整一個周糖荒,依然不懂,這時候覺得 RxJava 真是太難了模捂。在這種時候捶朵,不妨先放下它一段時間,過些日子再去學習你會覺得如魚得水的狂男。比如我综看,前面就在GitHub 上開源了 RxJava2Examples(附帶整個系列 RxJava 2 文章) 嘗試去克服對未知的恐懼吧,學習那些你確實需要用到的東西岖食,能夠讓你開始手頭正在構建的應用红碑,然后慢慢地開拓你的視野。嘗試開始寫博客
寫博客或許是一件相當費時的事泡垃,或許你寫的博客只是閱覽了多篇文章后的總結而以析珊,或許你寫的博客一點都不深入,但但是C镅āV已啊!別人的永遠是別人的存和,作為一個已經(jīng)寫了很多博文的我來說奕剃,我所收獲到的東西赶舆,不是這點時間能比擬的。因為只有你足夠懂了祭饭,你才能講給別人聽芜茵。開始貢獻開源庫
GitHub 上有很多很棒的開源庫,但由于一些特殊的原因可能作者并沒有時間維護它倡蝙。嘗試去為開源庫貢獻你的源碼九串,你會得到非常非常非常大的反饋的∷屡福可能這里有的人也知道猪钮,我在去年有維護 ImagePicker 圖片選擇庫,我在里面貢獻了不少代碼胆建,雖然后面由于一些時間原因停止維護了烤低,但我收獲非常大。具體收獲笆载,這個只能意會扑馁。
除了為別人開源庫貢獻,你也可以開源自己的代碼凉驻。圖片壓縮在項目中挺常用的腻要,在編寫我們公司的項目的時候,我自己寫了圖片壓縮涝登,后面覺得挺好用的雄家,所以直接把它開源到了 GitHub 上。這個過程非常的 nice胀滚,不僅學習到了特別多的知識趟济,而且通過大家的測試,我的開源庫的伸展性更佳咽笼。開源的過程有很多的東西是需要你學習的顷编,而且這有助于你成為一名優(yōu)秀的開發(fā)者。
- 花一些時間來學習 Android 最佳實踐
要使自己比其他開發(fā)者更加出眾褐荷,并能構建出整潔美觀而又功能完善的應用勾效,你需要開始學習一些 Android 開發(fā)最佳實踐。除此之外叛甫,你還應該多去關注市場發(fā)展层宫,看看最近流行的庫都是怎么用,并嘗試閱讀它們其监。
寫在最后
本次我的分享也接近尾聲了萌腿,感謝你們在百忙中花上一下午來這里聆聽我們的宣講,希望在接下來的日子抖苦,我們共同成長毁菱,一起進步C姿馈!贮庞!