疑問:
一般來說技術團隊的金字塔頂尖往往是技術最牛的人做架構師(或TL)。
所以架構師在廣大碼農中的佔比大概平均不到 20%。
而架構師也可以分為初級、中級、高級,江湖上真正高水平的架構師就更少了。
所以,80%碼農幹上許多年,還是做不了架構師,正在辛苦工作的程序員們,你有沒有下面幾種感覺?
原因
①我的工作就是按時完成領導交給我的任務,至於代碼寫的怎樣,知道有改進空間,但沒時間去改進,關鍵是領導也不給時間啊。
②我發現我的水平總是跟不上技術的進步,有太多的東西要學
③我發現雖然我工作5年了,除了不停的Coding寫業務代碼,Ctrl+c和Ctrl+V更熟練了,但編碼水平並沒有提高,還是一個普通程序員,但有人已經做到架構師了。
④工作好幾年了,想跳槽換個高薪工作,結果面試的考官都問了一些什麼數據結構,什麼併發架構、多線程之類的東西
雖然看過,但是平時用不著,看了也忘記了,回答不上來,結果面試官說我基礎太差……
解決方法:
如果有以上問題,那麼你絕對進入學習誤區走了彎路;如果我們要成為架構師,我們自己要面臨的三大問題:
找準定位:我是誰、我在哪裡?
怎樣做好架構師:我要做什麼?
如何搭建架構師知識體系:我該怎麼做?
我在這裡給那些想達到這個高度甚至想往架構師發展的程序員提供一份進階路線圖,主要針對2到5年及以上工作經驗的Android開發人員,
從廣度到深度架構圖還比較全面的,裡面的技術包涵了java基礎與原理,自定義控件、NDK、架構設計、混合式開發(Flutter,Weex)、性能優化、完整商業項目開發等系統的高級技術)
這些也是目前互聯網企業最主流的技術選型,那麼來詳細看看。
1、 Java語言進階與Android相關技術核
Android應用是由Java語言進行開發的,SDK也是由Java語言編寫,對於Android來說,只要SDK沒有用kotlin重寫,那麼Java語言是都需要學習的。
而且Android apk的後臺服務器程序大概率是java語言構建,所以學習java也是一種必然。那麼Java中哪些東西是我們Android程序員需要學習的呢?
由於Android程序員習慣了 C V 代碼塊,所以與Android中比較相關的稍微比較難的Java基礎幾乎都是一個門檻
像 泛型,多線程,反射,JVM,Java IO,註解,序列化等,都是被 CV 的對象,而程序員是不懂原理的,具體內容如大綱所示。
2、 App開發框架知識體系(app亦對象)
這塊知識是現今使用者最多的,我們稱之為Android 2013~2016年的技術
但是,即使是這樣的技術,Android開發者也往往因為網上Copy代碼習慣了而導致對這塊經常“使用”的代碼熟悉而又陌生
所以我們需要從新的角度去分析這些知識點,深入研究他們,要學習源碼,模仿源碼,然後再hook源碼,這樣才能說自己懂這塊的知識。
這些都是做Android開發,做高級工程師的基礎。
3、 360° Android app全方位性能調優
一個app的性能好不好我們需要從兩個層面努力。第一個層面:書寫高性能代碼;第二個層面:調優。
如何寫出高性能的代碼呢?那就需要我們具備深厚的代碼功底,這就是代碼的基礎。
另外,對常用的算法有自己獨到的見解,leetcode上有刷個上百道題,這樣差不多可以達到精通最常用的排序查找動態規劃等算法的能力。
再者,高效的算法以及節省內存的數據結構如果配合優秀的符合應用場景的設計模式,那麼,這些就為高性能的代碼提供了實現依據。
另外一個就是對寫好的代碼進行調優,那麼調優的方向就是使用Profiler工具進行測試和檢查,看哪裡有性能消耗大的操作,然後分析對於代碼的問題。
調優的方向就變成了如何對內存調優,對耗電調優,對網絡流量調優
當然,還有對啟動速度,頁面切換效果與速度,開機白屏體驗,閃屏方面的原因等進行分析和調優。最後再加上一個屏幕適配相機適配。
4、 Android前沿技術
現在去很多公司面試,除了你具備基本的能夠寫一個高性能app的能力後,一般都會在自己的app裡面加一些現有的相對較 6的技術,這些技術我們稱之為前沿技術。
他們一般包含熱升級,熱修復,App Instant,強制更新,組件化路由架構Arouter,RxJava,IOC架構方法,Hook技術等等
當然,這些技術你不能只會用,你需要知道他的原理,有時候,你還需要知道如何對這些架構進行改進。
另外,非常重要的一點,Android開發者不願意接受新知識,所以對於現在Google推出的新的技術方案毫無感覺,這些都是被 control C 和control V所毒害
開源讓開發者失去了自我,失去了基本的編碼能力,失去了深入學習的信心和毅力,所以對於很多google推出的新技術好組件(Google I/O 大會新技術)
好框架已經很多人不願意去學習了這是不應該的,我們需要好好學習啊。
5、 NDK 模塊開發
音視頻/高清大圖片/人工智能/直播/抖音等等這年與用戶最緊密,與我們生活最相關的技術一直都在尋找最終的技術落地平臺
以前是windows系統,而現在則是移動系統了,移動系統中又是以Android佔比絕大部分為前提,所以Android NDK技術已經是我們必備技能了。
要學習好NDK,其中的關於C/C++,jni,Linux基礎都是需要學習的
除此之外,音視頻的編解碼技術,流媒體協議,ffmpeg這些都是音視頻開發必備技能,而且OpenCV/OpenGl/ 這些又是圖像處理必備知識
這些都在我們課程裡面有原理級的實戰項目。
6、 提高開發效率的工具運用
工欲善其事必先利其器,如何提高開發的效率?
很多開發者在開發的過程中由於gradle不會用導致加載代碼非常耗時,這些就是工作成本。
還有就是git的使用可以幫我們管理好我們的代碼,這個非常關鍵
因為這個工具可以讓我們修改的代碼不會因為錯誤的操作而導致代碼丟失。
另外,移動開發者,我們至少需要知道如何抓取網絡包吧
其中,最常用的stetho就是一個很好的可以進行網絡抓包的工具。
7、 移動架構師專題項目實戰環節
架構師不是天生的,是在項目中磨練起來的
所以,我們學了技術就需要結合項目進行實戰訓練,那麼在Android裡面最常用的架構無外乎 MVC,MVP,MVVM
但是這些思想如果和模塊化,層次化,組件化混和在一起,那就不是一件那麼簡單的事了,
我們需要一個真正身經百戰的架構師才能講解透徹其中蘊含的深理。
8、 移動架構師不可不學習微信小程序
9、 混合開發的flutter現在已經逐漸變成了主流的混合開發框架
另外由於阿里系的強大存在,導致阿里 系的公司都在用Weex混合架構,這些都是一個Android工程師開拓視野,走向未來必不可少的基本技能。
結尾
架構師學習之樹已經為你畫好了軀幹,其他枝丫需要自己去學習填充,長此以往,當你填滿了這顆樹,你就是一個架構師啦。
如果覺得自己學習找資料麻煩的話,可以私信我【架構師】
如果這篇文章給了你幫助,點贊轉發關注我。
閱讀更多 Android01 的文章