Dijkstra的觀點(diǎn)

與大家分享若干Dijkstra的觀點(diǎn)。希望對初入門者有所啟發(fā)。(注:原文出自網(wǎng)絡(luò),已經(jīng)無法溯源原始鏈接或頁面。

艾茲格·W·迪科斯徹 (Edsger Wybe Dijkstra,1930年5月11日~2002年8月6日)荷蘭人。 計(jì)算機(jī)科學(xué)家,畢業(yè)就職于荷蘭Leiden大學(xué),早年鉆研物理及數(shù)學(xué),而后轉(zhuǎn)為計(jì)算學(xué)。1972年獲得素有計(jì)算機(jī)科學(xué)界的諾貝爾獎(jiǎng)之稱的圖靈獎(jiǎng),之后,他還獲得過1974年 AFIPS Harry Goode Memorial Award、1989年ACM SIGCSE計(jì)算機(jī)科學(xué)教育教學(xué)杰出貢獻(xiàn)獎(jiǎng)、以及2002年ACM PODC最具影響力論文獎(jiǎng)。一般初學(xué)者應(yīng)該熟悉他的“最短路徑算法”。

Edsger Wybe Dijkstra
  • 軟件的版本號(hào) 2.6, 2.7, ... 都是胡扯。本來第1版就應(yīng)該是最終的產(chǎn)品,可是軟件公司總是先弄出來一個(gè)不完整的版本,騙大家買了,以后再慢慢“升級”。每次升級都要用戶再次付錢。

  • 編程有多種流派,我喜歡把它們歸類成“莫扎特 vs 貝多芬”。當(dāng)莫扎特開始寫樂譜時(shí),作品就已經(jīng)完成了。他的手稿一氣呵成,書法也很好。貝多芬不一樣,他總是在懷疑和掙扎。他的作品一般是還沒有想好就開始寫,然后就往上面貼紙條修改。有一次貝多芬改了9遍才把手稿完成,后來有人把這手稿一層層的撕開,發(fā)現(xiàn)第一版和最后一版是一模一樣的。這種改來改去的做法是 Anglo-Saxon 民族的傳統(tǒng),它貫穿了英國式的教育。

  • 作曲家的工作不是寫樂譜,而是構(gòu)思音樂。最早的時(shí)候人們編程都是用匯編語言的,就跟寫樂譜差不多。后來他們發(fā)明了高級語言,就以為這些語言把編程的問題解決了。但是你仔細(xì)一瞧,發(fā)現(xiàn)它們只是把編程最微不足道的問題解決了,但是困難的問題仍然困難。這些高級語言與越來越大的野心加在一起,反而讓程序員頭腦的負(fù)擔(dān)更重了。

  • 稱職的程序員都知道自己頭顱的尺寸是有限的,所以他們以謙遜的態(tài)度來對待工作,像回避瘟疫一樣地回避小聰明。

  • 當(dāng)我1970年在法國巴黎講學(xué)如何編程的時(shí)候很成功,聽眾都非常積極?;丶业穆飞衔矣衷诒壤麜r(shí)布魯塞爾的一個(gè)大軟件公司進(jìn)行了同樣的演講,結(jié)果非常失敗。那恐怕是我一生中最失敗的演講。后來我發(fā)現(xiàn)了為什么:他們的管理層不喜歡無懈可擊的程序,因?yàn)檫@公司是靠“維護(hù)軟件”的合同來維持生存的。程序員對此也不感興趣,因?yàn)樽钭屗麄兣d奮的事情在于不知道自己在干什么。他們覺得如果清楚地知道自己在干什么,那就沒有挑戰(zhàn)性了,就是無聊的工作。

  • 研究物理的人如果遇到不理解的事情,總是可以責(zé)怪上帝,世界這么復(fù)雜不是你的錯(cuò)。但是如果你的程序有問題,那就找不到替罪羊了。0就是0,1就是1,就是你把它搞砸了。

  • 1969年,在阿波羅號(hào)登月之后不久,我在羅馬的北約軟件工程會(huì)議遇到了 Joel Aron,阿波羅計(jì)劃的軟件負(fù)責(zé)人。我知道每個(gè)阿波羅飛船上面的代碼都會(huì)比前一個(gè)多4萬行。我不知道“行”對于代碼是個(gè)什么單位,但4萬行肯定是很多了。我很驚訝他們能把這么多代碼做對,所以我問 Joel:你們是怎么做到的?他說:做什么?我說:把那么多代碼寫正確。Joel 說:“正確?!其實(shí)在發(fā)射前僅僅五天,我從登月器計(jì)算軌道的代碼里發(fā)現(xiàn)一個(gè)錯(cuò)誤,這代碼把月球的重力方向算反了。本來該吸引的,結(jié)果寫成了排斥。是一個(gè)偶然的機(jī)會(huì)讓我發(fā)現(xiàn)了這個(gè)錯(cuò)誤?!?我的臉都白了,說:“這些家伙運(yùn)氣真好?” Joel 說:“是的。”

  • 軟件測試可以確定軟件里有 bug,但卻不可能用來確定它們沒有 bug。

  • 程序的優(yōu)雅性不是可以或缺的奢侈品,而是決定成功還是失敗的一個(gè)要素。優(yōu)雅并不是一個(gè)美學(xué)的問題,也不是一個(gè)時(shí)尚品味的問題,優(yōu)雅能夠被翻譯成可行的技術(shù)。牛津字典對 elegant 的解釋是:pleasingly ingenious and simple。如果你的程序真的優(yōu)雅,那么它就會(huì)容易管理。第一是因?yàn)樗绕渌姆桨付家?,第二是因?yàn)樗慕M件都可以被換成另外的方案而不會(huì)影響其它的部分。很奇怪的是,最優(yōu)雅的程序往往也是最高效的。

  • 當(dāng)沒有計(jì)算機(jī)的時(shí)候,編程不是問題。當(dāng)有了比較弱的計(jì)算機(jī)時(shí),編程成了中等程度的問題?,F(xiàn)在我們有了巨大的計(jì)算機(jī),編程就成了巨大的問題。

  • 我最開頭編程的日子跟現(xiàn)在很不一樣,因?yàn)槲沂墙o一個(gè)還沒有造出來的計(jì)算機(jī)寫程序。造那臺(tái)機(jī)器的人還沒有完工,我在同樣的時(shí)間給它做程序,所以沒有辦法測試我的代碼。于是我發(fā)現(xiàn)自己做的東西必須要能放進(jìn)自己的腦子里。

  • 我的母親是一個(gè)優(yōu)秀的數(shù)學(xué)家。有一次我問她幾何難不難,她說一點(diǎn)也不難,只要你用“心”來理解所有的公式。如果你需要超過5行公式,那么你就走錯(cuò)路了。

  • 為什么這么少的人追求優(yōu)雅?這就是現(xiàn)實(shí)。如果說優(yōu)雅也有缺點(diǎn)的話,那就是你需要艱巨的工作才能得到它,需要良好的教育才能欣賞它。

  • 有效的程序員不應(yīng)該浪費(fèi)很多時(shí)間用于程序調(diào)試,他們應(yīng)該在開始時(shí)就避免把故障引入。

  • 程序測試是表明存在故障的一種有效方法,但對于證明沒有故障,調(diào)試則無能為力。

  • Go To語句太容易把程序弄亂,應(yīng)從一切高級語言中去掉;只用三種基本控制結(jié)構(gòu)就可以寫各種程序,而這樣的程序可以由上而下閱讀而不會(huì)返回。

2017年06月21日修訂

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容