一、前言
一個(gè)架構(gòu)工程師/成熟的時(shí)間也很長(zhǎng),也需要努力,但他拿不到如IT那么豐厚的回報(bào)。究其原因,就是軟件技術(shù)革命帶來(lái)的放大效應(yīng),需求遠(yuǎn)遠(yuǎn)超過(guò)了供給。從長(zhǎng)遠(yuǎn)看,都會(huì)在市場(chǎng)之手下逐步走向平衡。人生短暫,一個(gè)人又等不到這么久。
所以總結(jié)一句話:一個(gè)人的命運(yùn)啊,當(dāng)然要靠自我奮斗,但是也要考慮歷史的進(jìn)程。
歸根到底就是運(yùn)氣也是很大因素,甚至是主要因素。
二、我以為的我以為
插一個(gè)自己的小故事
要明白一點(diǎn):寫業(yè)務(wù)代碼和做架構(gòu)是兩個(gè)完全不同的事情。
剛踏進(jìn)大學(xué)入門開發(fā)的時(shí)候,對(duì)架構(gòu)師這個(gè)詞并沒(méi)有太多的概念,就覺得肯定很牛13,我以后工作了也肯定是個(gè)架構(gòu)師。
后來(lái)開始寫代碼,從Java學(xué)起,然后四大組件,然后學(xué)思維,學(xué)項(xiàng)目、學(xué)布局等等等。
學(xué)校畢業(yè)出來(lái),我已經(jīng)能獨(dú)立開發(fā)自己的APP,雖然就是些什么圖書借還APP,壁紙下載APP。但我依舊覺得自己很牛13。但是這份資歷加上科班出身,畢業(yè)后我還是輕松得到了一家小公司的offer。工作一年后,我已經(jīng)能基本上獨(dú)立解決自己開發(fā)崗位上的問(wèn)題了。
我賊牛逼。但是我不會(huì)口頭上說(shuō)出來(lái),我要跳槽,這家小公司的舞臺(tái)已經(jīng)不夠我發(fā)揮了,但我不會(huì)說(shuō)出來(lái),先找好下家,再提辭職,剛步入社會(huì)的我,就有如此遠(yuǎn)見,佩服自己。
于是我拿著自己1年工作經(jīng)驗(yàn)的簡(jiǎn)歷,投給了阿里巴巴,研發(fā)工程師。面試都沒(méi)收到。
然后我又投了當(dāng)時(shí)如日中天的字節(jié)跳動(dòng),號(hào)稱年輕人的天下。又沒(méi)收到面試。
是我眼高手低了?投了一家上市公司,金融行業(yè),程序員最賺錢的行業(yè),又不給面試。
???
最后終于面到了一家中大型的企業(yè),嗯...中級(jí)工程師。
自我介紹完,說(shuō)了一下我做過(guò)的項(xiàng)目后,leader臉上一副:就這?就這?的表情。
當(dāng)然,作為成年人的他,還是有著該有的涵養(yǎng)和禮貌,并沒(méi)有打斷我說(shuō)話之類的。
然后到面試問(wèn)題環(huán)節(jié)
leader一上來(lái)就問(wèn):看你簡(jiǎn)歷上寫熟悉 AIDL,說(shuō)一說(shuō) oneway 吧
我:?。縪neway 是什么?跟 AIDL 沒(méi)關(guān)系吧,我熟悉 AIDL 指的是使用 AIDL 接口進(jìn)行跨進(jìn)程通信。
面試官:...
啊哈,接下來(lái)的15分鐘我羞恥的恨不得立馬破門而出!binder通信原理是什么?說(shuō)不清。子線程可以創(chuàng)建Handler嗎?母雞啊。activity啟動(dòng)流程總能說(shuō)一說(shuō)吧?哈哈哈,忘記了....
我人生中的第一次跳槽就這樣羞辱的結(jié)束了。。。。。。。
這件事過(guò)后,我如夢(mèng)方醒。光會(huì)砌磚(寫業(yè)務(wù)代碼)就想當(dāng)總工頭(架構(gòu)師)?不可能。
這也是大部分碼農(nóng)無(wú)法成為架構(gòu)師的一個(gè)原因。一直停留在業(yè)務(wù)層面,把磚砌的再好,終究只是砌磚師傅。
怎樣能成為一名架構(gòu)師?
我們依舊比喻成造房子,也就是說(shuō),從一個(gè)砌磚師傅怎么才能一步步成為總工頭呢?
一、把磚砌好
代碼是寫給別人看的,寫好業(yè)務(wù)代碼是成為架構(gòu)師的第一步。
沒(méi)有哪一個(gè)架構(gòu)師不是從寫業(yè)務(wù)代碼成長(zhǎng)過(guò)來(lái)的。沒(méi)有不懂業(yè)務(wù)的架構(gòu)師,所有的架構(gòu),都依賴于業(yè)務(wù)。所有的架構(gòu)師,也必須要去寫業(yè)務(wù)代碼,不把自己設(shè)計(jì)的東西,用在真正的項(xiàng)目里,恐怕他們自己都不會(huì)知道,這種架構(gòu)設(shè)計(jì)的合理性在哪里。
這里我想表達(dá)的代碼質(zhì)量?jī)?yōu)化,并不單指日常編程。
我想表達(dá)的是一種架構(gòu)思想:面向未來(lái)編程
一個(gè)好的工程師,在聽到需求的時(shí)候,可以根據(jù)自己的業(yè)務(wù)能力,判斷出來(lái)這些需求中,哪些是有可能變化的,哪些是不太可能變化的。
針對(duì)這些變化的內(nèi)容,在編寫的過(guò)程中,不會(huì)寫死,而反復(fù)確認(rèn)不可能會(huì)變化的需求,會(huì)寫的簡(jiǎn)單一些,防止過(guò)度設(shè)計(jì)引起的復(fù)雜度。
二、清楚磚頭鋼筋水泥的成分
房子要建好,必定要選用好的材料。這些便是房子的底層、基礎(chǔ)。
在編程中,我們所用的語(yǔ)言便是磚頭,各種工具類便是水泥,各種框架便是鋼筋。
光會(huì)用當(dāng)然不行,必然要“知其然,知其所以然”,“所以然”便是各種方法、工具類、應(yīng)用框架的底層源碼以及他的實(shí)現(xiàn)原理。
對(duì)于絕大多數(shù)編程從業(yè)開發(fā)者而言都面臨一個(gè)普遍的問(wèn)題:廣度與深度難以兼顧。
每個(gè)企業(yè)的業(yè)務(wù)方向都不一樣,用的技術(shù)也不一樣。運(yùn)氣好,面試的時(shí)候甲方公司用的技術(shù)剛好跟你學(xué)的一樣,結(jié)果技術(shù)面一問(wèn),你只答的出四大組件有哪些,生命周期支支吾吾也說(shuō)不太清楚,view的繪制流程模棱兩可,垃圾回收算法一知半解,性能優(yōu)化一竅不通。這要是能找到offer,那就見鬼了。
很多人在開發(fā)過(guò)程中只是浮在表面,忽略底層源碼分析,面試求職的簡(jiǎn)歷也沒(méi)有進(jìn)行修繕和突出重點(diǎn),自然求職不順,加薪無(wú)望。
底層知識(shí)學(xué)扎實(shí)了,上層的東西像風(fēng)箏一般千變?nèi)f化,而你是在底下扯線的那個(gè)人,順著線往下拉,便能輕松看清楚這個(gè)風(fēng)箏長(zhǎng)什么樣。
三、房子要漂亮,裝修少不了
這個(gè)點(diǎn)相信大家很容易就能想到我接下來(lái)要說(shuō)什么了。沒(méi)錯(cuò),就是開發(fā)少不了的—性能優(yōu)化。
性能優(yōu)化絕對(duì)是一個(gè)必修的課題,沒(méi)有過(guò)性能優(yōu)化的經(jīng)驗(yàn),去哪里找工作都免不了碰壁。
舉例:一名Android架構(gòu)師,必定要掌控整個(gè)APP的總體構(gòu)成,用戶體驗(yàn),是最為重要的一點(diǎn)。
作為Android開發(fā),大部分朋友可能會(huì)對(duì)性能優(yōu)化這個(gè)Topic如數(shù)家珍,Google官方在幾年前也有“Android性能最佳實(shí)踐系列”Android Performance Patterns,當(dāng)然,其中大部分的Tips都是需要大家遵循的規(guī)范,但是無(wú)論理論上怎么說(shuō),我們所做的工作最終還是需要為業(yè)務(wù)服務(wù),不管你是為了提高下載量、優(yōu)化用戶評(píng)價(jià)、還是提高業(yè)務(wù)的轉(zhuǎn)化率,都需要給出性能優(yōu)化的ROI。
經(jīng)過(guò)近十年的發(fā)展,Android技術(shù)優(yōu)化日新月異,如今Android 10.0 已經(jīng)發(fā)布,Android系統(tǒng)性能也已經(jīng)非常流暢,可以在體驗(yàn)上完全媲美iOS。到了各大廠商手里,改源碼、自定義系統(tǒng),使得Android原生系統(tǒng)變得魚龍混雜,然后到了不同層次的開發(fā)工程師手里,因?yàn)榧夹g(shù)水平的參差不齊,即使很多手機(jī)在跑分軟件性能非常高,打開應(yīng)用依然存在卡頓現(xiàn)象。
APP進(jìn)行性能優(yōu)化已成為開發(fā)者該有的一種綜合素質(zhì),也是開發(fā)者能夠完成高質(zhì)量應(yīng)用程序作品的保證。
四、小結(jié)一下
從小白到架構(gòu)師的職業(yè)規(guī)劃到底是怎樣的?
我們初入這行是可能出于興趣,可能出于前景。
入行這個(gè)職業(yè)就代表著你需要不斷的學(xué)習(xí)、學(xué)習(xí),進(jìn)階、進(jìn)階。
在我們?nèi)胄兄?,為了就業(yè),我們不得不讓自己的知識(shí)體系更具有“廣度”
入職后,你發(fā)現(xiàn)并不是之前所學(xué)的知識(shí)都需要用到,你開始需要進(jìn)階某一知識(shí)模塊的“深度”
此時(shí)你具備初級(jí)開發(fā)的:知識(shí)點(diǎn)
工作了幾年后,你發(fā)現(xiàn)你需要更大的舞臺(tái),你需要好幾個(gè)連起來(lái)模塊的深度進(jìn)修。
此時(shí)你具備了中級(jí)工程師的:知識(shí)面
又過(guò)了幾年,你已是職場(chǎng)老鳥,你幾乎能解決工作中所有日常問(wèn)題。你具有許多的知識(shí)面,你將你所有的知識(shí)面串聯(lián),形成了一套完整的知識(shí)體系。
此時(shí)你是一名高級(jí)工程師:知識(shí)體系
可是,你已經(jīng)到了30+,快要退休的年紀(jì),你身后有無(wú)數(shù)的高級(jí)工程師隨時(shí)可取代你的位置。
此時(shí),你需要探索代碼更深處的奧妙,你不再是只會(huì)建房子的“砌磚師傅”
你懂得每塊磚頭的組成、結(jié)構(gòu),你知道一所房子哪個(gè)地方需要這塊“磚頭”,哪個(gè)地方適合另一種“磚頭”。你知道這所房子需要怎樣建造,怎樣設(shè)計(jì)更堅(jiān)固、合理且美觀。
此時(shí),你是一名架構(gòu)師。
五、最后
為什么很多程序員做不了架構(gòu)師。
1、良好健康的職業(yè)規(guī)劃很重要,但大多數(shù)人都忽略了
2、學(xué)習(xí)的習(xí)慣很重要,持之以恒才是正解。
3、編程思維沒(méi)能提升一個(gè)臺(tái)階,局限在了編碼,業(yè)務(wù),沒(méi)考慮過(guò)選型、擴(kuò)展
4、身邊沒(méi)有好的架構(gòu)師引導(dǎo)、培養(yǎng)。所處的圈子對(duì)程序員的成長(zhǎng)影響巨大。