程序員積累的編程知識(shí)十年后有多少變得沒用?
?作為一個(gè)大齡后端開發(fā),看到這個(gè)問題,真是挺感慨的。
在不少人的眼中,可能十年,甚至五年以后,自己的辛苦積累的編程知識(shí)就沒用了。
其實(shí)并不是這樣,我們要把后端的需要掌握的技術(shù)分為三個(gè)層次來看。
?
計(jì)算機(jī)基礎(chǔ)
主要是操作系統(tǒng)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)和算法、計(jì)算機(jī)組成原理、計(jì)算機(jī)網(wǎng)絡(luò) 、編譯原理,這些知識(shí)幾十年都沒有變化,再過十年也不會(huì)變。
基礎(chǔ)穩(wěn)如泰山,對(duì)它們進(jìn)行投資永不虧本。
中間層和應(yīng)用層
這兩層隨著時(shí)代的變遷在劇烈地重構(gòu)。
但是一個(gè)人積累的知識(shí)10年后還剩下多少, 要看一個(gè)人入行的時(shí)間處于技術(shù)發(fā)展的哪個(gè)階段。
技術(shù)的發(fā)展也不是顛覆性的,而是漸進(jìn)性的,它不會(huì)一下子消失,只會(huì)邊緣化。
小李在90年代中后期入行,他之前花大精力學(xué)習(xí)了VB、PB、Delphi這些開發(fā)C/S應(yīng)用的軟件,準(zhǔn)備大顯身手,可是那個(gè)時(shí)候正是桌面時(shí)代向互聯(lián)網(wǎng)遷移的關(guān)鍵點(diǎn),十年之后他就會(huì)發(fā)現(xiàn)桌面C/S應(yīng)用被邊緣化了。
小張?jiān)诨ヂ?lián)網(wǎng)早期的時(shí)候入行,他陸陸續(xù)續(xù)接觸到了ASP,JSP,EJB,Websphere, Weblogic,Struts、jQuery、SOA、Ruby on Rails,這些技術(shù)十年,甚至二十年之后還在用,只不過只能在遺留系統(tǒng)來維護(hù)了。
小劉在移動(dòng)互聯(lián)網(wǎng)火爆的時(shí)候入行,他一上來接觸的可能就是nginx、 Redis、ElasticSearch 、Kafka、Docker、k8s之類的技術(shù),十年之后,只要沒有大到足以干掉移動(dòng)互聯(lián)網(wǎng)的技術(shù)變革,這些技術(shù)應(yīng)該還會(huì)在。
技術(shù)消失的原因
技術(shù)的消失和邊緣化主要有兩個(gè)原因:
1.不好用
EJB笨重繁瑣,被輕量級(jí)的Spring替代。
ASP,JSP寫網(wǎng)頁(yè),很容易把邏輯和顯示混到一起,把代碼搞得一團(tuán)糟,最后被前后端分離的技術(shù)替代。
Struts配置繁瑣,被SpringMVC,SpringBoot徹底淘汰
2. 不夠用
互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)的爆發(fā)式發(fā)展,對(duì)于高并發(fā),大流量,大數(shù)據(jù)產(chǎn)生了強(qiáng)烈的需求:
例如為了解決C10k,C100k問題,出現(xiàn)了epoll(2002)和nginx(2004)這樣的大殺器。
為了解決數(shù)據(jù)庫(kù)讀寫緩慢,出現(xiàn)了Redis(2009)、ElasticSearch(2010)。
為了解決數(shù)據(jù)庫(kù)單機(jī)性能不足的問題,出現(xiàn)了主從分離,數(shù)據(jù)復(fù)制......
為了單體應(yīng)用維護(hù)成本高、無法靈活擴(kuò)展,部署周期長(zhǎng)的問題,出現(xiàn)了微服務(wù)(2012),服務(wù)發(fā)現(xiàn),熔斷,負(fù)載均衡,注冊(cè)中心等相關(guān)技術(shù)。
為了解決分布式環(huán)境下高吞吐的消息訂閱,出現(xiàn)了Kafka(2011)。
為了解決環(huán)境不一致,應(yīng)用部署的問題,出現(xiàn)了docker(2013), k8s(2014)。
......
程序員所在的殘酷環(huán)境
理論上來說,很多技術(shù)的本質(zhì)并沒有變化,變化的只是形式。
無論是ASP、JSP、Struts、EAD4J、SpringMVC,RoR......都是Web編程,要解決的本質(zhì)問題都是URL和代碼的映射,數(shù)據(jù)的驗(yàn)證、轉(zhuǎn)換和綁定,Web安全....
無論是Hibernate、MyBatis、ActiveRecord,都屬于ORM的范疇。
Spring Cloud那些服務(wù)注冊(cè)和發(fā)現(xiàn),很明顯有著SOA時(shí)代的痕跡。
只要把原理搞定了,就像黑客帝國(guó)中的Neo看透Matrix一樣,可以在技術(shù)領(lǐng)域任意馳騁。
現(xiàn)在最大問題在于,互聯(lián)網(wǎng)發(fā)展太快,編程技術(shù)層出不窮,學(xué)不過來。
由于技術(shù)太多,每一項(xiàng)技術(shù)都需要花費(fèi)大量的精力去學(xué)習(xí),想要精通所有知識(shí)幾乎不可能。
有基礎(chǔ)的老程序員會(huì)學(xué)得更快,他們能迅速掌握、理解其中的技術(shù)原理,但是在技術(shù)的細(xì)節(jié),最佳實(shí)踐層面,老程序員和新程序員不容易拉開差距。
對(duì)于兼顧管理的技術(shù)人來說,更不可能深入這些技術(shù)的細(xì)枝末節(jié),能在理解原理后在關(guān)鍵點(diǎn)上和團(tuán)隊(duì)成員進(jìn)行討論就不錯(cuò)了。
如果公司主要浮在應(yīng)用層搞業(yè)務(wù)的定制開發(fā),就不需要去研究底層的操作系統(tǒng)、數(shù)據(jù)庫(kù)、編譯、計(jì)算機(jī)網(wǎng)絡(luò)、分布式系統(tǒng),也就不需要深厚的技術(shù)沉淀, 大家都是CRUD Boy,調(diào)包俠,面向Google/Stackoverlfow/百度編程......
那老程序員積累下來的經(jīng)驗(yàn)就沒什么用,相對(duì)新程序員的性價(jià)比就不高。
可惜,這樣的公司在國(guó)內(nèi)是大多數(shù),互聯(lián)網(wǎng)行業(yè)烈火烹油之時(shí)大家都好,一旦形勢(shì)變化,裁員就會(huì)落到薪水更高的老程序員身上。
在中國(guó)軟件業(yè),不是技術(shù)在淘汰人,是人在淘汰人。?