【工作感悟】Android 開發者,如何提升自己的職場競爭力?

歡迎關注專欄:裡面定期分享Android架構技術知識點及解析,還會不斷更新的BATJ面試專題,歡迎大家前來探討交流,如有好的文章也歡迎投稿。

Android高級技術分享?

zhuanlan.zhihu.com圖標

互聯網現狀

今年的互聯網,延續了去年的態勢。雖然前些年,每到年底的時候大環境都不好,然而來年照樣春暖花開。但是2018下半年的頹勢,在2019年春天並未得到緩解,所以現在的互聯網環境是真的不好了。

首先各大公司爭相優化員工,小公司我就不提了,咱就只說大公司。先有阿里、百度、京東、網易、美團和滴滴,再有外企甲骨文和IBM。前些年各大公司優化員工的時候都藏著掖著,而且用詞很含蓄,都說是正常的人員流動和業務調整。今年就不同了,沒必要藏著掖著了,而且有些公司由於補償到位,還裁出了一片好評。

最開始大家以為只是移動端環境不好,到現在才發現,是整個互聯網環境都不好了。所以,誰也別笑誰,大環境不好,誰也跑不了。

百度前段時間公開財報,2019 Q1虧損3.27億,這是百度自2005年8月5日登陸納斯達克後,第一次出現季度虧損,百度股價大跌。與此同時,騰訊和今日頭條的廣告收入也受到影響。究其原因,是很多廣告主縮減了廣告投放預算。縮減廣告投放預算的背後,還是因為缺錢。互聯網就是這麼奇妙,一環扣一環,大環境不好,公司和員工同樣難受。

所以這個時候,出色的開發能力能讓你的開發職業生涯更加順風順水。

下面我想結合我的經歷給大家講一下幾點:

  • 如何系統化學習 Android 技術?(Android 知識體系)
  • 企業到底需要什麼樣的 Android 開發人才?(Android 市場行情)
  • Android 學習的方式都有哪些?(Android 學習方式)
  • 對 Android 學習和提升的一些建議。(Android 提升建議)

Android 知識體系

在 Android 開發的過程中,需要很多很多的知識,而有些知識也很難為其分類,在這裡,我把它們分為上述五個部分:UI、架構、性能、NDK、其他,其他則可以細化為代碼風格,學習能力,第三方庫等。

  • UI方面

首先是 UI 方面,我相信大多數人都是開發 Android 應用的,所以 UI 的知識,必不可少。UI 一共分為三部分:繪製、布局和觸摸反饋。要想寫出漂亮的 UI 搭配動畫,這需要花費巨量的時間,可能已經有特別多的朋友和我一樣,在一直跟進扔物線(朱凱)的HenCoder系列了。如果你可以寫出非常漂亮的控制項或者動畫框架並開源出來,我相信,你找份好工作已經沒有問題了。

UI開發知識體系

  • 架構方面

這個方面是卡年限的一個東西。隨著工作的需要以及閱歷(看代碼)的增長,我們總是會越來越不滿意自己寫的代碼模塊,比如我,就深受這個的苦惱,我經常會出現三個月前寫的代碼,自己都看不下去,強迫症的我,一定會把它翻寫的。但如果項目周期短的你,千萬不要像我一樣做。

當你不斷改寫封裝自己的代碼的時候,你可能就已經涉及到了架構方面的知識啦。架構方面的知識主要包括設計思想,及其選擇合適架構的能力,這兩者通常來講是相輔相成的。每一種新的架構或設計思想問世往往是用來解決實際問題的,他們解決問題的側重點各不相同,因此在什麼時候採用什麼架構或設計就非常考驗程序員的閱歷了。通常這部分的知識學起來最為困難,因為他不僅僅是一種思想,如果你的代碼量不多,或者接觸的項目比較小的話,你往往會很少觸及到這部分的知識,最後自然而言又忘了。

所以在這方面我建議大家在工作之餘,多參考 GitHub 上開源的完整項目,也要多寫點自己的項目,提升自己的代碼量和架構能力。

移動架構師知識體系

  • 性能方面

性能方面相信開發稍大型 APP 的工程師體會尤其深刻了。隨著 APP 工程的體量越來越大,開發功能越來越多,你會發現原來非常流暢的 APP 可能會出現卡頓、OOM、ANR 等現象,除了前面韓神所提到的內存泄漏,可能你還會因為其他問題導致性能表現不夠優秀。而這部分的只是相對比較零散,也很難總結,更多的就是你的經驗積累,所以多年經驗的程序猿更受企業的青睞。

性能優化方面知識體系

  • NDK方面

這一方面的知識比較特殊,很多 Android 開發工程師在初中級階段可能都不會涉及到。在開發中我們可能只會在特定的領域才會用到 NDK 進行開發,由於我也沒遇到過,所以暫不多講。

NDK模塊開發知識體系

Android 市場分析

總體上,目前市面上可以將互聯網公司分為兩類:

  • 沒有實體產品的,以軟體產品為主的互聯網公司(其中相當一部分為外包);
  • 有實體產品的,將硬體和軟體結合起來的互聯網公司。

我們暫且把它們稱呼為 A 類和 B 類。

A 類公司往往偏向於 UI 及其架構,性能稍次,並且大多數中小型企業會要求應聘者能熟練掌握市場上流行的開源庫以節約開發成本。這類公司開發的 APP 往往是純虛擬的產品 —— 社交通訊、各類工具、資源聚合等。這些產品因為競爭激烈,功能需求變化也快,所以版本迭代的速度會非常快。這個時候,一個好的架構就可以節省許多時間,它能快速的響應需求,並迅速添加新的功能模塊。UI 也是重點,在兩個 APP 功能差不多的情況下,拼的就是用戶體驗了,其中用戶最能感受到的就是兩點,首先是界面是否美觀,動畫是否自然;其次才是 APP 是否流暢。

A 類公司對人才的需求大概是這樣。

而對於B 類公司,他們因為有實體產品,因此往往會要求應聘者具有某種特殊的技能,例如藍牙,WIFI等。

這類公司往往偏向於性能及 NDK,UI 稍次。在目前的大環境下,這類公司多數都在物聯網產業鏈上,以智能硬體、智能家居、機器人居多,而這類公司的話,大部分其實都是傳統企業轉型而來,因此其開發的產品比較注重功能的完善及響應速度,UI 的話反而會稍微醜陋一些。畢竟消費者買的是實體產品,配套的 APP 就算再丑也得用不是么。

他們對人才的需求往往是這樣的:

明確自己想去什麼樣的公司,或者對哪一類的業務更感興趣,會有助於你更有的放矢地學習技能。

Android 學習方式?

我認為最主要的一點就是主觀能動性,或者說興趣,如果你對 Android 開發沒有太大的興趣,那麼還是儘早換方向吧。有了興趣,自然是確立一個比較正確的學習路線。據說我們參會的還有一些應屆畢業生或者還沒開始工作的朋友。可能還在學習中很迷茫,我這裡先給大家說一下我的學習經歷。

學習 Android 無非幾種方式:

  • 看書類

此類可能比較全面,但也意味著過時的問題,我不是非常提倡,但書籍是人類進步的階梯,你們可以考慮。其實我也買了挺多相關書籍,但自從習慣在網路上學習後就不看了。

  • 線上課程直播或者錄播

這個可能是初學者當下比較受歡迎的學習方式了,但所講知識通常比較基礎,而且學習速度慢,但效率確實挺高的。這也是我在入門 Android 的時候用的最多的方式。採用這種方式學習的時候通常會有一個毛病,就是喜歡邊看邊寫,這是我不提倡的,我提倡看一段寫一段。在前期你可以不用一整段都看完,以小節的方式學習後再寫代碼。前期可能你會覺得自己像在背代碼一樣,但我不可否認,這確實是效率挺高的方法。但真的太費時了,至少我在工作後沒用過這種方案。

這裡放上我一直學習以來收集到的視頻資料,有想獲取的小夥伴可以參考文末的獲取方式~

  • 看博文、看別人的開源項目、看官方文檔、官方例子代碼

這是我現在用的最多的一種學習提升方式。一般可以通過上面的看書或者看錄播的方式學習到完整的基礎組件和代碼編寫,但這時候你用基礎的組件實現出來的東西美觀度通常比較局限。但當你加入公司後,產品會設計出各種新穎的效果,而這些效果並不能通過原生控制項實現,這時候,網上超大量的資源就湧現出來了。掌握 GitHub 正確的搜索姿勢,通常能讓你事半功倍。而這個時候,一個熟悉的英文閱讀能力和理解能力將展現的淋漓盡致。隨著開發經驗的積累,你會發現你的開發速度直線飆升。

Android 提升建議

成為一名Android開發者很容易,但是要成為一名成功的、突出的Android開發者卻不那麼容易。這需要付出很多的努力,耐心,奉獻和毅力才能做到。

我並沒有什麼捷徑或者簡單的方法來告訴你讓你成為一名成功的開發者。但如果你願意全身心投入並付出努力的話,你肯定會得到你應得的成功的。

應大家的請求,我這裡給大家提供一些提升建議,僅供參考。

  • 開始閱讀更多的代碼

大部分的開發者都不會抽時間去閱讀其他開發者所寫的代碼,他們大多數時間只是花在寫他們已經知道的事情上。但那並不利於你成長為一名優秀的開發者,也不會增長你的見識。我建議大家閱讀同事的代碼,讓你對你們的項目更加了解,當你對公司的產品代碼足夠了解後,你給老闆提加薪的時候才更有底氣。

有的人會說,咱們公司就我一個 Android 開發者,我看誰的代碼呢?GitHub 上那麼多優秀的開源應用和類庫,我建議你們去閱讀並開始學習它們,每天 30 分鐘的代碼閱讀量是個非常好的開始。你將會驚訝的發現,還有如此多美妙的東西是你沒見過的。

  • 克服對未知的害怕

Android 系統很大,非常大。你不可能在一兩個月內完全掌握它。隨著學習越深入,你會發現越多的內容需要學習。作為一名初學者,很容易也很正常地出現這種對未知恐懼的害怕。我也不例外,曾經我學習 RxJava 的時候,我看了很多很多的博文但持續了整整一個周,依然不懂,這時候覺得 RxJava 真是太難了。在這種時候,不妨先放下它一段時間,過些日子再去學習你會覺得如魚得水的。比如我,前面就在GitHub 上開源了RxJava2Examples嘗試去克服對未知的恐懼吧,學習那些你確實需要用到的東西,能夠讓你開始手頭正在構建的應用,然後慢慢地開拓你的視野。

  • 嘗試開始寫博客

寫博客或許是一件相當費時的事,或許你寫的博客只是閱覽了多篇文章後的總結而以,或許你寫的博客一點都不深入,但但是!!!別人的永遠是別人的,作為一個已經寫了很多博文的我來說,我所收穫到的東西,不是這點時間能比擬的。因為只有你足夠懂了,你才能講給別人聽。

  • 開始貢獻開源庫

GitHub上有很多很棒的開源庫,但由於一些特殊的原因可能作者並沒有時間維護它。嘗試去為開源庫貢獻你的源碼,你會得到非常非常非常大的反饋的。

除了為別人開源庫貢獻,你也可以開源自己的代碼。圖片壓縮在項目中挺常用的,在編寫我們公司的項目的時候,我自己寫了圖片壓縮,後面覺得挺好用的,所以直接把它開源到了GitHub上。這個過程非常的 nice,不僅學習到了特別多的知識,而且通過大家的測試,我的開源庫的伸展性更佳。開源的過程有很多的東西是需要你學習的,而且這有助於你成為一名優秀的開發者。

  • 花一些時間來學習 Android 最佳實踐

要使自己比其他開發者更加出眾,並能構建出整潔美觀而又功能完善的應用,你需要開始學習一些 Android 開發最佳實踐。除此之外,你還應該多去關注市場發展,看看最近流行的庫都是怎麼用,並嘗試閱讀它們。

寫在最後

本次我的分享也接近尾聲了,感謝你們在百忙中花上一下午來這裡聆聽我的宣講,希望在接下來的日子,我們共同成長,一起進步!!!

最後放上一個大概的Android學習方向及思路(詳細的內容太多了~),提供給大家:

對於程序員來說,要學習的知識內容、技術有太多太多,這裡就先放上一部分,其他的內容有機會在後面的文章向大家呈現出來,不過我自己所有的學習資料都整理成了一個文檔,一直在不斷學習,如今整理的資料不知不覺居然已經有將近80G了,,,在這裡作為讀者福利免費分享給大家,希望能幫助到大家,也節省大家在網上搜索資料的時間來學習,也可以分享動態給身邊好友一起學習!

資料獲取傳送門:

Android架構進階必備學習資源免費領取(架構視頻+面試專題文檔+學習筆記)?

shimo.im圖標

為什麼某些人會一直比你優秀,是因為他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜!希望讀到這的您能點個小贊和關注下我,以後還會更新技術乾貨,謝謝您的支持!

Android架構師之路很漫長,一起共勉吧!

如果你覺得文章寫得不錯就給個讚唄?如果你覺得那裡值得改進的,請給我留言,一定會認真查詢,修正不足,謝謝。


推薦閱讀:

TAG:Android | Android開發 | 移動互聯網 |