思考比編碼重要
萊斯利·蘭伯特是一名計(jì)算機(jī)科學(xué)家,他提出了分布式系統(tǒng)、時(shí)序邏輯和并行算法等系列計(jì)算機(jī)理論。蘭伯特是微軟研究院首席研究員、美國(guó)國(guó)家工程院和科學(xué)院院士,2013 年,他獲得了有著“計(jì)算機(jī)界諾貝爾獎(jiǎng)”之稱的圖靈獎(jiǎng)。

近日,這位世界頂級(jí)科學(xué)家應(yīng)邀走進(jìn)了北京大學(xué),與學(xué)子交流科研心得。

“怎樣才能保證編碼少出錯(cuò)?”“你怎么看待計(jì)算機(jī)科學(xué)和數(shù)學(xué)之間的關(guān)系?”“你提出過(guò)很多計(jì)算機(jī)理論,哪個(gè)是最鐘愛的‘孩子’?”……近日,北京大學(xué)斯坦福中心,在萊斯利·蘭伯特(Leslie Lamport)的報(bào)告結(jié)束后,學(xué)生們的問(wèn)題接踵而至。在近 1 個(gè)小時(shí)的時(shí)間里,他接受了學(xué)生們的“考問(wèn)”。
臺(tái)上的蘭伯特身著一件淺藍(lán)色條紋襯衫、一條深藍(lán)色牛仔褲、一雙黑色運(yùn)動(dòng)鞋。像著裝一樣,他的話語(yǔ)簡(jiǎn)潔中透著隨性。在回答感興趣的問(wèn)題時(shí),他的語(yǔ)速并不快,引經(jīng)據(jù)典,侃侃而談,讓現(xiàn)場(chǎng)充滿笑聲和掌聲。盡管濃密的花白胡須隱藏了他的面部表情,但在思考問(wèn)題時(shí)鼻梁上金邊眼鏡后的目光卻總喜歡凝視著空間中的某一點(diǎn),讓人不免產(chǎn)生一絲神秘感和距離感。當(dāng)然對(duì)于不感興趣的問(wèn)題,他也不敷衍,只是簡(jiǎn)單一句:“不了解?!?/p>

蘭伯特現(xiàn)任美國(guó)微軟研究院首席研究員,也是 2013 年有著“計(jì)算機(jī)界諾貝爾獎(jiǎng)”之稱的圖靈獎(jiǎng)獲得者。此次他經(jīng)北京大學(xué)“大學(xué)堂”頂尖學(xué)者講學(xué)計(jì)劃的邀請(qǐng),與該校師生開展了交流,而此次交流的核心則是:思考,比寫代碼更加重要。
編碼也須鍛煉“肌肉”
如何才能寫出更優(yōu)質(zhì)的程序呢?這是記者和很多現(xiàn)場(chǎng)學(xué)生關(guān)心的一個(gè)話題。“工程師在砌磚建房之前會(huì)畫一張建筑藍(lán)圖;但程序員和軟件工程師往往不會(huì)這樣做。這是不是房屋很難倒塌而編程經(jīng)常出問(wèn)題的原因呢?”報(bào)告結(jié)束后,在接受《中國(guó)科學(xué)報(bào)》記者采訪時(shí),蘭伯特對(duì)比說(shuō),很多程序員在開始編寫程序之前,往往不愿意勾勒哪怕是一個(gè)最簡(jiǎn)易的程序輪廓。
藍(lán)圖可以幫助工程師保證計(jì)劃發(fā)揮作用?!啊l(fā)揮作用’不只意味著讓大樓不倒塌,還意味著為所需要的目的服務(wù),比如讓建筑師和客戶在施工之前了解他們打算建造什么樣的工程?!碧m伯特如是說(shuō),“藍(lán)圖可以幫助我們考慮清楚,我們?cè)诰帉懯裁?。?/p>
為編寫軟件所描繪的藍(lán)圖就是規(guī)范(spec)。然而,“計(jì)劃趕不上變化,就像沒有哪一場(chǎng)戰(zhàn)爭(zhēng)真正能夠按計(jì)劃進(jìn)行一樣,你做出的規(guī)范也有可能發(fā)生程式錯(cuò)誤?!碧m伯特說(shuō)。比如,或者是必要條件發(fā)生了改變,或者是出現(xiàn)了錯(cuò)誤,可能在你寫完程序之前,就需要改變?cè)瓉?lái)的規(guī)范。
事實(shí)上,在真實(shí)世界中,代碼可以修補(bǔ),而規(guī)范也可以更新,這些都很普遍。那么,如果修補(bǔ)和更新不可避免,那么為什么要描繪這張藍(lán)圖呢?對(duì)此,蘭伯特表示原因有二:其一,無(wú)論是誰(shuí)在修補(bǔ)代碼,都會(huì)由衷感謝規(guī)范中的每個(gè)詞、每個(gè)公式的作者;其二,代碼每修復(fù)一次,就會(huì)“變丑一點(diǎn),更難理解一點(diǎn),也更難維護(hù)”?!耙虼耍绻粡乃伎家?guī)范開始,那么程序員所寫的代碼的每個(gè)片段就都是補(bǔ)丁。這樣就會(huì)讓一開始編寫的程序變得丑陋、難以理解和維持下去?!碧m伯特說(shuō)。
“為什么編碼難?因?yàn)榫幋a需要思考,思考存在難度,而很多人往往低估了思考的難度?!彼f(shuō),“正如漫畫家迪克·金敦(Dick Guindon)所說(shuō)的那樣,‘寫作是讓你知道你的思想有多么混亂的根本方法?!?/p>
“思考不能保證你不犯錯(cuò)誤,但是不思考通常一定會(huì)犯錯(cuò)誤?!睕]有什么簡(jiǎn)單的方法可以保證一個(gè)人能夠?qū)懗龊玫?spec,蘭伯特說(shuō)?!熬幋a就像跑步,你跑得越少,跑得也就越慢。所以必須經(jīng)常反復(fù)鍛煉你的編碼‘肌肉’,而不是像很多人那樣找借口不鍛煉。”
數(shù)學(xué)讓編程事半功倍

“能和這樣的‘大?!涣鞣浅<?dòng)?!北本┐髮W(xué)信息科學(xué)技術(shù)學(xué)院智能科學(xué)系大四學(xué)生金曉晗在接受《中國(guó)科學(xué)報(bào)》記者采訪時(shí)說(shuō),“蘭伯特教授說(shuō),數(shù)學(xué)可以幫助我們分析,簡(jiǎn)化我們的思維,給我留下了深刻的印象?!?br>
在蘭伯特看來(lái),編寫 spec 并不能保證人們編寫的代碼永遠(yuǎn)不會(huì)坍塌,所以仍然需要利用一些方法和手段消除編程過(guò)程中的錯(cuò)誤。在他看來(lái),理解編碼復(fù)雜性的最好方法就是抽象化,而最簡(jiǎn)練、精確的抽象化語(yǔ)言就是數(shù)學(xué),即那些在基礎(chǔ)數(shù)學(xué)課堂上所學(xué)到的數(shù)學(xué)課程,如集合、函數(shù)和簡(jiǎn)單的邏輯。“它可以幫助我們提高編寫能力,理解正在做的事情,消滅錯(cuò)誤。”蘭伯特補(bǔ)充說(shuō)。
“在數(shù)學(xué)和計(jì)算機(jī)的關(guān)系上,蘭伯特認(rèn)為數(shù)學(xué)無(wú)疑是計(jì)算機(jī)科學(xué)的基礎(chǔ)。”蘭伯特的回答給北京大學(xué)信息科學(xué)技術(shù)學(xué)院的劉垚留下了深刻印象,“思考比寫代碼更加重要。而數(shù)學(xué)對(duì)于我們嚴(yán)謹(jǐn)、有效地思考問(wèn)題非常有幫助?!北M管如此,蘭伯特也表示,數(shù)學(xué)很難直接成為人們解決問(wèn)題的方法。它更多地是幫助分析問(wèn)題,或是評(píng)估提出的解決方案。
“在你提出檢驗(yàn)編碼的模型之后,數(shù)學(xué)能夠幫助你檢查模型是否正確,這正是為什么我提出了 TLA+(一種可以幫助程序員進(jìn)行模型檢測(cè)的新的計(jì)算機(jī)編程語(yǔ)言)。”蘭伯特舉例說(shuō)。亞馬遜公司和英特爾公司的很多程序員發(fā)現(xiàn),TLA+檢測(cè)模型可以提高他們的排錯(cuò)效率?!疤幚碛布e(cuò)誤時(shí),成本往往很昂貴,因?yàn)槿绻霈F(xiàn)問(wèn)題就要重新生產(chǎn)所有的芯片,而檢測(cè)模型可以幫助他們發(fā)現(xiàn)錯(cuò)誤,大幅降低成本。”
“借助數(shù)學(xué)的思考方式來(lái)關(guān)注問(wèn)題的核心,從而看到問(wèn)題背后的深層原因,再去尋找解決方案。作為數(shù)學(xué)專業(yè)的‘碼農(nóng)’,我對(duì)此體會(huì)尤為深刻?!北本┐髮W(xué)數(shù)學(xué)院學(xué)生李屹對(duì)此次交流深有所感,“數(shù)學(xué)之于計(jì)算機(jī),不僅是一種工具或者方法,而是一種哲學(xué)。以數(shù)學(xué)的思想作為指導(dǎo),有時(shí)即便不掌握具體的數(shù)學(xué)工具,都可以使得編程工作事半功倍。”
大學(xué)教育要立足長(zhǎng)遠(yuǎn)
“蘭伯特講到的‘多思考,少編程’對(duì)我啟發(fā)莫大?!薄八v的要學(xué)會(huì)抽象對(duì)我們掌握正確的科研態(tài)度非常重要。”“通過(guò)蘭伯特的介紹,我認(rèn)識(shí)到如果把 TLA+語(yǔ)言投入到本科或更早的教學(xué)中,將會(huì)使更多人受益于數(shù)學(xué)精練、嚴(yán)謹(jǐn)?shù)倪壿嬪憻?,?jié)約很多時(shí)間,因?yàn)槲磥?lái)普通的編程工作注定要被機(jī)器代替?!薄徒饡躁弦粯樱诖舜尾稍L中,很多學(xué)生都表示與這位計(jì)算機(jī)學(xué)界“大牛”進(jìn)行的交流讓他們受益匪淺。
在計(jì)算機(jī)領(lǐng)域,蘭伯特確實(shí)是位名副其實(shí)的傳奇人物。他的分布式計(jì)算理論奠定了這門學(xué)科的基礎(chǔ),并被稱為“分布式計(jì)算原理之父”;他在 1978 年發(fā)表的論文《分布式系統(tǒng)內(nèi)的時(shí)間、時(shí)鐘事件順序》成為計(jì)算機(jī)科學(xué)史上被引用最多的文獻(xiàn);他為“并發(fā)系統(tǒng)的規(guī)范與驗(yàn)證”研究貢獻(xiàn)了核心原理……
為此,美國(guó)計(jì)算機(jī)協(xié)會(huì)將 2013 年度圖靈獎(jiǎng)?lì)C發(fā)給了他?!叭绻阆矚g使用互聯(lián)網(wǎng),那么就該感謝萊斯利?!笔放谅灏柾醒芯恐行膭?chuàng)始人兼經(jīng)理、數(shù)字設(shè)備公司系統(tǒng)研究中心創(chuàng)始人兼經(jīng)理鮑勃·泰勒(Bob Taylor)曾如是評(píng)價(jià),“因?yàn)榛ヂ?lián)網(wǎng)建立在分布式系統(tǒng)技術(shù)的基礎(chǔ)知識(shí)之上,而后者又建立在萊斯利所發(fā)明的理論基礎(chǔ)之上?!?/p>
對(duì)于自己的研究成果,蘭伯特表示,我希望它們都能發(fā)揮作用,“因?yàn)閭€(gè)人對(duì)美有著不同的理解,所以人們究竟會(huì)更喜歡哪個(gè)理論也是‘仁者見仁、智者見智’”。在提及成功的秘訣時(shí),他認(rèn)為,每個(gè)人的研究道路都會(huì)因人而異,由于現(xiàn)在的計(jì)算機(jī)科學(xué)環(huán)境已經(jīng)和他開始起步的時(shí)代發(fā)生了天翻地覆的變化,他的經(jīng)驗(yàn)可能并不適用于每一個(gè)人。
如果一個(gè)人“最終想要成為自己想成為的人,就要做自己最嚴(yán)格的裁判”。他指出:“同時(shí),不要忽視你的批評(píng)者,不要因?yàn)橛^點(diǎn)相左就認(rèn)為批評(píng)者‘太愚蠢’,他們會(huì)推動(dòng)你不斷進(jìn)步?!?/p>
在他看來(lái),現(xiàn)在很多教師和學(xué)校希望按照他們所想象的那樣教導(dǎo)學(xué)生,然而這些想法可能對(duì)學(xué)生不一定適用。“比如,現(xiàn)在經(jīng)常通過(guò)就業(yè)率判定學(xué)校是否成功,而大學(xué)不應(yīng)該把讓學(xué)生就業(yè)作為辦學(xué)目的?!彼f(shuō),以編程為例,編寫“種子”編碼很重要,盡管它可能不會(huì)馬上產(chǎn)生作用,但可能在 10 年、15 年之后產(chǎn)生更重要的應(yīng)用。“教育目標(biāo)也應(yīng)該思考得更長(zhǎng)久、更遠(yuǎn)大一點(diǎn)。”
轉(zhuǎn)載自:《中國(guó)科學(xué)報(bào)》 (2015-12-03 第3版 國(guó)際)
推薦?? :1049天,100K!簡(jiǎn)單復(fù)盤!
推薦?? :年薪 40W Java 開發(fā)是什么水平?
推薦?? :Github掘金計(jì)劃:Github上的一些優(yōu)質(zhì)項(xiàng)目搜羅
