面向對象之父Alan Kay:預測未來,創造未來
原創【51CTO獨家特稿】在開始正文之前讓我們先回答一個問題,你使用過Alan Kay的某項發明嗎?如果你是個程序員,你會使用C、C++或Java進行程序開發,那你應該用過Alan Kay的發明,因為這些編程語言都或多或少從SmallTalk語言中汲取養分,或者,在大學課程里,你一定學習過Alan Kay提出的面向對象編程的基本理論。
如果你不是程序員,那么你用過(見過)筆記本電腦,恭喜你,筆記本電腦這個概念最初也是由Alan Kay提出的;如果你覺得筆記本太奢侈,OK,你應該在使用Windows或者Mac,無論是哪種操作系統,圖形用戶界面的概念是Alan Kay告訴喬布斯的。如果你還不承認,那么平板顯示器、無線網絡、以太網工作站、客戶機服務器模式和激光打印機的實現原理中,我們都能找到Alan Kay的影子。
面向對象之父Alan Kay
更多時候,Alan Kay是以面向對象程序設計和Smalltalk創世人的身份被我們記住,以軟件大師和計算機界泰斗的高度被我們仰視。
1940年,Alan出生在美國馬塞諸塞州。1歲時,Alan隨父親居家遷往澳大利亞。3歲就可以閱讀Alan在存有6000本書和大量的繪畫的大房間里度過童年。二戰開始后,Alan全家又遷回美國。大量的閱讀和獨立的觀點使Alan對自己的童年感到驕傲:“到我上學時,我已經讀過幾百本書。那時我已經有了許多自己的觀點,我知道一年級所教的許多東西都很幼稚和虛假,老師在撒謊。但學校只能有一種觀點――那就是老師的觀點或者課本的觀點。他們不喜歡與他們相左的觀點,因此那就象是一場戰爭。當然我已經可以用五歲的聲音維護自己的觀點”。對少兒教育的責任心伴隨Alan一生,他后期的許多大師級的創意最初的理念都是出于對兒童的關愛。
OOP萌芽
1960年,Alan進入Bethany大學,僅一年之后他就因抗議學校猶太人限額問題,而被Bethany大學驅逐。沮喪的Alan加入志愿兵服務對,在此,他發現了自己的又一項天賦;在軍隊的一次計算機的能力傾向測驗中,Alan表現出眾,隨后即被美國空軍派遣到IBM K101工作,在那里,Alan不但驗證了計算機能力傾向測試的準確度,還學習到大量計算機知識。
退伍后的Alan被科羅拉多大學錄取,學習數學和分子生物學。畢業后,他又一次面對擇業問題,他說:“我考慮過從醫,但我覺得自己責任心不夠。直到現在我仍這樣認為。”他還考慮過哲學,但也放棄了。最后他還是進入了猶他大學學習電氣工程。
海拔4000英尺以上的猶他大學,設有一個博士點。在那里,他開始使用由1988年圖靈獎獲得者Ivan Sutherland開發的Sketchpad程序,并用Simua仿真語言編寫程序。當時的計算機是個稀罕玩意,能深入接觸計算機控制編程的人更是少之又少。新生Alan在那里使用UNIVAC108機,任務是辦公桌上的一堆磁帶和一張紙條:“這是UNIVAC108機的Algol語言,如果它不能運行,把它弄好。”
那個時代的程序員更像是“風語者”,使用一堆別人看不懂的字符工作,因為更高級的語言還沒有被開發或推廣;但還是那個大師頻出的時代,Alan開始深入思考計算機和編程。受這些程序思想的啟發,再加上自己生物學的背景,他提出了“生物學類比”理論。Alan Kay假定理想的計算機將象生物體一樣工作,為完成某個任務,每個“細胞”都要與其它“細胞”協同完成,而每個“細胞”又有自己的功能。為了解決另外的難題或試驗另外的功能,“細胞”們可以實現重組。這一理論成為面向對象程序設計的萌芽。也是在那時,Alan開始為Flex機設計界面,但由于過于復雜而沒有成功,之后他開始研究圖標編程。
超級紙張
1968年秋,Alan在MIT人工智能實驗室第一次見到Logo語言的創始人Seymour Papert;他觀看了Papert和他的同事教孩子們如何用Logo時,Alan有關計算機社會作用的整套觀念受到極大沖擊。“我看到了第一個真正的手寫體識別系統。這是一套今人難以置信的系統。它對我產生了巨大影響,因為我有種心有靈犀的感覺。當我將這些觀念綜合起來,計算機的概念就象是一種超級媒體,一種超級紙張。”
那時的計算機是一個龐然大物,有獨立的房間存放,由專門的機構擁有和維護;將其想象成孩子的教學玩具、媒體或一張紙不僅需要極大的想象力,還有勇氣。
這里需要提及Alan Kay的一句在IT界廣為流傳的名言“The best way to predict the future is to invent it”,預測未來的最好辦法,就是把它創造出來。
Smalltalk和OOP
Alan Kay的畢業論文是關于圖形面向對象方面的研究,他由此凱獲得猶他大學的博士學位。接著在斯坦福人工智能實驗室擔任教學工作。這兩年工作期間,他開始構想一本象書本大小的計算機,用戶(尤其是兒童)可以用它來代替紙張。他將這個項目稱之為 “Kiddie Komp”。這期間,他也開始著手Smalltalk語言的研發。Smalltalk基于Alan的博士論文為理論支持,應用自己之前的單獨個體(即“細胞”)生物學模型來設計的,個體之間可通過“信息”相互交流;另外,Smalltalk使用“鼠標驅動”的“多窗口環境”,這是圖形界面操作系統的雛形。
Smalltalk是第一門純面向對象的程序設計語言,OPP的思想使Smalltalk的語言結構方面有許多與其他語言不同的特點,例如在Smalltalk語言中沒有條件語句,取而代之的是一些發送給對象true或者false的消息,因此它們不屬于語言部分,而屬于Smalltalk的類庫;也沒有循環重復語句(C語言中的for while),Smalltalk用向數字對象或塊對象發送消息來實現重復執行。
1971年,Alan來到施樂的PARC小組,雖然當時的位圖顯示器十分昂貴,但是Alan依然說服了PARC讓他使用這些位圖顯示器,這使得Kay和他的小組能夠實現不同大小和字體的文字,使用多窗口環境,以及一些對圖像處理的高端支持;這實現了Alan設計Smalltalk的初衷,為兒童教學的而開發的語言。
1975年,Alan的小組認識到應當對Smalltalk的執行效率和規模進行優化。于是他們在許多重要方面重新設計了Smalltalk系統,在語言上:引入了繼承和子類的概念并確定了語言的語法,這使得編譯器能夠產生高效、可執行、精煉的二進制代碼。這些概念的引入使Smalltalk成為面向對象語言鼻祖。
#T#Smalltalk在編程語言發展史上的地位毋庸置疑。它不僅引入了面向對象程序設計的基本理念和實現方法,還為現在編程語言的進化提供了必要的基因,C、C++以及后來的Java、Python、PHP等都借鑒了Smalltalk的部分底層實現方法和語法要素;即使是30年之后,我們依然可以從編程語言排行榜中看到Smalltalk的活力。
發明家Alan
也許你還對開始的那個問題和答案念念不忘,讓我們來簡單的回憶一下Alan Kay的其他貢獻。
在施樂PARC研究小組期間,Alan制作了一個名為Pynabook的概念產品——微型電腦,業界認為這是筆記本電腦的模型。當時個人計算機技術尚處于襁褓期,但Alan的設計中卻已包含了許多未來的技術,比如平板顯示器和無線通訊系統。1993年, Dynabook理念終于成為現實,化為了蘋果公司的Newton。
1979年,在Alan的邀請下,喬布斯、Teff Raskin以及其它蘋果公司的元老們來到PARC參觀。他們被Alan Kay的視窗圖形用戶界面理念所吸引,認為這就是未來的電腦;對Smalltalk語言的靈活性也大為驚奇。Alan在PARC的工作就是蘋果Macintosh的種子,甚至今天的Windows操作系統也是Alan的理念延伸。
Macintosh應用了Alan的視窗圖形用戶界面理念
1984年,Alan加盟蘋果,這使Alan有足夠的時間和金錢開始研究他那長期以來的夢想。同一年,一臺以圖形界面為中心并為市場廣泛接受的計算機——Macintosh誕生。接下來的時間,Alan在世界各地四處奔波講學的同時在麻省理工大學擔任教學工作,也間或為蘋果工作。但大多數時間Alan Kay則在加州西好萊塢的自辦的學校中教學,教孩子們使用計算機。
Alan Kay在 圖靈獎頒獎典禮上
2003年4月19日,計算機學會(ACM)宣布,2003年度有“計算機界諾貝爾獎”之稱的ACM 圖靈獎授予第一個完全面向對象的動態計算機程序設計語言Smalltalk的發明者Alan Kay。