該文章是筆者參加 Android 巴士線下交流會成都站 的手寫講稿虛擬場景,因此你們將就看一下。git
你們好,我是劉世麟,首先感謝安卓巴士爲咱們創造了此次奇妙的相遇。現場的氛圍也讓我十分激動。程序員
職場競爭力,歷來都是咱們關注的話題,因此我今天給你們分享一下:《Android 初學者,如何快速提高職場競爭力》。github
在今年 4 月,全球互聯網引來了一個歷史性的轉折點:隨着流量分析工具 StatCounter 的報告,Android 首次超越 Windows,成爲用戶訪問互聯網最經常使用的操做系統!Android 不只在移動領域,在全操做系統內,都成爲了當之無愧的霸主!不管你有志於成爲領先企業的 Android 工程師,仍是想成爲改變世界的獨立開發者,我但願大家爲此而驕傲!!!網絡
即使如此,你們以爲 Android 開發就業形勢可觀嗎?架構
答案是不可觀。我這絕對不是危言聳聽,隨着近年來 O2O 公司的大幅度倒閉,互聯網公司燒錢嚴重,不少公司根本燒不起,因此不少開發者隨着企業的倒閉再次捲入了求職的浪潮之中。框架
我想請問一下,在場的各位,如今用的共享單車都用的是哪家的?工具
想必基本都是小黃車和小橙車。如今 ofo 和膜拜兩家獨大,前段時間還能看到的悟空單車如今已經銷聲匿跡,由於它燒不起錢,ofo 和膜拜一個月免費騎行足以讓它直接倒下,而就任於悟空單車的 Android 程序員可能所以被辭職。佈局
Android 行業發展年限並不久,因此最開始接觸 Android 的那一批人,如今極有可能還在 Android 領域,再加上近年來各大培訓機構和高校向社會中注入了很大一部分的 Android 開發人才,因此形成了如今供大於求的窘境。可能有人經歷或者據說過 14 年 Android 會寫一個 ListView 的適配器就能找到不錯的工做吧,你如今會用這些能找到工做嗎?post
因此這個時候,出色的開發能力能讓你的開發職業生涯更加順風順水。性能
下面我想結合個人經歷給你們講一下幾點:
如何系統化學習 Android 技術?(Android 知識體系)
企業到底須要什麼樣的 Android 開發人才?(Android 市場行情)
Android 學習的方式都有哪些?(Android 學習方式)
對 Android 學習和提高的一些建議。(Android 提高建議)
重點看咱們 PPT 中的圖。在 Android 開發的過程當中,須要不少不少的知識,而有些知識也很難爲其分類,在這裏,我把它們分爲上述五個部分:UI、架構、性能、NDK、其餘,其餘則能夠細化爲代碼風格,學習能力,第三方庫等。
UI方面
首先是 UI 方面,我相信大多數人都是開發 Android 應用的,因此 UI 的知識,必不可少。UI 一共分爲三部分:繪製、佈局和觸摸反饋。要想寫出漂亮的 UI 搭配動畫,這須要花費巨量的時間,可能已經有特別多的朋友和我同樣,在一直跟進扔物線(朱凱)的 HenCoder 系列了。若是你能夠寫出很是漂亮的控件或者動畫框架並開源出來,我相信,你找份好工做已經沒有問題了。
架構方面
這個方面是卡年限的一個東西。隨着工做的須要以及閱歷(看代碼)的增加,咱們老是會愈來愈不滿意本身寫的代碼模塊,好比我,就深受這個的苦惱,我常常會出現三個月前寫的代碼,本身都看不下去,強迫症的我,必定會把它翻寫的。但若是項目週期短的你,千萬不要像我同樣作。
當你不斷改寫封裝本身的代碼的時候,你可能就已經涉及到了架構方面的知識啦。架構方面的知識主要包括設計思想,及其選擇合適架構的能力,這二者一般來說是相輔相成的。每一種新的架構或設計思想問世每每是用來解決實際問題的,他們解決問題的側重點各不相同,所以在何時採用什麼架構或設計就很是考驗程序員的閱歷了。一般這部分的知識學起來最爲困難,由於他不只僅是一種思想,若是你的代碼量很少,或者接觸的項目比較小的話,你每每會不多觸及到這部分的知識,最後天然而言又忘了。
因此在這方面我建議你們在工做之餘,多參考 GitHub 上開源的完整項目,也要多寫點本身的項目,提高本身的代碼量和架構能力。
性能方面
性能方面相信開發稍大型 APP 的工程師體會尤爲深入了。隨着 APP 工程的體量愈來愈大,開發功能愈來愈多,你會發現原來很是流暢的 APP 可能會出現卡頓、OOM、ANR 等現象,除了前面韓神所提到的內存泄漏,可能你還會由於其餘問題致使性能表現不夠優秀。而這部分的只是相對比較零散,也很難總結,更多的就是你的經驗積累,因此多年經驗的程序猿更受企業的青睞。
NDK方面
這一方面的知識比較特殊,不少 Android 開發工程師在初中級階段可能都不會涉及到。在開發中咱們可能只會在特定的領域纔會用到 NDK 進行開發,因爲我也沒遇到過,因此暫很少講。
整體上,目前市面上能夠將互聯網公司分爲兩類:
沒有實體產品的,以軟件產品爲主的互聯網公司(其中至關一部分爲外包);
有實體產品的,將硬件和軟件結合起來的互聯網公司。
咱們暫且把它們稱呼爲 A 類和 B 類。
A 類公司每每偏向於 UI 及其架構,性能稍次,而且大多數中小型企業會要求應聘者能熟練掌握市場上流行的開源庫以節約開發成本。這類公司開發的 APP 每每是純虛擬的產品 —— 社交通信、各種工具、資源聚合等。這些產品由於競爭激烈,功能需求變化也快,因此版本迭代的速度會很是快。這個時候,一個好的架構就能夠節省許多時間,它能快速的響應需求,並迅速添加新的功能模塊。UI 也是重點,在兩個 APP 功能差很少的狀況下,拼的就是用戶體驗了,其中用戶最能感覺到的就是兩點,首先是界面是否美觀,動畫是否天然;其次纔是 APP 是否流暢。
A 類公司對人才的需求大概是這樣。
而對於 B 類公司,他們由於有實體產品,所以每每會要求應聘者具備某種特殊的技能,例如藍牙,WIFI等。
這類公司每每偏向於性能及 NDK,UI 稍次。在目前的大環境下,這類公司多數都在物聯網產業鏈上,以智能硬件、智能家居、機器人居多,而這類公司的話,大部分其實都是傳統企業轉型而來,所以其開發的產品比較注重功能的完善及響應速度,UI 的話反而會稍微醜陋一些。畢竟消費者買的是實體產品,配套的 APP 就算再醜也得用不是麼。
他們對人才的需求每每是這樣的:
明確本身想去什麼樣的公司,或者對哪一類的業務更感興趣,會有助於你更有的放矢地學習技能。
我認爲最主要的一點就是主觀能動性,或者說興趣,若是你對 Android 開發沒有太大的興趣,那麼仍是儘早換方向吧。有了興趣,天然是確立一個比較正確的學習路線。聽說咱們參會的還有一些應屆畢業生或者還沒開始工做的朋友。可能還在學習中很迷茫,我這裏先給你們說一下個人學習經歷。
學習 Android 無非幾種方式:
看書類
此類可能比較全面,但也意味着過期的問題,我不是很是提倡,但書籍是人類進步的階梯,大家能夠考慮。其實我也買了挺多相關書籍,但自從習慣在網絡上學習後就不看了。
線上課程直播或者錄播
這個多是初學者當下比較受歡迎的學習方式了,但所講知識一般比較基礎,並且學習速度慢,但效率確實挺高的。這也是我在入門 Android 的時候用的最多的方式。採用這種方式學習的時候一般會有一個毛病,就是喜歡邊看邊寫,這是我不提倡的,我提倡看一段寫一段。在前期你能夠不用一整段都看完,以小節的方式學習後再寫代碼。前期可能你會以爲本身像在背代碼同樣,但我不能否認,這確實是效率挺高的方法。但真的太費時了,至少我在工做後沒用過這種方案。
看博文、看別人的開源項目、看官方文檔、官方例子代碼
這是我如今用的最多的一種學習提高方式。通常能夠經過上面的看書或者看錄播的方式學習到完整的基礎組件和代碼編寫,但這時候你用基礎的組件實現出來的東西美觀度一般比較侷限。但當你加入公司後,產品會設計出各類新穎的效果,而這些效果並不能經過原生控件實現,這時候,網上超大量的資源就涌現出來了。掌握 GitHub 正確的搜索姿式,一般能讓你事半功倍。而這個時候,一個熟悉的英文閱讀能力和理解能力將展示的淋漓盡致。隨着開發經驗的積累,你會發現你的開發速度直線飆升。
成爲一名Android開發者很容易,可是要成爲一名成功的、突出的Android開發者卻不那麼容易。這須要付出不少的努力,耐心,奉獻和毅力才能作到。
我並無什麼捷徑或者簡單的方法來告訴你讓你成爲一名成功的開發者。但若是你願意全身心投入並付出努力的話,你確定會獲得你應得的成功的。
應你們的請求,我這裏給你們提供一些提高建議,僅供參考。
開始閱讀更多的代碼
大部分的開發者都不會抽時間去閱讀其餘開發者所寫的代碼,他們大多數時間只是花在寫他們已經知道的事情上。但那並不利於你成長爲一名優秀的開發者,也不會增加你的見識。我建議你們閱讀同事的代碼,讓你對大家的項目更加了解,當你對公司的產品代碼足夠了解後,你給老闆提加薪的時候才更有底氣。
有的人會說,我們公司就我一個 Android 開發者,我看誰的代碼呢?GitHub 上那麼多優秀的開源應用和類庫,我建議大家去閱讀並開始學習它們,天天 30 分鐘的代碼閱讀量是個很是好的開始。你將會驚訝的發現,還有如此多美妙的東西是你沒見過的。
克服對未知的懼怕
Android 系統很大,很是大。你不可能在一兩個月內徹底掌握它。隨着學習越深刻,你會發現越多的內容須要學習。做爲一名初學者,很容易也很正常地出現這種對未知恐懼的懼怕。我也不例外,曾經我學習 RxJava 的時候,我看了不少不少的博文,包括扔物線朱凱的那篇出名的《給Android開發者的RxJava詳解》,但持續了整整一個周,依然不懂,這時候以爲 RxJava 真是太難了。在這種時候,不妨先放下它一段時間,過些日子再去學習你會以爲如魚得水的。好比我,前面就在GitHub 上開源了 RxJava2Examples(附帶整個系列 RxJava 2 文章) 嘗試去克服對未知的恐懼吧,學習那些你確實須要用到的東西,可以讓你開始手頭正在構建的應用,而後慢慢地開拓你的視野。
嘗試開始寫博客
寫博客或許是一件至關費時的事,或許你寫的博客只是閱覽了多篇文章後的總結而以,或許你寫的博客一點都不深刻,但可是!!!別人的永遠是別人的,做爲一個已經寫了不少博文的我來講,我所收穫到的東西,不是這點時間能比擬的。由於只有你足夠懂了,你才能講給別人聽。
開始貢獻開源庫
GitHub 上有不少很棒的開源庫,但因爲一些特殊的緣由可能做者並無時間維護它。嘗試去爲開源庫貢獻你的源碼,你會獲得很是很是很是大的反饋的。可能這裏有的人也知道,我在去年有維護 ImagePicker 圖片選擇庫,我在裏面貢獻了很多代碼,雖而後面因爲一些時間緣由中止維護了,但我收穫很是大。具體收穫,這個只能意會。
除了爲別人開源庫貢獻,你也能夠開源本身的代碼。圖片壓縮在項目中挺經常使用的,在編寫咱們公司的項目的時候,我本身寫了圖片壓縮,後面以爲挺好用的,因此直接把它開源到了 GitHub 上。這個過程很是的 nice,不只學習到了特別多的知識,並且經過你們的測試,個人開源庫的伸展性更佳。開源的過程有不少的東西是須要你學習的,並且這有助於你成爲一名優秀的開發者。
花一些時間來學習Android最佳實踐
要使本身比其餘開發者更加出衆,並能構建出整潔美觀而又功能完善的應用,你須要開始學習一些Android開發最佳實踐。除此以外,你還應該多去關注市場發展,看看最近流行的庫都是怎麼用,並嘗試閱讀它們。
本次個人分享也接近尾聲了,感謝大家在百忙中花上一下午來這裏聆聽咱們的宣講,但願在接下來的日子,咱們共同成長,一塊兒進步!!!