
點擊,查看本書教學大綱
【編者按】一起來看看第一位圖靈獎得主Alan Jay Perlis 關於計算機編程的名言警句,建議收藏!
作者 | Alan J. Perlis 譯者 | 香檳超新星作者簡介:Alan Jay Perlis (April 1, 1922 – February7, 1990),美國著名計算機科學家,歷任普渡大學,卡耐基梅隆大學,耶魯大學教授。第一位圖靈獎獲得者。

1.一個人的常量是另一個人的變量。(甲之常量,乙之變量)2.函數會延遲綁定(binding);數據結構會誘導綁定的發生。正確姿勢:在編程後期再定義數據結構。3.語法糖(英語:Syntacticsugar,也譯為糖衣語法)會引起分號的癌症。4.每個程序都是其他程序的一部分,因此很少能完全適用。5.如果程序需要處理大量的數據,那麼它處理數據的方式一定只局限於少數幾種。6.對稱性這個概念能夠降低複雜度(協同例程包括子例程);不要放過任何尋找對稱性的機會。8.如果一種語言的程序需要人們去注意一些不相關的東西,那麼這是一門低級語言。(low level)9.在同一個數據結構上運行100個函數要比在十種數據結構上運行10個函數要好。10.儘早形成習慣:以相同的方式執行相同的過程。積累習慣用語。標準化。莎士比亞與你之間的唯一區別在於習慣用語的多少,而不是詞彙量。11.如果你的程序有10個參數,那你可能是漏了一些。12.遞歸是計算的源頭,因為它用更長的執行時間換來了描述的精簡。13.如果兩個人編寫的程序完全相同,則每個人寫的都應該拆解成microcode,這樣以後肯定就不會完全相同了。14.從長遠來看,每個程序都會變得越來越繁複冗餘,最終成為一堆沒用的碎片。16.每個程序都至少有兩個目的:一個是寫這個程序的原因,另一個不是。17.如果在你解釋自己寫的程序時,有聽眾點頭了,那他一定是睡着了,請務必把他叫醒。19.如果一門編程語言不能影響你對編程的整體認知,那它甚至不值得一學。20.只要有模塊化的地方,就可能會有誤會發生:隱藏起一部分信息就意味着需要注意檢查溝通的過程。
24.如果我們從小就開始編寫程序,那麼也許長大以後我們自然而然地就能夠閱讀它們了。25.一個人只能在頭腦中顯示複雜的信息。就像對於視覺來說,移動,流動或視角的改變要遠比靜止的圖片重要,無論圖片有多麼精美。26.在我們想要在程序中表達的東西里,永遠都會有一些是所有已知語言都無法很好的表達的。27.一旦你真正了解了編程的精髓,就請其他人來編寫它。28.在計算機行業,很難找到正確的時間單位來衡量進度。某些大教堂花了一個世紀才完成。你能想象一個需要花費這麼長時間的程序會有多麼大的體量嗎?29.如果要給一個系統的門面翻新,需要在控制圖中添加一個能構成循環的邊,而不僅僅是新增一個節點。30.在編程的過程中,我們所做的一切都是某種更通用情形的特例——而且通常我們很快就能體會到這一點。31.簡潔並不會先於複雜性發生,而是在複雜性之後。32.程序員不應以其才智和邏輯來衡量,而應以案例分析的完整性來衡量。33.第十一條誡命是「汝可計算」或「汝不可計算」——具體是哪個我忘了。(The eleventh commandment was "Thou Shalt Compute" or"Thou Shalt Not Compute". 譯者註:此處為化用基督教十條誡命的典故。)34.字符串是一個比較極端的數據結構,任何傳遞了字符串的地方都存在很多重複的過程。它是隱藏信息的理想工具。35.每個人都能被教會如何雕刻:但不能這樣教米開朗基羅。對於優秀的程序員來說也是如此。36.使用程序證明四色定理不會改變背後的數學——它只能表明這個世紀挑戰本身在數學上可能並沒那麼重要。37.最重要的那台計算機其實一直在我們的顱內高速運轉,不斷向外界尋找那種能令人滿意的對大腦的仿真。對真正的計算機的標準化將是一場災難——因此標準化可能不會發生。38.結構化程序設計支持排中律。(譯者註:the law of the excluded middle,排中律是指在同一個思維過程中,兩個互相矛盾的思想不能都假,必有一真。)39.關於圖像:一張圖片的價值與一萬個單詞等量——但也僅與一萬個描述這張圖片的單詞等量。幾乎沒有哪個10K單詞的集合能夠被圖片充分描述。40.有兩種方式可以編寫完全不報錯的程序:但只有第三種能work。
41.一些編程語言雖然做到了擁抱變化,但本身卻沒有進步。42.通過某個程序員對FORTRAN持續保持活力這件事的態度,能夠對他本人有所了解。43.在軟件系統的世界中,通常是那些早起的鳥兒創造蟲子。44.有時我認為在計算機領域中,唯一一件統一的事情就只有「取指令-執行」周期。45.計算的目的是模仿我們的綜合能力,而不是理解我們的分析能力。47.正如威爾·羅傑斯(Will Rogers)所說,「不存在自由變量這種東西。」48.對於不懂編程的外行來說,最好的編程入門書籍是《愛麗絲夢遊仙境》。但這只是因為,對於任何一行的外行來說,這本書都是最好的。49.在我們的伊甸園中,放棄匯編語言就是我們偷嘗的禁果:浪費機器周期的編程語言是有罪的。現在,LISP機器允許LISP程序員們脫掉胸罩以及遮羞的無花果葉了。50.當我們理解了基於知識的系統時,情況將與以前一樣——但我們的指尖會被燒焦。51.將計算機帶到家裡,既不會改變家也不會改變計算機,但可能會使街角的酒吧重新煥發活力。52.一個系統有子系統,子系統又有子系統,子子孫孫無窮盡也,這也解釋了為什麼我們總是需要從頭來過。54.要提防圖靈焦油坑(譯者註:Turingtar-pit,指允許極大的功能自由度,但因為對常用任務沒有給予任何支持,因此難以學習和使用的系統),雖然一切皆有可能,但想做的事情卻沒有一件是容易的。55. LISP程序員只看到所有東西的價值,卻對要付出的代價一無所知。56.軟件一直處於緊張狀態。因為它看上去可以任意地變得更完美;但它也可以任意地改變這種狀態。58.愚蠢的人無視複雜度。實用主義者忍受它的折磨。少數人可以繞道而行。而天才則將其刪除。59.在英語中,每個詞都可以變成動詞。在我們的編程語言中可以這樣嗎?
61.在編程上,以及在其他任何事情上,身處error都意味着涅槃。63.當我們編寫可以「學習」的程序時,事後會證明,我們學到了,但程序並沒有。64.通常情況下手段能合理化目標:目標促進了技術的發展,而即使這個目標不復存在了,技術依然能留存。65.不要搞錯了:計算機處理的是數字,而不是符號。我們對一項活動算數化的程度,衡量了我們理解(和控制)的程度。66.使變量可變很容易。控制恆定的持續時間才是難點。67.想一想,光是琢磨「算法」和「程序」之間的根本區別,我們花費了多少心神。68.如果我們相信數據結構,就必須相信獨立的(因此也是並行的)進程。要不然我們為什麼還要在結構內收集數據?我們為什麼要容忍那些只提供其中之一的語言呢?69.在某個5年裡,我們將獲得一種非常出色的編程語言。只是我們無法控制這5年什麼時候到來。70.幾個世紀以來,印第安人發展了手語來傳達那些與生活息息相關的現象。而來自不同部落(FORTRAN,LISP,ALGOL,SNOBOL等)的程序員們不需要在小馬上扛着一塊黑板也能做到。71.文檔就像定期保險:它能滿足人的需求,因為幾乎沒有人是為了取得利益而去做這件事的。72.充分的bootstrap是一種自相矛盾的說法。73.控制變化梯度的不是語言的弱點而是語言的優勢:唉,一門語言永遠脫離不了自己原生的羈絆。74.有沒有可能,軟件與其他任何事物都不同,因為它本身就是註定被丟棄的:它的意義就在於像肥皂泡那樣破裂?75.由於生命力活躍,計算領域總是迫切需要新的陳詞濫調:平庸可以安撫我們的神經。76.應該由用戶來給程序定參數,而不是程序的創建者。77.人,計算機,以及算法之間的交流就像是一場搶凳子遊戲:瘋狂地尋求平衡只能使三個中的一個最終只能尷尬地站着。78.如果你的計算機說英語,那它可能是日本製造的。79.接觸人工智能領域一年足以使人開始相信上帝真的存在。80.長時間的與計算機接觸,會把數學家變成文員,把文員變成數學家。
81.在計算領域,將顯而易見的東西變成有用的東西是「挫敗感」一詞的鮮活定義。82.我們處在時代更迭的邊界上:今天,我們的程序證明了費馬的倒數第二個定理。83.圖靈機和現代計算機之間有什麼區別?就像希拉里(Hillary)登上珠穆朗瑪峰(Everest),和希爾頓酒店在珠穆朗瑪峰上落成之間的區別那樣。84.研究實驗室的座右銘:我們今天已經在從事的研究,有的人可能到明天才剛想到這個idea。85.儘管中國人應該崇拜APL,但是他們把賭注壓在了FORTRAN上。86.如果我們認為可以把一個活躍的數據庫系統中進程與數據的比率任意減小,甚至保持在較小的程度,我們都只是在自欺欺人罷了。87.我們有迷你(mini)計算機和微型(micro)計算機。而pico計算機又是什么小眾的語義分支呢?88.麥克斯韋方程式不足以設計電動機,這並不是計算機的錯。89.使用手持計算器並不能教會人們計算機知識,但能讓人們忘記怎麼做算術。91.這台計算機讓人想起LonChaney——它是一個有着一千張面孔的機器。92.計算機是終極的污染源:其產生的排泄物與生產的食物之間無法區別。93.當有人說,「我想要一種那樣的編程語言,我只需要說自己想幹什麼就可以了」時,乾脆給他一根棒棒糖好了。94.界面能讓項目保持整潔,但不能加速它的增長:而功能可以。95.如果你不願意對自己的idea負責,那就算有好的idea也沒用,連提都不要提。96.計算機並不能自行帶來秩序,就像它也不能自行讓機會顯露。97.當一個教授堅持認為計算機科學是X但絕對不是Y時,請同情一下他帶的研究生。98.在計算中,出現一次故障的平均時間會越來越短。99.在人和計算機的共生系統中,必須由人來做出調整適應機器:因為機器不會自己適應。100.只要世界上還有一個程序,我們就永遠都不會沒有程序可寫。
101.面對失敗是處理方法很簡單:努力改進就行了。而面對成功的處理方法也很簡單:你解決的是錯誤的問題。所以同樣需要努力改進。102.僅僅通過表面上正式的手段,是無法從非正式過渡到正式的。105.你無法跟別人交流複雜性本身,只能交流對它的認識。106.從字符串中提取出意義是很困難的,但字符串是我們交流的唯一憑藉。107.爭論愈演愈烈:PL / I 是Bactrian還是Dromedary(雙峰駱駝還是單峰駱駝)?108.每當兩個程序員批評他們自己寫的程序時,兩個人都沉默了。109.想想吧!有了VLSI,我們可以在1平方厘米中包裝100個ENIACS。111.羅馬帝國為何衰亡?「辦公自動化」用拉丁語怎麼說?113.連接神經科學和心理學的唯一建設性理論將從軟件研究中誕生。115.對大多數人來說,編程的概念雖然簡單明了,但真正動手編程卻比登天還難。116.你能學的時候覺得自己差不多知道了,能寫下來的時候覺得心裡更有把握了,能教別人的時候覺得自己更明白了,但當你能寫出程序的時候,你就能確定自己真的懂了。117.教孩子編程是違背現代教育原則的。制定計劃,嚴格地組織自己的思路,專注於細節,學習自我批評。做這些事情有什麼樂趣可言?118.如果你可以想象出一個只有計算機或機器人處於底層的社會,那麼還有什麼是你想象不出來的呢。120.改造舊程序以適應新機器通常意味着,新機器會被調整到像舊機器那樣運作。原文鏈接:http://www.cs.yale.edu/homes/perlis-alan/quotes.html


掃碼優惠購書