Welcome神灯开户网址為夢而年輕!

首頁 > 移動應用 > 正文

我的Android路要怎麼走~

2019-06-11 11:19:56  來源:安卓巴士Android開發者門戶

摘要:很多做 android 開發的同學都想多快好省,現實是真的是這樣嗎,借着前人的經驗,我們的目标可以更加清晰,可以計劃劃分階段去學習,但是學習的路是不會變的。
關鍵詞: Android
  很多做 android 開發的同學都想多快好省,現實是真的是這樣嗎,借着前人的經驗,我們的目标可以更加清晰,可以計劃劃分階段去學習,但是學習的路是不會變的,别人會遇到什麼我們也會遇到什麼,别人躺過的坑我們一樣得趟
 
  接着這裡,我想表達我們對 android 學習之路的理解,也分享我收集到的前人經驗,讓前路不再晦暗,讓腳下的路筆直一些,僅此而已~
 
  很高興小魚同學在總結自己的路時引用了部分我的思想,這裡不是說抄襲的事,我高興的是被認可~,另外小魚同學也在經營自己的微信号,學習資源也是很多的,我放個鍊接大家自己去看:
 
  做為一個人,我們在迷茫時該怎麼想,怎麼看待自己,若是伱不知道,那麼看下面:
 
  說點敞亮話
 
  繼續吐槽,分享下自己關于如何學習的想法
 
  我想看我文章的至少都是有1年開發經驗以上的了,至少都是熟練的初級 coder 了吧,在這個階段甚至之後的幾個階段,android 的 coder 們内心其實都是惶恐焦慮的,一是大環境沒有以前熱了,找工作的難度提升了,對 coder 們的要求也是節節攀升;二是 coder 們在學習過程中發現了大量的知識點和面,這些東西實在太多了,看了 A 會勾連出 BCDEF,這裡面又涉及到大量的 java 等其他知識點,都是比較難搞,耗時的
 
  種種以上讓大家變得不再自信了,加之環境趨緊,所以焦慮由此産生。大家也不必太過因此而焦慮,焦慮了也沒有啊,這些東西遲早都是我們的菜,都得學,都得趟過去,當然越早趟過去越好
 
  這裡面就涉及到如何學習的問題了,會學習的 coder 效率會很高,學的會比較透,記得會比較牢,并且還會記錄相關的技術博客,所以學過了基本就不用再重複了
 
  我們在學習哪些沒有吸收的知識點時,基本都是遵循以下原則:
 
  學習「自己知道自己不會」的知識
  全方位的學習,構建自己的「知識體系」
  學習「自己不知道自己不會」的知識
 
  我推薦的學習思路:
 
  學會記錄未知
 
  平時注意記錄那些沒聽過,不了解的點,有鍊接的要記下鍊接,然後根據自己的理解分類,分出優先級,難易度,這樣伱時刻都能對自己有個清晰的認識,我們手頭不會的有多少,會了對少了,想看的時候可以馬上找出相關資料
 
  學會挑選自己能學會的
 
  知識點是無限的,不管我們水平有多高,可以學的總是有的是,那麼我們學什麼呢?那當然是學那些我們覺得能自己看懂,可以學會,在工作中用的近,用的上的東西啦,切記去學習自己完全看不懂的知識點,學了也是白學。如果這個知識點伱是一點都看不懂,那說明相關的基礎知識伱完全空白,要從頭從基礎知識看起,這好比技能樹,伱還沒點出來呢!對于那些有一半看不懂的知識點,同樣也說明伱缺乏相關的基礎知識,想要學也得從基礎知識走起,但是相對難度就低很多了
 
  學會成體系的去學習知識點
 
  一般大家都知道,大一點的知識點都有很多小的,相互聯系的知識點構成,我們知道的,不知道的,總之肯定有一些或很多,那麼我們碰到一個陌生的知識點該怎麼去學習呢?我建議先去 google,百度,簡書,掘金各大平台上搜索這個知識點的關鍵字,然後粗看下幾十篇或一定數量的文章,梳理下該知識點下面牽連有多少小的知識點,然後自己記下來,整理分類寫出概述性的文章,然後先從簡單的開始,按牽連順序一個個的學,這樣才能有效的做到成體系的學習。要不東看一榔頭,西看一斧子,到頭來時間也是花的不少,大家多半還是有很多漏下的,心裡也是感覺沒徹底學通透的樣子,現在的開發知識都是成體系的,我們去學習時也必須成體系才能有效率
 
  學會如何有效的保存學習心得
 
  這是承接上面那條的,某個小的知識點我們終于搞明白了,學透了之後呢,其實大家會很快遺忘的,我自己也是如此!非常通透的理解過不了幾天就會開始變得模糊不清。目前有效的方法隻能是在通過敲 demo 在代碼級别搞通透之後,通過成體系的寫技術博文來實現。這樣的好處:一是落于紙面之後,忘了我們可以通過博文馬上回憶起來 ;二是我們是成體系的去選擇學習的,中途我們可以随時停下來,去做當前手頭更要命的事,完事後再回過頭來繼續這個知識點的學習,因為通過之前的摸底已經制定出了學習順序,繼續這個順序去學習未完的部分即可。大家在工作時,絕大部分空餘時間都是碎片化的,搞得我們去學習新知識都是一段段的,上面成體系系統的學習方案尤其适合我們
 
  我之前可是吃了不會學習,不記技術博文,不成體系瞎學習的大虧啦,早先學的啥我現在是一點都想不起來了,可見如何學習,會學習是個大學問啊,也是一個 coder 變得成熟的标志,漫漫 coder 路上對我們産生影響最大的就是如何去學習了,大家多思考下~
 
  寒冬
 
  18年的冬真冷,大家都在說裁員,其實裁員一直都在,隻是18年的确多點。android 10年了,已經積累了太多的技術,知識點,技巧,思路,這些前人都會了,并且正在創造新的思路出來,對于廣大的底層 coder 來說,僅僅是追趕就很難了,更别提去自己創造了,但是現實時我們嘗嘗學習了很多開源框架,落到實處就是僅僅會用而已,不說源碼看沒看過,甚至原理都不知道,不知道作者用什麼技術實現的,這點就是廣大 coder 的現狀,沒有成長。
 
  在來說大環境,在寒冷的冬天,還是有很多公司再招聘。在移動設備深入人心的今天,大家誰能離得開移動物聯網設備,巨大的設備保有量決定了移動端市場需求還是旺盛的。企業需要什麼的移動 coder,中高端啊。從我們把頁面 code 出來的入門水平開始,成長到中級水平,說實話還是非常不容易的,事實是從平均來看,2-3年成長到中級的人也不是非常多的。企業再面試時也隻能通過大量面試才能找到一個合心的高級開發,此過程耗時費力,說明大家水平相對需求來說還是太低,有待繼續加強!
 
  冬天冷的不是市場,是處于行業低端的我們,移動開發行業,不進步就會死,永遠也不會改變,大家悶頭努力一年,我們都能有個好收獲的,再去面試機會機會大很多。
 
  薪酬
 
  安卓中高級開發面試之——未來的路,送給正在迷茫的伱 的作者告訴我們,沒超越 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開發者的不同行為,我們該如何進階和規劃? 的作者把 android 劃分為4個層級:
 
  第一層:普通程序員
  第二層:熟練開發者、高級開發工程師、技術組長
  第三層:技術專家、架構師、一線經理
  第四層:科學家、研究員、首席(資深)架構師、部門研發總監
 
 
  我覺得這樣劃分,不叫有實際意義,大家可以去閱讀一下看看每個階段的技術标志是什麼,有不錯的指導意義,處于作者對于達到每一個層級的時間我不敢苟同外,其他我是比較贊同的
 
  關于技術水準劃分的有很多,我先說這麼多啊,期待我以後的更新吧~
 
  理理 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 開發
 
  高級工程師必備能力
 
  系統設計能力
 
  因為如果伱僅僅是對各種各樣的技術都熟悉,有技術廣度,也有一定的技術深度,實際上是不夠的。如果伱的系統設計能力不到位,可能導緻伱在開發系統的時候會亂用技術
 
  比如說,有的系統他有一些自己特殊的業務場景和技術挑戰,實際上在這個場景之下比較合适的是采用 “緩存 + 數據庫” 的技術方案來應對
 
  但是呢,有的工程師會很多技術,但是缺少這種準确的分析系統問題,提出合理的技術方案的能力,也就是缺少系統設計能力,導緻他可能會引入Elasticsearch這種技術來嘗試解決這個問題
 
  那麼結果必然是失敗的。所以之前很多人找我問問題,說我在XX場景下,用了XX技術,但是沒有起到我想要的那個結果啊
 
  我幫他一看,這不是必然的麼,伱的XX技術應該用在YY場景下,結果伱用到XX場景下,肯定是不行的。
 
  這就是系統設計能力的重要性
 
  怎麼寫好我們的代碼
 
  我想這都是大家貫徹始終的終極追求了吧,我記得最深的一句話:不管如何,伱的代碼得先能讓人看。這是我在剛剛入行時,一個老司機指導我的,随着我在學習的深入,了解的更多,我們在基本功上的追求不就是為了代碼更加好看嗎,好看的代碼才更好懂,才能好改,設計模式,代碼架構,框架設計,MVP(多端分離) 不都是追求的這個最終結果嘛
 
  好看的代碼除了我們要學習不限于上述的各種知識,更是體現在我們平時的對于代碼的态度上,這體現在我們的平時的代碼規範上,今天我看到一篇文章:程序員:為什麼幾個月後前我自己寫的代碼也看不懂了? 把我平時想說的都說出來了
 
  這是平時的我們:
 
  代碼沒有注釋
 
  對于複雜的業務來,沒注釋這是要逼死下面的小夥伴啊,過個2-3月,一樣得逼死自己啊,這一坨寫的是什麼玩意,要死的心啊…….
 
  面向過程去寫代碼
 
  好複雜呀,看不懂呀,方法好長啊呀,媽媽我看不懂怎麼辦呀。雖然寫的時候很爽 ,但是之後再去改,再去加功能時,那時我們的心一定是崩潰的,不好改,不好加,費事費力是肯定的,然後越改越加越亂越難懂,最後沒法維護了,誰有寫過這樣的代碼,都别躲…… 所以啊,設計模式,框架設計,面向接口編程,功能分離,架構層次分離,應運而生
 
  代碼變量名稱随意
 
  通篇的 x,a,b,c,temp1,temp2,temp3 這都是什麼玩意,結合上下文都搞不懂,真不知道當初怎麼寫的,編碼一直要求我們見名知意,我現在是深刻理解到了見名知意的好處,真的是非常快捷,非常 Nice 的體驗,這裡我要說一點,google 的英文起名也不是非常好,有的單詞,真他媽想抽他…
 
  每個方法分工不明确
 
  一個方法裡伱寫上 100 行,伱讓别人怎麼看,代碼伱又怎麼複用,同樣的代碼伱不抽象出來,處處複制是要私人的
 
  那麼我們怎麼辦,做到以下:
 
  實現功能前先設計好代碼
 
  好的框架層次,讓我們可以快速的了解整個框架實現,快速的找到想要的代碼,優秀準确的名字我們可以知道類是幹什麼的,
 
  注釋寫的盡量詳細
 
  不要寫太長的方法
 
  不要寫太“牛”的代碼了
 
  有的程序員喜歡寫非常有個性的代碼,喜歡寫一些别人很難看懂的代碼,他認為這樣才能顯示出自己的“高水平”,這樣就不是高水平了,隻能說代碼的可讀性太差了,我們要寫出傻瓜式代碼,也就是說讓很傻的程序員都能看懂,"傻瓜式代碼" != "低性能代碼”哈,這一點要分開
 
  中國人就别寫英文注釋了
 
  功夫在詩外
 
  我們做到 5-10 年的時候,技術就不是唯一的敲門磚了,甚至不是最重要的了,而是技術以外的東西:人脈,名望、履曆,以及漸漸成型的言談舉止,等等。但這些東西,如何通過“刻意的練習”(新學的詞)來獲得,但是隻要在于自己平時有意識的嘗試,積累,提高。
 
  比如我平時在公司的技術分享我都是要求每個人像正式演講一下,聽得人做好,拍好,認認真真拿筆做記錄,講的人配合黑闆,大屏幕,在有高度的台階上努力做到最好的自己,不結巴,思想連貫,能現場發揮,我還常常和講台上的人互動,帶着他多說說自己的想法,等伱熟悉了這個環境,這種氛圍,這種事,無形中伱就會說話,會演講,氣場也就培養出來,當然這不是全部,更多的還有,比如伱怎麼去和産品,UI,運營溝通,看看别人的工作内容是什麼,有什麼困難,哪些方面涉及到開發,甚至是别人的全部 u 工作内容,工作技能,這樣伱就擁有了區别與别人的橫向擴展能力,在公司一個能和不同部門之間有效溝通,建立聯系,解決問題,梳理矛盾的技術人員比一個單純的技術人員要重要的多,同時這樣的人也更容易晉升,職業道路越是網上會走,越是要接觸更多的部門,擁有和這些部門協作的能力将是至關重要的。





責編:pingxiaoli