?? zenofpg.htm
字號:
<html>
<head>
<title>程序設(shè)計之禪</title>
<meta http-equiv=Content-Type content="text/html; charset=GB2312">
</head>
<body bgcolor="#FDFFFF" text="#000000" link="#339900" vlink="#CC0066" alink="#CECF94">
<p align="center"><font face="細明體"><b><font size="5"><a name="top"></a>程序設(shè)計之禪</font></b></font></p>
<a name="content"></a>
<p align="center">◎目錄</p>
<table>
<tr><td><a href="#preface">自序</a></td></tr>
<tr><td><a href="#front">本書組成表說</a></td></tr>
<tr><td><a href="#foreword">推薦序</a></td></tr>
<tr><td><a href="#introduction">導讀</a></td></tr>
<tr><td><a href="#book01">卷一 木</a></td></tr>
<tr><td><a href="#book02">卷二 火</a></td></tr>
<tr><td><a href="#book03">卷三 土</a></td></tr>
<tr><td><a href="#book04">卷四 金</a></td></tr>
<tr><td><a href="#book05">卷五 水</a></td></tr>
<tr><td><a href="#AboutAuthor">關(guān)于作者</a></td></tr>
<tr><td><a href="#AboutBook">關(guān)于本書</a></td></tr>
</table>
<hr>
<pre>
<font size="4">
<a name="preface"></a>
<b>自序</b>
《程序設(shè)計之道》一書的出版(1987年由infobooks出版)在程控界普受好評。于是,
出版社又邀請我,再翻譯一些與程控相關(guān)的文章,做為這部經(jīng)典名作的補充。雖然,我表
明個人能力難以勝任,但終究還是被說服,決定放手一試。
本書是漫漫多月的研究與翻譯的成果。我試圖透過對傳統(tǒng)名著的精萃,來表達一個復
雜的主題:禪。無疑地,將有許多電腦考古學者對我的選擇格言、諺語的標準提出質(zhì)疑。
他們會問,「為什么不用《UNIX程序員、大象和妓女》的寓言?」「他竟敢忽略傳統(tǒng)名著
《涂林銷售歷險記》!」對于這些批評,我只能說,我已竭盡所能選擇最具代表性的經(jīng)典
名言。
為了確定書中各個章節(jié)的年代,我采用了朝代的系統(tǒng)觀。若讀者不熟悉這種劃分年代
方法,不妨將其視為四個王朝(或謂『四個世代」)即可。
第一個朝代,即所謂的『黃金時代』,這可追溯到真空管的誕生,它讓計算機從理論
變成實際產(chǎn)品。許多現(xiàn)代的學者斷言,這個世代具備相當?shù)纳裨捝省5诙€朝代始于電
晶體的發(fā)明,而終結(jié)于印刷電路的出現(xiàn)。
現(xiàn)代電腦的歷史,由第三個朝代揭開序幕。那是一個由大型主機以及電算中心人員,
紛紛割據(jù)稱雄的年代。第四個朝代由『整合派』接手,『整合派』對第三世代既有秩序大
加反抗,但自己也被狂熱的『藍色兵團』殘酷地摧毀了。諷刺的是,正因為這次的大舉征
伐,造成了禪式程式設(shè)計思維四處擴散。
除了組成本書主體的古老題材,我何其有幸地得到巴貝吉(Babbage)博士與C.P.Yu博
士的協(xié)助,他們分別為本書撰寫了推薦序與導讀。由于他們對本書的貢獻,才能彌補作為
編撰者的我不足之處。
杰弗瑞.詹姆士
洛杉磯
1988年1月
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目錄</a> |</font></b></p>
<a name="front"></a>
<b>本書組成表說</b>
本書根據(jù)古老的『五行學說』分成五卷,同時這個學說認為世界是由這五個元素組合
而成,它們分別是木、火、土、金、水。
<table border=1>
<caption align=top></caption>
<tr> <th>五行<td>木 <td>火 <td>土 <td>金 <td>水
<tr> <th>關(guān)主<td>忍者 <td>行者 <td>力士 <td>武士 <td>良子
<tr> <th>體裁<td>史話 <td>傳說 <td>駢文 <td>公案 <td>俳句
<tr> <th>原文<td>歷史 <td>昔話 <td>俳句 <td>講話 <td>說教
<tr> <th>硬體<td>鍵盤 <td>螢幕 <td>中央處理器<td>印表機 <td>磁盤
<tr> <th>方位<td>東 <td>南 <td>中 <td>西 <td>北
<tr> <th>軟體<td>編輯程式<td>格式化程式<td>除錯程式 <td>解譯程式<td>編譯程式
<tr> <th>感覺<td>觸覺 <td>視覺 <td>嗅覺 <td>聽覺 <td>味覺
<tr> <th>階段<td>介面 <td>設(shè)計 <td>編程 <td>除錯 <td>測試
<tr> <th>動物<td>龍 <td>鳳 <td>牛 <td>兔 <td>蛇
<tr> <th>系統(tǒng)<td>VMS <td>CP-6 <td>OS/VS <td>MS-DOS <td>Unix
</table>
這套分類系統(tǒng)包羅萬象,想要在本書有限篇幅將它闡釋清楚是不太可能的。沉思于
生克關(guān)系之中,您會發(fā)現(xiàn)圣哲令人驚異的深刻觀察。
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目錄</a> |</font></b></p>
<a name="foreword"></a>
<b>推薦序</b>
毫無疑問的,古代程式設(shè)計的藝術(shù)在西方人的腦海里通常會被誤解。因為現(xiàn)代的人們
認為那只是工程學、機械論和唯物論。
許多人認為,程式設(shè)計只是為了達到目的所使用的策略。而程式及程式師的好壞,已
淪落到用賣座與否來評價的水準。
這些幼稚的錯誤想法,來自于對程式設(shè)計真正目的的深度誤解。
優(yōu)秀的程式師并非致力于表象的成就,他應該尋找一種神秘的感受:人機合一。
依據(jù)禪的解釋,硬體、軟體、韌體、介面和領(lǐng)悟是一體的。因為它們早已結(jié)合成為和
諧的整體。
只有當程式師學會將『私心』丟掉,這種境界才有可能達到。而這種泯滅私心的修為
,才能令人瞭解生命的意義,人存在的價值。這是就電腦時代所帶給我們的-禪之程式師
的修行方式。
有人說,掌握了禪,程式師就掌握了生命。這樣的程式師能以用之不竭的童心童趣來
看待世界。
悟道的程式師,走在大街上,能夠感覺到路旁屋內(nèi)與大樓的電腦。
悟道的程式師,也能感受并聽到數(shù)據(jù)機透過電話線路傳送資料時,那種電流脈沖持續(xù)
不斷的聲響。
悟道的程式師,與宇宙融為一體。
杰弗瑞,我以前的一位學生,他能夠完成這個偉大使命,將失落已久的經(jīng)典之作:「
程序設(shè)計之禪」重現(xiàn)于世。做為他的老師,我感到由衷地滿足。
我衷心期盼,這本書能夠重新確立禪在程式師養(yǎng)成教育的重要地位。
C.P.Yu博士
卓越機械學院
蓮花大學
西藏拉薩
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目錄</a> |</font></b></p>
<a name="introduction"></a>
<b>導讀</b>
當詹姆士先生要我為他這本大作撰寫一篇導讀,我想除了談談個人在程式維護這個神
秘領(lǐng)域的一些個人經(jīng)驗外,我實在找不到更好的辦法了。程式維護是失傳的程式設(shè)計藝術(shù)
,一個少人瞭解的領(lǐng)域。
無疑地,有的讀者肯定會堅持地說,在禪的深奧教義和程式維護這個雕蟲小技之間,
哪有什么共同點。誠如大師所言:「方法和途徑(也就是道)隱含于所有的程式之中,甚
至只是一部游戲機。」因此,長期被忽略的程式維護之藝術(shù)一定有其禪機的一面。這點是
無庸置疑的。這對一個未開悟的心靈而言,是不會立刻顯露出來。
我的故事開始于剛從大學資訊科學系取得學士學位的數(shù)周之后。原本的目標是打算大
學畢業(yè)后,到研發(fā)機關(guān)工作,最好是編譯程式或作業(yè)系統(tǒng)設(shè)計的部門。我最后終于找到一
家愿意雇用我的公司,但是開出的條件是我在某一段時間之內(nèi),透過程式維護的工作要『
學會這套系統(tǒng)』。
我對這個提議有著反感。我花了五年的大學時間,竟然只是為了修正其他程式師的錯
誤!這不啻是浪費我的時間。因為他們也答應日后讓我可選擇感興趣的工作,于是我也接
受了,并在心中不斷地提醒自己,即使這份工作干不出名堂,我一定還能找到其他的工作
。
隔周,當我去報到的時候,我被領(lǐng)著去和程式維護組的主管見面。人事部經(jīng)理帶著我
快步穿過研發(fā)中心黑暗的走廊,最后她指著長廊盡頭處的一扇門說:「你的主管他就在那
間辦公室里。」說完便轉(zhuǎn)身走了,好像有些心神不寧。
我走向門口,眼睛朝里面偷看。我看到一個人正坐在終端機前工作,他背對著我,所
以我不知道他有多大年紀,長得什么樣。我只有靠輕咳一聲表示我的存在。他連回頭看都
沒有,只說:「請坐」。
隔著他的肩膀,我看見那些難以理解的顯示畫面,隨著他纖細手指在鍵盤上飛舞,閃
爍地出現(xiàn)在終端機上。最后,他發(fā)出滿意的聲音,退出系統(tǒng),然后轉(zhuǎn)過身來面對著我。
種種所見讓我大吃一驚,因為他并不像是那種禪師級的人物。他看起來無精打彩,他
的臉幾乎可用丑陋來形容。他的頭發(fā)如同一頂煩惱的光圈。但他的眼睛令人注意,好似能
透過厚重鏡片射出淡藍色的光。
他從頭到腳地打量我一番,然后點點頭。「你就是那個新來的?」他用一種酸溜溜的
口吻問道。
「是的。」我回答。并假裝熱情地把學經(jīng)歷極快介紹完畢。
他禮貌性地聽著,然后說:「不錯呀!可是你以前做過程式維護之類的工作嗎?」
「沒有。」我坦白地說。
他長長地嘆了一口氣,說:「好吧!讓我們做我們該做的事。」他從架上取下一本極
厚的程式清單,隨意地翻至某頁,并把它遞給我。緊接著他問道:「好,就這個程式而言
,你會怎樣做?」
我把清單放在腳上,仔仔細細地看,那上面是組合語言,還夾雜一些奇怪的巨集。每
隔十幾行,控制權(quán)便轉(zhuǎn)移到另一個隱秘的副程式。像這樣的寫法,即使這個程式具備結(jié)構(gòu)
性,我也無法看懂。
「這是什么程式啊?」我問。
他把清單拿了回去,「這是古圣先賢所撰的《程式寶典》。」他回答我。接著又說:
「當你學會從程式的迷魂陣中找到錯誤的程式碼,就是你藝成出師的時侯了。」
他合上那本厚重的清單,把它放回架上。
不久,我便發(fā)現(xiàn),維護程式遠比我想像中要困難得多。起初,我試圖用《程式寶典》
所載的組合語言來寫程式。但令我困擾的是,寶典的組合語言從不按規(guī)定,提供說明文件
。現(xiàn)存的一些筆記,是一位多年前還在公司,負責硬體的工程師所寫。現(xiàn)在,他可能已離
開公司,甚至死掉了。我根本找不到人可以請教,當初程式寫作的原意。
這本《程式寶典》能給我的實在太少了。雖然其中偶有注解,但這些注解與組合語言
程式本身一樣模糊,其中還有一些涉及早期硬體結(jié)構(gòu)的參考資料。
我向他抱怨我所碰到的一切,他還是禮貌地聽著,在沉默許久之后,他開口說道:「
你正理解著一種難以被人間思維所能瞭解的東西。這樣所導致的結(jié)果當然是失敗。你必須
放下成見,敞開胸懷。惟有如此,你才能參透這本程式寶典。」
接著,他慢慢地向我闡釋《程式寶典》里蘊藏的邏輯。當我聽到他那溫和、沉靜的聲
音,我終于開始感受到一點曙光,這是隱藏在《程式寶典》中廣袤、不朽的靈光。
「先哲們對所謂的『優(yōu)良程式設(shè)計慣例』一無所知,他們試圖追尋一個放諸四海皆準
的電腦思維方式。若是如此,那么他們還需要那些所謂合乎規(guī)定的說明文件嗎?程式本身
就是所能表達的極限。」他說。
縱使我開始慢慢有所體會,還是覺得自己像只在琥珀里掙扎的飛蟲,怎么都掙脫不出
來。大師所講的,和我學的截然不同,就我個人的思維來講,實在是很難接受。
可是,他總是耐心地一遍又一遍地說明,他叫我不要靠既有思路只在表象上推理,而
要用潛意識來領(lǐng)悟《程式寶典》的內(nèi)涵,這才是參禪的功夫。
經(jīng)過數(shù)月的指導后,我感到有足夠自信來面對了,于是便想試試第一個補丁程式。為
了給大師一個驚喜,我偷偷地作。我用數(shù)行指令完成一個可運作的補丁程式,并將它重新
組譯,且成功地并入原來的生產(chǎn)系統(tǒng)運行。
隔天早上,我到的有點晚。讓我感到奇怪的是,開發(fā)中心主任、人事部經(jīng)理都在大師
的辦公室里。當我走進大廳,人事經(jīng)理看見了我,立刻把大師辦公室的門關(guān)上。他們說話
的聲音很大,可是我卻聽不清楚他們說些什么。
我一直等到兩位訪客離開之后,才走進大師的辦公室。「有事嗎?」我問。
「你的補丁程式,在昨天晚上六點整進入了生產(chǎn)系統(tǒng)。它已經(jīng)被刪掉了。」
「那么現(xiàn)在?」
「繼續(xù)工作吧!」大師說。
最后,我終于明白,所有試圖用人間思維來理解《程式寶典》的努力都將徒勞無功,
這令我感到很失望。大師察覺到我的變化,他開始教我我靜思與偵錯的技巧,他說這些技
巧,自有電腦以來,一直由技術(shù)支援部門代代相傳至今。
聽著聽著,我發(fā)現(xiàn)一個事實,那是我早期與程序設(shè)計相關(guān)的經(jīng)驗。在大學里,我一直
認為程式師的主要任務是控制好硬體與軟體,并令它工作。但程序設(shè)計的最高境界是,完
成指派的任務或達成一個明確的目標。程式維護是不同于程式開發(fā)的,想要維護一個程式
,得把程式當成一株成長中的植物,揠苗助長是毫無益處的。事實上,揠苗助長的行為只
會導致植物加速死亡,程式必須小心地培育。在改動程式之前,對程式的邏輯關(guān)系必須非
常清楚,同時也要對程式的目標有深刻的瞭解。這種理解能力不會在一夜之間就得到,它
需要長時間的累積才能竟功。
幾個月以后,我終于能依《程式寶典》來修改程式了。但是在編寫程式之前,必須經(jīng)
過長時間的靜坐冥想,以厘清思緒。再將《程式寶典》打開,架在我的桌前,用來提醒自
己。我還發(fā)現(xiàn),如果工作時能點一支檀香,并不斷地重復大師教我的咒語
『Null-So-Stix-Etx-Eot(譯注:這是ASCII碼表前五個字的發(fā)音,其ASCII數(shù)值為0,1,2,
3,4)』,更有助集中注意力。大師說,那個咒語代表了五行,是構(gòu)成宇宙所有物質(zhì)的基
本元素。
不久,我發(fā)現(xiàn)自己已不在乎是否能從工作中得到別人的贊許。在我與所維護的程式之
間,業(yè)已合一,沒有分別了。我像是他生命中的追隨者,開始理解程序設(shè)計之禪。這是一
種難以言喻的力量,它藏于程式之中。就像太陽將光和熱照耀在地球一樣。
從無意義的『我心』超脫之后,我省思到,原本大量又令我難明的程式碼,只因我沒
有大徹大悟,自然無法理解它們。我現(xiàn)在知道,為什么先哲們不為他們的程式提供說明文
件,因為用英文來注解,只會讓人更加迷惑,而非得悟。
一天,我發(fā)現(xiàn)自己正解決著一個問題,它涉及《程式寶典》中最復雜的部分-錯誤分
析模組。在一無所知的情況下,我寫了一支補丁程式,它透過硬體中斷區(qū)的內(nèi)容來檢查錯
誤的情況,使得程式能夠繼續(xù)正常執(zhí)行。
下午,大師第一次走進了我工作的地方,他把手放在我的肩膀,眼睛朝下看著我,「
你出師了。」他說。
這是我第一次接觸禪式程序設(shè)計的經(jīng)歷。之后,我被指派參加很多專案,但我從未忘
記第一位師父給我的教誨。
想想我的驚訝吧!當我在《程序設(shè)計之禪》一書中發(fā)現(xiàn)了如此多,我?guī)煾阜浅O矏鄣?格言,我也看到了那些令他難忘的古老傳統(tǒng)。
詹姆士先生把這本影響深遠的經(jīng)典重新發(fā)掘出來,大家都欠他一份情。若不是他持之
以恒的努力,這部經(jīng)典可能將永遠失傳。本書中,詹姆士先生收集了許多公案、傳說、俳
句等,它們組成了具有傳奇色彩的『整合派』的教義。正是透過像詹姆士先生這樣的學者
,不斷地努力,才使得深富禪機的程式設(shè)計,禪光永世不滅地照耀后人。
查理士˙巴貝奇
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目錄</a> |</font></b></p>
<a name="book01"></a>
<b>卷一 木</b>
關(guān)主:忍者
體裁:歷史
硬體:鍵盤
方位:東
軟體:編輯程式
感覺:觸覺
階段:介面
動物:龍
系統(tǒng):VMS
木之卷首語
忍大師是MRVMS/IIIX禪學院的改革者,并以此聞名于世。傳說他從基層的程式師一躍
成為某家大公司的程式部研發(fā)主管。隨后,他完成了一套先進的作業(yè)系統(tǒng)后,便悄然引退
。據(jù)他說,這套系統(tǒng)不需要硬體也不需要軟體,卻能運作正常。至今,沒有人知道他在那
里,但聽說經(jīng)常以管理顧問的身份出現(xiàn)。
篇一
忍大師初到研發(fā)中心時,被分派去支援作業(yè)系統(tǒng)。一天,某位經(jīng)理走進了忍大師的辦
公室。
「你為什么不工作?」經(jīng)理問。
「系統(tǒng)當了!」忍大師說。
經(jīng)理皺著眉頭,不滿地大聲說:「付你薪水,就是要你保持系統(tǒng)的正常運作!」
「呶!系統(tǒng)好了。」忍大師說。
篇二
忍大師如是說:
「如果應用程式不能正常執(zhí)行,別怪作業(yè)系統(tǒng)。」
篇三
一次,忍大師參加電腦展示會。
在那兒,有閃亮新穎的螢幕,以及身著三點式泳裝的金發(fā)模特兒。還有當時所能找到
的最新、最好的硬體。
忍大師看都不看一眼。反倒是打開一張折疊椅,靜靜地坐在角落。不時,有人從他身
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -