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