圖靈獎得主Barbara Liskov:為什么編程仍然很重要
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請至雷鋒網(wǎng)官網(wǎng)申請授權(quán)。 編者按:近日,英國科技網(wǎng)站The Register對麻省理工學(xué)院教授Barbara Liskov進(jìn)行了采訪。Barbara于2009年因其對編程語言和系統(tǒng)設(shè)計的貢獻(xiàn)而獲得圖靈獎,在本次采訪中,Barbara總結(jié)回顧了其在70年代創(chuàng)建CLU編程語言早期工作,并發(fā)表了一些關(guān)于CLU編程語言的最新見解。
在即將開幕的CNCC2021(中國計算機(jī)大會)上,Barbara也將作為特邀嘉賓發(fā)表演講,為幫助參會者更好了解Barbara的最新研究及對編程理念的思考,AI科技評論特此對The Register的文章進(jìn)行了編譯。
自從Barbara Liskov因其對編程語言和系統(tǒng)設(shè)計的貢獻(xiàn)而獲得圖靈獎已經(jīng)有12年了,最近,她又發(fā)表了一些關(guān)于CLU編程語言的最新見解:為什么編程仍然很酷?
現(xiàn)年80多歲的Liskov, 正領(lǐng)導(dǎo)著麻省理工學(xué)院的編程方法論小組。最近,她一直在研究并行計算。
在90年代時她曾與一名學(xué)生一起開發(fā)了拜占庭容錯系統(tǒng)(Byzantine Fault Tolerance),如今她表示,這對充滿區(qū)塊鏈的世界來說意義重大。
近年來,隨著CLU在GitHub上的出現(xiàn),人們的注意力轉(zhuǎn)向了Liskov師徒在20世紀(jì)70年代初創(chuàng)造的這門語言時的早期工作。今天,我們詳細(xì)談?wù)劄槭裁粗钡浇裉?,編程仍然很重要?/p>
1. 傳統(tǒng)的編程并不溯源 error,也沒有泛型
當(dāng)初CLU起步時,整個編程語言的狀態(tài)太差,許多東西需要創(chuàng)新。
例如,我們不得不正視泛型的問題。在抽象數(shù)據(jù)類型的概念出現(xiàn)之前,實(shí)際上已經(jīng)需要泛型了。如果你寫一個排序例程,并不希望更替不同類型的數(shù)組時都要重寫。
然后是異常處理。Liskov回憶起關(guān)于恢復(fù)模型與替代方案的爭論:“問題是,在引發(fā)異常之后,控制權(quán)是否隨后恢復(fù)到引發(fā)異常的代碼,還是只是結(jié)束了該代碼?"
如果沒有一種方法從主流中分離單個異常情況,那么經(jīng)常出現(xiàn)在遠(yuǎn)離錯誤源的bug就越難追蹤。不幸的是,今天這種情況仍然會發(fā)生,還需要你一個一個debug。
數(shù)據(jù)抽象是一件大事,所有其他東西也都是隨之而來的。Liskov說到。“如果你回顧一下 90 年代 Java 發(fā)生的事情,他們想使用采用參數(shù)多態(tài)的方式,但他們沒有做,也從來想過優(yōu)化異常處理”。
2. 發(fā)明新的計算機(jī)語言
然而,到了20世紀(jì)70年代末,科研道路出現(xiàn)了岔路口: 要么嘗試將這門語言商業(yè)化,要么堅(jiān)持研究。Liskov選擇了研究,“在我的小組里,沒有一個學(xué)生想要創(chuàng)業(yè)。"
直到現(xiàn)在,Liskov 還一直贊揚(yáng)她的學(xué)生 Russ Atkinson、Alan Snyder 和 Craig Schaffert 以及Stephen Zilles。后者也在麻省理工學(xué)院,并于 1973 年與她一起改進(jìn) CLU 基礎(chǔ)概念。Bob Scheifler, Eliot Moss和Toby Bloom也出現(xiàn)在1979年10月的CLU參考手冊上。
她指出,現(xiàn)在發(fā)生的事情別無二致?,F(xiàn)如今把東西放到網(wǎng)上,并建立一個智囊社區(qū)是一個相對簡單的過程。但是在70年代,你必須掛靠一家公司,但即便如此,也很難獲得啟動資金。直到90年代初,情況才有好轉(zhuǎn)。
話說回來,CLU的本質(zhì)是它沒有全盤接受多年來困擾其他語言的糟粕。Liskov說 ,“一門語言一旦運(yùn)行,它就開始衍生遺留問題,致使你必須繼續(xù)支持所有已經(jīng)編寫的代碼。這就產(chǎn)生了負(fù)擔(dān)。"
在過去的20年里,Liskov參與的大部分開發(fā)工作都與c++有關(guān)。她說,“程序開發(fā)不再是用機(jī)器語言完成的。這是一個很大的進(jìn)步。只是提高了抽象的層次,模塊化的原則就已經(jīng)被很好地理解了。"
然而,直到今天,Liskov一直希望改變的事情是:語言被強(qiáng)制執(zhí)行封裝。但是當(dāng)大家在構(gòu)建一些低級平臺時,又必須違反封裝。Liskov認(rèn)為封裝是編程方法的關(guān)鍵工作--模塊化,即將數(shù)據(jù)和處理數(shù)據(jù)的方法捆綁到單個單元中,并將對數(shù)據(jù)內(nèi)部的訪問限制在這些方法中。這與讓編譯器強(qiáng)制執(zhí)行是兩碼事。
不過,其他方面也有所改善。與 1970 年代可用的存儲能力相比,今天的巨大存儲能力意味著在設(shè)計模塊時,“緊湊性”可以讓“優(yōu)雅”退居二線。我們總是希望它可用,但盡可能簡單。
3. 結(jié)語
Liskov現(xiàn)在仍對編程和技術(shù)充滿熱情,她說:“編程和軟件工程仍然是一個令人興奮的職業(yè)。我認(rèn)為要牢記接口和實(shí)現(xiàn)之間的區(qū)別,讓行為與實(shí)現(xiàn)分開定義。
“如果你沒有使用強(qiáng)制封裝的語言(不幸的是,大多數(shù)語言都強(qiáng)制封裝),那么你就必須自己強(qiáng)制封裝,這有助于維持區(qū)塊鏈系統(tǒng)完整性,廣義地說,超類的對象應(yīng)該可以被子類的對象替換而不破壞應(yīng)用程序。”