摘要:問對于程序員修煉之道你有下一步的計劃嗎程序員修煉之道這個項目很好,寫作的過程也很愉快。而最上層的程序員則是時刻對技藝以及技術(shù)的本質(zhì)著迷。這也是的一大優(yōu)勢。
非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/127453
Ben Evans是jClarity的聯(lián)合創(chuàng)始人。其公司致力于開發(fā)可以為開發(fā)和運維團隊提供幫助的性能工具和服務(wù)。他是LJC(倫敦Java用戶組)的組織者之一,也是JCP(Java社區(qū)過程)執(zhí)行委員會的成員之一,幫助定義Java生態(tài)系統(tǒng)中的一些標(biāo)準(zhǔn)。他還是“Java Champion”榮譽得主。他曾與人合著了《Java程序員修煉之道》(The Well-Grounded Java Developer)和《Java權(quán)威技術(shù)手冊(第6版)》(Java in a Nutshell)。他曾就Java平臺、性能、并發(fā)和相關(guān)主題發(fā)表過多次演講。
問:《Java權(quán)威技術(shù)手冊》(Java in a Nutshell)是一部經(jīng)典,它的上一版(第5版)長達1200頁,而在十年后即將在中國出版的第6版卻只有400頁,這兩版之間到底有什么樣的變化?對于Java來說,這十年意味著什么?
第1版《Java權(quán)威技術(shù)手冊》是在Java剛剛變得流行之后很快出版的,那個時候人們對于Java充滿了想象。在接下來的五個版本里,這本書越變越大,內(nèi)容不斷延續(xù)。所以每一本的重點都有些著眼于歷史,因為幾個版本之間有著演進的關(guān)系。這是由幾個因素造成的結(jié)果,有一部分原因純粹是因為這樣比較好寫,你只要知道這個版本和上一個版本相比增減了什么就可以了。但是更重要的是,在早些時候,在大部分企業(yè)中,Java的生命周期很長,所以你經(jīng)??梢钥吹胶芾习姹镜腏ava。所以理解不同版本之間的區(qū)別變得很重要。所以當(dāng)你在某家公司某個Java版本上工作時,如果你知道版本是哪個,你也就知道了能做什么不能做什么,以及這個版本與其他版本相比有什么樣的改變。
這就是當(dāng)我開始寫新一版時,第一個想改變的事情。因為現(xiàn)在最新版的Java 8(說到這里,容易讓人有些混淆,《Java權(quán)威技術(shù)手冊》的第6版講的是Java的第8版)的生命周期比以前短了很多。當(dāng)然,這要取決于具體領(lǐng)域,但是了解了普遍的使用情況后,你會發(fā)現(xiàn)使用老版本的(比如Java 6)只是極少數(shù)的人。當(dāng)然仍然有一些瘋狂的人仍然在使用6以前的版本,大部分的用戶使用的是版本7?,F(xiàn)在,版本8正在以很快的速度占領(lǐng)市場,僅僅在半年時間,有15%到20%的用戶已經(jīng)在使用Java 8了。所以新版《Java權(quán)威技術(shù)手冊》的關(guān)注點比以往更加開放,我們開始關(guān)注Java以外的世界,也會討論現(xiàn)在和未來。
第二件重要的改變是長度,正如你所說,第5版長達1200頁,而第六版只有它的三分之一,當(dāng)我開始著手整理上一版的時候,我做的第一件事就是去掉了三分之二的內(nèi)容。如果你看過第五版,你就知道除了討論Java的主要內(nèi)容之外,這本書的第二部分是關(guān)于索引的。當(dāng)然這也是歷史原因造成的,當(dāng)Java剛出來的時候,網(wǎng)絡(luò)的使用還不是很普遍,所以書自帶一份索引是很合理的事。但是還有另外兩個原因,Java平臺變得越來越大,在《Java權(quán)威技術(shù)手冊》的第一章我討論了Java版本進化,指出了Java平臺的增長速度之快。要描述Java 5平臺的基本知識就用了800頁,那還是Java 5的時候,如果用同樣的方法討論Java 8的話,這本書就要頂?shù)教旎ò迳狭???梢娺@個方法不可行了,沒有人會愿意拿著這樣一本書。另外一個原因(也許這兩件事是相關(guān)的)就是人們利用技術(shù)信息的方式發(fā)生了改變,因特網(wǎng)如今無處不在,人們不愿意攜帶厚重的書籍,所有的索引都可以在網(wǎng)上的PDF、網(wǎng)站等資源中找到。所以這個時候還要在紙質(zhì)書的后面加上厚重的索引就很不合理了。這就是《Java權(quán)威技術(shù)手冊》兩個版本之間的重大改變。
我嘗試的第三件事是捕捉Java的變化趨勢和規(guī)律。所以很多關(guān)于過去如何使用Java的內(nèi)容都被去掉了,我加入了更多現(xiàn)代的使用方法,讀者們需要了解垃圾回收,內(nèi)存分配,并發(fā)編程,我在這些方面講了很多。這里面涉及了大量的工作,因為原來的版本都著力于保存原有的內(nèi)容。在第五版留下的三分之一內(nèi)容中,大概只有25%-30%留到了第六版中,這些內(nèi)容也都重新編輯整理過,而剩下的70%左右的內(nèi)容則是全新的。
因為,我們想在Java 8投入使用的時候就把這本書弄出來,所以Java 8還沒有出來的時候我們就動筆了,到了后來還出現(xiàn)了一些一開始沒有想到的工作(比如Java 8上隱藏的特性)。但是這次我們的經(jīng)驗更豐富了,所以我們希望能在2016年4月,Java 9出來的時候完成下一個版本。事實上我已經(jīng)做好具體計劃了。
問:對于《Java程序員修煉之道》(The Well-Grounded Java Developer)你有下一步的計劃嗎?
《Java程序員修煉之道》這個項目很好,寫作的過程也很愉快。但是在寫作《Java權(quán)威技術(shù)手冊》的過程中我消耗了大量精力,我認為我可能不會再寫這本書的第2版了。我和這本書的原出版商Manning談過了,但是最新的進展我并不了解,所以很有可能這本書不會再有第2版了。
問:一位Java大牛和一位普通Java程序員之間的區(qū)別是什么?
我認為可以把程序員的層次看作一個金字塔,其中可以大致分成3個層次。在最底層的是很勤勞的程序員,但是他們可能對編程本身興趣不大,他們也能做好工作,但是他們下班之后就不會再想關(guān)于編程的事。這是很正常的現(xiàn)象,軟件業(yè)需要很多程序員,并且這個需求仍然在不斷增長。中間層次上的程序員,想再多做一些,他們閱讀科技新聞和網(wǎng)站上的消息,他們會跟進下一個版本的進展,他們關(guān)心自己的技能,這個層次的程序員很有趣。而最上層的程序員則是時刻對技藝以及技術(shù)的本質(zhì)著迷。當(dāng)你到達了這個金字塔的最頂層時,你就會開始有反饋環(huán),你可以從自身學(xué)習(xí),對技藝的了解也更深刻。但是我認為最難的部分就是如何從第二層突破到最頂層。如果你對你所做工作之外的知識有一丁點興趣,你就要尋找屬于自己的那個點,這個點對于每個人都不一樣,一旦發(fā)現(xiàn)那個讓你著迷的領(lǐng)域,你就可以隨著好奇心的驅(qū)使深入學(xué)習(xí)下去。
關(guān)于開源軟件有一個說法,一個好的開源開發(fā)者必須找到自己的痛點,他們不得不去解決這個困擾他們的問題。這是大多數(shù)人對開源軟件感興趣的原因,也是很多人稱為Java開發(fā)者的原因。你找到了一個讓你感興趣的點,由于不明所以,你一直學(xué)習(xí)下去,這就是成長的秘密。
問:雖然Lambda加入了Java 8,但是在開發(fā)者之間始終有關(guān)于Java語法過于冗長的抱怨。你認為這是很多開發(fā)者和團隊不愿意使用Java的主要原因嗎?
我不這么認為。James Gosling有三句話可以解釋Java的語言設(shè)計,以及為什么Java是現(xiàn)在這個樣子。第一句就是英語中所說的“藍領(lǐng)”語言,藍領(lǐng)工人是從事第一線工作的人,而白領(lǐng)則代表了辦公室以及經(jīng)理們的工作。Java就是一種藍領(lǐng)語言,它的設(shè)計是為了讓工作中的程序員解決真正的問題。Java是實用的語言,它解決的是真實世界中的業(yè)務(wù)。
James Gosling在2014年JavaOne大會上談到了Lambda以及Java的早期版本中沒有出現(xiàn)的一些設(shè)計,他說:如果我沒有找到完成一件事的正確方法,那我就什么都不做。這句話表達了一種緩慢而保守的演進設(shè)計思想,要想理解Java是什么,就必須要明白這點。很多人覺得Java老了,編程語言需要改變,但是他們沒有搞清楚的是,真正變化的是他們自己。他們在能力上有了發(fā)展,他們想看得更遠更深,而語言反映出了這一點。并不是語言需要改變,而是提出這個觀點的程序員自身發(fā)生了變化。Java從過去到未來都是一種設(shè)計保守的語言。這也是Java的一大優(yōu)勢。
當(dāng)James解釋他設(shè)計Java的初衷時說:當(dāng)我在設(shè)計的時候,我知道人們想要自動內(nèi)存管理,人們想要強型式,但是這些功能會嚇跑藍領(lǐng)工人。比如說Smalltalk,這是一門很優(yōu)秀的語言,但是它太先進了,它和現(xiàn)實中開發(fā)者們在構(gòu)建應(yīng)用時的思維脫離開來。所以Java繼承了其中的一些理念,并將其簡化,把這些理念放入一種語言和格式中。這些事解釋了這門語言設(shè)計的基本動機。
所以你當(dāng)然可以說Java是一種冗長的語言,但我認為額外的內(nèi)容是為了方便閱讀。特別是當(dāng)你還是一位初級或中級程序員的時候,那些看似多余的文字能夠幫助到你。人們永遠都銘記我們對于生產(chǎn)力的需求越來越高,但是代碼仍然是寫出來的。所以我不認為Java冗長,雖然我們可以加入一些高級功能,但是有些事永遠都無法在一個語言中改變,這很遺憾。當(dāng)然我們也會進步,但是就像我總說的一句話,人們總是過于關(guān)心語法,而不是能用語言來實現(xiàn)什么。
問:現(xiàn)在不少的大企業(yè)(Paypal等)從Java切換到Node.js,Java在企業(yè)中的地位受到威脅,Java和Node.js各自擅長的領(lǐng)域是什么?
這個問題中有一個誤解,事實上并沒有出現(xiàn)大波公司棄用Java轉(zhuǎn)向Node.js的情況。Paypal中啟用Node.js的部分規(guī)模很小,Paypal的大部分運行代碼仍然是Java。Node.js參與的只是一個試點項目,這是可以理解的,Node.js是一個有趣的環(huán)境,其中也有一些有趣的想法。Node.js十分年輕,同時,它也有很多嚴(yán)重的問題,所以現(xiàn)在預(yù)測Node的未來發(fā)展還為時尚早。所以雖然各種開發(fā)者網(wǎng)站上有很多支持Node的聲音,GitHub上有很多有趣的項目(比如用它寫Ardruino,玩硬件),但是在所有生產(chǎn)環(huán)境下的產(chǎn)品中,毫無疑問,Java擁有最多的代碼行。企業(yè)在沒有充分理由的情況下不會舍棄工作軟件,雖然有很多使用Node.js的創(chuàng)業(yè)者,但是創(chuàng)業(yè)者們來得快,走得也快。
作為近些年來有趣的產(chǎn)品之一Twitter,如果你觀察一下他們的發(fā)展你會發(fā)現(xiàn)他們最開始用的是Ruby on Rails。三四年前,他們的網(wǎng)站開始出現(xiàn)一個非??蓯鄣目ㄍㄐ蜗?,失敗鯨。這是一件很尷尬的事,為了弄明白到底發(fā)生了什么,他們做了很多調(diào)查,在查看了Ruby的垃圾收集之后,他們發(fā)現(xiàn)自己無能為力。同時,他們的Java試點項目獲得了成功,他們意識到Java能解決他們的擴展性問題。然后在接下來的18個月,他們使用了一些JRuby作為中轉(zhuǎn)站,然后將整個系統(tǒng)改寫成Java。最終的效果也很好,他們圍繞Java引入了新的服務(wù),新的架構(gòu)。曾幾何時,Ruby被視為企業(yè)級軟件的未來,但現(xiàn)如今,Ruby只是眾多編程語言中的一種?,F(xiàn)在應(yīng)用最廣的三種語言是Java,JavaScript,以及C/C++,但是大部分的JavaScript代碼都是在客戶端,如果把這三種語言去掉,其他語言的市場份額都非常小。
問:直到現(xiàn)在,Java應(yīng)用的虛擬托管模型需要分配給整個x86虛擬機用來托管一個多帶帶的JVM實例,相對來說實例上也托管了多帶帶的Java應(yīng)用。這樣的方法效率很低,但是Java本地并不支持多租戶虛擬以及云計算配置。幸運的是,在社區(qū)里可以找到一些為了解決云計算問題而產(chǎn)生的多租戶Java解決方案,你認為哪個方案足夠成熟可以應(yīng)用到生產(chǎn)環(huán)境?
這里面包含了兩件事,把虛擬和云以及多租戶混在一起并不完全正確。比如說在QCon上海上有很多分享是關(guān)于docker的(docker是一個并不依賴于虛擬化的平臺),其中一個精彩的分享來自Chris Swan。他展示了將CPU內(nèi)存從虛擬環(huán)境轉(zhuǎn)移到以Docker為基礎(chǔ)的環(huán)境所帶來的好處,雖然仍不夠完善,但是它已經(jīng)為Java帶來了額外的優(yōu)勢,只要在Docker上運行Java你就能感受到。我們應(yīng)該把云和虛擬的關(guān)系梳理清楚。另外,有很多其他你可以做的事,比如你可以建立多個JVM主機。
但是這個問題真正在問的是多租戶。關(guān)于這個問題,有一個產(chǎn)品在我心中是當(dāng)之無愧的冠軍,那就是Waratek。Waratek可以把一個多帶帶的非熱點JVM分開,并在其中運行主機JVM,在JVM里運行的是Java虛擬多租戶JVC,而JVC可以做到很輕量級。我認為Waratek是一個很成熟、可以投入使用的產(chǎn)品,德意志銀行剛剛宣布把自己的第一個工作JVM挪到Waratek上,既然德意志銀行已經(jīng)認可了這個產(chǎn)品,那么這個產(chǎn)品應(yīng)該也值得你花時間研究一下。
問:Java經(jīng)常被拿來和Scala做比較,這兩種語言的設(shè)計目的有什么不同?在未來,這兩種語言是否可能發(fā)展方向完全一致?
更多精彩,加入圖靈訪談微信!Java和Scala是有著很大不同的語言。之前我們談到過Java的設(shè)計哲學(xué),現(xiàn)在我們可以來說一說Scala的設(shè)計思想,以及它們之間有什么不同。Scala最初是一門來自學(xué)術(shù)界的語言,最開始Martin Odersky創(chuàng)造的語言叫做Pizza,那時候Java還是版本4,這個時候Pizza開始逐漸加入了一些類似于Java范型的功能,Java 5中也加入了一些Pizza的功能作為范型。
Martin是一個很聰明的人,Scala也有很多很棒的設(shè)計。但是同時,這個語言也有自己的問題。有時候它被稱為“廚房水槽”語言,可見人們對這門語言又愛又恨。這個比喻的意思是:水槽里面裝了各種各樣數(shù)量過多的東西。這確實是Scala的一個問題,它的功能太多了。有一條語言設(shè)計的準(zhǔn)則,同時也是Java設(shè)計過程中的一個重要原則——保守。具體說來,就是每當(dāng)你添加一個新特性的時候(《Java程序員修煉之道》14頁談到了了一個具體的例子),可能你也造成了新的問題。如果你的語言有200種特性,而這個時候你想再加入一個,我需要檢驗它和所有其他特性的交互情況。對于Scala來說,它總是頻繁地加入新的特性。要想知道這些特性之間的交互情況是很困難的。就算Scala有一個很靈活,能夠擁抱改變的社區(qū),語言特性的變動也是件不容易的事。所以你會發(fā)現(xiàn)雖然Scala擁有很多優(yōu)秀的工作性能,但是你需要決定哪些特性是你想要的,而哪些特性是你不能碰的。當(dāng)你在團隊中編程的時候,這不是個問題。真正的問題在于,現(xiàn)代社會的軟件棧從來都不是僅僅依賴于代碼,問題來自于函數(shù)庫。有一些Scala特性的動作不僅影響目標(biāo)對象,還會影響其他一些東西。Scala的特性越多,這些問題就更容易互相重疊。
另外,他們一直都糾結(jié)于二進制兼容的問題。Java、Sun以及Oracle一直都認為這是對Java來說最重要的設(shè)計理念,所以我可以用Java 1.0寫程序,編譯一下,放到Java 8的虛擬機中,仍然可以運行,而且運行速度會比以前快很多倍。而Scala從未做出這方面的承諾,哪怕就是上一個版本也會出現(xiàn)問題。在函數(shù)庫空間中,這個問題就更嚴(yán)重了,我知道很多項目都放棄了Scala,就是因為每次只要升級函數(shù)庫,整個系統(tǒng)就會崩潰。
所以說,這兩種語言的設(shè)計思想很不相同。人們總是喜歡新鮮事物,第一個嘗鮮的人也會第一個享受到很多好處,但是在更多的情況下,人們更愿意做第二個嘗試的人。你可以觀察第一個人犯下的錯誤,然后從中學(xué)習(xí)。而Java就是這樣一個從別人的錯誤中學(xué)習(xí)的語言。我剛才提到過程序員的金字塔,我認為Scala并不適用于底層,它的作用更多在于為最頂層的程序員們激發(fā)思考。而Java是一種適用于整個金字塔的語言,而且它對底層和中層的程序員尤其適用。我相信在未來的很多年內(nèi)都會有一個強大且健康的Scala社區(qū),我也希望能和他們一起交換思想。但是我并不認為Scala會從一種小眾語言成長成一種大眾語言。現(xiàn)在地球上可能有上百個Scala程序員,但是這個數(shù)量頂多也就是Java程序員的百分之一,而這個比例很可能不會繼續(xù)增長了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/64203.html
摘要:但是這將嚴(yán)重影響程序的性能。垂直分區(qū)的優(yōu)點在于可以使得行數(shù)據(jù)變小,在查詢時減少讀取的數(shù),減少次數(shù)。此外,垂直分區(qū)可以簡化表的結(jié)構(gòu),易于維護。垂直分區(qū)的缺點在于主鍵會出現(xiàn)冗余,需要管理冗余列,并會引起操作,可以通過在應(yīng)用層進行來解決。 Java面試通關(guān)手冊(Java學(xué)習(xí)指南,歡迎Star,會一直完善下去,歡迎建議和指導(dǎo)):https://github.com/Snailclimb/Jav...
摘要:阿里巴巴的共享服務(wù)理念以及企業(yè)級互聯(lián)網(wǎng)架構(gòu)建設(shè)的思路,給這些企業(yè)帶來了不少新的思路,這也是我最終決定寫這本書的最主要原因。盡在雙阿里巴巴技術(shù)演進與超越是迄今唯一由阿里巴巴集團官方出品全面闡述雙八年以來在技術(shù)和商業(yè)上演進和創(chuàng)新歷程的書籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網(wǎng)站技術(shù)架構(gòu):核...
閱讀 2849·2021-11-22 11:56
閱讀 3553·2021-11-15 11:39
閱讀 898·2021-09-24 09:48
閱讀 758·2021-08-17 10:14
閱讀 1321·2019-08-30 15:55
閱讀 2753·2019-08-30 15:55
閱讀 1310·2019-08-30 15:44
閱讀 2774·2019-08-30 10:59