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