程序員的工作中布滿了由他提出的詞匯——顯示、死鎖、信號(hào)量、無(wú)GOTO程序設(shè)計(jì)、結(jié)構(gòu)化編程...... 但他對(duì)程序設(shè)計(jì)的影響力遠(yuǎn)非任何術(shù)語(yǔ)表所能闡示。 ...... ALGOL高級(jí)編程語(yǔ)言已經(jīng)成為結(jié)構(gòu)清晰、數(shù)學(xué)基礎(chǔ)嚴(yán)謹(jǐn)?shù)囊粋€(gè)典范,而他是ALGOL語(yǔ)言的主要貢獻(xiàn)者之一。他為我們理解程序語(yǔ)言的結(jié)構(gòu)、表示方法與實(shí)現(xiàn)做出了巨大的貢獻(xiàn)。 ...... 他創(chuàng)造、展現(xiàn)著美麗且有用表達(dá)方式,設(shè)計(jì)與實(shí)現(xiàn)了第一個(gè)ALGOL60編譯器。 以上文字摘錄自一段圖靈獎(jiǎng)?lì)C獎(jiǎng)詞,這是1972年8 月14日在波士頓舉行的計(jì)算機(jī)學(xué)會(huì)年會(huì)上,由圖靈獎(jiǎng)委員會(huì)主席麥克羅伊,親自頒發(fā)給一位被后世稱為計(jì)算機(jī)科學(xué)奠基人之一、編程界先驅(qū)的傳奇級(jí)人物——艾茲格·W. 迪杰斯特拉(Edsger W. Dijkstra)。 如果你覺(jué)得“Edsger W. Dijkstra”這個(gè)名字陌生又熟悉,那很正常,大部分中國(guó)程序員如果眼熟這個(gè)名字,都是因?yàn)閷W(xué)過(guò)計(jì)算最短路徑的 Dijkstra 算法;不過(guò)因?yàn)樗呛商m人,名字不符合英語(yǔ)的發(fā)音規(guī)則,導(dǎo)致大部分人都難以記住這個(gè)名字正確的拼寫(xiě)。 Dijkstra 的偉大貢獻(xiàn)包括:
他的根本性貢獻(xiàn)覆蓋了很多領(lǐng)域,包括:編譯器、操作系統(tǒng)、分布式系統(tǒng)、程序設(shè)計(jì)、編程語(yǔ)言、程序驗(yàn)證、軟件工程、圖論......等等。他的很多論文為后人開(kāi)拓了整個(gè)新的研究領(lǐng)域。我們現(xiàn)在熟悉的一些標(biāo)準(zhǔn)概念,比如互斥、死鎖、信號(hào)量等,都是 Dijkstra 發(fā)明和定義的。 沒(méi)錯(cuò),這是一位真正理論和編程兩手硬的傳奇?zhèn)ト恕?/p> Dijkstra的傳奇人生 科學(xué)家家庭的學(xué)霸 Dijkstra在鹿特丹長(zhǎng)大,他的父親Douwe Wybe Dijkstra是一位化學(xué)家、他的母親Brechtje Cornelia Kruyper是一位數(shù)學(xué)家。這種充滿科學(xué)氣息的家庭背景對(duì)于他的職業(yè)生涯乃至他的整個(gè)人生都有著深刻的影響。Dijkstra在當(dāng)?shù)氐腉ymnasium Erasmianum讀高中,由于高中畢業(yè)時(shí)數(shù)學(xué)、物理、化學(xué)、生物都是滿分,在老師和父母的勸說(shuō)下,他于1948年考入了Leyden大學(xué)學(xué)習(xí)理論物理學(xué)。 在大學(xué)期間,世界上最早的電子計(jì)算機(jī)出現(xiàn)了。由于Dijkstra在三年之內(nèi)就取得了學(xué)士學(xué)位,這令他的父親非常高興,并在1951年9月同意他去英國(guó)參加一個(gè)由劍橋大學(xué)開(kāi)設(shè)的夏季課程,學(xué)習(xí)電子計(jì)算裝置程序設(shè)計(jì)的課程。這個(gè)課程的講師是著名的M. V. Wilkes,由于出色的知識(shí)儲(chǔ)備(超級(jí)學(xué)霸),當(dāng)時(shí)還是一名學(xué)生的Dijkstra獲得了一個(gè)難得的機(jī)會(huì)——Van Wijingaarden請(qǐng)他來(lái)阿姆斯特丹作為一名程序設(shè)計(jì)人員為自己工作。至此,Dijkstra的程序設(shè)計(jì)生涯開(kāi)始了。 1956,一個(gè)奇跡被“簡(jiǎn)單”的創(chuàng)造了 在阿姆斯特丹Dijkstra首次體驗(yàn)了程序設(shè)計(jì),之后陸續(xù)為很多機(jī)器研制開(kāi)發(fā)了軟件,1956年為了展示新計(jì)算機(jī)ARMAC的計(jì)算能力,初試身手的Dijkstra搞出了他的算法處女作——Shortest Path Algorithm,也就是著名的最短路徑算法。據(jù)Dijkstra自述,他搞出最短路徑算法的時(shí)候連紙筆都沒(méi)用。當(dāng)時(shí)他和他老婆在阿姆斯特丹一家咖啡廳的陽(yáng)臺(tái)上曬太陽(yáng)喝咖啡,突然就把這個(gè)算法想出來(lái)了。 Dijkstra 后來(lái)還曾在采訪中說(shuō),他的最短路徑算法之所以能如此簡(jiǎn)潔,是因?yàn)楫?dāng)時(shí)在咖啡店里沒(méi)有紙和筆,這強(qiáng)迫他在思考時(shí)避免復(fù)雜度,盡可能追求簡(jiǎn)單。事實(shí)上,只要你稍加關(guān)注他的訪談和文章,經(jīng)常能發(fā)現(xiàn)一個(gè)主題:資源的匱乏往往最能激發(fā)創(chuàng)造性。 當(dāng)時(shí)的算法研究還比較原始,牛人們忙著用計(jì)算機(jī)搞數(shù)值計(jì)算,對(duì)離散算法不屑一顧;學(xué)家們都不認(rèn)為這能成為一個(gè)數(shù)學(xué)問(wèn)題:兩點(diǎn)之間的路徑數(shù)量是有限的,其中必然有一條最短的,這算什么問(wèn)題呢?所以那時(shí)連一個(gè)象樣的專注于離散算法的專業(yè)期刊都沒(méi)有。因此Dijkstra推遲發(fā)表了自己算法處女作,直到1959年,他才把這個(gè)算法當(dāng)做捧場(chǎng)發(fā)表在了Numerische Mathematik的創(chuàng)刊號(hào)上。Dijkstra因?yàn)樽疃搪窂剿惴ㄒ粦?zhàn)成名,在之后的幾十年里,直到今天,這個(gè)算法被廣泛應(yīng)用在各個(gè)行業(yè)。 1952至1956年間,程序設(shè)計(jì)經(jīng)歷了一個(gè)演變的過(guò)程,一方面是由于系統(tǒng)分組的復(fù)雜性要求一個(gè)更具結(jié)構(gòu)性的操作系統(tǒng),另一方面是由于科學(xué)、數(shù)學(xué)上關(guān)于程序設(shè)計(jì)的態(tài)度都提出了一個(gè)清楚的、關(guān)于如何提高工作效率的觀點(diǎn)。Dijkstra的最短路徑算法是在這方面取得的突出進(jìn)展,Dijkstra可以說(shuō)是因此一戰(zhàn)成名。 因?yàn)檫@種演變是全球性的,在全世界的推動(dòng)下,一個(gè)科學(xué)的計(jì)算機(jī)語(yǔ)言基礎(chǔ):ALGOL,不久就誕生了。 在沒(méi)日沒(méi)夜地工作了8個(gè)月后,Dijkstra搞出了Algo60,為了Algo60,Dijkstra發(fā)表了一篇石破天驚的文章:Recursive Programming。至此人們才知道,原來(lái)高級(jí)語(yǔ)言也可以高效地實(shí)現(xiàn)遞歸。從此以后,所有程序員都不可避免地和Dijkstra發(fā)明的一個(gè)詞(或者說(shuō)是概念)打交道:堆棧。 ALGOL讓Dijkstra獲得了圖靈獎(jiǎng),而且Algo60還讓Dijkstra深入地思考了多道程序設(shè)計(jì)的問(wèn)題,最終發(fā)明了每個(gè)系統(tǒng)程序員都繞不開(kāi)的概念:semaphore。 如果說(shuō)最短路徑算法使Dijkstra鋒芒初露,那Algo60就使他真正實(shí)現(xiàn)了揚(yáng)名立萬(wàn)。 1958年,Dijkstra代表Dutch MC出席了11月在Mainz召開(kāi)的會(huì)議,那是一個(gè)定義ALGOL詳述的準(zhǔn)備會(huì)議,在1958的最后一個(gè)月,Dijkstra給ALGOL60下了這樣的定義:“一個(gè)奇跡就被這樣簡(jiǎn)單的創(chuàng)造了。” 偏見(jiàn)與經(jīng)典 即使是Dijkstra這樣的天才,人生也有不如意的時(shí)期。1962年,Dijkstra開(kāi)始在TH Eindhoven任全職教授,雖然在國(guó)外已經(jīng)被認(rèn)為是計(jì)算機(jī)科學(xué)的主席,但在這里Dijkstra位置實(shí)際上只是一個(gè)數(shù)學(xué)教授。他的同事們對(duì)于計(jì)算機(jī)科學(xué)一直帶有偏見(jiàn),導(dǎo)致Dijkstra第一個(gè)學(xué)生的論文被他在Eindhoven數(shù)學(xué)上的同事拒收了。對(duì)于他和他的妻子來(lái)說(shuō),那段不景氣的日子是他們一生中最困難的時(shí)期。 但是這種小挫折并不能妨礙象Dijkstra這樣的牛人創(chuàng)造歷史。他一邊教數(shù)值分析 ,一邊開(kāi)始開(kāi)發(fā)一個(gè)新的操作系統(tǒng),并培養(yǎng)計(jì)算機(jī)科學(xué)家。幾年后,THE Multiprogramming System橫空出世。THE是第一個(gè)支持松散耦合,顯式同步的進(jìn)程并由此使得嚴(yán)格證明系統(tǒng)沒(méi)有死鎖變得容易的操作系統(tǒng)。 此后 Dijkstra 進(jìn)入了學(xué)術(shù)上最活躍的時(shí)期,他接著投入到編寫(xiě)結(jié)構(gòu)化編程筆記中去,盡管Eindhoven的同事們對(duì)此不是保持沉默、就是完全消極的反應(yīng),但Dijkstra選擇了正確的還擊方式:他給歐洲和美國(guó)的同事們復(fù)印了20多份稿件。 于是經(jīng)典就此誕生了,Dijkstra從此被尊為結(jié)構(gòu)化編程的奠基人。 傳奇仍在繼續(xù),由于計(jì)算機(jī)變得越來(lái)越強(qiáng)大,程序設(shè)計(jì)和維護(hù)的方式跟不上軟件復(fù)雜度的快速上升,世界進(jìn)入了“軟件危機(jī)”。1968年,Dijkstra給ACM通訊寫(xiě)了一篇短文,該文后改成信件形式刊登,以便早日發(fā)表,這就是具有歷史意義的、著名的“Go To Letter”。 Dijkstra在信中建議:“Go To語(yǔ)句太容易把程序弄亂,應(yīng)從一切高級(jí)語(yǔ)言中去掉;只用三種基本控制結(jié)構(gòu)就可以寫(xiě)各種程序,而這樣的程序可以由上而下閱讀而不會(huì)返回”。這封信引起了激烈的討論。人們逐漸認(rèn)識(shí)到:不是一個(gè)簡(jiǎn)單地去掉Go To的問(wèn)題,而是促進(jìn)一種新的程序設(shè)計(jì)觀念、方法和風(fēng)格,以期顯著提高軟件生產(chǎn)率和降低軟件維護(hù)代價(jià)。 在1960 年代后期,Dijkstra解決了多個(gè)圖論算法問(wèn)題,他發(fā)表的關(guān)于并發(fā)程序控制的論文,開(kāi)創(chuàng)了分布式計(jì)算和并發(fā)計(jì)算的領(lǐng)域,他也首先定義了互斥和死鎖并提出了解法。 他和 Jaap Zonneveld 一起寫(xiě)了第一個(gè) ALGOL 60 的編譯器,這是最早支持遞歸的編譯器。他們約定項(xiàng)目結(jié)束前都不許刮胡子,Zonneveld 在結(jié)束后很快剃掉了胡子,而 Dijkstra 從此終身留著胡子。 在分布式計(jì)算方面,除了定義前面提到的互斥、死鎖等并發(fā)控制的基礎(chǔ)概念和問(wèn)題,他還開(kāi)創(chuàng)了自穩(wěn)定系統(tǒng)這個(gè)子領(lǐng)域,并且是最早對(duì)容錯(cuò)系統(tǒng)進(jìn)行研究的人。 分布式計(jì)算最權(quán)威的會(huì)議是 PODC,“PODC 影響力論文獎(jiǎng)”是分布式計(jì)算領(lǐng)域最高的榮譽(yù),它認(rèn)可的是經(jīng)過(guò)時(shí)間考驗(yàn)的重要成就。而 Leslie Lamport 曾經(jīng)評(píng)價(jià)到,PODC 之所以存在就是因?yàn)?Dijkstra。 后來(lái)Dijkstra減少了在Eindhoven TH的工作,自1973年起,成為了Burroughs的一名研究員,在工作中,Dijkstra有機(jī)會(huì)多次參觀了在美國(guó)的得克薩斯州立大學(xué),整個(gè)美國(guó)的好客給他和他的妻子都留下了深刻的印象,1984年,他和妻子決定搬到美國(guó),并去到得克薩斯州立大學(xué),開(kāi)始擔(dān)任那里的計(jì)算機(jī)科學(xué)學(xué)院全職教授,此后在教學(xué)生活中Dijkstra不停編寫(xiě)、討論程序設(shè)計(jì)技術(shù),一做就是15年。直到69歲,才結(jié)束了作為教授的職業(yè)生涯。 2002年8月6日,與癌癥抗?fàn)幎嗄甑腄ijkstra在荷蘭Nuenen自己的家中去世,享年72歲。 這一年的 PODC 獎(jiǎng)?lì)C給了他,獲獎(jiǎng)?wù)撐氖撬?1974 年寫(xiě)的一篇關(guān)于自穩(wěn)定系統(tǒng)的論文。為了紀(jì)念他,PODC 決定從 2003 年起把這個(gè)獎(jiǎng)項(xiàng)改名為 Dijkstra 獎(jiǎng)。 參考文獻(xiàn): 中科院計(jì)算所:https://mp.weixin.qq.com/s/1iDRnkN25uJoOQ1hiVLy7g Chinese Software Developer Network : https://blog.csdn.net/g9yuayon/article/details/44125 Edsger W. Dijkstra本人所著書(shū)籍《編程的修煉》 譯者序 Dijkstra獲圖靈獎(jiǎng)以后,軟件領(lǐng)域又涌現(xiàn)出圖形用戶界面、面向?qū)ο蠹夹g(shù)等一系列新的里程碑,因特網(wǎng)更是帶來(lái)一個(gè)全新的時(shí)代。但是其對(duì)于編程領(lǐng)域的技術(shù)開(kāi)發(fā)、對(duì)于編程語(yǔ)言的發(fā)展和程序理論研究的深刻影響卻持續(xù)至今。 Dijkstra留下了一本編程領(lǐng)域里經(jīng)典著作中的經(jīng)典,每一個(gè)關(guān)注計(jì)算機(jī)科學(xué)技術(shù)的本質(zhì),冀求在程序和軟件領(lǐng)域有長(zhǎng)遠(yuǎn)發(fā)展的計(jì)算機(jī)工作者、教師和學(xué)生都不能錯(cuò)過(guò)。 我們站在偉人肩上,所以看得更遠(yuǎn)。 Dijkstra經(jīng)典著作 編程的修煉 作者:[荷蘭]艾茲格· W. 迪杰斯特拉(Edsger W. Dijkstra) 譯者:裘宗燕 內(nèi)容簡(jiǎn)介: 本書(shū)是圖靈獎(jiǎng)獲得者艾茲格·W. 迪杰斯特拉最重要的著作,也是編程領(lǐng)域里經(jīng)典著作中的經(jīng)典。 作者基于其敏銳的洞察力和長(zhǎng)期的實(shí)際編程經(jīng)驗(yàn),對(duì)基本順序程序的描述和開(kāi)發(fā)中的許多關(guān)鍵問(wèn)題做了獨(dú)到的總結(jié)和開(kāi)發(fā)。本書(shū)討論了基本順序程序的本質(zhì)特征、程序描述和對(duì)程序行為(正確性)的推理,并通過(guò)從簡(jiǎn)單到復(fù)雜的一系列程序的思考和開(kāi)發(fā)范例,闡釋了基于嚴(yán)格的邏輯推理開(kāi)發(fā)正確而可靠的程序的過(guò)程。 |
|