現狀
首先,我們說一下國內安卓開發現狀,國內很多安卓開發人員都是半路出家,就拿我自己為例,我也是在學校自學的java和安卓,沒有別人引導,路線是直接掄起袖子開干,哪里不懂點哪里,一點點查漏補缺,慢慢完善;
工作后越久,越發現這種方式存在諸多弊端,那就是我們的基本功并不是很扎實,說的明白點就是我們實現功能都是嗖嗖嗖的,維護起來卻是嗷嗷嗷的;當然這種從實踐中來到實踐中去的方式還是有很多好處的,因為這樣能帶來效率上的提升。
所以,寫這篇文章的目的就是為了幫助更多的半路出家的安卓開發人員一步步成長,走上更為廣闊而平坦的道路;我覺得一般的安卓開發人員都會經理這三個階段:
初級安卓開發,半路出家,不懂底層,不懂原理,只會用三方框架,不思考框架優劣;
中級安卓開發,熟練使用各種框架,滿眼都是bug,除了寫功能就是寫bug,遇到了工作瓶頸,想突破,但是不知道怎么突破;
中高級安卓開發,到了瓶頸期,眼看著別人做管理自己還是寫代碼,缺乏核心競爭力??磫栴}相對片面,難從系統的角度思考問題,想要培養但是沒有方法;
做開發的我們向上突破必須具備什么樣的技能呢?我相信這個問題很少有人能夠答全,畢竟安卓這個知識體系涉及到的東西很多,其實以前我自己也是懵懵懂懂,然后在網上找各種資料,最終也知識有了初步印象,那就是,我們以后發展有三條路,要么呢就是做系統架構,要么呢,就是做資深開發,要么就是做管理;當然也有轉行做產品的也不少,但是這篇文章不做討論;
介紹
成為一名全棧工程師就是說不僅需要成為一名資深的開發,也需要懂系統架構和設計;而資深安卓開發需要不僅需要懂底層開發,更需要了解性能優化,linux,安全相關;而架構師不僅僅需要了解怎么保障架構穩定,性能優化,又要考慮到管理,成本及其他要素;而管理層的話了解的更多,心理學,管理學之類的也是必不可少;接下來我們針對細分領域具體講一講;當然身體是革命的本錢,關于養生,中醫之類的也需要了解一些,這些后面我會提到;
什么是資深開發
資深開發大家都懂,就是繼續在開發這條路上走,研究更難解決的問題,更底層更偏的知識是必要的,豐富的經驗不用說了,基本都會隨著開發年齡的增長而變得豐富;良好的編碼習慣也會因為開發時間的加長而變得優美;我覺得吧,一個資深的開發人員就像是一個能工巧匠,大家可以想象一個木匠,他會慢慢地把一個作品做的精致而優美,也會考慮到成本進行適當的取舍,只要他執著于怎么做好一個作品,最后,時間的歷練會讓他成為一名優秀的匠人;
資深的開發也是這樣,大家知道國內掀起一股新匠人的風,本質上是制造業的轉型,從數量轉質量;安卓開發人員也是,從開始的遍地都是培訓出來的安卓程序員,到現在慢慢精簡隊伍,企業對安卓開發人員的素質開始變得更高,低層次的開發人員原來越來越不好找到心儀的工作,潮水退去,已經有很多安卓開發人員離開了安卓陣營,或轉戰其他開發陣營,或離開了開發行業;這背后是他們他們的心酸和無奈,但從本質上來說,這是資源的優化分配,倒逼程序員提高自己的能力;
其實說到國內的經濟狀況,大家也都看到了,至少從目前來看都是不容樂觀的,從15年到現在,我看到的是更多的公司勒緊皮帶過日子,我身邊的小企業家都在抱怨生意不好做但是又不得不做,當然這些企業家里面有些只是想站在風口上吹吹風,并不是真的在實打實的做事業。但是還有一些企業家確實是想搞一些像樣的產品,大公司的打壓和繁重的企業稅,租金,員工支出,讓這些老板一到發工資的時候一個個長吁短嘆,把自己活成了怨婦;
有很多小伙伴會說,資深開發我知道怎么做,不就是一直找開發崗位做下去嘛,維持現狀就好了;這里我需要提醒一下,資深開發并不只是以工作經歷來區分的,很多搞了很多年開發的人員,到了四十多歲了,還是一無所成,老板的樣貌倒是有了(禿頂),事業卻沒有一點進步,不惑之年卻還是很多疑惑,頻繁跳槽為加工資的人在深圳真的不少,通常這類人也沒有女朋友,具體原因不作討論,但是這是事實;
所以想要做好一個資深的開發,并不是那么容易的事情,他需要一個人有死磕的精神,遇到搞不懂的不是想辦法繞過而是想辦法弄懂原理,然后功課,這類人就像是一個個攻城勇士,披荊斬棘,勇往直前,典型的如《老羅的安卓之旅》作者羅升陽;熟悉老羅的朋友都只是,老羅也是一點點從基礎的安卓小白一步步成長為眾所周知的安卓大神,這個過程說長不長說短不短,老羅是實實在在死磕了三年才有如此速度的成長,大家對比一下自己,同樣是做了三年的開發,為什么跟他差距這么多;
什么是架構師
如何成為一名架構師大概是很多中級安卓開發多年的困惑;想要轉型卻不得其法,或許有些人會在業務時間看看《大話設計模式》這類的書籍,這類型的書我看過一些,比如前面提高的這本,我覺得寫得就很好,沒有刻板僵硬的解說,但是即便是這樣我也沒有完全吸收進去,究其根本是由于學習的時候并沒有深入的理解場景,最重要的是,學完之后沒有實際的項目運用到,最終隨著時間的推移漸漸遺忘,依稀還記得那個名字;
當然架構師可不是懂懂設計模式就行了,設計師的核心價值在于靈活的把商業場景和架構選型結合起來;在眾多的架構中選擇更合適的設計,而這些設計有大有小,這就像搭建樂高城堡一樣,樂高模組里面有很多原件供選擇,你需要清楚這些原件的組成結構和使用方法,以及這些原件使用帶來的利弊,你才能按照自己想法搭建出既美觀又結實可靠的城堡;架構師也是一樣,足夠的閱歷保證了定制化需求,對所用組件或技術的了解保證了產品可實現性,穩定性及維護性;
那么小伙伴有疑問了,我平時都是埋頭寫代碼,根本沒辦法在項目中學習到怎么架構設計啊?怎么辦,有兩種方式,一種是從自己項目中學習,一種是研究開源項目;
第一種方式
這種學習方式其實我是不太推薦的,基于國內的發展現狀,大部分從祖師爺那里傳過來的代碼并不優秀,有可能還是亂七八糟;因為很多的初創公司為了節約成本會找一些很有想法樂于學習,但是基本功卻不扎實的小伙伴,這樣的直接后果就是導致項目的維護越來越困難,代碼的可讀性越來越差,這種情況下去研究還不如不研究,當然了,有時候這些項目里面會用到一些很棒的工具類,這個里面會涉及到一些沒見過的新知識到時可以去了解一下,但是總的來說,這種項目上研究架構師不太現實的,成本太高了;
還有一種就是項目的代碼是非常清晰可讀,設計非常優美,那么需要恭喜你,你這家公司的開發做得很棒,你可以在工作時間研究別人的優秀架構并學為己用;比如bat這類公司的代碼就寫得很不錯,即使是祖傳的也不用擔心,基本上在這類公司的安卓開發人員也不需要別人告訴他怎么樣才能成為架構師了,因為公司本身就注重這方面的規培,比如我一個在阿里上班的朋友就說他們所用到的大牛寫得框架都需要了解內部原理,一方面是為了幫助新人成長,另一方面也是為了公司項目的健壯性考慮。在這個過程中,自然而然會接觸到怎么做架構;
第二種方式
這個是推薦大部分人使用的方式,也是在我們公司內部強烈推薦的一種方式,這種方式是研究別人優秀的開源項目(注意是項目而不是代碼),架構師是站在高處看大局的人,格局自然要高一點,這就需要研究整個開源項目,這些項目小到一些輔助工具,大到一個完整項目;這些項目里面會有很多優秀的代碼設計,設計理念,架構設計,編碼習慣;一般這些項目會考慮的比較全面,含括了安全,健壯性,可維護性等優點,相對于第一種方式來說,我們能更加輕松高效的獲取到架構師相關知識,為成為架構師添磚加瓦;
github上有很多優秀的開源項目,我想很多安卓開發小伙伴都不知道這玩意有多優秀的吧;這是一個開源社區,也是一個基于git搭建的版本倉庫;基本所有的安卓開發大牛都在上面留有他們的足跡;如果不了解這個工具的大家可以自行去補充一下;github上的項目眾多,并不是所有的項目都適合你閱讀,比如一些star雖然很多,針對不同水平的開發人員我在這里給一些建議;
9gag這類型的超小型項目適合初級開發人員閱讀,這會幫助理順思路,優化自己編碼習慣;如果你覺得這類型的已經摸透了,那么google提供的一些小的開源組件和建議可以去閱讀一下,比如TodoMvp ,安卓最佳實踐等;
開源第三方庫和安卓系統源碼適合中級開發人員研究,這類東西對基礎要求稍微高一點,如果沒有一定的基礎是很難讀懂的,但是既然大家都是要成為架構師的人了,必然這點水平是具備的;安卓源碼自不必說,這里博大精深,即使是自身開發人員也需要從里面吸收營養;開源三方庫網上很多,有一些研究起來還是有點困難的,被研究的比較多的,網絡層的有okhttp,數據庫有ORMLite,圖片加載有Glide,網絡隔離有retrofit,這些在后面會提到;在閱讀這類代碼的時候需要注意里面用到的設計模式,這些模式為什么要這么用,有什么好處有什么缺點;
安卓底層源碼和大型開源項目適合資深開發人員閱讀,這類項目一般比較龐大,如果挨個文件閱讀必然會導致效率低下,最后灰心喪氣,不得其果;因此在閱讀這類代碼的時候,我們需要取其精髓,一個是從大的系統架構商來說他們是怎么架構的,如何實現組件化的,組件之間怎么解耦的,大的一個項目怎么做的單元測試;
學習路線
本文的重點是教大家一個方法,也是通常所說的“術”,后面如果有空的話我也會在博客上分享一些學習筆記給大家,幫助大家梳理學習過程中遇到的各種問題;
這里我分為兩大部分來講,一個是行業內的,一個是行業外的;行業內的代表專業技能的提升,行業外代表個人綜合能力和素質的提升,大家不要忽略了行業外的知識而當一個工作狂,長短板類型的人到了最后會越來越被動,當然,少部分人除外;
接下來我會具體分享怎么學習才能成為一名真正意義上的全棧工程師,這個是大綱,具體的需要大家根據大綱自行尋找資料進行學習,因為本文只是提供一條成長路線,如果有相關資料只要不涉及版權我也會樂于分享出來的;有空的時候我也會通過博客的方式,盡可能通過博客的方式讓大家讀懂,一起成長;
資深開發之路
成為資深安卓開發需要什么:
安卓高階
懂NDK開發,而不僅僅是知道怎么使用jni調用;
懂屏幕適配;
懂UI加載流程;
熟悉消息分發機制;
懂高級繪圖,懂UI定制,熟悉離屏渲染,硬件加速,熟悉強排班,強交互;
懂AndroidStudio高級應用(熟練使用快捷鍵,Gradle基礎語法,會多渠道打包,自定義打包);
熟悉MakeFile語法,懂得自己使用cmake編譯So依賴和可執行文件;
熟悉shell語法(數組,管道,遍歷,流程控制,條件判斷,云算法),懂得編寫簡單的腳本;
熟悉音視頻編碼原理,熟悉視頻錄制,視頻播放;
熟練進行文件操作;
熟悉虛擬機運行原理,熟悉熱更新,增量更新;
性能優化
這里我把安全也加入到性能優化里面;
內存泄露原理分析及場景分析,GC垃圾回收機制原理詳解
內存優化工具使用:Lint,MAT,LeakCanary,TraceView;
數據傳輸的效率優化
3.1 ProtolBuffer提升數據傳輸效率
后臺服務內存優化
4.1 如何保障服務的常駐內存
4.2 雙進程守護
多線程并發
5.1 阻塞式隊列
5.2 鎖機制原理分析,與競爭鎖
5.3 原子鎖,對象鎖,nio與bio區別與應用
混合式優化
6.1 幀率詳解及其卡段分析 UI線程掉幀與內存避免(reactnative)
6.2 避免render方法過渡重繪
6.3 ScrollView內存優化(可見與不可見終極解決方案)
6.4 分析程序啟動流程、優化啟動流程和提速
安裝包性能優化
7.1 打包流程分析
7.2 aapt資源文件打包原理
7.3 resources_arsc二進制機構分析
7.4 資源文件壓縮
7.5 資源動態加載
7.6 Lint工具優化
7.7 極限壓縮、
應用安全
8.1 Proguard高級混淆
8.2 https防抓包機制(拒絕被hook)
8.3 Dex加密與反編譯(app加固)
8.4 數據庫加密方案及原理
8.5 Gradle插件自動化減少apk文件大小
架構師之路
Uml相關繪圖,Uml正向及逆向工程,
Aop切面設計,插件化;
3.安卓系統源碼分析
2.1 Handler原理與源碼分析
2.2 Message鏈表原理與重用機制
2.3 Binder核心原理與架構設計
2.4 PackageManagerService源碼解析及apk安裝流程
2.5 Activity管理架構設計及跨進程跳轉
2.6 剖析App,完全解讀App啟動流程;
Android事件總線架構設計
動態換膚核心技術
組件化框架設計
6.1 ARouter集中式路由及核心原理實現
6.2 淘寶的組件化運行與如何與Skyruler結合
6.3 SkyRuler項目組件化框架實現(重定向,跳轉前預處理–登錄,統一跳轉入口,支持多類型參數傳遞,多Moudle跳轉)
數據庫框架設計
7.1 ORMLite核心架構
7.2 xml腳本打造數據庫版本全量升級架構
7.3 面向對象式手寫數據庫架構設計
網絡請求框架設計
8.1 網絡請求層七層模型及架構剖析;
8.2 okhttp源碼分析與架構解讀;
8.3 okHttp任務隊列架構設計
8.4 Socket連接池復用機制詳解
8.5 攔截器責任鏈模式實現重連,補全Http頭,鏈接與Http協議解析等
8.6 使用泛型完成手寫高擴展的OKHttp網絡訪問框架設計(支持高并發,請求隊列)
圖片加載框架設計
9.1 Glide架構思維分析與源碼詳解
9.2 手寫Glide注入內部生命周期(打造不一樣的緩存方式)
9.3 建造者模式打造手寫Glide架構的高擴展性
9.4 請求隊列、請求轉發、加載器、加載策略、緩存策略詳解
9.5 LruCache和DiskLruCache解析
其他架構實現
10.1 Android全版本編譯時權限申請框架(含8.0 動態申請)
10.2 動態代理打造高可替換的網絡庫隔離(retrofit,okhttp隔離)
設計模式
11.1 MVC架構設計及三層膜性剖析
11.2 MVP思想精髓與解耦View與Mode的巧妙設計詳解
11.3 架構提升之路 MVP思想實現企業級項目基礎框架搭建
11.4 MVVM架構解析及DataBinding架構解析
綜合素質打造
心理學里面有一句話說人是社會性動物;每個人都會與整個社會發生連接,生活中的方方面面構成了整個社會,這個社會中會有很多細分領域,這些細分領域無時不刻不在影響著我們,對這些領域具有一定的基礎知識其實是非常重要的;包括心理學,哲學,宗教,經濟學,政治學,中醫學,康復學,法學,文學等;
了解這些并不是為了讓我們看起來多么博學多才,學以致用,這些知識在很多的場景有很大幫助,比如我以前有個朋友撞了別人,本來私了了,但是過了一年人家以舊病復發為由索取高額賠償,而朋友想通過汽車保險降低損失卻被告知有騙保風險,弄不好坐牢;如果懂一點基礎法律常識,那么這些事情會好處理很多;
程序員一般或多或少有些職業病,如何預防并保持健康的身體很重要,有很多同事已經有了相對應的癥狀;健康的重要性無需多言,只不過沒有到真正生病沒有幾個人會真正關注,大家都學過《扁鵲見蔡桓公》,見微知著才能防范于未然;
如果想要走管理這條路的小伙伴或者已經走上管理的小伙伴就需要提前儲備一些提升效率的事情,一直以來我們都是按部就班自我摸索,這樣索然很好,但是少不了走一些彎路,有很多事情我們是可以更加高效的完成的,當然,要做好管理第一要務是做好自我管理,如果自我管理難做好就很難有對事情的掌控能力,缺少這種掌控力就很難具備大局觀,那么在思考問題的時候就很難做到全面,果斷的決策;
現在很多公司都流行敏捷項目,但是我去研究了一陣發現,真正的敏捷是做好自我管理,這種自我管理并不是增加員工的負擔,反而是通過調用大家自我管理的動機而把事情做好,這種情況下,做的事情越少效率反而更高;
綜合素質打造有很多方面,因為時間來不及整理,我大概列出如下幾項:
綜合素質:
行業分析報告,上下游產業鏈
1.1 50大產業鏈全景圖
1.2 互聯網灰黑產業白皮書
1.3 褥羊毛產業研究報告
敏捷管理知識
2.1 敏捷軟件開發原則、模式與實踐。((美)Robert.C.Martin)
2.2 Scrum精髓_敏捷轉型指南
2.3 硝煙中的Scrum和XP-我們如何實施Scrum
2.4 高效程序員的45個習慣
文檔管理與分類,待辦事項管理;
it領域各行業解決方案分享;
高效搜索與資源整合能力;
基礎健康與養生,了解自己身體;
親密關系,愛情,婚姻;
-
工程師
+關注
關注
59文章
1574瀏覽量
68708
發布評論請先 登錄
相關推薦






嵌入式軟件工程師和硬件工程師的區別?





評論