Java之父James Gosling談計算機編程藝術

2002年,著名的”Java2虛擬機內幕”作者對Java之父詹姆斯·高斯林進行了訪談,談話中,高斯林就軟件設計的複雜性和算法發表了他的一些看法。對有志於從事IT軟件行業的童鞋來說,聽聽專家的意見,應該還是不無裨益的。

Java之父James Gosling談計算機編程藝術

Java之父James Gosling

2002年3月22日,Bill Venners採訪了Java之父,談論了有關企業軟件,算法,用戶界面友好軟件等話題。以下爲全文:

James Gosling不在佈道Java語言的時候,通常躲在Sun實驗室的一個安靜角落,一連好幾天都在思索一些新方式,以協助程序員更好地處理程序的複雜性。 他的書架上還掛着一個裏的博格人面具,上次JavaOne演講中他就帶在臉上,在面具的低垂注視下,他對Bill Venners款款道來,話題涉及當前的編程趨勢,以及對軟件系統設計和構建的看法。

企業編程和設備編程(Enterprise vs. devices)

Bill Venners: Java在那麼多的手機和智能卡上普及,可是爲什麼大多數都在用Java編寫服務器端的程序?

James Gosling: 我覺得這是北美中心論者的觀點. 你要是參加北美的會議,處處可聞人們在討論企業軟件。可是我最近去參加歐洲和日本的一些Java會議,沒有人討論企業軟件。

Venners: 那他們在用Java做什麼?

Gosling: 他們關注設備,手機上的編程,以及如何實現端到端系統。如果北美的記者有機會去日本最近的JavaOne會議的話,一定會大開眼界,在那裏,基本上沒企業 軟件什麼事兒。到處都是嵌入式系統,實時系統,有些稍顯笨拙,有些卻十分精妙。他們使用Java,讓計算無處不在。

企業軟件當然有其精髓之處,但是除非和別的領域沾邊,否則毫無意義。企業軟件已經被邊緣化了,要想有所意義,得有端到端的思想。

計算機編程藝術 (The art of computer programming)

Venners: 最近我翻了翻唐納德的計算機編程藝術,那套書塵封已久,主要講得都是算法. 可是在我一生的IT事業中,貌似很少用到這些艱深的算法知識。你覺得編程是一種藝術嗎?或者說,自從上世紀60年代和70年代以來,我們所理解的算法概念已經有所改變?

Gosling: 不管你在寫代碼時有沒有用到算法,不可否認的是,計算機編程確實是一門藝術。當有性能瓶頸需要解決時,許多人束手無策,毫無辦法,他們不理解算法性能的具體含義,他們不懂如何定量地去分析算法複雜度。

很少有人問:”怎樣提高程序的運行速率呢”。碼農們總喜歡調用現成的APIs函數,封裝了一層又一層。有時你會看到深達10層甚至100層的調用堆 棧,不由地呼叫起來,”天哪!”。他們就是一味地在抽象層上壘抽象層,恨不得不斷地就這麼壘上去。寫出來的程序可想而知,複雜繁瑣得讓人難以理解。

Venners: 你曾說過,那麼多人一點算法都不懂,就直接投身到軟件開發大軍中,這讓你倍感驚訝. 你還說,他們編寫的程序笨拙而低效,你覺得原因是什麼,是糟糕的算法設計導致的?還是他們基於面向對象的設計過於拙劣,抑或還有其他原因?(譯註:這種情 形在中國也越來越普遍,近年來的很多IT培訓機構速造了大量的低級程序員,以及所謂的一些測試人員。但是優秀的程序員,對很多公司而言,還是可遇而不可 求)

Gosling: 不管是算法設計還是系統設計,這些方面都有問題。低效的算法設計來源於對算法知識的一知半解,比方說啊,你設計動態數組的時候,如何增長數組呢?是每次增 長10個比特,還是每次按原有大小的10%增長?聽起來好像是一回事啊,其實不然。若按每次10個byte的增長,加入n個元素的時間複雜度就是 O(n2),但是後者的時間複雜度只有O(n), 你看,高下立判吧

複雜度(Complexity)

Venners: 那麼,編程這門藝術應該能讓人們的生活更便捷吧.

Gosling: 正解! 這就像過去四五十年間,汽車行業發生的改變一樣。以前打開汽車的發動機罩,你還能搞清楚裏邊的裝置,現在呢,你一打開發動機罩,瞧見裏面,不茫然無知纔怪呢。

Venners: 可能是因爲裏邊有太多軟件裝置的緣故吧。軟件這玩意兒,可不能硬拉胡扯。

Gosling: 有一部分是軟件吧。還遍佈着很多細小的管子,從這串到那,有些司職管理引擎的效率,有些調控空氣質量,反正它們包辦一切,不用再勞你身架了。再者,現在的 汽車完全是自動型的,人們只要鑽進去,啓動,就開路了。而不像以前那麼麻煩,比如像這樣,”喂,外面有40度啊,我得預熱下發動機,還得把熄火裝置放身 邊, 你別一味加油了,空氣有點潮溼,沒必要再加了.”,可不是忒麻煩。

大多數人才不想管發動機罩後的事情呢。他們只關心達到目的地。類似的,人們只關注自己的業務,纔不願糾纏什麼軟件問題呢。

Venners: 你以前說過,Java被設計用於分佈式的可靠人機交互軟件系統。我知道Java的架構有助於實現可靠的分佈式系統,但是Java是如何幫助提高人機交互體驗的。

Gosling: 很多是語言的API層在作用,但如你所見,大部分還是語言的底層部分的功勞。你提到的很多其他方面也有利於改善用戶的使用體驗。舉個例子,經常崩潰的軟件 當然用起來很不爽。而依賴於機器CPU的軟件系統則更難使用。軟件零售商將軟件的蘋果版本和PC版本分類擺放,其實本身就是整個市場結構的大錯。而在日 本,人們在不同的CPU和不同的操作系統下,生產了很多Java手機,但他們之間的軟件都能互相移植。比方說你想裝一個俄羅斯方塊 遊戲,那就裝好了,可移植性爲用戶帶來了莫大的便利。

Venners: 您曾說過,打造一個高度靈活適應的編程系統是你畢生的追求。而我在編寫系統的時候,團隊成員經常會提出程序適應性的問題。有些 會增強程序的適應性,但複雜度也隨之增加. 當你在編寫軟件的某一模塊時,你是如何在適應性和複雜度之間權衡的。

Gosling: 這個就是體現計算機編程藝術性的地方了。向程序添加一部分代碼,當然會增加程序的複雜性,可是如果你不加呢,用戶用你的軟件時就會繁瑣得多。精力守恆定理 適用於此,你投入到程序中的精力越多,用戶使用時遇到的麻煩和折騰的精力就會越少。程序員做的,正是在開發端和用戶端之間儘量平衡開發和用戶的複雜度。

Venners: 有人問過你對開發工具有何看法,當時你回答更願意和程序的複雜性做搏鬥,你喜歡程序複雜性的哪一部分呢?

Gosling: 這個問題可難倒我了。恩,這麼說吧,你買個手錶,那它就是塊手錶,帶分針時針的手錶,對吧?可是有些公司最近生產了一種手錶,它們的外殼是透明的,裏邊的 機械裝置一覽無遺。我也不知道爲什麼,看着它們,我不得不說,”看起來很酷,不是嗎”,打第一眼看到它們,我就買了一個。當我在構思完軟件模型後,我就找 一些複雜的模塊,將它們整合起來,最後它們齧合成一曲完美的軟件旋律—這種感覺實在是太美好了。而就在昨天,我在即安裝了一對新的揚聲器,立體音響系 統背後的電線一團亂麻,簡直像個迷宮。但我卻樂在其中,正是這種複雜性,才讓我如此着迷。

本文作者簡介

Bill Venners, Artima軟件公司的頭頭。該公司提供公共和私人訓練和諮詢服務。Venners是一位Java程序開發者,並致力於Jini技術。他寫作 了”Java2 虛擬機內幕”一書,並創辦了Java和jini開發者的資源網站Artima.com。同時他還在撰寫一本新書”API設計”,用以指導設計面向對象的 API。

 

本文摘自:http://www.redbots.cn/skills/2009/07/05/11534.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章