對Lippman的印象:
第一次在現場看到Lippman,比以前在視頻上看到的老了很多,頭發少了很多,胡子也沒了,說話也有些含糊不清了,但年齡的增長卻絲毫沒有抹去他的睿智和朝氣。他是一位非常smart、對喬布斯贊賞有加,很喜歡用Iphone和Ipod的老頭兒。在Q&A環節他頑皮地坐在講臺地板上回答問題,讓我看到了大師可愛的一面,也讓我聯想到了Iphone發布會上的喬布斯。
內容:
講座的主題是下一代大規模軟件開發中的挑戰與解決方法,但Lippman卻講的是目前大型軟件(諸如MMOG)開發的問題,以他在皮克斯動畫公司解決的一個實際問題入手,闡述他對此類問題的解決哲學。
問題:
為什么貝爾實驗室用以取代Unix的Plan 9會失敗,為什么宇宙探測器自動控制系統會失敗,為什么他們做的MMO——God & Hero只能承載不到100人?要知道,這些團隊的成員都是非常聰明,并且有著很絢麗的工作業績的牛人。
原因:
原因在于隨著團隊規模的膨脹,越來越多人參與到其中,代碼規模會呈幾何級增長,直到超出了個體的掌控和理解能力,團隊中已經沒有一個人能夠完全理解整個系統,這時往代碼庫中添加代碼,沒有一個人能夠肯定這將給系統帶來什么。
解決方法:
沒有通用的解決方案,但有些原則:
1)系統不要超出團隊成員的理解和掌控能力范圍;
2)不贊成一個人從頭到尾負責一個模塊,因為每個人的擅長不一樣,思考問題的角度和解決問題的手段也不同,讓不同的人開發一個模塊能夠讓該模塊滿足多方面的需求(從底層優化到對上層抽象的接口);
3)從小到大的開發方法,實際上就是迭代的開發,從具有簡單功能的初級系統迭代到功能完善的大系統;
4)不管用什么開發技術,程序=數據+算法的核心理念是不變的。程序能夠跑多快,最終取決于數據的訪問速度,而層層抽象往往會降低數據訪問速度。因此,首先應該保證數據的訪問速度,在此基礎上,才考慮封裝和抽象;
5)自己擅長的技術和方法,不一定就是解決問題的最好的、最合適的方法;
6)Lippman最引人入勝的開發哲學——向大自然學習。自然界便是一個異常復雜但設計良好的系統:原子組成分子,在由分子組成蛋白質,進而組成DNA,最終形成生物。
Lippman給我的啟發:
1、敏捷開發方法已經深深地影響了Lippman,這一點可以從他對于迭代開發和提交可執行代碼的推崇可以看出。同時,結合以前讀的書以及聽過的講座,有一個意識在我頭腦中越來越清晰了:大師在技術領域摸爬滾打了幾十年之后,必然會從哲學、生物學、心理學的角度來解析軟件開發,并試圖解決開發過程中的一系列問題,因為他們相信這才是認知的本源。雖然Lippman沒有很直白地給出大規模軟件開發問題的解決方法,但是他給出了一條途徑——從自然界尋求解決方法,就像萬物的構成:原子->分子->蛋白質->細胞,從小到大,層次分明。
2、面向對象技術的誕生只是解決了C/Pascal等面向過程語言的一些問題,C++在誕生時,設計和實現者并沒有奢望滿足將來不確定的需求。然而,在C++誕生二十多年之后,我們居然很坦然地認為面向對象技術是理所當然,是符合自然規律的,這明顯是個悲劇。
3、不要迷你大師,大師只是一個傳說。當Lippman在回答cloud computing何去何從時,他只是謙虛地說:他只是對C++比較了解,在其他領域,他可能還不如在座諸位。