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