程序員如何跨越35歲危機(jī)?這篇給點(diǎn)干貨建議!

職場(chǎng)&認(rèn)知洞察?丨 作者?/?findyi
這是findyi公眾號(hào)的第83篇原創(chuàng)文章
這兩天在我的讀者群里做了一個(gè)職業(yè)小調(diào)研,發(fā)現(xiàn)關(guān)注我公眾號(hào)的70%以上都是程序員。
畢竟程序員吸引程序員,這也算猿糞吧,哈哈。
這個(gè)小調(diào)研也引發(fā)大家對(duì)程序員行業(yè)的激烈探討,一個(gè)讀者丟出了一張圖,是大劉老師發(fā)的一段話:

不得不佩服大劉老師的洞察力和敏銳,不干這一行居然對(duì)我們這么了解!
突然瑟瑟發(fā)抖....
前文其實(shí)也寫過(guò)一篇給碼農(nóng)后浪的六點(diǎn)建議,也提到程序員不是老中醫(yī),極容易被淘汰替代。
沒辦法,這的確是殘酷的現(xiàn)實(shí)。
事實(shí)上,我們不用去抱怨也不用去郁悶。
我們更應(yīng)該思考:如何盡可能的延長(zhǎng)我們的程序員生涯。
另外一個(gè)事實(shí)是:優(yōu)秀的程序員,從來(lái)不擔(dān)心因?yàn)槟挲g大而被淘汰。
我身邊有好幾個(gè)45+還奮斗在架構(gòu)一線的老哥,干的生龍活虎。
年齡增長(zhǎng)的同時(shí),競(jìng)爭(zhēng)力和薪資依然同步增長(zhǎng)!
今天我想跟大家聊聊優(yōu)秀程序員必須掌握的那些知識(shí)。

雖然這本書有點(diǎn)年頭了,且厚到可以墊顯示器。
但是這絕對(duì)是一本經(jīng)典的書。





《重構(gòu):改善既有代碼的設(shè)計(jì)》

代碼壞味道和相應(yīng)代碼的最佳實(shí)踐。

軟件開發(fā)這個(gè)行業(yè)能不能堆人數(shù)?怎么做好項(xiàng)目管理?如何敏捷迭代?
看完這本書,都會(huì)有答案,它適合任何軟件開發(fā)行業(yè)的從業(yè)人員閱讀。

《C程序設(shè)計(jì)語(yǔ)言》

無(wú)論是做不做C/C++,這本書都值得推薦!
C語(yǔ)言是除了匯編之外,最能讓你洞察計(jì)算機(jī)體系知識(shí)、計(jì)算機(jī)系統(tǒng)運(yùn)行原理的語(yǔ)言。
If you want to become a good programmer, you can spend 10 years programming, or spend 2 years programming and learning algorithms.
如果你想成為一個(gè)碼農(nóng)或是熟練工(Code Monkey),你大可以不學(xué)算法,因?yàn)樗惴▽?duì)你確實(shí)沒有用。
但如果你想成為一個(gè)優(yōu)秀的開發(fā)者(Developer),扎實(shí)的算法必不可少,因?yàn)槟銜?huì)不斷的掉進(jìn)一些只能借助算法才能爬出去的坑里。
2.裸編程能力
什么是裸編程能力?
處理程序?qū)嶋H實(shí)現(xiàn)部分的子任務(wù),實(shí)現(xiàn)函數(shù)或者算法之類的能力。
聽起來(lái)很簡(jiǎn)單對(duì)吧?實(shí)際上很多程序員缺失這樣的能力。
不知道大家有沒有見過(guò)「復(fù)制粘貼工程師」,Review他們的代碼甚至?xí)l(fā)現(xiàn)一些網(wǎng)上的注釋,又或者其他人的編寫錯(cuò)誤。
并不是所有程序員都具備利用必備的基本編程結(jié)構(gòu)有效的實(shí)現(xiàn)某個(gè)產(chǎn)品或者某個(gè)模塊。
不少工作多年的程序員甚至連一個(gè)簡(jiǎn)單算法排序都沒有考慮,當(dāng)然這并不影響普通工作的輸出。
充當(dāng)代碼世界的搬運(yùn)工,如同搬磚工人一般,完全可以在職業(yè)生涯初期求得茍存。
但在面臨調(diào)優(yōu)或者攻堅(jiān),這類型的程序員的表現(xiàn)甚至比剛畢業(yè)的優(yōu)秀程序員還要糟糕。
當(dāng)他們步入中年,當(dāng)他們承擔(dān)越來(lái)越復(fù)雜的任務(wù)之際,無(wú)力感會(huì)與日俱增。
3.Debug能力
了解了底層原理,我們才能看穿眼花繚亂的技術(shù)背后的東西,不被層出不窮的新技術(shù)所累。
比如Docker技術(shù)興起,改變了CI/CD的方式,推動(dòng)了云原生技術(shù)的發(fā)展。
那么Docker到底是什么東西呢,其底層無(wú)外乎:CGroups進(jìn)行資源限制、Namespace對(duì)進(jìn)程視圖修改、rootfs為容器進(jìn)程提供隔離后執(zhí)行環(huán)境的文件系統(tǒng)。
了解了Docker的底層原理,才能在實(shí)際工作中更好的駕馭Docker。
以上四點(diǎn),作為程序員,需要深耕取得突破。
大家可能會(huì)注意到,我并沒有推薦任何一門語(yǔ)言作為基礎(chǔ)能力。
對(duì)于真正的程序員大牛,語(yǔ)言只是工具,并不是本質(zhì)。
這些大牛可以很輕松的熟練使用多種語(yǔ)言來(lái)實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。
一.優(yōu)美的代碼
可讀性高的代碼才有可能是優(yōu)美的代碼。
相信大家都有過(guò)這樣的經(jīng)歷:接手一個(gè)項(xiàng)目要修復(fù)bug或者開發(fā)新功能,發(fā)現(xiàn)代碼可讀性非常差。
哪怕是在有說(shuō)明文檔的情況下,都不太敢提交代碼,唯恐引入新的bug或者直接導(dǎo)致系統(tǒng)崩潰
《重構(gòu)》里有這么一段話:“任何一個(gè)傻瓜都能寫出計(jì)算機(jī)可以理解的代碼。唯有寫出人類容易理解的代碼,才是優(yōu)秀的程序員。“
那么如何寫出可讀性高的代碼呢?
有如下建議:
1.不要寫過(guò)長(zhǎng)函數(shù)
可讀性差的代碼有很多特征,其中最典型的就是存在大量過(guò)長(zhǎng)的函數(shù)。
2.過(guò)于復(fù)雜的類
3.過(guò)于復(fù)雜的依賴關(guān)系
4.注釋要簡(jiǎn)單明了
二.優(yōu)美的架構(gòu)
并不是架構(gòu)師,才會(huì)跟架構(gòu)打交道。
一旦我們開始編碼,架構(gòu)就是必備技能了。
我尤其建議:在寫任何功能之前,先想清楚代碼架構(gòu)。
設(shè)計(jì)優(yōu)美的架構(gòu)要做到如下幾點(diǎn):
1.穩(wěn)定性原則
架構(gòu)盡可能的簡(jiǎn)單,清晰,不過(guò)度設(shè)計(jì)。
2.高內(nèi)聚低耦合
鑒于這個(gè)展開講完全可以寫一篇文章,下次專門寫下。
3.隔離
穩(wěn)定業(yè)務(wù)和易變業(yè)務(wù)要分離處理,核心業(yè)務(wù)和非核心業(yè)務(wù)要分離處理。
應(yīng)用和數(shù)據(jù)要分離,服務(wù)和實(shí)現(xiàn)細(xì)節(jié)分離,前臺(tái)和后臺(tái)分離。
三.重構(gòu)之美,不斷打磨你的藝術(shù)品
無(wú)論我們?cè)趺磁Γ埠茈y一下子就寫出可讀性很強(qiáng)的代碼。
這就像寫文章一樣,我們的大部分精力都放在表達(dá)思想上面,文從字順有的時(shí)候就不太顧得上。
寫代碼,第一要?jiǎng)?wù)是能運(yùn)行,能實(shí)現(xiàn)軟件系統(tǒng)的功能。
《代碼整潔之道》的作者寫道:“我沒指望你能夠一次過(guò)寫出整潔、漂亮的程序。如果說(shuō)我們從過(guò)去幾十年里面學(xué)到什么東西的話,那就是編程是一種技藝甚于科學(xué)的東西。要編寫整潔代碼,必須先寫骯臟的代碼,然后再清理它。”
很多人寫出了可以運(yùn)行的、“骯臟”的代碼,或者說(shuō)接手了一個(gè)可讀性比較差的系統(tǒng),往往不愿意去重構(gòu)它們。
他們的理由看上去是十分充分的,那就是容易引入新bug。
事實(shí)上,不斷重構(gòu)才能讓你的代碼始終具備「可維護(hù)性」。
同時(shí)重構(gòu)的過(guò)程,是一個(gè)飛速提升代碼能力的過(guò)程。
多年前,我曾接受一個(gè)幾十萬(wàn)行代碼的工程。
一個(gè)類就有2萬(wàn)行,一個(gè)函數(shù)幾千行.....
我花了半年時(shí)間,在保證上線迭代的同時(shí),把這個(gè)工程徹底重構(gòu)。
這個(gè)過(guò)程的確收益良多。
【您的在看,我的莫大鼓勵(lì)】

