2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

前言

很多做 android 開發的同學都想多快好省,現實是真的是這樣嗎,藉着前人的經驗,我們的目標可以更加清晰,可以計劃劃分階段去學習,但是學習的路是不會變的,別人會遇到什麼我們也會遇到什麼,別人躺過的坑我們一樣得趟。

接着這裏,我想表達我們對 android 學習之路的理解,也分享我收集到的前人經驗,讓前路不再晦暗,讓腳下的路筆直一些,僅此而已~

繼續吐槽,分享下自己關於如何學習的想法

我想看我文章的至少都是有1年開發經驗以上的了,至少都是熟練的初級 coder 了吧,在這個階段甚至之後的幾個階段,android 的 coder 們內心其實都是惶恐焦慮的,一是大環境沒有以前熱了,找工作的難度提升了,對 coder 們的要求也是節節攀升;二是 coder 們在學習過程中發現了大量的知識點和麪,這些東西實在太多了,看了 A 會勾連出 BCDEF,這裏面又涉及到大量的 java 等其他知識點,都是比較難搞,耗時的。

種種以上讓大家變得不再自信了,加之環境趨緊,所以焦慮由此產生。大家也不必太過因此而焦慮,焦慮了也沒有啊,這些東西遲早都是我們的菜,都得學,都得趟過去,當然越早趟過去越好。

這裏面就涉及到如何學習的問題了,會學習的 coder 效率會很高,學的會比較透,記得會比較牢,並且還會記錄相關的技術博客,所以學過了基本就不用再重複了

我們在學習哪些沒有吸收的知識點時,基本都是遵循以下原則:

  • 學習「自己知道自己不會」的知識
  • 全方位的學習,構建自己的「知識體系」
  • 學習「自己不知道自己不會」的知識

推薦一些學習思路

學會記錄未知

平時注意記錄那些沒聽過,不瞭解的點,有鏈接的要記下鏈接,然後根據自己的理解分類,分出優先級,難易度,這樣你時刻都能對自己有個清晰的認識,我們手頭不會的有多少,會了對少了,想看的時候可以馬上找出相關資料

學會挑選自己能學會的

知識點是無限的,不管我們水平有多高,可以學的總是有的是,那麼我們學什麼呢?那當然是學那些我們覺得能自己看懂,可以學會,在工作中用的近,用的上的東西啦,切記去學習自己完全看不懂的知識點,學了也是白學。如果這個知識點你是一點都看不懂,那說明相關的基礎知識你完全空白,要從頭從基礎知識看起,這好比技能樹,你還沒點出來呢!對於那些有一半看不懂的知識點,同樣也說明你缺乏相關的基礎知識,想要學也得從基礎知識走起,但是相對難度就低很多了

學會成體系的去學習知識點

一般大家都知道,大一點的知識點都有很多小的,相互聯繫的知識點構成,我們知道的,不知道的,總之肯定有一些或很多,那麼我們碰到一個陌生的知識點該怎麼去學習呢?我建議先去 google,百度,簡書,掘金各大平臺上搜索這個知識點的關鍵字,然後粗看下幾十篇或一定數量的文章,梳理下該知識點下面牽連有多少小的知識點,然後自己記下來,整理分類寫出概述性的文章,然後先從簡單的開始,按牽連順序一個個的學,這樣纔能有效的做到成體系的學習。要不東看一榔頭,西看一斧子,到頭來時間也是花的不少,大家多半還是有很多漏下的,心裏也是感覺沒徹底學通透的樣子,現在的開發知識都是成體系的,我們去學習時也必須成體系纔能有效率。

這裏是我自己整理出來的Android學習知識體系,大家可以參考一下:

Android進階路線分析

Java語言進階

  • 泛型與註解在Retrofit中的應用
  • 多線程與Java File IO操作應用實戰
  • Rxjava原理分析
  • JVM與內存泄漏原理解析
  • ClassLioader與反射在Hook中應用
  • 動態代理機制在源碼中的應用

高級UI與FrameWork

  • UI繪製原理
  • 動畫原理
  • 事件響應機制
  • 屏幕適配
  • FrameWork源碼解析
  • 相機適配

360°性能優化

  • 從事件
  • 從內存
  • 卡頓調優
  • APP保活
  • 內存優化
  • 高性能編程實戰
  • OOM原理解析

NDK開發專題

  • C/C++基礎
  • JINI編程基礎
  • 圖像處理與熱修復應用
  • 音視頻開發
  • OpenCV人工智能
  • OpenCL 圖像繪製

前沿技術專題

  • 熱修復/熱更新
  • 組件化/插件化
  • RxJava深入研究
  • 圖片與網絡架構
  • Google I/O大會技術
  • Kotlin項目實操

微信小程序

  • 小程序架構介紹
  • UI界面開發
  • 高級API實操
  • 微信對接實戰
  • 任務清單項目
  • 電影榜單項目

Flutter Hybrid開發

  • Dart語法
  • Flutter線程運行模型
  • Flutter與Native通信架構
  • Flutter內存調優
  • Flutter項目實戰

學會如何有效的保存學習心得

這是承接上面那條的,某個小的知識點我們終於搞明白了,學透了之後呢,其實大家會很快遺忘的,我自己也是如此!非常通透的理解過不了幾天就會開始變得模糊不清。目前有效的方法只能是在通過敲 demo 在代碼級別搞通透之後,通過成體系的寫技術博文來實現。這樣的好處:一是落於紙面之後,忘了我們可以通過博文馬上回憶起來 ;二是我們是成體系的去選擇學習的,中途我們可以隨時停下來,去做當前手頭更要命的事,完事後再回過頭來繼續這個知識點的學習,因爲通過之前的摸底已經制定出了學習順序,繼續這個順序去學習未完的部分即可。大家在工作時,絕大部分空餘時間都是碎片化的,搞得我們去學習新知識都是一段段的,上面成體系系統的學習方案尤其適合我們

我之前可是吃了不會學習,不記技術博文,不成體系瞎學習的大虧啦,早先學的啥我現在是一點都想不起來了,可見如何學習,會學習是個大學問啊,也是一個 coder 變得成熟的標誌,漫漫 coder 路上對我們產生影響最大的就是如何去學習了,大家多思考下~

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

寒冬

18年的冬真冷,大家都在說裁員,其實裁員一直都在,只是18年的確多點。android 10年了,已經積累了太多的技術,知識點,技巧,思路,這些前人都會了,並且正在創造新的思路出來,對於廣大的底層 coder 來說,僅僅是追趕就很難了,更別提去自己創造了,但是現實時我們嚐嚐學習了很多開源框架,落到實處就是僅僅會用而已,不說源碼看沒看過,甚至原理都不知道,不知道作者用什麼技術實現的,這點就是廣大 coder 的現狀,沒有成長。

在來說大環境,在寒冷的冬天,還是有很多公司再招聘。在移動設備深入人心的今天,大家誰能離得開移動物聯網設備,巨大的設備保有量決定了移動端市場需求還是旺盛的。企業需要什麼的移動 coder,中高端啊。從我們把頁面 code 出來的入門水平開始,成長到中級水平,說實話還是非常不容易的,事實是從平均來看,2-3年成長到中級的人也不是非常多的。企業再面試時也只能通過大量面試才能找到一個合心的高級開發,此過程耗時費力,說明大家水平相對需求來說還是太低,有待繼續加強!

冬天冷的不是市場,是處於行業低端的我們,移動開發行業,不進步就會死,永遠也不會改變,大家悶頭努力一年,我們都能有個好收穫的,再去面試機會機會大很多。

薪酬

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

其實,只要沒超越 20K ,就說明你的安卓做的還不夠好。

一方面,技術能力,知識面太窄了。建議多個模塊功能都嘗試一下。不能僅僅在自己公司的項目上,其他方面都不太精通。這樣的結果,對自己發展不太好。(比如,對自己公司的功能做的賊好。賊瞭解。問一個其他方面功能模塊,就不知道了。建議多方面都發展,並且多做數據分析。比如百度指數,阿里指數,APP功能指數,今日頭條指數。然後自己往這些方向發展一下。比如2018年-2020年,項目中小視頻,社區中小視頻,直播,都會在項目中添加。這方面經驗豐富的人需求很高)。

第二:有的同學是真的有能力,會做;但是能繼續深入的理解原理,或者知道原理了,自己怎麼去解決問題(而不是百度解決)的能力就差一點了。比如很多人在面試中都面臨的,不會說,但是你會寫,能寫出來。爲什麼不會說,因爲不是清楚系統的理解,所以不能回答的很好。

現實是我們夯實技術,擴展知識面之後,20K 是比較容易達到的,但是想過 30K 就很難了。那些能在 github 寫自己開源項目,比如 okhttp,retrofit ,rxjava 這樣重量級開源框架的 coder 才能過 50K 。着期中的差距,大家自己體會吧,努力可以過 20k,長久不停的努力積累之後纔有過 30K 的希望,道路任重道遠,大家努力珍重。再着期中要平衡工作,生活,家庭,健康是個大問題,唯有高效率纔是根本出路~

寒冬中如何度日

很高興有一些朋友在滿大街的負面文章中能保持一顆平靜的心,分享一些有正能量的文章,讓我總算是在冬日裏能暖和下了。

上帝總是偏愛那些愛思考的人,愛思考的人運氣一般也不會太差,在 哪有什麼互聯網寒冬?只是你穿的少而已! 一文中,打大概聊了聊關於思考的話題,我覺得大家應該去看看,然後思考下自己。

技術是我們的基本盤,但不是全部,最近阿里不是放話了嗎,以後其他崗位的儘量挑有技術背景的,我看到這種思想漸漸再國內獲得認同,越來越多的公司都在更考慮有技術背景的人,這是我們的機會,年齡大了,年紀到了,總是隻有很少的一部分人才能順利的晉升管理崗位,其他的同學必須面臨轉崗,轉崗不是換行業,產品,項目經理,運營等等其他我們 coder 都可以幹,這些崗位需要的技術,知識點相比 coder 來說簡直是小巫見大巫,在我們平時對這些崗位有深入瞭解,有深入的交流經驗,有深刻的認識後,我們 coder 轉這些崗位其實不難,很快就能上手,但是這需要我們提前考慮好自己轉崗的位置,平時要多去專注,交流, 學習,能再本公司內轉崗是最好的了,這樣公司會對大家比較寬容。

coder 們要是打算換工作了,那就不要研究其他的了,就專心 android 技術吧,python,H5 等穩定下來再說吧,我們畢竟是做 android 開發的,找的也是 android 開發的工作,其他方向雖然更好但不是公司考慮的重點。

先活着才能考慮更多,分享些正能量的文章給大家打打氣:

怎麼劃分Android水平

我想只有對 android 開發又通盤瞭解的人才能走的更遠,瞭解自己是首要的,我處於什麼水平,下一步重點的學習方向,目標是什麼,這樣纔能有的放矢,不浪費時間

通常我們知道 android水平可以劃分爲:入門,初級,中級,高級,資深。

但是這樣的劃分對我們沒有什麼指導意義,我把 android 劃分爲4個層級:

  • 第一層:普通程序員
  • 第二層:熟練開發者、高級開發工程師、技術組長
  • 第三層:技術專家、架構師、一線經理
  • 第四層:科學家、研究員、首席(資深)架構師、部門研發總監

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

這裏再放上不同階級的薪資情況:

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

理解Android技術點

不知道大家聽到沒聽到,在 “ 寒冬 ” 今天,還有部分公司員工們通過各種方法爭搶被裁的名額,就是爲了拿到那幾個月的補償呀!面對這種不愁找工作的大佬,男單我們不應該臉紅做點什麼嗎~

android 開發想進階,下面的點基本漫步過去,都得會,不光是提升我們的 coder 水平,面試時也是要問的呀。

  • 各大開源框架的研究,包括但不限於下面幾個 OKhttp/Retrofit/eventbus/Glide/eventbus/Rxjava/blockcanary/mvvp/dagger2、
  • 組件化是基本要會的,插件化大公司要求會實操的
  • flutter/Dart 大家要開始學了,就和當年我們學 kotlin 一樣,flutter 基本一錘定音了,google 下一代就是 flutter 的天下了
  • java 部分,包括 常見的數據結構和算法,hashmap,二叉樹,紅黑樹,apt 註解,aop 插樁,整套多線程知識點,包括ThreadLocal實現原理
  • android 的系統原理,Lru算法,Binder機制,EventBus實現原理和爲什麼不能跨進程,跨進程幾種方式,AIDL,handler機制
  • 音視頻開發,直播、點播、音視頻通話、音視頻會議,短視頻,這些不一定要多深入,但是基本的各大平臺的 SDK 要會集成,能根據開源的 嗶哩嗶哩 IJKMediaPlayer 編寫自己的視頻,音頻播放模塊、
  • 高級UI,各種性能優化那是不比說了

上面這些單獨拿出那一項,都是考試良久的了,大家自己算算,給你多少時間能搞定上面這些,但是一旦大家搞定了上面這些,那麼大家至少不怎麼愁面試了吧,運氣好的還能借此進入一家不錯的有成長,回報優秀的公司,現在最舒服的地方不是打公司,而是那些業務優秀的中型公司了,人不多,事少,組織還沒開始僵化,人少待遇也能保證的不錯,業務優秀有成長沒有裁員的擔憂,公司氛圍也有輕鬆愉快,這就是我想去的天堂啊 ~

然後在圖像這塊大家想深入的話,下面的是跑不了:

  • 圖形圖像開發,不限於OpenGL ES,EGL,GLSurfaceView,濾鏡,美顏,canvas,paint
  • 應用層開發。主要還是原生開發,提高性能優化技能(啓動耗時、內存、耗電、網絡、數據庫、穩定性等),達到高級開發者的水準
  • 深入Android專業技能提升。主要是閱讀源碼,理解透Android開發常見的流程和原理(activity啓動流程、事件分發機制、廣播機制、Binder機制、內存管理機制等)
  • 向Android架構師發展。從平時的一點一滴開發中,有意訓練Android架構設計能力,這需要站在一個更高的角度來統籌App開發。
  • 跨平臺開發能力。如RN、Weex、Flutter等。大部分公司目前都需要有跨平臺開發能力,所以我們很有必要提高這方面的能力
  • SDK和框架開發。可以通過研究開源項目或者實際項目開發,抽象提取有用SDK和框架供其他人使用
  • 研究Android安全開發。App加固原理和實現,熟悉常見加密方式(如:RSA、DES等)、Https、支付安全等。
  • Android自動化測試工具開發。這需要對ADB、Android截圖、Android佈局解析、Android測試框架等相當熟悉
  • 音視頻開發。前兩年比較火的直播,還有這一兩年比較火的短視頻,都是與音視頻相關。所以,我們可以瞭解音視頻的編解碼以及傳輸協議等。
  • 手遊開發。遊戲給鵝廠帶來了穩定的收入,所以這也是不錯的方向。這就需要熟悉常見的遊戲開發框架cocos2d-x、Unity3D
  • 圖像開發。比如美圖秀秀、天天P圖,都用到圖形的合成、濾鏡等技術,對圖像處理有很高要求。
  • Android Framework 開發

Android 學習,面試文檔,視頻收集大整理

寒冬高級工程師必備能力

我的這篇文章比較雜,什麼都記錄一點,都是關於 android 進階的,我們的目標是成爲一個 NB 的 coder,這裏我儘量向大家描述清楚一個高玩該是什麼樣子的,有樣學樣,我們也知道怎麼去進步不是。

系統設計能力

因爲如果你僅僅是對各種各樣的技術都熟悉,有技術廣度,也有一定的技術深度,實際上是不夠的。如果你的系統設計能力不到位,可能導致你在開發系統的時候會亂用技術

比如說,有的系統他有一些自己特殊的業務場景和技術挑戰,實際上在這個場景之下比較合適的是採用 “緩存 + 數據庫” 的技術方案來應對

但是呢,有的工程師會很多技術,但是缺少這種準確的分析系統問題,提出合理的技術方案的能力,也就是缺少系統設計能力,導致他可能會引入Elasticsearch這種技術來嘗試解決這個問題

那麼結果必然是失敗的。所以之前很多人找我問問題,說我在XX場景下,用了XX技術,但是沒有起到我想要的那個結果啊

我幫他一看,這不是必然的麼,你的XX技術應該用在YY場景下,結果你用到XX場景下,肯定是不行的。

這就是系統設計能力的重要性。

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

怎麼寫好我們的代碼

我想這都是大家貫徹始終的終極追求了吧,我記得最深的一句話:不管如何,你的代碼得先能讓人看。這是我在剛剛入行時,一個老司機指導我的,隨着我在學習的深入,瞭解的更多,我們在基本功上的追求不就是爲了代碼更加好看嗎,好看的代碼才更好懂,才能好改,設計模式,代碼架構,框架設計,MVP(多端分離) 不都是追求的這個最終結果嘛。

好看的代碼除了我們要學習不限於上述的各種知識,更是體現在我們平時的對於代碼的態度上,這體現在我們的平時的代碼規範上。

這是平時的我們:

  • 代碼沒有註釋
    對於複雜的業務來,沒註釋這是要逼死下面的小夥伴啊,過個2-3月,一樣得逼死自己啊,這一坨寫的是什麼玩意,要死的心啊…….

  • 面向過程去寫代碼
    好複雜呀,看不懂呀,方法好長啊呀,媽媽我看不懂怎麼辦呀。雖然寫的時候很爽 ,但是之後再去改,再去加功能時,那時我們的心一定是崩潰的,不好改,不好加,費事費力是肯定的,然後越改越加越亂越難懂,最後沒法維護了,誰有寫過這樣的代碼,都別躲…… 所以啊,設計模式,框架設計,面向接口編程,功能分離,架構層次分離,應運而生。

  • 代碼變量名稱隨意
    通篇的 x,a,b,c,temp1,temp2,temp3 這都是什麼玩意,結合上下文都搞不懂,真不知道當初怎麼寫的,編碼一直要求我們見名知意,我現在是深刻理解到了見名知意的好處,真的是非常快捷,非常 Nice 的體驗,這裏我要說一點,google 的英文起名也不是非常好,有的單詞,真他媽想抽他…

  • 每個方法分工不明確
    一個方法裏你寫上 100 行,你讓別人怎麼看,代碼你又怎麼複用,同樣的代碼你不抽象出來,處處複製是要私人的

那麼我們怎麼辦,做到以下:

  • 實現功能前先設計好代碼
    好的框架層次,讓我們可以快速的瞭解整個框架實現,快速的找到想要的代碼,優秀準確的名字我們可以知道類是幹什麼的,
  • 註釋寫的儘量詳細
  • 不要寫太長的方法
  • 不要寫太“牛”的代碼了
    有的程序員喜歡寫非常有個性的代碼,喜歡寫一些別人很難看懂的代碼,他認爲這樣才能顯示出自己的“高水平”,這樣就不是高水平了,只能說代碼的可讀性太差了,我們要寫出傻瓜式代碼,也就是說讓很傻的程序員都能看懂,"傻瓜式代碼" != "低性能代碼”哈,這一點要分開
  • 中國人就別寫英文註釋了

功夫在詩外

我們做到 5-10 年的時候,技術就不是唯一的敲門磚了,甚至不是最重要的了,而是技術以外的東西:人脈,名望、履歷,以及漸漸成型的言談舉止,等等。但這些東西,如何通過“刻意的練習”(新學的詞)來獲得,但是只要在於自己平時有意識的嘗試,積累,提高。

比如我平時在公司的技術分享我都是要求每個人像正式演講一下,聽的人做好,拍好,認認真真拿筆做記錄,講的人配合黑板,大屏幕,在有高度的臺階上努力做到最好的自己,不結巴,思想連貫,能現場發揮,我還常常和講臺上的人互動,帶着他多說說自己的想法,等你熟悉了這個環境,這種氛圍,這種事,無形中你就會說話,會演講,氣場也就培養出來,當然這不是全部,更多的還有,比如你怎麼去和產品,UI,運營溝通,看看別人的工作內容是什麼,有什麼困難,哪些方面涉及到開發,甚至是別人的全部工作內容,工作技能,這樣你就擁有了區別與別人的橫向擴展能力,在公司一個能和不同部門之間有效溝通,建立聯繫,解決問題,梳理矛盾的技術人員比一個單純的技術人員要重要的多,同時這樣的人也更容易晉升,職業道路越是網上會走,越是要接觸更多的部門,擁有和這些部門協作的能力將是至關重要的。

最後的最後

以前我們一直被公司和技術牽着走,並不是自己在選擇技術,而是不自覺地被推到了現在尷尬的處境。想想有多少人對於自己將來要發展的方向和技術類型進行過深入思考和比較呢?

對於程序員來說,要學習的知識內容、技術有太多太多,要想不被環境淘汰就只有不斷提升自己,從來都是我們去適應環境,而不是環境來適應我們!

這裏附上上述的技術體系圖相關的幾十套騰訊、頭條、阿里、美團等公司19年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裏以圖片的形式給大家展示一部分。

相信它會給大家帶來很多收穫:

2019總結:Android 寒冬難前行?—我的進階之路,送給正在迷茫的你!

上述【高清技術腦圖】以及【配套的架構技術PDF】可以 加我wx:X1524478394 免費獲取

當程序員容易,當一個優秀的程序員是需要不斷學習的,從初級程序員到高級程序員,從初級架構師到資深架構師,或者走向管理,從技術經理到技術總監,每個階段都需要掌握不同的能力。早早確定自己的職業方向,才能在工作和能力提升中甩開同齡人。

  • 無論你現在水平怎麼樣一定要 持續學習 沒有及湯,別人看起來的毫不費力,其實費了很大力,這四個字就是我的建議!!!!!!!!!
  • 我希望每一個努力生活的IT工程師,都會得到自己想要的,因爲我們很辛苦,我們應得的。

最後,互聯網不存在所謂的寒冬,只是你沒有努力罷了!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章