前言:本文是2195年“程序員考古年會”的壓軸發言稿,起因是三年前考古人員無意間發現了幾十臺廢棄的電腦,將部分電腦恢復以后,驚喜地發現了一門早已失傳的編程語言:Java,從此掀起了一股Java考古熱潮。
01
起源
Java是一家叫做Sun的公司在1996年發明的,考古界曾一度認為 Sun 是一種天體崇拜術語。
實際上,Sun的意思是Stanford University Network,上古公司喜歡使用高校名縮寫作為品牌背書,這種策略在當時被稱為“名校營銷”。
考古界認為,Sun公司是懷著改變世界的野心和對C++的怨念,推出了Java。
因為Sun承諾的是一種理想主義語言:
Write once, Run Anywhere。
沒有指針,自動內存管理。
純潔的面向對象。
Java 提出了“虛擬機”概念,JVM 成為它跨平臺的魔法引擎。
考古人員發現,那時的網頁只是靜態的文字與表格,而 Java Applet 卻在瀏覽器里跑出旋轉的立方體、滑動的菜單甚至小游戲,令當年的程序員們興奮不已。
人們開始相信:Java 就是互聯網的未來。
當然,也有一些可疑的早期跡象:
- 一個簡單的Hello World 就要寫 5 行;
- 用戶必須等待一分鐘下載Applet代碼,啟動JVM
- Applet 經常崩。
據2002年《程序員吐槽年鑒》統計,每10個Applet用戶中,有7人曾因JVM崩潰而情緒波動,3人因此懷疑人生,1人因此轉學去學Flash。
為了彰顯對Java的重視,Sun居然把自己在納斯達克的股票交易代碼都改成了JAVA。
這是科技公司第一次為一門語言押上身家性命,相比之下,比Sun厲害得多的微軟還沒有把股票代碼改成C#。
JAVA是納斯達克史上唯一為一門語言命名的股票代碼,后被認為是“信仰式綁定商業”的經典失敗案例,后世常把它和元宇宙(Meta)概念炒作并稱“IT歷史雙蠢”。
02
上位
1998年,Java推出了J2EE,一下子讓它找到了一大片未經開墾的處女地:企業Web應用開發。
這些企業應用都跑在服務器端,那里有強勁的CPU,幾乎無限的內存,就缺乏一個嚴謹的、容易編寫的、健壯的、適合大規模團隊協作的編程語言。
Java的弱點沒有了,優點被無限放大。
J2EE橫掃甲方IT部門,一排排的Java程序員們正襟危坐,寫接口、實現類、XML 配置、Session Bean、DAO、VO、DTO、JSP、Servlet.......
現在很難理解這些術語的具體含義,考古人員猜測它們是開發企業應用的關鍵技術。
一整套“架構嚴謹”的流程把它們打包,運行在昂貴的應用服務器當中。
Java 與 XML 被稱為“企業鴛鴦”:一個專注冗長,一個專注啰嗦,卻能完美協作,非常神奇。
考古人員還發現了一件更神奇的事情,很多公司喜歡在面試的時候問單例模式的7種寫法,如果寫不出來,面試官就會終止面試,認為此人不合格。
考古學家對“模式”很感興趣,經過認真的研究,竟然發掘出了21種模式?。ǖ莻髡f有23種)。
《程序員考古》雜志上發表的21篇高質量論文,深入講述了每種模式的起源,適用情況,具體用法,大家一致的結論是,設計模式簡直就是為Java那復雜冗長的語法量身定制,讓現代人噓唏不已。
可惜的就是,考古人員只研究出了3種單例模式的寫法,剩下的寫法永遠不知道了。
《設計模式:可復用面向對象軟件的基礎》被奉為神書。部分考古人員甚至將其歸入“Java程序員宗教經典書”之一,其他兩本為《Java 編程思想》《Effective Java》。
200年前的軟件世界競爭非常激烈,IBM、Oracle、Amazon、Google等計算機巨頭在Java上史無前例地聯合起來,把矛頭指向邪惡獨裁者:微軟。
有了Java,巨頭們就可以賣性能更強的服務器,賣各種中間件,賣各種解決方案,賣各種咨詢服務......
奇怪的是,發明Java的Sun沒有通過Java賺到多少錢, 錢都被IBM和Oracle這兩個大佬給賺走了,賺得盆滿缽滿。
相比于微軟陣營Visual Studio一家獨大,Java IDE也呈現出一片欣欣向榮的景象,JCreator、JDeveloper、NetBean、JBuilder、IDEA、Eclipse百花齊放,沒人知道為什么需要這么多Java IDE。
考古學家還發現,2000年初,開源框架也如雨后春筍般涌現:Spring解構EJB,Struts主宰MVC,Hibernate統一ORM。
Controller、Service、DAO,Java程序員把一個個簡單的CRUD玩出了豐富的花樣,讓考古人員百思不得其解。
2004年,Java發布了5.0版本,鑒于之前的版本號都是1.1,1.2,1.3,1.4,現在突然跳到5.0 ,考古人員認為這是一個重要的里程碑。
Java 5.0帶來了讓無數程序員期待的范型功能,雖然“擦除式”范型被C++嘲笑,復雜的通配符也讓程序員頭暈,但Java程序員總體表示滿意,并且開始嘲笑那些不支持范型的編程語言(比如早期的Go)。
Java 5.0還帶來了注解的功能,可以作為元數據對程序進行“注釋”,Spring如獲至寶,XML從此失寵,注解開始滿天飛。
Java被大量大學選為“第一門編程語言”,這在某種程度上,是個悲劇,它讓 19 歲的學生以為,世界是由接口、抽象類、getter/setter 和 19 層繼承組成的。
特別值得一提的是,培訓班大量對外輸出半路出家的Java程序員,最快的3個月就能輸出一批,足以說明Java編程市場的需求有多么旺盛。
考古界一直在爭論“碼農”這次詞的實際含義,火星大學著名的W教授認為這個詞是對程序員的侮辱,因為編程在200年前是一種需要極高腦力的智力活動。 而月球大學的Z研究員則表示了完全不同的意見,他說程序員之所以自稱碼農,就是因為編程本質上是一種體力勞動。 兩派爭執不休,至今沒有定論。
03
巔峰
2010年代,由于iPhone和Android手機的出現,人類進入了移動互聯網時代。
雖然這兩種手機現在看起來極其原始,非常難用,但引爆了一個全新的市場:手機App開發。
Java的運氣相當不錯,Android 選擇了 Java 作為主要開發語言,準確來說,是Java 語法 + Dalvik 虛擬機,但無論如何都給Java打了一針強心針。
那幾年,Java 成為最熱門的編程語言,不只是因為企業用它,而是因為數以百萬計的年輕人為了寫一個天氣 App 而學習Java。
與此同時,后端世界也發生了天翻地覆的變化。
Hadoop 出現了。
考古發掘顯示,那時大數據興起,人類開始用成百上千臺服務器處理微博、商品推薦、廣告點擊、IoT 傳感器等億級規模的數據流。
這些系統需要分布式存儲、并行計算、高可用架構,而 Java——這門不輕盈但穩如老狗的語言——恰好擁有一切:線程池、GC、JVM、跨平臺。
于是,Hadoop、Spark、Kafka、Flink……一個個核心組件都跑在 JVM 上,有的用 Java,有的用 Scala,但都得感謝 JVM。
大數據工程師們一邊抱怨 Java 的冗長,一邊往服務器上丟 Jar 包。
Java在移動互聯網時代走向了巔峰。
2014年,Java 8.0 發布,開始支持Lambda表達式、函數接口、Stream API,從此那些嘲笑Java只會面向對象的人閉嘴了。
Java 8 廣受好評,深受大家喜愛,10年以后,Java 23都推出了,還有無數人堅決守著Java 8不升級。
考古界發現程序員經常在說“996”這樣的詞語,這再次引發了劇烈的爭論。 Z研究員認為996是好事情,因為商界大佬認為996是福報,何況很多行業比996還要厲害; W教授認為這是對程序員身心的巨大摧殘,要不然程序員怎么會搞996.icu .....
04
轉折
進入微服務和容器編排的新時代,開發者開始追求一種信仰:啟動快、內存小、實例多、伸縮快。
Kubernetes 統治了云端,Docker 成為新郵差,而 Java——這個曾在企業服務器里穩如老牛的存在——顯得有些不合群:
啟動一個 Spring Boot 微服務需要 15 秒;
它的鏡像大小超過 300MB
每次部署,都像是啟動一臺 JVM 小型核電站;
在 Go 寫的服務已經開始彈性擴容第 3 輪時,Java 還在“Initializing ApplicationContext”。
此句在企業日志中極為常見,考古人員最早以為是某種咒語,后經反復破解,確認其含義為“還沒準備好,你再等等”。
人們開始嘗試 Quarkus、Micronaut、GraalVM——希望通過 Ahead-of-Time 編譯拯救這只老牛,但是在和Go、Node.js、Rust 競爭時已經力不從心。
年輕人正在學 Python 寫數據處理、用 JavaScript 做前端、用 Go 寫微服務。
Java 雖未衰亡,但已老態龍鐘。
2023年,轉折點到來了,一個叫做ChatGPT的弱智AI的出現,徹底敲響了Java的喪鐘。
AI編程助手全面普及,軟件開發正式進入“提示驅動開發”時代。
無論是資深程序員,還是新手程序員,都開始用提示詞驅動AI來輸出代碼。
面對AI生成的一坨坨代碼,Java那冗長的語法,強結構化的特性,即使實現一個簡單功能就得需要寫出完整得類,方法簽名,類型聲明、異常處理......
程序員不喜歡,因為無論閱讀還是修改,都非常麻煩。
AI似乎也不喜歡Java,似乎生成代碼的難度和token的成本都很高。
同樣的任務,AI 更愿意用 Python、Go 、TypeScript等語言實現。
但實際上,無論任何編程語言,都和提示驅動開發格格不入,因為提示詞還是自然語言,編程語言再怎么高級,它都是計算機語言,兩者之間存在的天然鴻溝,讓程序員在進行提示驅動開發的時候非常別扭。
因為簡單的任務還行,對于復雜的任務,提示詞很難準確到位,生成的代碼不是這里有問題,就是那里有問題,得反復修改,改著改著AI就懵了,最后,程序員不得不自己親自動手去改那一坨坨代碼。
2030年,一個叫CloseAI的公司推出了X語言。
這是一門天生為提示詞驅動而生的語言:結構靈活、容錯能力強、語義抽象極佳。
它總能非常精確地反映程序員的意圖,簡潔高效地實現,從而迅速風靡全世界。
越來越多的公司將核心系統重寫為X語言,或者部署在兼容X的服務平臺。
相比X語言,Java就像當年的匯編一樣,沒有人愿意使用了。
用Java編寫的那些至關重要的系統都成為了遺留系統。
考古發現,這一階段程序員最常說的幾個詞就是:35歲,裁員。 考古界無法解釋為什么程序員正處于年富力強的時候,就被公司拋棄了。 企業招聘的時候也要求35歲以下,讓大齡程序員不得不考慮轉行。 如果從25歲碩士畢業算起,程序員的職業生涯只有區區10年! 真是匪夷所思!
05
尾聲
2033 年,Oracle 宣布終止對 JDK 的 LTS 版本支持。
2035 年,最后一所大學宣布將“編程導論”從 Java 改為 X語言。
考古界發現了最后一個詢問Java情況的帖子,它的內容是:
“Java 死了嗎?”
無人回復。
最后,考古委員會給Java寫了一個墓志銘:
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
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.