1970年以來技術(shù)的發(fā)展趨勢,怪不得程序員35歲就被裁......
今天整理了一下1970年以來技術(shù)的發(fā)展趨勢:
編程范型 | 主流網(wǎng)絡(luò)和協(xié)議 | 主流架構(gòu) | |
1970s | 結(jié)構(gòu)化編程 | APARNET 分組交換 NCP、X.25 | 主機---終端 層次數(shù)據(jù)庫,網(wǎng)狀數(shù)據(jù)庫 |
1980s | 面向?qū)ο?/p> | 局域網(wǎng) Usenet TCP/IP Socket FTP SMTP/POP3 | 客戶端---服務(wù)器架構(gòu) 關(guān)系數(shù)據(jù)庫 |
1990s | 面向?qū)ο?/p> 面向組件 | 撥號網(wǎng)絡(luò) 互聯(lián)網(wǎng) Web 1.0 HTTP RPC | C/S 向 B/S 遷移 |
2000s | 面向?qū)ο?/p> 面向服務(wù) | 互聯(lián)網(wǎng),Web 2.0 ,WebService, P2P、HTTP、SOAP、XML-RPC | B/S架構(gòu),面向服務(wù)、三層架構(gòu)、MVC、EAI、ESB、SOA、REST |
2010s | 多泛型結(jié)合 | 移動網(wǎng)絡(luò),物聯(lián)網(wǎng) 3G、4G、5G、Wifi MQTT、WebSocket、WebRTC | 微服務(wù)、EDA、無服務(wù)架構(gòu)、云原生、服務(wù)網(wǎng)格、分布式架構(gòu)、并行、容器化、云計算,DevOps |
2020s | ?? | ?? | ?? |
這個表格年代的方式列出了技術(shù)的變化,不一定100%準確,例如以10年為一個單位有些武斷,Web Service實際上跨越了90年代和2000年代,C/S應用跨越了80年代和90年代......
下面展開解釋一下:
1970年代
早期的編程語言依賴于GOTO語句,用于控制程序的執(zhí)行流程,隨著程序規(guī)模的擴大,過多的GOTO語句會導致程序難以理解和維護,形成所謂的“面條式代碼”。
60年代末,出現(xiàn)了軟件危機,結(jié)構(gòu)化編程被認為是解決方案之一。
圖片
結(jié)構(gòu)化編程通過明確的控制流、清晰的程序結(jié)構(gòu)和模塊化設(shè)計,使得軟件開發(fā)變得更加可維護和可靠。
Edsger Dijkstra的理論和對GOTO的批評是結(jié)構(gòu)化編程興起的關(guān)鍵因素,結(jié)合Pascal、C等結(jié)構(gòu)化編程語言的普及,結(jié)構(gòu)化編程逐漸成為編寫高質(zhì)量軟件的標準。
圖片
這個時代的網(wǎng)絡(luò)還不發(fā)達,ARPANET繼續(xù)發(fā)展,成為現(xiàn)代互聯(lián)網(wǎng)的基礎(chǔ),雖然以太網(wǎng)已經(jīng)被發(fā)明出來,但是還沒有得到廣泛應用。
應用程序主要安裝在大型機上,用戶可以通過終端進行遠程訪問,使用的主要是層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫。
1980年代
企業(yè)和大學開始使用局域網(wǎng),全球互聯(lián)網(wǎng)雛形已經(jīng)形成。
1983年,TCP/IP取代NCP成為ARPANET的主要協(xié)議,并逐漸成為互聯(lián)網(wǎng)的標準協(xié)議。
圖片
此時的互聯(lián)網(wǎng)上還沒有Web,流行的應用是電子郵件、FTP、Usenet、Gopher等網(wǎng)絡(luò)應用。
圖片
以C++,Smalltalk為代表的面向?qū)ο缶幊涕_始興起,強調(diào)通過類對問題進行組織和抽象,封裝、繼承、多態(tài)的概念開始為大眾接受。
圖片
客戶端-服務(wù)器架構(gòu)開始興起,軟件都裝在臺式機(客戶端)上,然后通過局域網(wǎng)連接到中心的數(shù)據(jù)庫(服務(wù)器)執(zhí)行數(shù)據(jù)操作。
圖片
1990年代
90年代早期,大家主要用局域網(wǎng),比如非常流行的Novell,是很多大學局域網(wǎng)的標配。
拖拽式快速開發(fā)工具(如Delphi、VB等)大行其道,成為開發(fā)桌面軟件和C/S軟件的不二之選。
圖片
用Sybase的PowerBuilder開發(fā)MIS在國內(nèi)也非常流行,它的DataWindow提供了一個可視化的SQL繪制器,支持外連接、聯(lián)合和子查詢操作,非常受歡迎。
圖片
到了中后期,國內(nèi)才可以撥號上網(wǎng),連上了互聯(lián)網(wǎng)。
1995年,Java的出現(xiàn)給面向?qū)ο笥旨恿艘话鸦?,面向?qū)ο蟪蔀橹髁鳌?/p>
圖片
在Windows平臺上,微軟推出了COM和COM+,主推面向組件編程
圖片
90年代后期,Web應用開始出現(xiàn),但是這個時候的應用都非常簡單,一個公司和單位能有一個靜態(tài)頁面構(gòu)成的網(wǎng)站就不錯了。
以CGI、PHP、ASP為代表的技術(shù)開始讓網(wǎng)頁可以和用戶進行交互,一些應用程序從C/S架構(gòu)開始往B/S架構(gòu)遷移。
2000年代
ASDL進入千家萬戶,雖然網(wǎng)速只有幾M,但相比90年代的幾十K的撥號網(wǎng)絡(luò),已經(jīng)快多了。
B/S架構(gòu)正式占據(jù)主流,中小網(wǎng)站特別喜歡LAMP:
圖片
2000年代早期,Sun推出的J2EE發(fā)展到頂峰,應用服務(wù)器(Weblogic、WebSphere)大行其道,不管應用是大是小,跑在應用服務(wù)器中才顯得高大上。
在這個架構(gòu)中,企業(yè)的業(yè)務(wù)要封裝成EJB,放到應用服務(wù)器中運行,應用服務(wù)器提供了分布式、安全性、事物等功能。
圖片
理念是挺好的,實際上卻跑偏了,J2EE笨重繁瑣,到后期被SSH,Tomcat等輕量級的框架和應用服務(wù)器替代。
面向?qū)ο?,設(shè)計模式更是火得不得了,Java、設(shè)計模式、XML成了“絕配”。
面對80年代,90年代建立的各種遺留系統(tǒng),巨頭們提出了面向服務(wù)的架構(gòu)(SOA)來實現(xiàn)系統(tǒng)的集成,ESB、SOAP、WSDL、UDDI、XML-RPC等新概念層出不窮。
圖片
2010年代
程序員的黃金時代。
互聯(lián)網(wǎng)的盛宴還未結(jié)束,移動互聯(lián)網(wǎng)又驟然爆發(fā),再加上大數(shù)據(jù)、云計算,給程序員帶來了無窮多的機會。
這個時代,人手一部手機,從3G到4G、5G,移動網(wǎng)絡(luò)和WIFI無處不在,HTTP協(xié)議已經(jīng)不夠用了,MQTT、WebSocket、WebRTC、QUIC、gRPC等針對不同場景提出了不同的解決方案。
程序員的職業(yè)也開始細化:手機端、前端、后端、大數(shù)據(jù)、算法、運維,可謂百花齊放。
前端程序員操作著各種JS框架實現(xiàn)頁面展示和操作流程控制,調(diào)用后端的服務(wù)來實現(xiàn)業(yè)務(wù)。
后端程序員則把應用拆成了微服務(wù),運行在云端的Docker容器中,用k8s管理起來。
圖片
由于移動互聯(lián)網(wǎng)帶來的海量用戶和海量請求,數(shù)據(jù)也在瘋狂累積,大數(shù)據(jù)程序員則忙著用Hadoop、Spark、Hive、Kafka、Flink等工具對數(shù)據(jù)進行分析,希望從中發(fā)現(xiàn)一些規(guī)律。
DevOps開始普及,自動化工具使得開發(fā)和部署變得更加快速高效,縮短了從開發(fā)到生產(chǎn)環(huán)境的時間,同時提升了軟件的穩(wěn)定性和質(zhì)量。
Java、JavaScript、Python、Go等語言不但支持面向?qū)ο螅€支持函數(shù)式編程。為了更好地處理數(shù)據(jù)流,出現(xiàn)了響應式編程。
2020年代
我們現(xiàn)在還處于2020年代的前期,用的網(wǎng)絡(luò)、技術(shù)、軟件架構(gòu)和2010年代后期差不多,唯一一個出現(xiàn)巨大變化的就是以ChatGPT為代表的人工智能了。
但人工智能在編程領(lǐng)域依然還處于輔助階段,給它明確的需求,它能幫程序員快速生成代碼,但是還無法獨立地從需求開始,設(shè)計,編碼,測試,部署,這可能得等到通用人工智能的突破了。
程序員的35歲危機問題
從大型機到局域網(wǎng),從局域網(wǎng)到互聯(lián)網(wǎng),從互聯(lián)網(wǎng)到移動互聯(lián)網(wǎng)。
技術(shù)時代的每一次變化都會引發(fā)通信協(xié)議、編程語言、軟件架構(gòu)發(fā)生巨變,這種變化基本上每隔10年左右就來一波。
這種劇烈變化的奇觀可能在全行業(yè)中都是獨一份,程序員也就沒有辦法像律師、醫(yī)生等行業(yè)可以積累幾十年的領(lǐng)域知識,成為行業(yè)專家。
一個大學生畢業(yè)時,二十出頭,工作10來年,出現(xiàn)了新的技術(shù)浪潮,可不就遇到危機了嗎?
其實這么說也不完全對,因為:
1. 技術(shù)的發(fā)展不是突變,而是漸變
不是說十年一到,老技術(shù)就一刀切,不再用了。
像Servlet/JSP這樣的技術(shù),市面上仍然很多老舊的系統(tǒng)是用它們開發(fā)的。60多歲的COBOL,依然支持全球43%的銀行,處理者每天3萬億美元的交易。
老技術(shù)依然有市場,但是大多處于維護狀態(tài),不需要那么多的人力了。
2. 程序員會持續(xù)學習的
像70后80后,經(jīng)歷了局域網(wǎng)時代,互聯(lián)網(wǎng)時代,移動互聯(lián)網(wǎng)時代,有很多人不愿意走出舒適圈,跟不上了,但也有很多人也在不斷學習新的技術(shù),新的架構(gòu),與時俱進。
這些人可能當上了架構(gòu)師、技術(shù)經(jīng)理,或者在某個基礎(chǔ)技術(shù)領(lǐng)域深耕多年,成為專家,繼續(xù)保持競爭力。
3. 在應用層瘋狂內(nèi)卷,被資本家無情壓榨
這個才是主要原因,國內(nèi)公司在基礎(chǔ)軟件上發(fā)展很差,沒法養(yǎng)活大量的深耕操作系統(tǒng)、數(shù)據(jù)庫、編譯器、中間件等領(lǐng)域的程序員,大部分公司都是實現(xiàn)業(yè)務(wù),在應用層瘋狂內(nèi)卷,拿著國外開源的框架/類庫開發(fā)一下就行了,不需要在某個領(lǐng)域積累深厚的專家級程序員。
既然付出的主要是人力成本,資本家選擇的肯定是便宜的、年輕的,更能加班的,年紀大的就會被無情拋棄。
希望再過10年,下一代程序員能過得更好一點兒吧!