今天整理了一下1970年以來技術(shù)的發(fā)展趨勢(shì):
編程范型 主流網(wǎng)絡(luò)和協(xié)議 主流架構(gòu)
1970s
結(jié)構(gòu)化編程
APARNET
分組交換
NCP、X.25
主機(jī)---終端
層次數(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>
面向組件
撥號(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ù)架構(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年代......
下面展開解釋一下:
1970年代
早期的編程語言依賴于GOTO語句,用于控制程序的執(zhí)行流程,隨著程序規(guī)模的擴(kuò)大,過多的GOTO語句會(huì)導(dǎo)致程序難以理解和維護(hù),形成所謂的“面條式代碼”。
60年代末,出現(xiàn)了軟件危機(jī),結(jié)構(gòu)化編程被認(rèn)為是解決方案之一。
結(jié)構(gòu)化編程通過明確的控制流、清晰的程序結(jié)構(gòu)和模塊化設(shè)計(jì),使得軟件開發(fā)變得更加可維護(hù)和可靠。
Edsger Dijkstra的理論和對(duì)GOTO的批評(píng)是結(jié)構(gòu)化編程興起的關(guān)鍵因素,結(jié)合Pascal、C等結(jié)構(gòu)化編程語言的普及,結(jié)構(gòu)化編程逐漸成為編寫高質(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ā)明出來,但是還沒有得到廣泛應(yīng)用。
應(yīng)用程序主要安裝在大型機(jī)上,用戶可以通過終端進(jìn)行遠(yuǎn)程訪問,使用的主要是層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫。
1980年代
企業(yè)和大學(xué)開始使用局域網(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)上還沒有Web,流行的應(yīng)用是電子郵件、FTP、Usenet、Gopher等網(wǎng)絡(luò)應(yīng)用。
以C++,Smalltalk為代表的面向?qū)ο缶幊涕_始興起,強(qiáng)調(diào)通過類對(duì)問題進(jìn)行組織和抽象,封裝、繼承、多態(tài)的概念開始為大眾接受。
客戶端-服務(wù)器架構(gòu)開始興起,軟件都裝在臺(tái)式機(jī)(客戶端)上,然后通過局域網(wǎng)連接到中心的數(shù)據(jù)庫(服務(wù)器)執(zhí)行數(shù)據(jù)操作。
1990年代
90年代早期,大家主要用局域網(wǎng),比如非常流行的Novell,是很多大學(xué)局域網(wǎng)的標(biāo)配。
拖拽式快速開發(fā)工具(如Delphi、VB等)大行其道,成為開發(fā)桌面軟件和C/S軟件的不二之選。
用Sybase的PowerBuilder開發(fā)MIS在國內(nèi)也非常流行,它的DataWindow提供了一個(gè)可視化的SQL繪制器,支持外連接、聯(lián)合和子查詢操作,非常受歡迎。
到了中后期,國內(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)用開始出現(xiàn),但是這個(gè)時(shí)候的應(yīng)用都非常簡(jiǎn)單,一個(gè)公司和單位能有一個(gè)靜態(tài)頁面構(gòu)成的網(wǎng)站就不錯(cuò)了。
以CGI、PHP、ASP為代表的技術(shù)開始讓網(wǎng)頁可以和用戶進(jìn)行交互,一些應(yīng)用程序從C/S架構(gòu)開始往B/S架構(gòu)遷移。
2000年代
ASDL進(jì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)來實(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ì)算,給程序員帶來了無窮多的機(jī)會(huì)。
這個(gè)時(shí)代,人手一部手機(jī),從3G到4G、5G,移動(dòng)網(wǎng)絡(luò)和WIFI無處不在,HTTP協(xié)議已經(jīng)不夠用了,MQTT、WebSocket、WebRTC、QUIC、gRPC等針對(duì)不同場(chǎng)景提出了不同的解決方案。
程序員的職業(yè)也開始細(xì)化:手機(jī)端、前端、后端、大數(shù)據(jù)、算法、運(yùn)維,可謂百花齊放。
前端程序員操作著各種JS框架實(shí)現(xiàn)頁面展示和操作流程控制,調(diào)用后端的服務(wù)來實(shí)現(xiàn)業(yè)務(wù)。
后端程序員則把應(yīng)用拆成了微服務(wù),運(yùn)行在云端的Docker容器中,用k8s管理起來。
由于移動(dòng)互聯(lián)網(wǎng)帶來的海量用戶和海量請(qǐng)求,數(shù)據(jù)也在瘋狂累積,大數(shù)據(jù)程序員則忙著用Hadoop、Spark、Hive、Kafka、Flink等工具對(duì)數(shù)據(jù)進(jìn)行分析,希望從中發(fā)現(xiàn)一些規(guī)律。
DevOps開始普及,自動(dòng)化工具使得開發(fā)和部署變得更加快速高效,縮短了從開發(fā)到生產(chǎn)環(huán)境的時(shí)間,同時(shí)提升了軟件的穩(wěn)定性和質(zhì)量。
Java、JavaScript、Python、Go等語言不但支持面向?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)域依然還處于輔助階段,給它明確的需求,它能幫程序員快速生成代碼,但是還無法獨(dú)立地從需求開始,設(shè)計(jì),編碼,測(cè)試,部署,這可能得等到通用人工智能的突破了。
程序員的35歲危機(jī)問題
從大型機(jī)到局域網(wǎng),從局域網(wǎng)到互聯(lián)網(wǎng),從互聯(lián)網(wǎng)到移動(dòng)互聯(lián)網(wǎng)。
技術(shù)時(shí)代的每一次變化都會(huì)引發(fā)通信協(xié)議、編程語言、軟件架構(gòu)發(fā)生巨變,這種變化基本上每隔10年左右就來一波。
這種劇烈變化的奇觀可能在全行業(yè)中都是獨(dú)一份,程序員也就沒有辦法像律師、醫(yī)生等行業(yè)可以積累幾十年的領(lǐng)域知識(shí),成為行業(yè)專家。
一個(gè)大學(xué)生畢業(yè)時(shí),二十出頭,工作10來年,出現(xiàn)了新的技術(shù)浪潮,可不就遇到危機(jī)了嗎?
其實(shí)這么說也不完全對(duì),因?yàn)椋?/p>
1. 技術(shù)的發(fā)展不是突變,而是漸變
不是說十年一到,老技術(shù)就一刀切,不再用了。
像Servlet/JSP這樣的技術(shù),市面上仍然很多老舊的系統(tǒng)是用它們開發(fā)的。60多歲的COBOL,依然支持全球43%的銀行,處理者每天3萬億美元的交易。
老技術(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)卷,被資本家無情壓榨
這個(gè)才是主要原因,國內(nèi)公司在基礎(chǔ)軟件上發(fā)展很差,沒法養(yǎng)活大量的深耕操作系統(tǒng)、數(shù)據(jù)庫、編譯器、中間件等領(lǐng)域的程序員,大部分公司都是實(shí)現(xiàn)業(yè)務(wù),在應(yīng)用層瘋狂內(nèi)卷,拿著國外開源的框架/類庫開發(fā)一下就行了,不需要在某個(gè)領(lǐng)域積累深厚的專家級(jí)程序員。
既然付出的主要是人力成本,資本家選擇的肯定是便宜的、年輕的,更能加班的,年紀(jì)大的就會(huì)被無情拋棄。
希望再過10年,下一代程序員能過得更好一點(diǎn)兒吧!
全文完,覺得不錯(cuò)的話點(diǎn)個(gè)贊或者在看吧!
近期爆文:
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.