若是你大學上過編程課,必定被老師提醒過:不要使用 goto 語句!

若是你上過編程課,必定被老師提醒過:不要使用goto語句!程序員

由於goto語句不只讓代碼的可讀性不好,隨意的跳出還會給程序帶來安全隱患。算法

可是這種幾乎被現代編程明令禁止的語句,在計算機誕生之初卻司空見慣。編程

早期的程序員用goto來解決代碼沒法預料的後果,遇到什麼問題就用一句goto,讓程序跳轉到某個指定語句。安全

直到一位MIT的女教授,才讓咱們完全擺脫了goto語句的支配,她就是Barbara Liskov。架構


芭芭拉·利斯科夫(Barbara Liskov)

剛滿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對女性在事業發展過程當中的一點建議:

在你能真正站起來以前,保持低調。然後再去擁抱成功。

相關文章
相關標籤/搜索