您現在的位置是:首頁 > PHP心得

李清波 2015-12-03 PHP心得 1343

計算機科學家談科研心得 思考比編碼重要

  萊斯利·蘭伯特是一名計算機科學家,他提出了分布式系統、時序邏輯和并行算法等系列計算機理論。蘭伯特是微軟研究院首席研究員、美國國家工程院和科學院院士,2013年,他獲得了有著“計算機界諾貝爾獎”之稱的圖靈獎。近日,這位世界頂級科學家應邀走進了北京大學,與學子交流科研心得。

  “怎樣才能保證編碼少出錯?”“你怎么看待計算機科學和數學之間的關系?”“你提出過很多計算機理論,哪個是最鐘愛的‘孩子’?”……近日,北京大學斯坦福中心,在萊斯利·蘭伯特(Leslie Lamport)的報告結束后,學生們的問題接踵而至。在近1個小時的時間里,他接受了學生們的“考問”。

  臺上的蘭伯特身著一件淺藍色條紋襯衫、一條深藍色牛仔褲、一雙黑色運動鞋。像著裝一樣,他的話語簡潔中透著隨性。在回答感興趣的問題時,他的語速并不快,引經據典,侃侃而談,讓現場充滿笑聲和掌聲。盡管濃密的花白胡須隱藏了他的面部表情,但在思考問題時鼻梁上金邊眼鏡后的目光卻總喜歡凝視著空間中的某一點,讓人不免產生一絲神秘感和距離感。當然對于不感興趣的問題,他也不敷衍,只是簡單一句:“不了解?!?/p>

  蘭伯特現任美國微軟研究院首席研究員,也是2013年有著“計算機界諾貝爾獎”之稱的圖靈獎獲得者。此次他經北京大學“大學堂”頂尖學者講學計劃的邀請,與該校師生開展了交流,而此次交流的核心則是:思考,比寫代碼更加重要。

  編碼也須鍛煉“肌肉”

  如何才能寫出更優質的程序呢?這是記者和很多現場學生關心的一個話題?!肮こ處熢谄龃u建房之前會畫一張建筑藍圖;但程序員和軟件工程師往往不會這樣做。這是不是房屋很難倒塌而編程經常出問題的原因呢?”報告結束后,在接受《中國科學報》記者采訪時,蘭伯特對比說,很多程序員在開始編寫程序之前,往往不愿意勾勒哪怕是一個最簡易的程序輪廓。

  藍圖可以幫助工程師保證計劃發揮作用?!啊l揮作用’不只意味著讓大樓不倒塌,還意味著為所需要的目的服務,比如讓建筑師和客戶在施工之前了解他們打算建造什么樣的工程?!碧m伯特如是說,“藍圖可以幫助我們考慮清楚,我們在編寫什么?!?/p>

  為編寫軟件所描繪的藍圖就是規范(spec)。然而,“計劃趕不上變化,就像沒有哪一場戰爭真正能夠按計劃進行一樣,你做出的規范也有可能發生程式錯誤?!碧m伯特說。比如,或者是必要條件發生了改變,或者是出現了錯誤,可能在你寫完程序之前,就需要改變原來的規范。

  事實上,在真實世界中,代碼可以修補,而規范也可以更新,這些都很普遍。那么,如果修補和更新不可避免,那么為什么要描繪這張藍圖呢?對此,蘭伯特表示原因有二:其一,無論是誰在修補代碼,都會由衷感謝規范中的每個詞、每個公式的作者;其二,代碼每修復一次,就會“變丑一點,更難理解一點,也更難維護”?!耙虼?,如果不從思考規范開始,那么程序員所寫的代碼的每個片段就都是補丁。這樣就會讓一開始編寫的程序變得丑陋、難以理解和維持下去?!碧m伯特說。

  “為什么編碼難?因為編碼需要思考,思考存在難度,而很多人往往低估了思考的難度?!彼f,“正如漫畫家迪克·金敦(Dick Guindon)所說的那樣,‘寫作是讓你知道你的思想有多么混亂的根本方法?!?/p>

  “思考不能保證你不犯錯誤,但是不思考通常一定會犯錯誤?!睕]有什么簡單的方法可以保證一個人能夠寫出好的spec,蘭伯特說?!熬幋a就像跑步,你跑得越少,跑得也就越慢。所以必須經常反復鍛煉你的編碼‘肌肉’,而不是像很多人那樣找借口不鍛煉?!?/p>

  數學讓編程事半功倍

  “能和這樣的‘大?!涣鞣浅<??!北本┐髮W信息科學技術學院智能科學系大四學生金曉晗在接受《中國科學報》記者采訪時說,“蘭伯特教授說,數學可以幫助我們分析,簡化我們的思維,給我留下了深刻的印象?!?/p>

  在蘭伯特看來,編寫spec并不能保證人們編寫的代碼永遠不會坍塌,所以仍然需要利用一些方法和手段消除編程過程中的錯誤。在他看來,理解編碼復雜性的最好方法就是抽象化,而最簡練、精確的抽象化語言就是數學,即那些在基礎數學課堂上所學到的數學課程,如集合、函數和簡單的邏輯?!八梢詭椭覀兲岣呔帉懩芰?,理解正在做的事情,消滅錯誤?!碧m伯特補充說。

  “在數學和計算機的關系上,蘭伯特認為數學無疑是計算機科學的基礎?!碧m伯特的回答給北京大學信息科學技術學院的劉垚留下了深刻印象,“思考比寫代碼更加重要。而數學對于我們嚴謹、有效地思考問題非常有幫助?!北M管如此,蘭伯特也表示,數學很難直接成為人們解決問題的方法。它更多地是幫助分析問題,或是評估提出的解決方案。

  “在你提出檢驗編碼的模型之后,數學能夠幫助你檢查模型是否正確,這正是為什么我提出了TLA+(一種可以幫助程序員進行模型檢測的新的計算機編程語言)?!碧m伯特舉例說。亞馬遜公司和英特爾公司的很多程序員發現,TLA+檢測模型可以提高他們的排錯效率?!疤幚碛布e誤時,成本往往很昂貴,因為如果出現問題就要重新生產所有的芯片,而檢測模型可以幫助他們發現錯誤,大幅降低成本?!?/p>

  “借助數學的思考方式來關注問題的核心,從而看到問題背后的深層原因,再去尋找解決方案。作為數學專業的‘碼農’,我對此體會尤為深刻?!北本┐髮W數學院學生李屹對此次交流深有所感,“數學之于計算機,不僅是一種工具或者方法,而是一種哲學。以數學的思想作為指導,有時即便不掌握具體的數學工具,都可以使得編程工作事半功倍?!?/p>

  大學教育要立足長遠

  “蘭伯特講到的‘多思考,少編程’對我啟發莫大?!薄八v的要學會抽象對我們掌握正確的科研態度非常重要?!薄巴ㄟ^蘭伯特的介紹,我認識到如果把TLA+語言投入到本科或更早的教學中,將會使更多人受益于數學精練、嚴謹的邏輯鍛煉,節約很多時間,因為未來普通的編程工作注定要被機器代替?!薄徒饡躁弦粯?,在此次采訪中,很多學生都表示與這位計算機學界“大?!边M行的交流讓他們受益匪淺。

  在計算機領域,蘭伯特確實是位名副其實的傳奇人物。他的分布式計算理論奠定了這門學科的基礎,并被稱為“分布式計算原理之父”;他在1978年發表的論文《分布式系統內的時間、時鐘事件順序》成為計算機科學史上被引用最多的文獻;他為“并發系統的規范與驗證”研究貢獻了核心原理……

  為此,美國計算機協會將2013年度圖靈獎頒發給了他?!叭绻阆矚g使用互聯網,那么就該感謝萊斯利?!笔放谅灏柾醒芯恐行膭撌既思娼浝?、數字設備公司系統研究中心創始人兼經理鮑勃·泰勒(Bob Taylor)曾如是評價,“因為互聯網建立在分布式系統技術的基礎知識之上,而后者又建立在萊斯利所發明的理論基礎之上?!?/p>

  對于自己的研究成果,蘭伯特表示,我希望它們都能發揮作用,“因為個人對美有著不同的理解,所以人們究竟會更喜歡哪個理論也是‘仁者見仁、智者見智’”。在提及成功的秘訣時,他認為,每個人的研究道路都會因人而異,由于現在的計算機科學環境已經和他開始起步的時代發生了天翻地覆的變化,他的經驗可能并不適用于每一個人。

  如果一個人“最終想要成為自己想成為的人,就要做自己最嚴格的裁判”。他指出:“同時,不要忽視你的批評者,不要因為觀點相左就認為批評者‘太愚蠢’,他們會推動你不斷進步?!?/p>

  在他看來,現在很多教師和學校希望按照他們所想象的那樣教導學生,然而這些想法可能對學生不一定適用?!氨热?,現在經常通過就業率判定學校是否成功,而大學不應該把讓學生就業作為辦學目的?!彼f,以編程為例,編寫“種子”編碼很重要,盡管它可能不會馬上產生作用,但可能在10年、15年之后產生更重要的應用?!敖逃繕艘矐撍伎嫉酶L久、更遠大一點?!?/p>


評論