她改變了編程
- 2019 年 12 月 19 日
- 筆記
如果你上過編程課,一定被老師提醒過:不要使用goto語句!
因為goto語句不僅讓程式碼的可讀性很差,隨意的跳出還會給程式帶來安全隱患。
但是這種幾乎被現代編程明令禁止的語句,在電腦誕生之初卻司空見慣。
早期的程式設計師用goto來解決程式碼無法預料的後果,遇到什麼問題就用一句goto,讓程式跳轉到某個指定語句。
直到一位MIT的女教授,才讓我們徹底擺脫了goto語句的支配,她就是Barbara Liskov。

△芭芭拉·利斯科夫(Barbara Liskov),圖源:QuantaMagazine
剛滿80歲,榮譽等身,她是全美首批獲得電腦博士學位的女性之一,集馮諾依曼獎、圖靈獎於一身。
甚至可以說她發明了構成現代程式基礎的體系結構。
但在此之前,她是一位曾經因為性別申請普林斯頓數學研究生被拒的人。
所以Barbara Liskov究竟是怎樣的傳奇電腦科學家?
在其80歲壽誕之際,我們一起看看她改變了編程的故事。
好的設計,才有好的程式碼
上世紀40年代,美國發明了第一台電子電腦ENIAC。雖然早期的電腦體積很大,但提供的功能簡單,那時候的編程也不必考慮太複雜的結構。
goto語句是最簡單的方法,只需把程式的執行引導到對應的某一句即可。

廣泛使用的goto語句雖然簡單,但是卻沒有邏輯章法。用這種方式編寫的程式既難以閱讀,又容易造成危險,甚至還鬧出過人命。
曾經有一種名為Therac-25的軟體控制的放射治療機,就因為使用了過時程式設計方法,導致6名患者接受嚴重超劑量的輻射,造成了死亡事故。
如果沒有一個程式設計的基本架構,電腦硬體的發展已經超出了程式設計師能力所能承受之重。
終於在60年代,電腦程式設計迎來了新的理論,當時Böhm和Jacopini兩位電腦學家提出,可以用結構化的程式完全代替goto語句,只需使用順序、選擇和循環三種結構即可。
這種結構一直被使用至今。
1974年,彼時僅35歲的MIT女教授和她的學生將這種思想付諸實踐,他們發明了一種新的程式語言CLU。

CLU完全拋棄了goto語句,雖然這種程式語言沒有被廣泛採用,但是它在面向程式語言的發展過程中起過非常重要的作用。
CLU中的一些概念在許多方面影響了後來的程式語言,對後來出現的一些面向對象編程(OOP)語言做出了許多貢獻。
後來出現的Java、C++、C#、Python都是CLU的後代。
CLU的關鍵貢獻包括抽象數據類型、共享調用、迭代器、多個返回值、類型安全的參數化類型和變數類型。
Liskov對程式設計的貢獻不僅於此,現代面向對象程式設計的5大原則「SOLID」中的L就是以她名字命名的里氏替換原則(Liskov Substitution principle)。
1987年,Liskov在一次大會的主題演講中最早提出了這一原則,即繼承必須確保超類所擁有的性質在子類中仍然成立。

遵循里氏替換原則編寫的程式,克服了繼承中重寫父類造成的可復用性變差的缺點。
而且這一原則還保證了程式的正確性,擴展的子類不會給已有的系統引入新的錯誤,降低了程式碼出錯的可能性。
直至今日,所有面向對象編程的程式設計師還在遵守著Liskov提出的這項原則。
傳奇的女性,Barbara Liskov
如今Liskov的學術成就已經獲得的廣泛的承認。
但在那個年代,作為一個科學家,還是個女性,真的挺不容易,曾因為性別申請普林斯頓數學研究生遭拒。

Liskov在伯克利讀本科期間,100人的班裡,只有一兩名女性同學,她就是其中之一。
她修完了所有和數學、科學相關的課程,而學校當時卻不鼓勵女性同學這樣的做法。
也從來沒有人對她說:「嘿,你這樣做很好,不考慮跟我們一起合作嗎?」之類的話。
好在Liskov的母親沒有當面反對過她(雖然只是鼓勵她要在學校好好表現)。
但她對此不以為然,直到在斯坦福讀研畢業時,才意識到「性別」問題的存在。
因為在她畢業的時候,沒有任何人找她談工作的事情。
而像她的男性同學(Raj Reddy)就能被招聘到學術方向的崗位。
要知道,在那個年代,就業有點像「包分配」——顧問會通過與全國各地部門的合作來安排畢業生的工作。
但對於Liskov,可謂是「無人問津」。
在這之前,Liskov已經向MIT求職過,但得到的回饋卻是「不考慮擔任教授」。
發生這種情況時,你會認為「是我自己還不夠優秀」。
「但同時我也認為,電腦科學是開放的。」
幸好Liskov在Mitre公司的第一份工作還算不錯,她在這家公司期間,深入的研究了編程方法。

△Barbara Liskov正在設計抽象數據類型(ADT)
這項研究讓她獲得了一個一等獎論文。
1971年,她針對這項研究發表了一次演講,而後便受到了MIT和伯克利的邀請。
事情至此才發生了改變。
剛剛進入MIT時,大約1000名員工中只有約10名左右的女性教員。但其實,MIT有很多傑出的女性並不在教職人員之列。
在科學領域,很少有人能夠意識到女性做出的一些基礎性貢獻。
90年代,她回到斯坦福參加了一個部門慶典。一群老教授們談論著「校園關係網(old-boy network)」的八卦,他們說:
有個年輕女人表現得確實非常不錯,但那是因為她嫁給了一個教授。
Liskov覺得這件事情真是愚昧至極。
在Liskov擔任電腦科學系主任之前的10年里,部門只發現了一位值得聘用的女性。
2001-2004年,在她擔任部門領導期間,Liskov共聘用了7名女性,她並沒有濫竽充數,其中的3名初級教員都非常優秀。
再後來,Liskov獲得了圖靈獎,即便擁有了如此殊榮,還是免不了質疑的聲音。

△2008年度美國電腦學會(ACM)圖靈獎(Turing Award)
她做的工作,沒有我不知道的。為什麼她會獲得圖靈獎? 哦,那個工作不是她做的,是一個男同事替她做的。
「簡直一派胡言」,Liskov說道。
即便到了足夠開放的今天,她也認為現在的情況並不比那時好:
也許我是幸運的。如果我大學一畢業就結婚了,我可能會有一個完全不一樣的結果。
如何看待AI的未來
那麼,Liskov對人工智慧和機器學習發展有什麼看法呢?
我博士學位的工作是與John McCarthy合作研究人工智慧。 John提出了「國際象棋殘局」這個主題,由於我沒有玩過國際象棋,所以我讀了相關書籍,並將國際象棋的一些演算法翻譯成了電腦演算法。
那時候,人們認為,一個明智的做法是讓程式按照人類的意願來行事,但現在已然不是這樣了。
現在的機器學習程式在多數情況下效果還是不錯的。但有些情況下效果卻並不是理想,人們不知道問題出在了哪裡。 如果我在研究一個問題的時候,需要知道它的工作原理,那我不會用機器學習方法。 人工智慧是一種應用,而不是一門核心科學。
而對於電腦科學的發展,Liskov比較擔心的是互聯網,包括假新聞和安全問題。

若是一對離婚的夫婦,丈夫在發表一些對妻子誹謗的內容,包括她的住址之類的私人資訊,那就很可能引發一些非常可怕的事情。 這要回溯到80年代。那時候,15所大學和幾個政府單位實驗室通過互聯網連在一起。我們都是好朋友。他們當時的態度是,網站不應該對內容負責,這將扼殺他們的發展。 而現如今,這種態度還在繼續。 我們現在解決當下問題的時候,需要的不僅僅是技術,還需要法律來解決人們的不良行為,解決隱私與安全的問題。
One More Thing
分享Liskov對女性在事業發展過程中的一點建議:
在你能真正站起來之前,保持低調。而後再去擁抱成功。
傳送門
部落格: https://www.quantamagazine.org/barbara-liskov-is-the-architect-of-modern-algorithms-20191120/
維基百科: https://en.wikipedia.org/wiki/Barbara_Liskov
個人主頁: https://www.csail.mit.edu/person/barbara-liskov

