程式設計之道(1987) - Geoffrey James翻譯

banq發表於2019-01-29

”The Tao Of Programming程式設計之道“作者是Nigel Tao,他是Go團隊中的主要人物之一,點選標題見原文

  程式設計師大師說:

     “當你學會從陷阱框架中抓取錯誤程式碼時,你就該離開了。” 
-------------------------------------------------- --------------------
                                  1.1 

 神秘的東西,誕生於沉默的虛空中;好似停滯不動,但又時刻仍然不斷運動。它是
 所有程式的來源。我不知道它的名字,所以我稱它為
 程式設計之道。

 如果道是偉大的,那麼作業系統是偉大的。如果
 作業系統很棒,那麼編譯器就很棒。如果編譯器
 很棒,那麼應用程式就很棒。使用者很高興,他們
 的世界就和諧。

 程式設計之道很遠,在早晨的風中迴歸。

                                  1.2

 道生了機器語言。機器語言催生了彙編程式。

 彙編程式誕生了編譯器。現在他們是一萬種語言。

 每種語言都有自己的目的,無論多麼謙虛。每種語言都表達
 了軟體的陰陽。每種語言都在道中佔有一席之地。

 但如果可以避免,請不要在COBOL中程式設計。

                                  1.3 

  道士萬物之始,道生了太空和時間。
  因此,空間和時間是程式設計的陰陽。

  不理解道的程式設計師總是耗盡
  時間和空間來執行程式。理解了的程式設計師
  總有足夠的時間和空間來實現自己的目標。

  怎麼會這樣呢?

                                  1.4 

  明智的程式設計師被告知道並遵循它;普通
  程式設計師被告知這是道並搜尋它;愚蠢的
  程式設計師聽到了道,然後開始笑了。

  如果沒有被嘲笑,就沒有道。

  最高的聲音是最難聽到的;前進是一種
  退卻的方式;偉大的才能在生命的晚期顯現出來。即使是完美的
  程式仍然存在缺陷。

                                 - 3 - 
                
-------------------------------------------------- --------------------- 
                   因此Spake成為程式設計師大師:

     “經過三天沒有程式設計,生活變得毫無意義。” 
-------------------------------------------------- --------------------- 
                                  2.1 

  舊的程式設計師是神秘而深刻的。我們無法理解
  他們的想法,所以我們所做的只是描述他們的外表。

  意識到,就像一隻穿越水面的狐狸;警報,就像
  戰場上的將軍一樣;善良,就像女主人問候她的客人一樣;簡單,就像
  未開墾的木塊;不透明,就像黑暗的洞穴中的黑色水池。

  誰能說出他們內心的秘密?

  答案只存在於道。

                                  2.2 

  圖靈大師曾夢見他是一臺機器。當他醒來時,
  他驚呼:

      “我不知道我是圖靈夢想還是我是一臺機器,
       或者還是一臺機器做的夢,正夢想著我是圖靈!” 

                                  2.3 

  來自一家大型計算機公司的程式設計師參加了一個軟體
  會議,然後回到他的經理那裡報告說:“什麼
  樣的程式設計師為其他公司工作?他們表現得很糟糕,並且
  不關心外表。頭髮很長而且沒有頭髮
  他們的衣服皺了起來,老了。他們吵醒了其他人,他們在我的演講中發出粗魯的聲音。“ 

  經理說:”我本不應該把你送到會議室。
  那些程式設計師生活在物理世界之外。他們認為生活
  荒謬,是偶然的巧合。他們來來往往不知道有
  限制。沒有照顧,他們只為他們的程式而活。
  他們為什麼要打擾社會習俗呢?

  他們在道中活著。

                                  2.4 

  新手問大師:”這是一個從不設計、
  記錄或測試他的程式的程式設計師,然而,所有認識他的人都認為他
  是世界上最好的程式設計師之一。為什麼是這樣?”

  大師回答:“那個程式設計師已經掌握了道。他已經
  超越了設計的需要;當
  系統崩潰時他不會生氣,但是他會毫無顧慮地接受宇宙;他已經
  超出了文件的需要;他不再關心是否有其他人
  看到他的程式碼;他已經超越了測試的需要;他的每一個
  程式都是完美的,平靜而優雅,他們的
  目的是不言而喻的。真的,他已經進入了道的神秘面紗。


                                 -  4  - 
                    
----------------------------------------- ------------------------------
                   因此,程式設計師大師說:

     “當程式正在測試時,進行設計
      更改為時已晚。” 
-------------------------------------------------- --------------------- 
                                  3.1 

  曾經有一個人參加過電腦貿易展。每當
  他進入的時候,那個男人都會告訴門口的警衛:

       “我是一個很好的小偷,因我的入店行竊而聞名。要
        預先警告,因為這個貿易展不會免於被偷盜的。” 

  這個講話大大擾亂了警衛,因為裡面有數百萬
  美元的電腦裝置,所以他小心看著這個男人
  。但那個男人只是從一個攤位走到另一個攤位,
  靜靜地哼著自己歌。

  當那個男人離開時,警衛把他拉到一邊搜查他的衣服,
  但沒有找到任何東西。

  在貿易展的第二天,這名男子回來並責備
  警衛說:“我昨天帶著巨大的戰利品逃脫,但今天會
  更好戰果。” 所以警衛更密切地看著他,但
  無濟於事。

  在貿易展的最後一天,警衛
  不再能夠抑制他的好奇心。“小偷先生,”他說,“我很困惑,我
  不能安息。請賜教。你
  偷的是什麼?” 

  那個男人笑了:“我在竊取idea”

                                  3.2 

  曾經有一位編寫非結構化程式的程式設計師大師,一個
  尋求模仿他的新手程式設計師也開始編寫
  非結構化程式。當新手要求大師評估
  他的進展時,大師批評他寫了非結構化的
  程式,說“適合大師的東西不
  適合新手。你必須在
  超越結構之前理解道。” 

                                  3.3 

 曾經有一個程式設計師被派到吳軍閥,軍閥問程式設計師:“會計賬務軟體包還是作業系統哪個更容易
  設計?”

  “作業系統,”程式設計師回答道。

  軍閥發出一聲難以置信的驚歎:“當然,一個
 會計賬務包是比作業系統的複雜性稍微複雜些。”


程式設計師說:“不是這樣,在設計會計軟體包時,
  程式設計師在具有不同
  想法的人之間作為調解人;它是如何執行,報告必須如何出現,以及如何
  符合稅收;相反,作業系統不受
  外觀的限制。在設計作業系統時,
  程式設計師尋求機器和想法之間最簡單的協調。
  這就是為什麼作業系統更容易設計的原因。“ 

  吳軍閥點頭微笑。”這一切都很好,但
  哪個更容易除錯?“ 

  程式設計師沒有回覆

                                  .3.4 

  一位經理去程式設計師大師那裡並表明他
  對新的應用需求,然後經理問了大師:“這需要多長時間,如果我給你5個設計這個系統
  程式設計師呢” 

  “大師說”這將需要一年

  “但是我們需要立即甚至更快地使用這個系統!
  如果我指派十名程式設計師,它需要多長時間?“ 

  主程式設計師皺起眉頭。”在這種情況下,
  需要兩年” 

  ‘而如果我給你一百個程式設計師呢’ 

  主程式設計師聳聳肩‘那這個專案就永遠無法
  完成,’他說。




                                 - 6 - 
                           
------- -------------------------------------------------- -------------- 
                   程式設計師大師說:

     “一個寫得很好的程式就是它自己的天堂; 一個編寫得不好的
     程式是它自己的地獄。“ 
--------------------------------------- -------------------------------- 
                                  4.1

  程式應該輕巧靈活,其子程式像
  一串珍珠一樣連線。應始終
  保留該方案的精神和意圖。應該既沒有太少也沒有太多,
  既沒有不必要的迴圈也沒有無用的變數,既不缺乏
  結構也沒有壓倒性的剛性。

  一項計劃應遵循“最小驚訝法”。這
  規則是什麼?簡單地說,程式應始終以最
  讓他驚訝的方式響應使用者。

  一個程式,無論多麼複雜,都應該作為一個單元。該
  方案由邏輯指引,而不是由由外表指引。

  如果程式在這些要求中失敗,它將處於
  混亂和混亂的狀態。解決這個問題的唯一方法是重寫
  程式。

                                  4.2 

  一位新手問大師:“我有一個程式,有時執行,
  有時會中止。我遵循程式設計規則,但我
  完全感到困惑。這是什麼原因?” 

  大師回答:“你很困惑,因為你不瞭解
  道。只有傻瓜才能期待他的同胞的理性行為。
  你為什麼期望來自人類構建的機器?
  計算機模擬決定論;只有道是完美的。

  程式設計規則是暫時的; 只有道是永恆的。
  所以你必須在接受啟蒙之前考慮道。“ 

  ”但是,什麼時候我意識到我已經接受啟蒙了呢?“ 
  新手問道。

  ”你的程式正常執行之時“大師回答

                                  .4.3 

  一位大師對一個新手在解釋道的本質,
  “道在所有的軟體中體現 - 無論多麼
  微不足道,”大師說道,“ 

  道在一個手持式計算器之中嗎?”新手問道。

  “是的,”。




                                 -  7  - 
  “道是在影片遊戲中嗎?”

  “甚至在影片遊戲中,”大師說。

  “道在個人電腦的DOS嗎?” 

  大師咳嗽並略微改變了姿勢。“ 
  今天的上課結束了,”他說。

                                  4.4 

  王子的一個程式設計師在編碼,他的手指在
  鍵盤上跳舞。程式編譯沒有錯誤資訊,
  程式像一陣輕柔的風。

  “優秀!” 王子驚呼:“你的技術完美無瑕!” 

  “技術?” 程式設計師從他的終端轉過身來說,“我所
  遵循的是道 - 超越所有技術!
  當我第一次開始程式設計時, 我會在一個情況中看到整個問題,三年之後
  我再也看不到這種情況;相反,我使用了子程式,到現在
  我就再也沒看到。我的整個存在於無形的空虛中,我的感覺
  是空閒的,我的精神,沒有計劃地自由工作,遵循自己的
  直覺。簡而言之,我的程式自編,沒錯,有時
  會遇到困難,我看到困難來了,我慢下來,我
  默默地看著,然後我改變了一行程式碼,困難
  就像怠慢的煙霧一樣消失了,然後我編譯該程式,我坐著
  不動,讓工作的快樂充滿了我的存在。我閉上眼睛
  片刻,然後登出。“ 

  王子說,”希望我的所有程式設計師都會這麼聰明!“ 



                                 -  8  -
                     
-------------------------------------------- --------------------------- 
                   程式設計師大師說:

     “雖然一個程式只有三行,但總有一天它
     需要維護“。
-------------------------------------------------- --------------------- 
                                  5.1 

  一個使用良好的門在其鉸鏈上不需要油。
  快速流動的溪流不會停滯不前。
  聲音和思想都不能透過真空傳播。
  如果不使用,軟體會腐爛。

  這些都是很大的謎團。

                                  5.2

  一位經理問程式設計師他需要多長時間才能完成
  他正在工作的程式。“明天我會完成的,” 
  程式設計師迅速回複道。

  “我認為你是不現實的,”經理說,“說實話,需要
  多長時間?” 

  程式設計師想了一會兒。“我有一些我
  希望補充的功能。這至少需要兩週時間,”他最後說道。

  “即使這太過於期待了,”經理堅持說,“ 
  如果你在程式完成時告訴我,我會很滿意的。” 

  程式設計師同意這一點。

  幾年後,經理退休了。在他的
  退休午餐上,他發現程式設計師在電腦前面睡著了,他整晚都在程式設計。

                                  5.3 

  新手程式設計師曾被指派編寫簡單的財務包。

  新手工作了很多天,但當他的老師
  審查他的程式時,他發現它包含一個螢幕
  編輯器,一組通用的圖形例程,一個人工智慧
  介面,但沒有提及任何
  財務。

  當老師問到這一點時,新手變得憤怒。
  “不要那麼不耐煩,”他說,“我
  最終會放入財務資料。” 

                                  5。

  一個好老師是否會忽視最卑微的學生?
  一個好父親是否允許一個孩子餓死?
  一個優秀的程式設計師拒絕維護他的程式碼嗎?

                                 -  9  - 
                       
----------------------------------------- ------------------------------ 
                   因此,程式設計師大師說:

     “讓程式設計師更多些,管理人員少些 - 然後全部會
     有所作為。“ 
-------------------------------------------------- --------------------- 
                                  6.1

  當經理們舉行無休止的會議時,程式設計師會編寫遊戲。
  當會計師談論季度利潤時,發展預算
  即將被削減。當資深科學家談論藍天時,雲層
  即將滾滾而來。真的,這不是程式設計之道。

  當經理做出承諾時,遊戲程式會被忽略。當
  會計師制定長期計劃時,和諧與秩序即將
  恢復。當資深科學家解決手頭的問題時,
  問題很快就會得到解決。

  確實,這才是程式設計之道。

                                  6.2 

  為什麼程式設計師沒有生產力?因為他們的時間浪費
  在會議上。

  為什麼程式設計師反叛?因為管理干擾
  很多。

  為什麼程式設計師逐個辭職?因為它們被
  燒壞了。

  他們為管理不善而工作,不再重視自己的工作。

                                  6.3 

  一位經理即將被解僱,但為他工作的程式設計師
  發明了一個新的程式,該程式變得流行並暢銷。作為
  結果,經理保住了他的工作。

  經理試圖給程式設計師一個獎金,但程式設計師
  拒絕了它,說,“我寫了這個程式,因為我認為這是
  一個有趣的概念,因此我希望沒有獎勵。”

  經理聽到這個訊息後說道,“這位程式設計師儘管
  缺乏自尊心,但也很清楚
  員工的正確職責。讓我們把他提升到
  管理顧問的崇高地位!” 

  但當被告知這一點時,程式設計師再一次拒絕,說:
  “我存在,所以我可以程式設計。如果我升職,我什麼
  也不做,只會浪費每個人的時間。我現在可以離開嗎?我有一個
  需要我照顧的程式等著我呢。” 




                                 -  10  - 
                                  6.4 

  一位經理去找他的程式設計師並告訴他們:“關於
  你的工作時間:你將不得不在9點來上班
 下午五點離開。“在這一點上,所有人都
  生氣了,有幾個人當場辭職。” 

  所以經理說:“好吧,在這種情況下,你可以設定自己的
  工作時間,只要你按計劃完成你的專案。” 
  現在很滿意的程式設計師開始在中午來上班,工作
  到凌晨。


                                 -  11  - 
               
--------------------------------------- -------------------------------- 
                   因此,程式設計師大師說:

     “你可以為公司高管演示一個程式,但是
      你不能讓他懂電腦。“ 
---------------------------------------- ------------------------------- 
                                  7.1 

  一位新手問大師:“東邊有一個很棒的木
  結構,人們稱之為“公司總部”。
  與副總統和會計師一起變得臃腫。它發出了
  大量的備忘錄,每個備忘錄都說“Go, Hence!” 或者“Go, Hither!” 而
  沒有人知道是什麼意思。每年都有新的名字被放到
  分支機構上,但都無濟於事。這樣一個不自然的實體如何
  存在?“ 

  大師回答說:”你認識到這種巨大的結構,並且
  對它沒有理性的目的感到不安。
  從無盡的旋轉中獲得樂趣?你不喜歡
  在它的避風分支下進行無憂無慮的程式設計嗎?
  為什麼你對它的無用感到困擾?“ 

                                  7.2 

  在東方有一條鯊魚比其他所有的魚都要大。
  它變成了一隻鳥,它的翅膀就像填滿天空的雲朵。
  當這隻鳥在陸地上移動時,它會帶來一條來自
  公司總部的訊息。這條訊息落入了
  程式設計師的中間,就像一隻海鷗在海灘上留下了痕跡。然後
  鳥兒在風中翱翔,飛上藍天回到
  家裡。

  新手程式設計師凝視著,因為他對這隻鳥感到奇怪
  不理解。一般程式設計師害怕
  鳥的到來,因為他害怕它的資訊。程式設計師大師繼續
  在他的終端工作,因為他不知道這隻鳥來了
  又走了。

                                  7.3 

  象牙塔的魔術師帶來了他的最新發明,
  供程式設計師大師檢查。
  當在等待大師
  沉默之時,魔術師將一個大黑匣子推進大師的辦公室。

  “這是一個整合的,分散式的,通用的工作站,” 
  魔術師開始說,“符合人體工程學設計的專有
  作業系統,第六代語言和多種狀態
  藝術使用者介面。我的助手花了幾百年的
  時間來建造。這不是很了不起。“ 

  大師略微抬起眉毛。”這確實令人驚訝,“他
  說。

  ”公司總部已經命令,“魔術師繼續說道,
  ”每個人都使用這個工作站作為新程式的平臺。
  你同意這個嗎?“ 

                                 -  12  - 
  ”當然,“大師回答說,”我會把它
  立即送到資料中心!“魔術師回到他的塔樓,
  很高興。

  幾天後,一個新手徘徊程式設計師大師辦公室說:“
  我找不到我的新程式了,你知道它可能在哪裡嗎?“ 

  ”是的,“主人回答說,”這些程式被壓棧到
  資料中心的平臺上。“ 

                                  7.4 

  程式設計師大師從一個程式開發移動到另外一個程式開發而不用擔心。
  管理層的任何改變都不會傷害他,即使
  專案被取消,他也不會被解僱。為什麼會這樣?他充滿了道。



                                 -  13  - 
--------------- -------------------------------------------------- ------ 
                   所以說主程式設計師:

     “沒有風,草就不動了。沒有軟體,
     硬體就沒用了。” 
-------------------------------------------------- --------------------- 
                                  8.1 

  一位新手問大師:“我認為一家電腦公司
  比其他公司大得多。它像
  巨人一樣高於競爭對手。其中任何一個部門都可以構成一個完整的
  企業。為什麼會如此呢?“ 

  大師回答說:“你為什麼要問這麼愚蠢的問題?那個
  公司很大,因為它很大。如果它只製造硬體,
  沒有人會買它。如果它只製造軟體,沒有人會使用它。
  如果它只維護系統,那麼人們就會像對待僕人一樣對待它。
  但因為它結合了所有這些東西,人們認為它
  是眾神之一!透過無為,它毫不費力地征服了人類。“ 

                                  8.2 

  一位大師程式設計師有一天經過一名新手程式設計師旁邊。大師
  注意到新手對手持電腦遊戲的關注。
  ”對不起,“他說,”我可以檢查一下“ 

  新手轉移注意力並將裝置交給主人。“我
  看到該裝置聲稱有三個級別的遊戲:簡單,中等
  和難”,大師說。“然而,每一個這樣的裝置都有一個級別
  的遊戲,裝置不尋求征服人類,
  就不會被人類征服了。“ 

  ”祈禱,偉大的大師“,新手懇求,”人們如何找到這個
  神秘的裝置?“ 

  大師將裝置扔到地上並用
  腳踩碎。突然,新手開悟了

                                  .8.3 

  曾經有一名從事微處理器工作的程式設計師。“看看
  我在這裡的情況如何,”他對前來
  訪問的大型機程式設計師說,“我有自己的作業系統和檔案儲存裝置。我
  不必與任何人分享我的資源。該軟體是自我
  一致且易於使用的。你為什麼不放棄現在的工作並
  加入我這裡?“

  然後大型機程式設計師開始向他的
  朋友描述他的系統,他說:“大型機就像一個古老的聖人在
  資料中心中冥想。它的磁碟驅動器就像
  端到端的機器的大海一樣。軟體是像
  鑽石一樣多面,像原始叢林一樣複雜。每個
  獨特的程式都像一條快速流淌的河流一樣穿過整個系統。這就是
  為什麼我喜歡我的地方。“ 

  微電腦程式設計師聽到這個後,沉默了。但這
  兩位程式設計師在他們的日子結束之前仍然是朋友。

                                 -  14  - 
                                  8.4

  硬體在通往Changtse的道路上遇到了軟體。軟體說:“你
  是陰,我是陽。如果我們一起旅行,我們將成名
  並賺取鉅額資金。” 所以一起提出,
  想要征服世界。

  現在,他們遇到了韌體Firmware,他穿著破爛的衣服,
  蹣跚地走在一根棘手的棍子上。韌體對他們說:“ 
  道在陰陽之外。它是沉默的,仍然是一池水
  。它不尋求名利,因此沒有人知道它的存在。它
  不尋求財富,因為它本身就是完整的。它存在
  於時空之外。“ 

  軟體和硬體,慚愧,返回家園。



                                 -  15  - 
                       
----------------------------------------- ------------------------------ 
                   因此,主程式設計師說:

     “你是時候你離開了。” 

相關文章