萊斯利·蘭伯特是一名計算機科學(xué)家,他提出了分布式系統(tǒng)、時序邏輯和并行算法等系列計算機理論。蘭伯特是微軟研究院首席研究員、美國國家工程院和科學(xué)院院士,2013年,他獲得了有著“計算機界諾貝爾獎”之稱的圖靈獎。近日,這位世界頂級科學(xué)家應(yīng)邀走進了北京大學(xué),與學(xué)子交流科研心得。 “怎樣才能保證編碼少出錯?”“你怎么看待計算機科學(xué)和數(shù)學(xué)之間的關(guān)系?”“你提出過很多計算機理論,哪個是最鐘愛的‘孩子’?”……近日,北京大學(xué)斯坦福中心,在萊斯利·蘭伯特(Leslie Lamport)的報告結(jié)束后,學(xué)生們的問題接踵而至。在近1個小時的時間里,他接受了學(xué)生們的“考問”。 臺上的蘭伯特身著一件淺藍色條紋襯衫、一條深藍色牛仔褲、一雙黑色運動鞋。像著裝一樣,他的話語簡潔中透著隨性。在回答感興趣的問題時,他的語速并不快,引經(jīng)據(jù)典,侃侃而談,讓現(xiàn)場充滿笑聲和掌聲。盡管濃密的花白胡須隱藏了他的面部表情,但在思考問題時鼻梁上金邊眼鏡后的目光卻總喜歡凝視著空間中的某一點,讓人不免產(chǎn)生一絲神秘感和距離感。當(dāng)然對于不感興趣的問題,他也不敷衍,只是簡單一句:“不了解?!?/p> 蘭伯特現(xiàn)任美國微軟研究院首席研究員,也是2013年有著“計算機界諾貝爾獎”之稱的圖靈獎獲得者。此次他經(jīng)北京大學(xué)“大學(xué)堂”頂尖學(xué)者講學(xué)計劃的邀請,與該校師生開展了交流,而此次交流的核心則是:思考,比寫代碼更加重要。 編碼也須鍛煉“肌肉” 如何才能寫出更優(yōu)質(zhì)的程序呢?這是記者和很多現(xiàn)場學(xué)生關(guān)心的一個話題。“工程師在砌磚建房之前會畫一張建筑藍圖;但程序員和軟件工程師往往不會這樣做。這是不是房屋很難倒塌而編程經(jīng)常出問題的原因呢?”報告結(jié)束后,在接受《中國科學(xué)報》記者采訪時,蘭伯特對比說,很多程序員在開始編寫程序之前,往往不愿意勾勒哪怕是一個最簡易的程序輪廓。 藍圖可以幫助工程師保證計劃發(fā)揮作用。“‘發(fā)揮作用’不只意味著讓大樓不倒塌,還意味著為所需要的目的服務(wù),比如讓建筑師和客戶在施工之前了解他們打算建造什么樣的工程。”蘭伯特如是說,“藍圖可以幫助我們考慮清楚,我們在編寫什么。” 為編寫軟件所描繪的藍圖就是規(guī)范(spec)。然而,“計劃趕不上變化,就像沒有哪一場戰(zhàn)爭真正能夠按計劃進行一樣,你做出的規(guī)范也有可能發(fā)生程式錯誤。”蘭伯特說。比如,或者是必要條件發(fā)生了改變,或者是出現(xiàn)了錯誤,可能在你寫完程序之前,就需要改變原來的規(guī)范。 事實上,在真實世界中,代碼可以修補,而規(guī)范也可以更新,這些都很普遍。那么,如果修補和更新不可避免,那么為什么要描繪這張藍圖呢?對此,蘭伯特表示原因有二:其一,無論是誰在修補代碼,都會由衷感謝規(guī)范中的每個詞、每個公式的作者;其二,代碼每修復(fù)一次,就會“變丑一點,更難理解一點,也更難維護”?!耙虼?,如果不從思考規(guī)范開始,那么程序員所寫的代碼的每個片段就都是補丁。這樣就會讓一開始編寫的程序變得丑陋、難以理解和維持下去。”蘭伯特說。 “為什么編碼難?因為編碼需要思考,思考存在難度,而很多人往往低估了思考的難度?!彼f,“正如漫畫家迪克·金敦(Dick Guindon)所說的那樣,‘寫作是讓你知道你的思想有多么混亂的根本方法?!?/p> “思考不能保證你不犯錯誤,但是不思考通常一定會犯錯誤。”沒有什么簡單的方法可以保證一個人能夠?qū)懗龊玫膕pec,蘭伯特說?!熬幋a就像跑步,你跑得越少,跑得也就越慢。所以必須經(jīng)常反復(fù)鍛煉你的編碼‘肌肉’,而不是像很多人那樣找借口不鍛煉?!?/p> 數(shù)學(xué)讓編程事半功倍 “能和這樣的‘大牛’交流非常激動?!北本┐髮W(xué)信息科學(xué)技術(shù)學(xué)院智能科學(xué)系大四學(xué)生金曉晗在接受《中國科學(xué)報》記者采訪時說,“蘭伯特教授說,數(shù)學(xué)可以幫助我們分析,簡化我們的思維,給我留下了深刻的印象?!?/p> 在蘭伯特看來,編寫spec并不能保證人們編寫的代碼永遠不會坍塌,所以仍然需要利用一些方法和手段消除編程過程中的錯誤。在他看來,理解編碼復(fù)雜性的最好方法就是抽象化,而最簡練、精確的抽象化語言就是數(shù)學(xué),即那些在基礎(chǔ)數(shù)學(xué)課堂上所學(xué)到的數(shù)學(xué)課程,如集合、函數(shù)和簡單的邏輯?!八梢詭椭覀兲岣呔帉懩芰?,理解正在做的事情,消滅錯誤?!碧m伯特補充說。 “在數(shù)學(xué)和計算機的關(guān)系上,蘭伯特認(rèn)為數(shù)學(xué)無疑是計算機科學(xué)的基礎(chǔ)。”蘭伯特的回答給北京大學(xué)信息科學(xué)技術(shù)學(xué)院的劉垚留下了深刻印象,“思考比寫代碼更加重要。而數(shù)學(xué)對于我們嚴(yán)謹(jǐn)、有效地思考問題非常有幫助?!北M管如此,蘭伯特也表示,數(shù)學(xué)很難直接成為人們解決問題的方法。它更多地是幫助分析問題,或是評估提出的解決方案。 “在你提出檢驗編碼的模型之后,數(shù)學(xué)能夠幫助你檢查模型是否正確,這正是為什么我提出了TLA+(一種可以幫助程序員進行模型檢測的新的計算機編程語言)?!碧m伯特舉例說。亞馬遜公司和英特爾公司的很多程序員發(fā)現(xiàn),TLA+檢測模型可以提高他們的排錯效率。“處理硬件錯誤時,成本往往很昂貴,因為如果出現(xiàn)問題就要重新生產(chǎn)所有的芯片,而檢測模型可以幫助他們發(fā)現(xiàn)錯誤,大幅降低成本?!?/p> “借助數(shù)學(xué)的思考方式來關(guān)注問題的核心,從而看到問題背后的深層原因,再去尋找解決方案。作為數(shù)學(xué)專業(yè)的‘碼農(nóng)’,我對此體會尤為深刻。”北京大學(xué)數(shù)學(xué)院學(xué)生李屹對此次交流深有所感,“數(shù)學(xué)之于計算機,不僅是一種工具或者方法,而是一種哲學(xué)。以數(shù)學(xué)的思想作為指導(dǎo),有時即便不掌握具體的數(shù)學(xué)工具,都可以使得編程工作事半功倍?!?/p> 大學(xué)教育要立足長遠 “蘭伯特講到的‘多思考,少編程’對我啟發(fā)莫大?!薄八v的要學(xué)會抽象對我們掌握正確的科研態(tài)度非常重要?!薄巴ㄟ^蘭伯特的介紹,我認(rèn)識到如果把TLA+語言投入到本科或更早的教學(xué)中,將會使更多人受益于數(shù)學(xué)精練、嚴(yán)謹(jǐn)?shù)倪壿嬪憻挘?jié)約很多時間,因為未來普通的編程工作注定要被機器代替?!薄徒饡躁弦粯?,在此次采訪中,很多學(xué)生都表示與這位計算機學(xué)界“大?!边M行的交流讓他們受益匪淺。 在計算機領(lǐng)域,蘭伯特確實是位名副其實的傳奇人物。他的分布式計算理論奠定了這門學(xué)科的基礎(chǔ),并被稱為“分布式計算原理之父”;他在1978年發(fā)表的論文《分布式系統(tǒng)內(nèi)的時間、時鐘事件順序》成為計算機科學(xué)史上被引用最多的文獻;他為“并發(fā)系統(tǒng)的規(guī)范與驗證”研究貢獻了核心原理…… 為此,美國計算機協(xié)會將2013年度圖靈獎頒發(fā)給了他。“如果你喜歡使用互聯(lián)網(wǎng),那么就該感謝萊斯利?!笔放谅灏柾醒芯恐行膭?chuàng)始人兼經(jīng)理、數(shù)字設(shè)備公司系統(tǒng)研究中心創(chuàng)始人兼經(jīng)理鮑勃·泰勒(Bob Taylor)曾如是評價,“因為互聯(lián)網(wǎng)建立在分布式系統(tǒng)技術(shù)的基礎(chǔ)知識之上,而后者又建立在萊斯利所發(fā)明的理論基礎(chǔ)之上?!?/p> 對于自己的研究成果,蘭伯特表示,我希望它們都能發(fā)揮作用,“因為個人對美有著不同的理解,所以人們究竟會更喜歡哪個理論也是‘仁者見仁、智者見智’”。在提及成功的秘訣時,他認(rèn)為,每個人的研究道路都會因人而異,由于現(xiàn)在的計算機科學(xué)環(huán)境已經(jīng)和他開始起步的時代發(fā)生了天翻地覆的變化,他的經(jīng)驗可能并不適用于每一個人。 如果一個人“最終想要成為自己想成為的人,就要做自己最嚴(yán)格的裁判”。他指出:“同時,不要忽視你的批評者,不要因為觀點相左就認(rèn)為批評者‘太愚蠢’,他們會推動你不斷進步?!?/p> 在他看來,現(xiàn)在很多教師和學(xué)校希望按照他們所想象的那樣教導(dǎo)學(xué)生,然而這些想法可能對學(xué)生不一定適用?!氨热纾F(xiàn)在經(jīng)常通過就業(yè)率判定學(xué)校是否成功,而大學(xué)不應(yīng)該把讓學(xué)生就業(yè)作為辦學(xué)目的?!彼f,以編程為例,編寫“種子”編碼很重要,盡管它可能不會馬上產(chǎn)生作用,但可能在10年、15年之后產(chǎn)生更重要的應(yīng)用?!敖逃繕?biāo)也應(yīng)該思考得更長久、更遠大一點?!?/p> |
|