全國咨詢熱線:400-009-1906

首頁>學(xué)員故事>程序員最擔(dān)心,在乎的幾個問題!論12年的職業(yè)生涯,能給我?guī)硎裁矗?

程序員最擔(dān)心,在乎的幾個問題!論12年的職業(yè)生涯,能給我?guī)硎裁矗?/h2>
來源:尚學(xué)堂      閱讀數(shù):10617

一、前言

 

一個架構(gòu)工程師/成熟的時間也很長,也需要努力,但他拿不到如IT那么豐厚的回報。究其原因,就是軟件技術(shù)革命帶來的放大效應(yīng),需求遠(yuǎn)遠(yuǎn)超過了供給。從長遠(yuǎn)看,都會在市場之手下逐步走向平衡。人生短暫,一個人又等不到這么久。

 

所以總結(jié)一句話:一個人的命運啊,當(dāng)然要靠自我奮斗,但是也要考慮歷史的進(jìn)程。
歸根到底就是運氣也是很大因素,甚至是主要因素。

 

二、我以為的我以為

 

插一個自己的小故事

 

要明白一點:寫業(yè)務(wù)代碼和做架構(gòu)是兩個完全不同的事情。

剛踏進(jìn)大學(xué)入門開發(fā)的時候,對架構(gòu)師這個詞并沒有太多的概念,就覺得肯定很牛13,我以后工作了也肯定是個架構(gòu)師。

后來開始寫代碼,從Java學(xué)起,然后四大組件,然后學(xué)思維,學(xué)項目、學(xué)布局等等等。

學(xué)校畢業(yè)出來,我已經(jīng)能獨立開發(fā)自己的APP,雖然就是些什么圖書借還APP,壁紙下載APP。但我依舊覺得自己很牛13。但是這份資歷加上科班出身,畢業(yè)后我還是輕松得到了一家小公司的offer。工作一年后,我已經(jīng)能基本上獨立解決自己開發(fā)崗位上的問題了。

我賊牛逼。但是我不會口頭上說出來,我要跳槽,這家小公司的舞臺已經(jīng)不夠我發(fā)揮了,但我不會說出來,先找好下家,再提辭職,剛步入社會的我,就有如此遠(yuǎn)見,佩服自己。

 

于是我拿著自己1年工作經(jīng)驗的簡歷,投給了阿里巴巴,研發(fā)工程師。面試都沒收到。

然后我又投了當(dāng)時如日中天的字節(jié)跳動,號稱年輕人的天下。又沒收到面試。

是我眼高手低了?投了一家上市公司,金融行業(yè),程序員最賺錢的行業(yè),又不給面試。

???

 

最后終于面到了一家中大型的企業(yè),嗯...中級工程師。

自我介紹完,說了一下我做過的項目后,leader臉上一副:就這?就這?的表情。
當(dāng)然,作為成年人的他,還是有著該有的涵養(yǎng)和禮貌,并沒有打斷我說話之類的。
然后到面試問題環(huán)節(jié)

leader一上來就問:看你簡歷上寫熟悉 AIDL,說一說 oneway 吧

我:???oneway 是什么?跟 AIDL 沒關(guān)系吧,我熟悉 AIDL 指的是使用 AIDL 接口進(jìn)行跨進(jìn)程通信。

面試官:...

啊哈,接下來的15分鐘我羞恥的恨不得立馬破門而出!binder通信原理是什么?說不清。子線程可以創(chuàng)建Handler嗎?母雞啊。activity啟動流程總能說一說吧?哈哈哈,忘記了....
我人生中的第一次跳槽就這樣羞辱的結(jié)束了。。。。。。。

這件事過后,我如夢方醒。光會砌磚(寫業(yè)務(wù)代碼)就想當(dāng)總工頭(架構(gòu)師)?不可能。

 

這也是大部分碼農(nóng)無法成為架構(gòu)師的一個原因。一直停留在業(yè)務(wù)層面,把磚砌的再好,終究只是砌磚師傅。

 

怎樣能成為一名架構(gòu)師?

我們依舊比喻成造房子,也就是說,從一個砌磚師傅怎么才能一步步成為總工頭呢?

 

一、把磚砌好

 

代碼是寫給別人看的,寫好業(yè)務(wù)代碼是成為架構(gòu)師的第一步。

沒有哪一個架構(gòu)師不是從寫業(yè)務(wù)代碼成長過來的。沒有不懂業(yè)務(wù)的架構(gòu)師,所有的架構(gòu),都依賴于業(yè)務(wù)。所有的架構(gòu)師,也必須要去寫業(yè)務(wù)代碼,不把自己設(shè)計的東西,用在真正的項目里,恐怕他們自己都不會知道,這種架構(gòu)設(shè)計的合理性在哪里。
這里我想表達(dá)的代碼質(zhì)量優(yōu)化,并不單指日常編程。

 

我想表達(dá)的是一種架構(gòu)思想:面向未來編程

一個好的工程師,在聽到需求的時候,可以根據(jù)自己的業(yè)務(wù)能力,判斷出來這些需求中,哪些是有可能變化的,哪些是不太可能變化的。

針對這些變化的內(nèi)容,在編寫的過程中,不會寫死,而反復(fù)確認(rèn)不可能會變化的需求,會寫的簡單一些,防止過度設(shè)計引起的復(fù)雜度。

 

二、清楚磚頭鋼筋水泥的成分

 

房子要建好,必定要選用好的材料。這些便是房子的底層、基礎(chǔ)。

在編程中,我們所用的語言便是磚頭,各種工具類便是水泥,各種框架便是鋼筋。

光會用當(dāng)然不行,必然要“知其然,知其所以然”,“所以然”便是各種方法、工具類、應(yīng)用框架的底層源碼以及他的實現(xiàn)原理。

對于絕大多數(shù)編程從業(yè)開發(fā)者而言都面臨一個普遍的問題:廣度與深度難以兼顧。
每個企業(yè)的業(yè)務(wù)方向都不一樣,用的技術(shù)也不一樣。運氣好,面試的時候甲方公司用的技術(shù)剛好跟你學(xué)的一樣,結(jié)果技術(shù)面一問,你只答的出四大組件有哪些,生命周期支支吾吾也說不太清楚,view的繪制流程模棱兩可,垃圾回收算法一知半解,性能優(yōu)化一竅不通。這要是能找到offer,那就見鬼了。

 

很多人在開發(fā)過程中只是浮在表面,忽略底層源碼分析,面試求職的簡歷也沒有進(jìn)行修繕和突出重點,自然求職不順,加薪無望。

 

底層知識學(xué)扎實了,上層的東西像風(fēng)箏一般千變?nèi)f化,而你是在底下扯線的那個人,順著線往下拉,便能輕松看清楚這個風(fēng)箏長什么樣。

 

三、房子要漂亮,裝修少不了

 

這個點相信大家很容易就能想到我接下來要說什么了。沒錯,就是開發(fā)少不了的—性能優(yōu)化。

性能優(yōu)化絕對是一個必修的課題,沒有過性能優(yōu)化的經(jīng)驗,去哪里找工作都免不了碰壁。

舉例:一名Android架構(gòu)師,必定要掌控整個APP的總體構(gòu)成,用戶體驗,是最為重要的一點。

作為Android開發(fā),大部分朋友可能會對性能優(yōu)化這個Topic如數(shù)家珍,Google官方在幾年前也有“Android性能最佳實踐系列”Android Performance Patterns,當(dāng)然,其中大部分的Tips都是需要大家遵循的規(guī)范,但是無論理論上怎么說,我們所做的工作最終還是需要為業(yè)務(wù)服務(wù),不管你是為了提高下載量、優(yōu)化用戶評價、還是提高業(yè)務(wù)的轉(zhuǎn)化率,都需要給出性能優(yōu)化的ROI。

經(jīng)過近十年的發(fā)展,Android技術(shù)優(yōu)化日新月異,如今Android 10.0 已經(jīng)發(fā)布,Android系統(tǒng)性能也已經(jīng)非常流暢,可以在體驗上完全媲美iOS。到了各大廠商手里,改源碼、自定義系統(tǒng),使得Android原生系統(tǒng)變得魚龍混雜,然后到了不同層次的開發(fā)工程師手里,因為技術(shù)水平的參差不齊,即使很多手機在跑分軟件性能非常高,打開應(yīng)用依然存在卡頓現(xiàn)象。

APP進(jìn)行性能優(yōu)化已成為開發(fā)者該有的一種綜合素質(zhì),也是開發(fā)者能夠完成高質(zhì)量應(yīng)用程序作品的保證。

 

四、小結(jié)一下

 

從小白到架構(gòu)師的職業(yè)規(guī)劃到底是怎樣的?
我們初入這行是可能出于興趣,可能出于前景。
入行這個職業(yè)就代表著你需要不斷的學(xué)習(xí)、學(xué)習(xí),進(jìn)階、進(jìn)階。

在我們?nèi)胄兄?,為了就業(yè),我們不得不讓自己的知識體系更具有“廣度”

入職后,你發(fā)現(xiàn)并不是之前所學(xué)的知識都需要用到,你開始需要進(jìn)階某一知識模塊的“深度”

此時你具備初級開發(fā)的:知識點

工作了幾年后,你發(fā)現(xiàn)你需要更大的舞臺,你需要好幾個連起來模塊的深度進(jìn)修。
此時你具備了中級工程師的:知識面

又過了幾年,你已是職場老鳥,你幾乎能解決工作中所有日常問題。你具有許多的知識面,你將你所有的知識面串聯(lián),形成了一套完整的知識體系。

此時你是一名高級工程師:知識體系

可是,你已經(jīng)到了30+,快要退休的年紀(jì),你身后有無數(shù)的高級工程師隨時可取代你的位置。
此時,你需要探索代碼更深處的奧妙,你不再是只會建房子的“砌磚師傅”

你懂得每塊磚頭的組成、結(jié)構(gòu),你知道一所房子哪個地方需要這塊“磚頭”,哪個地方適合另一種“磚頭”。你知道這所房子需要怎樣建造,怎樣設(shè)計更堅固、合理且美觀。
此時,你是一名架構(gòu)師。

 

五、最后

 

為什么很多程序員做不了架構(gòu)師。
1、良好健康的職業(yè)規(guī)劃很重要,但大多數(shù)人都忽略了
2、學(xué)習(xí)的習(xí)慣很重要,持之以恒才是正解。
3、編程思維沒能提升一個臺階,局限在了編碼,業(yè)務(wù),沒考慮過選型、擴展
4、身邊沒有好的架構(gòu)師引導(dǎo)、培養(yǎng)。所處的圈子對程序員的成長影響巨大。