Java,20歲了,眼見(jiàn)Java——這個(gè)當(dāng)年剛剛找到自己成長(zhǎng)方向的懵懂少年,成長(zhǎng)為如今當(dāng)之無(wú)愧的業(yè)界王者。它已擁有世界上非常龐大的開(kāi)發(fā)者社區(qū),以及無(wú)可匹敵的生態(tài)系統(tǒng)。這也意味著,選用Java做任何應(yīng)用,都有著強(qiáng)有力的業(yè)界支撐,而無(wú)需擔(dān)心自己孤獨(dú)前行。
崩坍的“標(biāo)準(zhǔn)”
十幾年前,還是一個(gè)蠻荒年代,什么東西都鼓勵(lì)自己動(dòng)手豐衣足食,雖然開(kāi)源的苗頭已有星火,但大多數(shù)企業(yè)的態(tài)度是,非我族類,其心必異。
那也是Java企業(yè)級(jí)開(kāi)發(fā)大行其道的年代。背靠著Sun這棵大樹(shù)生長(zhǎng)起來(lái),這幾乎也意味著開(kāi)始的Java就是Sun銷(xiāo)售服務(wù)器的附贈(zèng)品。而有能力為這些服務(wù)器買(mǎi)單的幾乎都是些不差錢(qián)的大企業(yè)。Sun也瞅準(zhǔn)了這些金主,大力地推動(dòng)著“復(fù)雜”的企業(yè)級(jí)標(biāo)準(zhǔn)——J2EE。在那個(gè)年代,寫(xiě)Java程序不寫(xiě)EJB,不談幾句分布式事務(wù),你都不好意思說(shuō)自己是做Java程序的。幾乎主流的聲音都在大談企業(yè)開(kāi)發(fā)的復(fù)雜度,不斷拓展著想象的邊界,似乎每個(gè)Java程序員面對(duì)的都是世界上zui復(fù)雜的問(wèn)題。即便應(yīng)用只是一個(gè)簡(jiǎn)單的管理系統(tǒng),或是僅僅做消息轉(zhuǎn)發(fā),也需要一個(gè)價(jià)格昂貴的應(yīng)用服務(wù)器,編寫(xiě)只有部署到上面才能運(yùn)行的EJB,因?yàn)檫@是官方推薦的做法,只有這么做才正宗,只有這么干,才叫企業(yè)級(jí)。
有一段時(shí)間恰逢軟件開(kāi)發(fā)理念變革的年代,SpringFramework、Hibernate等如今還在影響Java程序員的框架剛剛發(fā)軔,企業(yè)級(jí)開(kāi)發(fā)“WithoutEJB”理念初出茅廬。倍受J2EE開(kāi)發(fā)模式折磨的程序員大量地討論著各種方法的優(yōu)劣。那時(shí),我也開(kāi)始帶隊(duì)做項(xiàng)目,于是,我便笨拙地踐行著這些新理念。我用的第一個(gè)SpringFramework的版本是0.8,我開(kāi)始用設(shè)計(jì)去隔離數(shù)據(jù)庫(kù)訪問(wèn),嘗試把EJB踢出我的項(xiàng)目,努力在本地完成所有的開(kāi)發(fā)測(cè)試,盡量少用應(yīng)用服務(wù)器。如今想來(lái),還真要感謝我當(dāng)年的項(xiàng)目經(jīng)理,那么信任我,讓我放手折騰。
幸運(yùn)的是,沒(méi)過(guò)多長(zhǎng)時(shí)間,大多數(shù)Java程序員跟上了先行者的步伐,于是,我們看到更多的人擁抱開(kāi)源理念,探索敏捷,SSH(Spring、Struts和Hibernate)成了業(yè)界的主流。所謂官方標(biāo)準(zhǔn)已經(jīng)失去了公信力,加之像JBoss、Tomcat這樣的開(kāi)源服務(wù)器的興起,那些靠賣(mài)應(yīng)用服務(wù)器當(dāng)年大賺的廠商開(kāi)始凋零,擁有WebLogic的BEA早早投靠了Oracle,IBM的WebSphere已成明日黃花,可惜的是官方的Sun,生了Java,卻掙不到Java的錢(qián),現(xiàn)在也成了Oracle的一部分。
“簡(jiǎn)單”的前行
一段大戲塵埃落定,歷史車(chē)輪卻不曾停下。今天的Java之所以是今天的模樣,因?yàn)楦嗟男滤汲比栽诓粩鄾_擊。
隨著互聯(lián)網(wǎng)的興起,Web開(kāi)發(fā)成了業(yè)界開(kāi)發(fā)的主流。原本Java程序員的日子是相當(dāng)不錯(cuò)的,開(kāi)發(fā)標(biāo)準(zhǔn)的逐漸建立,各種開(kāi)發(fā)框架也日漸完善,各種工具也逐漸豐富。但這時(shí)候,一個(gè)Rails的框架橫空出世,所有人都見(jiàn)識(shí)了如何在十五分鐘內(nèi)編寫(xiě)一個(gè)Blog。而十五分鐘都不夠Java程序員寫(xiě)好XML配置文件。新思潮的到來(lái),讓Java程序員開(kāi)始重新認(rèn)識(shí)Java開(kāi)發(fā)。我們確實(shí)已經(jīng)從J2EE的笨重走了出來(lái)。但有了新的對(duì)比目標(biāo),Java開(kāi)發(fā)依然是前路漫漫。Java程序員們繼續(xù)不斷努力探索,研究如何用好Java5帶給我們的語(yǔ)法轉(zhuǎn)變,研究怎樣用Java實(shí)現(xiàn)一些動(dòng)態(tài)語(yǔ)言的效果,研究提升Java程序的表達(dá)性。今天,我們有了更多的選擇,甚至在很多方面已經(jīng)徹底與XML說(shuō)再見(jiàn)了。選擇一個(gè)程序庫(kù),功能的實(shí)現(xiàn)只是其中一部分原因,而表達(dá)性也成了重要的參考因素。
當(dāng)開(kāi)發(fā)Web的人越來(lái)越多,有人突然站出來(lái)說(shuō),你們做得不對(duì),這個(gè)人就是HTTP協(xié)議的設(shè)計(jì)者之一RoyFielding。后來(lái)的事,我們都知道了,RESTful架構(gòu)開(kāi)始興起。與之相隨的是,當(dāng)年那個(gè)叫Ajax的技術(shù)被越來(lái)越多的人實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果。人們發(fā)現(xiàn),Ajax和RESTful服務(wù)簡(jiǎn)直是天作之合。后臺(tái)提供服務(wù),前臺(tái)提供展現(xiàn),一個(gè)新興職業(yè)隨之興起,它叫前端程序員。對(duì)那些Java程序員來(lái)說(shuō),這也是美事一樁,我們?cè)僖膊槐赜?/span>Freemarker、Velocity或是JSP編寫(xiě)那些四不像的HTML了,大家都可以集中精力做好自己擅長(zhǎng)的事情了。這種結(jié)合的另外一個(gè)妙處是,開(kāi)發(fā)人員越來(lái)越多地使用JSON作為前后端通信協(xié)議的承載,而被拋在歷史故紙堆的方式叫做WebService,又是一個(gè)大公司推進(jìn)的以XML做基礎(chǔ)的東西。要知道發(fā)送Ajax請(qǐng)求的基礎(chǔ)對(duì)象可是叫做“XMLHttpRequest”,影響之大可見(jiàn)一斑。
多核的興起讓程序員們紛紛探索起怎么編寫(xiě)并行代碼,研究來(lái)研究去,大家發(fā)現(xiàn)許多好的編程理念都來(lái)自一個(gè)叫函數(shù)式編程的編程范式。這個(gè)曾被務(wù)實(shí)的程序員束之高閣的東西又被人重拾起來(lái)。越研究,就越覺(jué)得函數(shù)式編程是個(gè)好東西,可惜Java沒(méi)有提供函數(shù)式編程的原生支持。于是,人們一邊喊著在Java語(yǔ)言里添加支持,一邊自己動(dòng)手模擬函數(shù)式編程,借鑒函數(shù)式編程理念。這兩件事后來(lái)都有了結(jié)果,我們今天有了Java8的Lambda,對(duì)于使用之前版本的Java的人來(lái)說(shuō),Guava也可以讓人部分享受函數(shù)式編程的樂(lè)趣。雖然不是完整的函數(shù)式編程支持,但對(duì)于大多數(shù)習(xí)慣使用傳統(tǒng)Java的人來(lái)說(shuō),這些支持已經(jīng)可以讓Java比從前優(yōu)雅一些了。
當(dāng)年采訪C++之父BjarneStroustrup,如何看待Java的簡(jiǎn)潔,他的回答是,時(shí)間不夠長(zhǎng)。大神之見(jiàn)果然長(zhǎng)遠(yuǎn)。與我初涉Java時(shí)相比,今天的Java可以說(shuō)已經(jīng)有了天翻地覆的變化,而且,我相信,這樣的變化還將繼續(xù)下去,Java8的威力尚未完全發(fā)揮,Java9已經(jīng)在路上了。令人欣慰的是,這種變化是讓開(kāi)發(fā)越來(lái)越簡(jiǎn)單,Java程序員的生活越來(lái)越輕松。
作者簡(jiǎn)介:鄭曄十多年工作經(jīng)驗(yàn)的程序員,Duke選擇獎(jiǎng)獲獎(jiǎng)作品Moco的創(chuàng)始人,前ThoughtWorks首席咨詢師,創(chuàng)業(yè)大潮新鮮人,目前投身于智能硬件領(lǐng)域,致力于簡(jiǎn)化智能硬件的開(kāi)發(fā)方式。他多次在各種媒體上發(fā)表文章,在各種技術(shù)大會(huì)上做過(guò)演講,分享自己對(duì)于軟件開(kāi)發(fā)的理解,特別愿意吸收新的知識(shí),也愿意與人暢聊軟件開(kāi)發(fā)。
更多Java培訓(xùn),Java視頻,Java教程盡在動(dòng)力節(jié)點(diǎn)Java培訓(xùn),關(guān)注動(dòng)力節(jié)點(diǎn)官方微信,獲得一手Java全新知識(shí)。