轉載至:http://yinwang0.lofter.com/post/183ec2_e08415
一個對 Dijkstra 的採訪視頻
(不能訪問 YouTube 的人可以從這裡下載 MPEG1,300M)
之前在微博上推薦了一個對 Dijkstra 的採訪視頻,看了兩遍之後覺得實在很好,所以再正式推薦一下。如果你不清楚 Dijkstra 的貢獻,那麼就想一想自己用的程式語言裡面司通見慣的“遞迴函式”是哪裡來的。其實當年遞迴函式是 Dijsktra 和另一個人不顧委員會裡眾人的反對和懷疑,堅持要放進 Algol 60,所以後來才進入了 Pascal,C,Java 這樣的語言的。那個時候 John McCarthy 不在場,不然的話就會有三個人支援了。
現在看來,任何一個語言裡面沒有遞迴函式都是不可思議的事情,然而在1950-60年代的時候,居然很少有人知道它有什麼用。所以你就發現,所謂的“主流”和“大多數人”一直都是比較愚蠢的。現在,同樣的故事發生在 lambda 身上。多年以後,沒有 lambda 的語言將是不可接受的。
在這裡只摘錄他提到的幾個要點。某些觀點也許不是最好的辦法,但我確信其中有非常值得學習的地方。
軟體的版本號碼 2.6, 2.7, ... 都是胡扯。本來第1版就應該是最終的產品,可是軟體公司總是先弄出來一個不完整的版本,騙大家買了,以後再慢慢“升級”。每次升級都要使用者再次付錢。
編程有多種流派,我喜歡把它們歸類成“莫紮特 vs 貝多芬”。當莫紮特開始寫樂譜時,作品就已經完成了。他的手稿一氣呵成,書法也很好。貝多芬不一樣,他總是在懷疑和掙紮。他的作品一般是還沒有想好就開始寫,然後就往上面貼紙條修改。有一次貝多芬改了9遍才把手稿完成,後來有人把這手稿一層層的撕開,發現第一版和最後一版是一摸一樣的。這種改來改去的做法是 Anglo-Saxon 名族的傳統,它貫穿了英國式的教育。
作曲家的工作不是寫樂譜,而是構思音樂。最早的時候人們編程都是用組合語言的,就跟寫樂譜差不多。後來他們發明了進階語言,就以為這些語言把編程的問題解決了。但是你仔細一瞧,發現它們只是把編程最微不足道的問題解決了,但是困難的問題仍然困難。這些進階語言與越來越大的野心加在一起,反而讓程式員頭腦的負擔更重了。
稱職的程式員都知道自己頭蓋骨的尺寸是有限的,所以他們以謙遜的態度來對待工作,像迴避瘟疫一樣地迴避小聰明。
當我1970年在法國巴黎講學如何編程的時候很成功,聽眾都非常積極。回家的路上我又在比利時布魯塞爾的一個大軟體公司進行了同樣的演講,結果非常失敗。那恐怕是我一生中最失敗的演講。後來我發現了為什麼:他們的管理層不喜歡無懈可擊的程式,因為這公司是靠“維護軟體”的合約來維持生存的。程式員對此也不感興趣,因為最讓他們興奮的事情在於不知道自己在幹什麼。他們覺得如果清楚地知道自己在幹什麼,那就沒有挑戰性了,就是無聊的工作。
研究物理的人如果遇到不理解的事情,總是可以責怪上帝,世界這麼複雜不是你的錯。但是如果你的程式有問題,那就找不到替罪羊了。0就是0,1就是1,就是你把它搞砸了。
1969年,在阿波羅號登月之後不久,我在羅馬的北約軟體工程會議遇到了 Joel Aron,阿波羅計劃的軟體負責人。我知道每個阿波羅飛船上面的代碼都會比前一個多4萬行。我不知道“行”對於代碼是個什麼單位,但4萬行肯定是很多了。我很驚訝他們能把這麼多代碼做對,所以我問 Joel:你們是怎麼做到的。他說:做什麼。我說:把那麼多代碼寫正確。Joel 說:“正確。。其實在發射前僅僅五天,我從登月器計算軌道的代碼裡發現一個錯誤,這代碼把月球的重力方向算反了。本來該吸引的,結果寫成了排斥。是一個偶然的機會讓我發現了這個錯誤。”我的臉都嚇白了,說:這些傢伙運氣真好。Joel 說:“是的。”
軟體測試可以確定軟體裡有 bug,但卻不可能用來確定它們沒有 bug。
程式的優雅性不是可以或缺的奢侈品,而是決定成功還是失敗的一個要素。優雅並不是一個美學的問題,也不是一個時尚品味的問題,優雅能夠被翻譯成可行的技術。牛津字典對 elegant 的解釋是:pleasingly ingenious and simple。如果你的程式真的優雅,那麼它就會容易管理。第一是因為它比其它的方案都要短,第二是因為它的組件都可以被換成另外的方案而不會影響其它的部分。很奇怪的是,最優雅的程式往往也是最高效的。
當沒有電腦的時候,編程不是問題。當有了比較弱的電腦時,編程成了中等程度的問題。現在我們有了巨大的電腦,編程就成了巨大的問題。
我最開頭編程的日子跟現在很不一樣,因為我是給一個還沒有造出來的電腦寫程式。造那台機器的人還沒有完工,我在同樣的時間給它做程式,所以沒有辦法測試My Code。於是我發現自己做的東西必須要能放進自己的腦子裡。
我的母親是一個優秀的數學家。有一次我問她幾何難不難,她說一點也不難,只要你用“心”來理解所有的公式。如果你需要超過5行公式,那麼你就走錯路了。
為什麼這麼少的人追求優雅。這就是現實。如果說優雅也有缺點的話,那就是你需要艱巨的工作才能得到它,需要良好的教育才能欣賞它。