安卓怎么才算高級(jí),這幾點(diǎn)我建議你一定要掌握
安卓開發(fā)已經(jīng)涼了嗎?
這兩年有很多人問過我類似的問題,在大方向講,任何一個(gè)行業(yè)都有有一個(gè)成長(zhǎng)周期,安卓經(jīng)歷了2011-13年的野蠻生長(zhǎng)后,已經(jīng)進(jìn)入了成熟期,這個(gè)階段絕大部分企業(yè)對(duì)Android崗位的需求回歸“理性”,不是懂一點(diǎn)Android基礎(chǔ)就能找到工作的年代,這時(shí)候再從0起步可能比較晚,但Android市場(chǎng)卻普遍缺乏高級(jí)人才。
目前Android市場(chǎng)上初中級(jí)的工資6K到18K不等,高級(jí)大概在20K-35K,很多朋友初中級(jí)開發(fā)者卡在20K這個(gè)門檻始終邁不過去,想要學(xué)習(xí)又不知道該怎么著手,大多從做上層應(yīng)用開始,到做 Framework 層就淺嘗輒止。
這里我找來一則高級(jí)Android開發(fā)的招聘要求:
這是小米在拉勾上的招聘要求,相當(dāng)于p6級(jí)別,除開學(xué)歷的要求外,我們可以看到它在Android基礎(chǔ)要求之外,把JNI/NDK/Framework,甚至JS、Server端開發(fā)也作為了提升點(diǎn),是全棧方向的雛形。我覺得大家可以經(jīng)常在招聘網(wǎng)站里看看現(xiàn)在的企業(yè)需要什么技術(shù),當(dāng)然也不能把企業(yè)要求的都學(xué)了。我這里大致總結(jié)了一下,Android開發(fā)人員的發(fā)展方向:
第一,橫向提升。
基于全棧發(fā)展的趨勢(shì),在自己擅長(zhǎng)領(lǐng)域深入專研的同時(shí)橫向擴(kuò)展,不要關(guān)起門來閉門造車。而這里說的橫向提升就是向全前端轉(zhuǎn)型,在除了要在APP會(huì)hybrid開發(fā)(web、native、前端交互、硬件交互)之外,還要會(huì)web開發(fā),微信小程序,H5。
比如服務(wù)端開發(fā),我們做Android開發(fā)很多時(shí)候,要依賴于服務(wù)端接口返回?cái)?shù)據(jù),可以自己試著搭建一下,至少要對(duì)服務(wù)端的結(jié)構(gòu)理論、服務(wù)與服務(wù)之間通信、聚合是什么樣的流程也是需要有所耳聞。
第二,縱向重塑。
一直以來,做Android開發(fā)有這么兩個(gè)說法,如果是做應(yīng)用開發(fā),往應(yīng)用架構(gòu)方向發(fā)展比較合適,如果是做系統(tǒng)層開發(fā),往往底層驅(qū)動(dòng)比較合適。這里我是比較贊同的,那具體應(yīng)該學(xué)習(xí)什么呢?
1.移動(dòng)架構(gòu):架構(gòu)展示層: MVC、MVP、MVVM、Clean、Flux、Android Architecture Components;架構(gòu)層:模塊化->組件化->插件化->沙盒/雙開技術(shù),比如可以雙開微信,類似Docker, 每個(gè)頁面都是插件,類似Vue.js中每個(gè)頁面都是組件。
2.基礎(chǔ)進(jìn)階:這個(gè)方向可能比較多,比如VIEW、Android動(dòng)畫機(jī)制、四大組件工作原理、多媒體技術(shù)等等。我們平常在工作中碰到的View滑動(dòng)沖突問題、其實(shí)通過掌握View工作機(jī)制和Android觸摸事件體系就能輕易解決掉。還有對(duì)于需要開發(fā)絢麗的動(dòng)畫效果,那么對(duì)于視圖動(dòng)畫和屬性動(dòng)畫一些特性必須有一定的了解。Android 中的四大組件工作機(jī)制其實(shí)底層應(yīng)用的是Binder機(jī)制,我們不妨從 AIDL 這個(gè)接口來了解 Binder。
JNI 和 NDK 開發(fā)也是比較常見,特別對(duì)于一些做 SDK 項(xiàng)目為主的,這一塊開發(fā)流程也是需要掌握,NDK開發(fā)(含JNI)也是用人單位區(qū)分應(yīng)聘者的手段之一,企業(yè)不一定要用到,但是可以通過是否掌握NDK來篩選人才。
3.語言學(xué)習(xí)開發(fā)語言:這里我要糾正一下學(xué)習(xí)語言不是跨行業(yè),比如Kotlin可以說是Android世界的頭等公民了。再有時(shí)下比較火的Python和GO,另外做底層C/C++是必不可少的。
4.源碼:要求能看懂并且熟悉源碼(自己選幾個(gè)第三方庫的也可以),要做到熟悉源碼及其實(shí)現(xiàn)原理。并且要做到能自己二次封裝(或自己貢獻(xiàn)三方庫)三方庫。這樣一來,你就會(huì)在維護(hù)中慢慢成為這個(gè)技術(shù)塊的專家了。我覺得輸出倒逼輸入是一個(gè)不錯(cuò)的學(xué)習(xí)方式。
5.如何提高開發(fā)效率?
工欲善其事必先利其器,如何提高開發(fā)效率,很多開發(fā)者在開發(fā)中由于gradle不會(huì)用導(dǎo)致加載代碼非常耗時(shí),這些都是你的工作成本的浪費(fèi)。還有就是git的使用也可以幫助我們管理好我們的代碼,這個(gè)非常關(guān)鍵,因?yàn)檫@個(gè)工具可以讓我們修改的代碼不會(huì)因?yàn)殄e(cuò)誤操作而導(dǎo)致丟失。另外,對(duì)移動(dòng)開發(fā)者我們至少需要知道如何抓取網(wǎng)絡(luò)包。其中,最常用的stetho就是一個(gè)非常好用的可以抓取網(wǎng)絡(luò)包的工具
6.混合開發(fā)
混合開發(fā)的flutter現(xiàn)在已經(jīng)逐漸成了主流的混合開發(fā)框架,另外由于阿里系的強(qiáng)大存在,導(dǎo)致阿里系的公司都在用Weex混合架構(gòu),這些都是一個(gè)Android工程師開拓視野,走向未來必不可少的基本技能的。
Flutter學(xué)習(xí)思維導(dǎo)圖:
其實(shí)學(xué)習(xí)的方向還有很多,這里就不給大家一一羅列了,因?yàn)椴煌袠I(yè)不同項(xiàng)目需要學(xué)習(xí)進(jìn)階的技能都不一樣,可以說360度發(fā)展。
這里放上一份詳細(xì)的Android高階開發(fā)學(xué)習(xí)的進(jìn)階大綱給大家參考下學(xué)習(xí)方向:
四、寫在最后
不論遇到什么困難,都不應(yīng)該成為我們放棄的理由!