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