about 5 years ago

THE DAO OF PROGRAMMING -- Geoffrey James

微電腦時代 96,97

第一部 寂靜虛無篇

大師如是說: "學會從程式抓蟲子之後, 就可以畢業了."

1.1 節

  • 寂靜虛無中有奧秘, 不動不靜, 乃程式之源, 吾無以名之, 故稱之為程式設計之道.

  • 若道至大, 則作業系統至大; 若作業系統至大, 編譯程式亦然; 若編譯程式至大,
    則應用程式亦復如是, 是故使用人大悅, 世有和諧存焉.

1.2 節

  • 程式設計之道無遠弗屆, 雖晨曦微風而返.

  • 道生機器語言, 機器語言生組譯程式.

  • 組譯程式生編譯程式, 於是萬餘語言存焉.

  • 各語言有其目的, 均表達軟體之陰陽; 其在道中亦各得其所.

  • 但若能避免, 就不要用 COBOL 寫程式.

1.3 節

  • 太初有道, 道生時空, 故時空乃程式設計之陰陽.

  • 程式員不悟道則時空永不敷使用, 悟道者恒有充份時空完成目標.

1.4 節

  • 上智程式員聞道而行之, 中智程式員聞道而求之, 下智程式員聞道而笑之.

  • 若無笑聲則無道矣.

  • 至高之聲難以聽聞.

  • 前進就是後退之路; 大智總是晚成; 每一個完美的程式仍有 BUG.

  • 道在所有知識之外.

第二部 古之大師篇

大師如是說: "三日不寫程式則生命無趣."

2.1 節

  • 古程式員神秘而深奧, 無以度量其思維, 僅能描述其表象.

  • 像狐狸涉水般地小心; 像戰場老兵般地警覺; 像未經琢磨的木頭般地璞拙;
    像洞中深潭地不透明.

  • 誰能指出他們心靈中的秘密?

  • 答案全在道中.

2.2 節

  • 大師 Turing 曾經夢到他是一部電腦, 醒後道:

  • “不知是我 Turing 作夢變成機器, 還是一部機器作夢變成我 Turing."

  • 一家大電腦公司的程式員參加軟體會議後, 向他的經理報告說: "你知道其他電腦
    公司有什麼程式員嗎? 他們不修邊幅, 頭髮長而邋遢, 衣服既舊且皺, 他們破壞
    了氣氛, 而且我簡報時老是製造噪音."

  • 經理說: "我根本就不應該派你參加會議, 這些程式員超然物外, 他們把生命看成無稽,
    意外的結合. 他們往來而無藩籬, 為他們的程式而活, 為什們他們一定要受社會積習
    的約束?

  • 他們生活在道中."

2.3 節

  • 生手問大師: "有一個程式員從不設計, 測試程式, 寫作文獻, 但了解他的人都認為
    他是世間最好的程式員. 為什麼?"

  • 大師曰: "這個程式員已充份悟道, 他超越了設計的需要; 系統垮了不會生氣,
    而無條件接受這個世界. 他超越了文獻的需要, 他不再計較是否有人看他的程式.
    他也超越了測試的需要, 他的每一個程式都圓滿無缺, 清澈, 優雅, 目的自明.

  • 是的, 他已悟道, 登堂入室.

第三部 設計篇

大師說: "到測試程式時再回頭修改設計就太遲了."

3.1 節

  • 曾經有人在參觀電腦展每天進門時都向警衛說: "我是的妙賊, 偷東西的技巧已臻化境,
    先告訴你, 我絕不會放過這次展覽."

  • 這段話刺激到警衛, 因為展覽場有好幾百萬元價值的儀器, 所以老是盯這他,
    不過卻只看到這個人一個攤位接著一個攤位看, 哼著小曲而已.

  • 這個人出門的時侯, 警衛把他帶到一旁搜身, 但卻找不到什麼.

  • 第二天這個人又來了, 而且教訓警衛說: "昨天我收獲不錯, 不過今天會更佳."
    所以警衛就更加注意他了, 但是仍然沒有結果.

  • 最後一天警衛終於忍不住好奇心, 問那個人: "賊大師, 我給您弄得寢食難安,
    您是否可以教我, 究竟偷了些什麼?"

  • 這個人笑笑, 說: "我偷的是概念."

3.2 節

  • 從前有一位大師專寫沒有結構化的程式, 一個生手模仿他, 也開始寫沒有結構化的
    程式. 當這位生手要求大師評量進展時, 大師卻批評他寫作沒有結構化的程式.

  • 大師說: "對大師適用的不一定適合生手, 在能超越結構化之前, 必須先悟道."

3.3 節

  • 某長官問程式員: "設計會計系統與作業系統, 那一個比較簡單?"

  • 程式員說: "作業系統."

  • 長官發出不相信的驚呼: "很顯然的, 會計系統不如作業系統複雜", 他說.

  • "不!" 程式員回答, "在設計會計系統時, 程式員是各種不同主意的人之間的橋樑,
    這些主意不外乎: 系統要如何作業? 報表型式如何? 要如何迎合稅法? …等等.

  • 反過來, 作業系統卻不受外界表象的限制; 在設計作業系統時, 程式員尋求人與機器
    間最純的和諧, 這就是為什麼作業系統容易設計."

  • 長官點頭微笑稱是: "但是那一個容易偵錯?"

  • 程式員沒有回答.

3.4 節

  • 經理去見大師, 並且告訴他一套新應用程式文件的需求規格, 問道: "如果我給你五
    個程式員, 要多久才能設計好這個系統?"

  • 大師很快回答: "一年."

  • "但是我們需要馬上用這個系統! 如果我給你十個程式員, 那要多久?" 經理說.

  • 大師皺眉說: "這要兩年."

  • "如果我給你一百個程式員呢?"

  • 大師聳聳肩: "這個系統根本作不出來了."

第四部 寫作篇

大師如是說: "寫作良好的程式本身自成天堂, 寫得差的程式本身就是地獄."

4.1 節

  • 程式要輕靈, 副程式像一串珍珠. 程式的精神與意圖應始終如一, 不多不少;
    沒有多餘的迴圈, 也沒有額外的變數, 既不缺少結構, 也不過份笨重.

  • 程式應該追隨 "最低驚訝定律", 這是什麼?

  • 簡單得很, 使用人對程式的反應是驚訝的機會要愈低愈好.

  • 程式不管再複雜, 應該以一個整體來作用; 他應該用內部邏輯, 而不是外在的表
    象來指導作業.

  • 如果程式不滿足這些要求, 就會雜亂而易生混淆, 唯一的補救就是重新寫過.

4.2 節

  • 生手問大師: "我有一個程式, 有時侯作得很好, 有時侯卻不行; 我一直遵行程式設
    計的規律, 但是卻把我弄得很困擾, 其理安在?"

  • 大師答曰: "因為不悟道才會如此, 只有笨蛋才會期望他的同儕有合理的行為,
    而你卻對人類生產的機器有所期望?! 計算機只模擬了決定論, 只有道才十全十美.

  • 程式設計的準則還是暫時性的, 只有道才會進入永恒. 所以, 你在開竅前要先思索道."

  • "但我要如何才能知道已經開竅了呢?" 生手問.

  • 大師回答: "從此以後, 你的程式都能正確執行."

4.3 節

  • 大師對弟子說: "不論軟體之為大為小, 道在所有軟體中."

  • "桌上型計算機有道嗎?" 弟子問.

  • "有!" 大師答.

  • "電動玩具程式中有道嗎?" 弟子續問.

  • "也有!" 大師說.

  • "那個人電腦的 DOS 中有道嗎?"

  • 大師咳一下, 輕輕挪動了位置, "下課", 他說.

4.4 節

  • 皇太子的程式員正在寫作軟體, 指尖在鍵盤上飛舞, 程式順暢無誤的編譯完成,
    執行起來像陣微風輕拂而完美的結束.

  • "了不起!", 太子嘆曰: "你的技巧無懈可擊."

  • "技巧?" 程式員從終端機上轉過頭說, "我所信從的是道, 道超越任何技巧!
    我開始學寫程式時, 在我眼前所見是混成一片的程式; 三年後, 不再見到這一大片
    程式了, 我學會使用副程式; 現在, 眼前一片空靈, 什麼都沒有了, 所有東西都進入無
    型式的一片靜寂; 所有感覺都不必作用.

  • 我的精神可以依直覺而不必依任何計劃行事, 換言之, 我的程式自己寫作自己.
    當然, 有時會有困難的問題; 我看著他們到來, 我降低自已的速度, 靜靜的看,
    改一列程式之後困難就會煙消雲散; 我再重新靜靜坐著欣賞工作的歡樂. 我閉上雙眼
    一會兒, 然後關機."

  • 皇太子說: "我的所有程式員都那麼聰明睿智嗎?"

第五部 維護篇

大師如是說: "雖然程式只有三列, 但總有一天需要維護."

5.1 節

  • 常用的門不必上油.

  • 急流不會淤塞.

  • 聲音與思想不能在真空中傳遞.

  • 不用的軟體會生鏽.

  • 這就是至大的奧秘.

5.2 節

  • 經理問程式員究竟要多久才能把手上的程式寫完. "明天", 程式員很快的回答.

  • 經理說: "我想你不太踏實; 真的要多久?"

  • 程式員想了一會兒: "我希望在程式中加上一些東西, 這至少要兩週." 程式員終於說

  • "時間還是短了一些", 經理堅持說: "如果你能簡單的告訴我什麼時後能寫完我才會滿意."

  • 程式員同意這一點.

  • 幾年後經理退休了, 在歡送餐會上發現那個程式員伏在終端機上睡著了, 因為他
    寫程式寫了整夜.

5.3 節

  • 一個生手被分派去寫一個單純的財務軟體.

  • 這個生手狂熱地工做了幾天, 但是當大師看他的成品時, 卻發現這個程式中包
    含一個螢光幕編修程式, 一組一般性的繪圖程式, 一個人工智慧界面, 但卻沒有什麼
    與財務方面有關.

  • 大師就問他, 這個生手卻變得很激動: "不要那麼沒耐心", 他說, "我最終會把財務
    部份加上去."

5.4 節

  • 好農夫會忽視他種的穀子嗎?

  • 好老師會忽略他最差的學生嗎?

  • 好父親會容許他的孩子挨餓嗎?

  • 好程式員會拒絕維護自己的程式嗎?

第六部 管理篇

大師如是說: "程式員要多, 經理要少, 生產力就會增加."

6.1 節

  • 經理有開不完的會的話, 程式員就會寫電玩; 主計部門想到利潤, 發展經費
    就會被刪減; 高級科學家談到藍藍青天, 那麼青天一定會有浮雲飛過.

  • 當然, 這不是程式設計之道.

  • 當經理許下承諾, 程式員就不理會電玩; 當主計部門有長程規劃, 就會回復
    和諧與秩序; 當高級科學家處理手上的問題, 問題很快就會解決.

  • 這才是程式設計之道.

6.2 節

  • 為什麼程式員沒有生產力? 因為他們的時間都花在開會上頭.

  • 為什麼程式員難以駕御? 因為管理階層干預太多.

  • 為什麼程式員一個接一個辭職? 因為他們精力耗光了.

  • 在不良管理下工作, 程式員不會覺得他的工作有價值.

6.3 節

  • 某個經理快被炒魷魚了, 但是他底下的一個程式員寫了一個叫好又叫座的程式;
    當然, 這位經理因而保住了飯碗.

  • 經理打算給這位程式員一點獎勵, 但他拒絕接受, 並且說: "因為我覺得這是個有
    趣的概念, 才會寫這個程式, 所以我不希望有獎勵."

  • 經理聽了之後說: "這個程式員雖然職位不高, 但卻充份了解做為一個職員的責任,
    讓我們把他升成崇高的管理顧問吧!"

  • 在告訴程式員時, 他再度拒絕, 說: "我之存在是因為可以寫程式, 如果升了我,
    那除了浪費每一個人的時間外而成不了事. 我可以走了嗎? 我還得寫程式."

6.4 節

  • 經理告訴程式員們說: "下面是你們的工作時間: 早上九點來上班, 下午五點鐘下班."
    所有程式員都很生氣, 有幾個馬上辭職.

  • 於是經理說: "好吧! 這樣好了, 只要能夠如期完工, 工作時間由你們自定." 程式員現
    在滿意了, 每天中午開始工作, 直到第二天早上.

第七部 公司智慧篇

大師如是說: "你可以對主管示範一個程式, 但無法讓他通曉電腦."

7.1 節

  • 生手問大師: "遙遠東方有一個叫 "公司總部" 的偉大樹狀結構, 上面滿滿地標上了
    些副總裁, 會計長等的圖案. 它發出大量的備忘錄, 每張上面都寫了 "收文!"
    "發文!" 沒有人知道是什麼意義. 每年都會把新的名字加到新的分枝上, 但似乎全
    都徒勞無功. 為什麼這樣一個不自然的組織還能繼續存在?"

  • 大師回答說: "你已經體認到這個龐大的結構, 而被它不合理的目的困擾.
    不過你能不從它無休止的迴旋而得到樂趣嗎? 能夠不欣賞深藏在枝葉底端毫無困難
    的程式設計嗎? 為什麼要被他的無用而困擾呢."

7.2 節

  • 東方海上有大魚曰鯤, 鯤能變成雙翼遮天的大鵬. 當大鵬飛越陸地時帶來一道公司
    總部的訊息, 這道訊息正好掉在一群程式員中央, 然後大鵬折起雙翼乘風而歸.

  • 生手程式員瞪眼望著大鵬, 因為他們不認得; 中智程式員憂大鵬的來臨, 因為他們
    害怕它帶來的訊息; 只有大師才能繼續坐在終端機前工作, 因為他不知大鵬的來去

7.3 節

  • 象牙塔的魔術師帶著他的最新發明去見大師, 他推了一個大黑盒子走進大師的辦公室,
    大師正在靜靜的等著.

  • "這是一套整合性, 分散式, 一般用途的工作站", 魔術師如是說, "還有一套專屬的
    作業系統, 第六代語言, 多項最先進的使用人界面, 再加上人體工學的設計;
    這花了我的助手們好幾百人年才造出來的, 不是很了不起嗎?"

  • 大師抬了下眼珠子, "的確了不起." 大師說.

  • 魔術師繼續說: "公司總部已經下令每個人都要用這台工作站做發展新軟體的基石,
    您同意嗎?"

  • "當然." 大師答道: "我馬上會把它放到資訊中心去." 於是魔術師高高興興的回到
    象牙塔去.

  • 幾天後, 一個生手在大師的辦公室裡團團轉, 說: "我找不到新程式的報表,
    您知道會在那兒嗎?"

  • "當然", 大師答道, "報表就堆在資訊中心裡頭的基石上!"

7.4 節

  • 大師可以毫無憂慮的從這個程式轉入另一個程式, 管理上的改變傷不到他; 縱使計劃中止了, 也不會被炒魷魚. 為什麼? 因為他充滿了道.

第八部 硬體與軟體篇

大師如是說: "沒有風, 草不會動, 沒有軟體, 硬體就是廢物."

8.1 節

  • 生手問大師: "我知道一家電腦公司比其他的大得多, 高高在上就像巨人之比侏儒;
    它的任一部都可以單獨成為一個企業. 為什麼會這樣?"

  • 大師回答: "你為什麼問這個笨問題? 這家公司就是因為它大才會這麼大. 如果它只
    知道硬體, 沒有人會買它; 如果只生產軟體, 沒有人會用它; 如果只維護系統,
    人家會把它看成修理員; 但是因為他把所有的合在一起, 人們就把它當神一樣看待了

  • 它根本無需競爭, 因為贏來不費吹灰之力."

8.2 節

  • 大師有一天經過一個生手旁邊, 發現生手迷上一台手掌型的電玩, "對不起", 大師說,
    “我可以看看它嗎?"

  • 生手停下來, 並且把這台機器交給大師. 大師說: "我看到這台機器玩起來有三個層次:
    初級, 中級, 高級; 不過這種機器通常都有另一個層次的玩法, 使機器贏不了人類,
    而人類也勝不了機器."

  • "啊! 大師", 生手說: "這個奇妙的開關在那裡?"

  • 大師把機器摔到地上, 用腳把它踏爛.

  • 突然地, 生手開竅了.

8.3 節

  • 從前有一位微電腦的程式員對一位來拜訪他的大型電腦程式員說: "你看,
    在我這兒多好! 我有我自己的作業系統與儲存設備, 我不必與任何人共用任
    何電腦資源; 軟體本身自給自足, 而且容易使用. 為什麼你不辭掉目前的工作
    來加入我們?"

  • 於是大型電腦的程式員就對他的朋友解釋: "大型電腦就像古之聖哲般的穩穩座落
    在資訊中心中央, 磁碟一個接一個蔚為奇觀, 軟體像鑽石般地有多種面目, 像
    古森林般的濃密茂盛. 各個程式像一片急流般地湧入系統, 而這就是我在那兒工
    作的樂趣."

  • 聽了這段話之後, 微電腦程式員靜默無聲; 但是這兩個人卻結為好友, 至死不渝.

8.4 節

  • Hardware 與 Software 走在路上, Software 說: "你是陰我是陽, 如果我們能一條心,
    一定會成大名賺大錢." 所以, 他們就聯合在一起而想征服世界.

  • 走了一段路之後, 碰到 Firmware, 穿得破破爛爛, 拿著根柺杖, 並且對他們說:
    “道在陰陽之外, 寂靜不動如古井之不生波瀾; 道不求名, 故無人知曉其存在;
    道不逐利, 因它圓滿無缺. 道超乎時空之外."

  • Hardware 和 Software 聽了之後倍感慚愧而打道回家.

第九部 尾聲

大師如是說: "這是下課的時候了!"

← Hello World 唐鳳 -- 第零次向日葵數位體驗營 @ OSDC 2014 →