討論未來的Java開發(fā)者
這是較早前發(fā)表于java.net上的一篇博文,它討論了軟件開發(fā)者們,特別是Java開發(fā)者們,具有哪些優(yōu)勢,現(xiàn)在應(yīng)該為未來作哪些準備工作,希望對所有軟件開發(fā)者們能有所提示。(2011.03.13***更新)
Fabiane Nardon,Duke Award獲得者與Java Champion,Sven Reimers,Duke Award獲得者與NetBeans夢之隊成員,和我一起討論了未來的Java開發(fā)者,我已經(jīng)發(fā)表了這些談話。最近的談話是在JavaOne Brasil和JFokus。不可否認,我們不是特有遠見的人,今天我們所談到的"未來"僅憑經(jīng)驗罷了。雖然在談話過程中,我們作出了一些特別的預(yù)測,但我們真的不想試著去預(yù)言太遠的將來,也不愿爭論Java技術(shù)的未來。我們的想法只是看看開發(fā)者們,特別是使用Java的開發(fā)者們,現(xiàn)在能做些什么,以為他們自己的未來作些準備。此處,我想展示談話中的一些要點。
軟件開發(fā)者一直都有一個***的機會,這就是Malcolm Gladwell在他的書Outliers中所說的有意義的工作:工作是自我管理的。工作是復(fù)雜的,它會占據(jù)你的思想。另外,工作是努力與回報之間的聯(lián)系--付出了,自然有回報。
Gladwell所說的關(guān)于"有意義的工作"的一個要點就是花時間使某人成為大師。他表述道,根據(jù)對不同領(lǐng)域--音樂,計算機,法律,農(nóng)業(yè)--的研究,要在特定領(lǐng)域取得成功,差不多要花10000個小時在做有意義的工作上。Gladwell表示道,那些成功投入大量時間的人,以及那些成功的人,肯定都會投入大量的時間。Gladwell也討論到并沒有所謂的"天生"牛人,簡言之,傳統(tǒng)諺語"1%的靈感和99%的努力"不僅是真理,而且也是必然的。
為未來做準備意味著,現(xiàn)在投入足夠多的時間會使你在未來成為更優(yōu)秀和更重要的人?;谶@種思維,軟件開發(fā)給予我們一些有趣的好處,由于缺少更好的詞匯,我將其稱之為自由。一些是舊有的自由,在軟件剛開始開發(fā)時就存在了,另一些則是新近才出現(xiàn)的,幸運地是,我們恰逢其時,正好能從中受益。
想像之自由

如Dilber卡通畫所說:"試著使這樣一種觀念深入你的腦髓:軟件能夠做任何你設(shè)計讓它做的事情"。你的想像力是有限的。缺少約束使軟件的某些方面極為強大,也極其復(fù)雜。作為一種推論,你要深深領(lǐng)會的是軟件開發(fā)困難的,它不會因為出現(xiàn)一種新語言,新框架或新工具而變得簡單。在1975年,Edsger Dijkstra寫到"程序設(shè)計是數(shù)學(xué)應(yīng)用各分支中最困難的分支之一;拙劣的數(shù)學(xué)家***保持其純粹數(shù)學(xué)家的本色"。知道它到底有多難嗎?開發(fā)者們懷著激情來從事困難的工作,而他們自由的想像力則總是走在前面。
隨處運行之自由
Java并不是***個提出了"隨處運行"的思想,卻是***個普及了該思想的技術(shù)。這并不是一個僅有利于Java的技術(shù):自從在二十世紀九十業(yè)界將開發(fā)者從禁錮中解放出來,開發(fā)者認識到他們能夠編寫運行在多個環(huán)境上的軟件。今天,所有的開發(fā)技術(shù)會以這樣或那樣的方式嘗試著向你提供這種自由。當(dāng)然,也許不是全部...但不應(yīng)該是我們"不知道"的:不要把你自己綁定在單個技術(shù)提供者或平臺上。挑選那些使你有充足機會在多個環(huán)境上進行實驗的技術(shù),這是使你在現(xiàn)在就能自由地對在未來可能有價值的技術(shù)進行實驗的唯一方法。Java并不是***個提出了"隨處運行"的思想,卻是***個普及了該思想的技術(shù)。這并不是一個僅有利于Java的技術(shù):自從在二十世紀九十業(yè)界將開發(fā)者從禁錮中解放出來,開發(fā)者認識到他們能夠編寫運行在多個環(huán)境上的軟件。今天,所有的開發(fā)技術(shù)會以這樣或那樣的方式嘗試著向你提供這種自由。當(dāng)然,也許不是全部...但不應(yīng)該是我們"不知道"的:不要把你自己綁定在單個技術(shù)提供者或平臺上。挑選那些使你有充足機會在多個環(huán)境上進行實驗的技術(shù),這是使你在現(xiàn)在就能自由地對在未來可能有價值的技術(shù)進行實驗的唯一方法。
隨處運行還有另一個同樣重要的方面:一旦有許多程序能夠在不同的設(shè)備上運行,制造商就能更容易地創(chuàng)建新設(shè)備。我們在Android中看到了這種趨勢:通過放大開發(fā)者的才智和工具,并允許(至少是在一定程度上)開發(fā)者作用于不同的設(shè)備,Android創(chuàng)建了一個強大的且有眾多提供商參與的應(yīng)用程序市場。使用大多數(shù)面向多平臺的開發(fā)技術(shù),未來將會帶來更多的設(shè)備,機會將會為那些執(zhí)著于隨處運行之自由的開發(fā)者敞開。
學(xué)習(xí)與構(gòu)建之自由

開源是一個改變世界的現(xiàn)象,對于開發(fā)者而言也可能是最重要的事情了。向Bart學(xué)習(xí),重復(fù)說"開源有利于我,我將擁護它"一萬遍。就這么干,你行的。如果你計劃在軟件開發(fā)上花上大量時間,你就需要以軟件為業(yè),你會懷著激情與熱情在這一工作上。如果你想為未來作好準備,你需要能夠?qū)W習(xí)由其他人已創(chuàng)造好的軟件,與其他人一道創(chuàng)造軟件,還要讓其他人在你的工作基礎(chǔ)之上創(chuàng)造軟件。如果未來是在你所參與創(chuàng)造的事物的基礎(chǔ)之上而創(chuàng)造的,那么當(dāng)未來發(fā)生時,你就處在正確的位置了,你將創(chuàng)造未來。
對于公司,政府和用戶而言,開源還是許多其它的好處。但沒有人比開發(fā)者們受益更多。越快認識到這一點,你就能越快地知道自由地進行學(xué)習(xí)和創(chuàng)造的價值。
隨處(與任何人一塊兒)工作之自由

隨處工作是一種風(fēng)格,隨著時間的推移,這將變得更為普遍。這種風(fēng)格有很多內(nèi)涵,最明顯的是你能選擇一個好地方去生活,這一點是不能被忽視的。但還有另一面:如果你要在某件事情上花費大量時間,這件事情要是你喜歡的,而且還要有這樣的機會,那些最會做你所喜歡的事的人就在你身邊。在任何地方工作有兩種途徑,一是為你自己,另外是為了與你一塊兒工作的人。為了與最棒的人一塊兒工作,就不要管這些人在什么地方:沒別的,就因為這些人不會為了你而搬家的。所以,選好你想干的工作,你就能在任何地方與任何人做任何事情了,至少當(dāng)我們談?wù)撥浖_發(fā)時就能如此。這也意味著,你要與,在地理上,文化上,經(jīng)濟上,語言上,或諸如此類方面,和你都有巨大差距的同事一塊兒工作。要尊重這一現(xiàn)實。把你自己從工作地點的束縛中解放出來,追求在任何地方與任何人一塊兒工作的自由吧,它將開啟巨大的機遇。
來自硬件的自由
最近有一些關(guān)于3D打印的議論,討論該項技術(shù)將怎樣把制造過程轉(zhuǎn)換到頭腦中。想像一下,當(dāng)你要制造什么時,你無需操心建立一個工廠來制造這東西,你所需要的只是你的主意和設(shè)計能力。是不是很奇妙?肯定是了。但如果你是一名軟件開發(fā)員,這一想法現(xiàn)在就能成真。如果你有任何想法,你不必購買/訂購/安裝/構(gòu)建一個數(shù)據(jù)中心:你已擁有所需要全部設(shè)備,5分鐘就能搞定。大量的云服務(wù)提供商在幕后做著這些工作,你所要的只是一個好主意和代碼。噢,還記得先前我們提到的多平臺技術(shù)嗎?是的,在云計算里它也是有效的:確保你不會上某人的當(dāng),所以要明智地選擇與它打交道的方法。當(dāng)然,沒有這個問題也還有其它很多問題。測試,實現(xiàn),發(fā)展甚至于拋棄你的想法的自由已經(jīng)正在改變著軟件開發(fā)。如果你認為云計算與以前那種在某處使用一臺服務(wù)器進行同地協(xié)作的東西一樣的話,那你就應(yīng)該馬上去使用它。把你的思想從硬件約束中解放出來,這需要花時間,所以現(xiàn)在就開始吧。
你自己的自由...
如你所見,現(xiàn)在這些可能都成為了現(xiàn)實。但就現(xiàn)實來看,對大多數(shù)開發(fā)者來說,這些可能性并不能在指日間就成真的。但它可以是你自己的。那么,未來是什么呢?未來使越來越多的開發(fā)者們從這些自由中受益,意味著更多的想法能夠見到天日,能夠?qū)W習(xí)和創(chuàng)建更多的開源軟件,有更多的設(shè)備和供應(yīng)商運行開發(fā)出來的程序,更多來自于不同地方的人在一起工作。
是的,這也意味著更多的挑戰(zhàn):我們需要更多的程序能并行地運行在一個平臺上。如前所示,我們會從多核設(shè)備中受益。我們的框架需要支持云計算環(huán)境。還有,這些新的語言將表現(xiàn)得比今天已有的語言更好,我們也將從中受益。而且,將會有新的框架和抽象能使我們在這樣的環(huán)境中提高生產(chǎn)率。這些已不是新聞了:這是發(fā)展中的世界。記住,軟件開發(fā)是復(fù)雜的,無論應(yīng)用提供商們怎樣試圖去擺弄它,軟件開發(fā)都不可能變得更為簡單。
有大量來自于發(fā)展中國家,像BRIC(巴西,俄羅斯,印度,中國),的開發(fā)者,因為有開源軟件,他們會學(xué)到很多東西;因為有云計算,他們會有更多的機會;因為有遠程工作,他們會有更多的工作。軟件開發(fā)將會更有包容性,因為那些自由性會給予更多開發(fā)者以機會讓他們能在這方面花費更多的時間,并溶入其中。更多的開發(fā)者意味著更多的想法,更多的設(shè)備,更多的框架,更多的語言,更多的社區(qū),以及更多的開源軟件。軟件開發(fā)是工程學(xué)與藝術(shù)的混合體,有更多的藝術(shù)家只會是好事兒!
所以,簡言之:為了能在未來生存下去:學(xué)著在云環(huán)境中部署應(yīng)用,這會使你獨立于特定的供應(yīng)商和平臺。學(xué)著與來自于不同文化的人們一塊兒工作,加入到開源創(chuàng)新中,這樣的話,你會成為更好地開發(fā)者,也會變得更受重視。從開源軟件中,學(xué)習(xí)如何基于其他人創(chuàng)建的軟件去創(chuàng)建你自己的軟件,然后再發(fā)布一個簡單的解決方案,以便其他人能基于你的軟件去創(chuàng)建新的軟件??紤]到服務(wù)問題,云計算將提供這一功能,并且新出現(xiàn)的設(shè)備也能接受它。Neal Ford提到"通曉多種語言的程序員",因為"未來的應(yīng)用將利用多語言世界的特性。"成為其中的一員吧!
終于要談到,如果你是一名Java程序員又當(dāng)如何呢?那么,你就處于正確的道路上。你理解多平臺和標準的重要性。Java是開源軟件使用的最重要的語言之一,而且Java最重要的特性就是它本身是開源的,所以你會感輕松。Java也是云計算供應(yīng)商們的主要關(guān)注點,另外像Hadoop這樣的Java軟件構(gòu)成了許多云環(huán)境的主干。更不要說,所有重要的新潮語言都正談?wù)撝\行在JavaVM上,還要與已有的Java類庫和知識相集成。
***的問題就是你的激情:為未來作準備,選擇能讓你興奮的東西,考慮云計算,基于開源軟件去創(chuàng)建新的開源軟件,加入或吸引來自于不同地方的人們。保持你的獨立性。你就將干得很棒!