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