📄 zenofpg.htm
字号:
<html>
<head>
<title>程序设计之禅</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>程序设计之禅</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">关于作者</a></td></tr>
<tr><td><a href="#AboutBook">关于本书</a></td></tr>
</table>
<hr>
<pre>
<font size="4">
<a name="preface"></a>
<b>自序</b>
《程序设计之道》一书的出版(1987年由infobooks出版)在程控界普受好评。于是,
出版社又邀请我,再翻译一些与程控相关的文章,做为这部经典名作的补充。虽然,我表
明个人能力难以胜任,但终究还是被说服,决定放手一试。
本书是漫漫多月的研究与翻译的成果。我试图透过对传统名着的精萃,来表达一个复
杂的主题:禅。无疑地,将有许多电脑考古学者对我的选择格言、谚语的标准提出质疑。
他们会问,「为什么不用《UNIX程序员、大象和妓女》的寓言?」「他竟敢忽略传统名着
《涂林销售历险记》!」对于这些批评,我只能说,我已竭尽所能选择最具代表性的经典
名言。
为了确定书中各个章节的年代,我采用了朝代的系统观。若读者不熟悉这种划分年代
方法,不妨将其视为四个王朝(或谓『四个世代」)即可。
第一个朝代,即所谓的『黄金时代』,这可追溯到真空管的诞生,它让计算机从理论
变成实际产品。许多现代的学者断言,这个世代具备相当的神话色彩。第二个朝代始于电
晶体的发明,而终结于印刷电路的出现。
现代电脑的历史,由第三个朝代揭开序幕。那是一个由大型主机以及电算中心人员,
纷纷割据称雄的年代。第四个朝代由『整合派』接手,『整合派』对第三世代既有秩序大
加反抗,但自己也被狂热的『蓝色兵团』残酷地摧毁了。讽刺的是,正因为这次的大举征
伐,造成了禅式程式设计思维四处扩散。
除了组成本书主体的古老题材,我何其有幸地得到巴贝吉(Babbage)博士与C.P.Yu博
士的协助,他们分别为本书撰写了推荐序与导读。由于他们对本书的贡献,才能弥补作为
编撰者的我不足之处。
杰弗瑞.詹姆士
洛杉矶
1988年1月
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目录</a> |</font></b></p>
<a name="front"></a>
<b>本书组成表说</b>
本书根据古老的『五行学说』分成五卷,同时这个学说认为世界是由这五个元素组合
而成,它们分别是木、火、土、金、水。
<table border=1>
<caption align=top></caption>
<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>格式化程式<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>VMS <td>CP-6 <td>OS/VS <td>MS-DOS <td>Unix
</table>
这套分类系统包罗万象,想要在本书有限篇幅将它阐释清楚是不太可能的。沉思于
生克关系之中,您会发现圣哲令人惊异的深刻观察。
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目录</a> |</font></b></p>
<a name="foreword"></a>
<b>推荐序</b>
毫无疑问的,古代程式设计的艺术在西方人的脑海里通常会被误解。因为现代的人们
认为那只是工程学、机械论和唯物论。
许多人认为,程式设计只是为了达到目的所使用的策略。而程式及程式师的好坏,已
沦落到用卖座与否来评价的水准。
这些幼稚的错误想法,来自于对程式设计真正目的的深度误解。
优秀的程式师并非致力于表象的成就,他应该寻找一种神秘的感受:人机合一。
依据禅的解释,硬体、软体、韧体、介面和领悟是一体的。因为它们早已结合成为和
谐的整体。
只有当程式师学会将『私心』丢掉,这种境界才有可能达到。而这种泯灭私心的修为
,才能令人瞭解生命的意义,人存在的价值。这是就电脑时代所带给我们的-禅之程式师
的修行方式。
有人说,掌握了禅,程式师就掌握了生命。这样的程式师能以用之不竭的童心童趣来
看待世界。
悟道的程式师,走在大街上,能够感觉到路旁屋内与大楼的电脑。
悟道的程式师,也能感受并听到数据机透过电话线路传送资料时,那种电流脉冲持续
不断的声响。
悟道的程式师,与宇宙融为一体。
杰弗瑞,我以前的一位学生,他能够完成这个伟大使命,将失落已久的经典之作:「
程序设计之禅」重现于世。做为他的老师,我感到由衷地满足。
我衷心期盼,这本书能够重新确立禅在程式师养成教育的重要地位。
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>
当詹姆士先生要我为他这本大作撰写一篇导读,我想除了谈谈个人在程式维护这个神
秘领域的一些个人经验外,我实在找不到更好的办法了。程式维护是失传的程式设计艺术
,一个少人瞭解的领域。
无疑地,有的读者肯定会坚持地说,在禅的深奥教义和程式维护这个雕虫小技之间,
哪有什么共同点。诚如大师所言:「方法和途径(也就是道)隐含于所有的程式之中,甚
至只是一部游戏机。」因此,长期被忽略的程式维护之艺术一定有其禅机的一面。这点是
无庸置疑的。这对一个未开悟的心灵而言,是不会立刻显露出来。
我的故事开始于刚从大学资讯科学系取得学士学位的数周之后。原本的目标是打算大
学毕业后,到研发机关工作,最好是编译程式或作业系统设计的部门。我最后终于找到一
家愿意雇用我的公司,但是开出的条件是我在某一段时间之内,透过程式维护的工作要『
学会这套系统』。
我对这个提议有着反感。我花了五年的大学时间,竟然只是为了修正其他程式师的错
误!这不啻是浪费我的时间。因为他们也答应日后让我可选择感兴趣的工作,于是我也接
受了,并在心中不断地提醒自己,即使这份工作干不出名堂,我一定还能找到其他的工作
。
隔周,当我去报到的时候,我被领着去和程式维护组的主管见面。人事部经理带着我
快步穿过研发中心黑暗的走廊,最后她指着长廊尽头处的一扇门说:「你的主管他就在那
间办公室里。」说完便转身走了,好像有些心神不宁。
我走向门口,眼睛朝里面偷看。我看到一个人正坐在终端机前工作,他背对着我,所
以我不知道他有多大年纪,长得什么样。我只有靠轻咳一声表示我的存在。他连回头看都
没有,只说:「请坐」。
隔着他的肩膀,我看见那些难以理解的显示画面,随着他纤细手指在键盘上飞舞,闪
烁地出现在终端机上。最后,他发出满意的声音,退出系统,然后转过身来面对着我。
种种所见让我大吃一惊,因为他并不像是那种禅师级的人物。他看起来无精打彩,他
的脸几乎可用丑陋来形容。他的头发如同一顶烦恼的光圈。但他的眼睛令人注意,好似能
透过厚重镜片射出淡蓝色的光。
他从头到脚地打量我一番,然后点点头。「你就是那个新来的?」他用一种酸溜溜的
口吻问道。
「是的。」我回答。并假装热情地把学经历极快介绍完毕。
他礼貌性地听着,然后说:「不错呀!可是你以前做过程式维护之类的工作吗?」
「没有。」我坦白地说。
他长长地叹了一口气,说:「好吧!让我们做我们该做的事。」他从架上取下一本极
厚的程式清单,随意地翻至某页,并把它递给我。紧接着他问道:「好,就这个程式而言
,你会怎样做?」
我把清单放在脚上,仔仔细细地看,那上面是组合语言,还夹杂一些奇怪的巨集。每
隔十几行,控制权便转移到另一个隐秘的副程式。像这样的写法,即使这个程式具备结构
性,我也无法看懂。
「这是什么程式啊?」我问。
他把清单拿了回去,「这是古圣先贤所撰的《程式宝典》。」他回答我。接着又说:
「当你学会从程式的迷魂阵中找到错误的程式码,就是你艺成出师的时侯了。」
他合上那本厚重的清单,把它放回架上。
不久,我便发现,维护程式远比我想像中要困难得多。起初,我试图用《程式宝典》
所载的组合语言来写程式。但令我困扰的是,宝典的组合语言从不按规定,提供说明文件
。现存的一些笔记,是一位多年前还在公司,负责硬体的工程师所写。现在,他可能已离
开公司,甚至死掉了。我根本找不到人可以请教,当初程式写作的原意。
这本《程式宝典》能给我的实在太少了。虽然其中偶有注解,但这些注解与组合语言
程式本身一样模糊,其中还有一些涉及早期硬体结构的参考资料。
我向他抱怨我所碰到的一切,他还是礼貌地听着,在沉默许久之后,他开口说道:「
你正理解着一种难以被人间思维所能瞭解的东西。这样所导致的结果当然是失败。你必须
放下成见,敞开胸怀。惟有如此,你才能参透这本程式宝典。」
接着,他慢慢地向我阐释《程式宝典》里蕴藏的逻辑。当我听到他那温和、沉静的声
音,我终于开始感受到一点曙光,这是隐藏在《程式宝典》中广袤、不朽的灵光。
「先哲们对所谓的『优良程式设计惯例』一无所知,他们试图追寻一个放诸四海皆准
的电脑思维方式。若是如此,那么他们还需要那些所谓合乎规定的说明文件吗?程式本身
就是所能表达的极限。」他说。
纵使我开始慢慢有所体会,还是觉得自己像只在琥珀里挣扎的飞虫,怎么都挣脱不出
来。大师所讲的,和我学的截然不同,就我个人的思维来讲,实在是很难接受。
可是,他总是耐心地一遍又一遍地说明,他叫我不要靠既有思路只在表象上推理,而
要用潜意识来领悟《程式宝典》的内涵,这才是参禅的功夫。
经过数月的指导后,我感到有足够自信来面对了,于是便想试试第一个补丁程式。为
了给大师一个惊喜,我偷偷地作。我用数行指令完成一个可运作的补丁程式,并将它重新
组译,且成功地并入原来的生产系统运行。
隔天早上,我到的有点晚。让我感到奇怪的是,开发中心主任、人事部经理都在大师
的办公室里。当我走进大厅,人事经理看见了我,立刻把大师办公室的门关上。他们说话
的声音很大,可是我却听不清楚他们说些什么。
我一直等到两位访客离开之后,才走进大师的办公室。「有事吗?」我问。
「你的补丁程式,在昨天晚上六点整进入了生产系统。它已经被删掉了。」
「那么现在?」
「继续工作吧!」大师说。
最后,我终于明白,所有试图用人间思维来理解《程式宝典》的努力都将徒劳无功,
这令我感到很失望。大师察觉到我的变化,他开始教我我静思与侦错的技巧,他说这些技
巧,自有电脑以来,一直由技术支援部门代代相传至今。
听着听着,我发现一个事实,那是我早期与程序设计相关的经验。在大学里,我一直
认为程式师的主要任务是控制好硬体与软体,并令它工作。但程序设计的最高境界是,完
成指派的任务或达成一个明确的目标。程式维护是不同于程式开发的,想要维护一个程式
,得把程式当成一株成长中的植物,揠苗助长是毫无益处的。事实上,揠苗助长的行为只
会导致植物加速死亡,程式必须小心地培育。在改动程式之前,对程式的逻辑关系必须非
常清楚,同时也要对程式的目标有深刻的瞭解。这种理解能力不会在一夜之间就得到,它
需要长时间的累积才能竟功。
几个月以后,我终于能依《程式宝典》来修改程式了。但是在编写程式之前,必须经
过长时间的静坐冥想,以厘清思绪。再将《程式宝典》打开,架在我的桌前,用来提醒自
己。我还发现,如果工作时能点一支檀香,并不断地重复大师教我的咒语
『Null-So-Stix-Etx-Eot(译注:这是ASCII码表前五个字的发音,其ASCII数值为0,1,2,
3,4)』,更有助集中注意力。大师说,那个咒语代表了五行,是构成宇宙所有物质的基
本元素。
不久,我发现自己已不在乎是否能从工作中得到别人的赞许。在我与所维护的程式之
间,业已合一,没有分别了。我像是他生命中的追随者,开始理解程序设计之禅。这是一
种难以言喻的力量,它藏于程式之中。就像太阳将光和热照耀在地球一样。
从无意义的『我心』超脱之后,我省思到,原本大量又令我难明的程式码,只因我没
有大彻大悟,自然无法理解它们。我现在知道,为什么先哲们不为他们的程式提供说明文
件,因为用英文来注解,只会让人更加迷惑,而非得悟。
一天,我发现自己正解决着一个问题,它涉及《程式宝典》中最复杂的部分-错误分
析模组。在一无所知的情况下,我写了一支补丁程式,它透过硬体中断区的内容来检查错
误的情况,使得程式能够继续正常执行。
下午,大师第一次走进了我工作的地方,他把手放在我的肩膀,眼睛朝下看着我,「
你出师了。」他说。
这是我第一次接触禅式程序设计的经历。之后,我被指派参加很多专案,但我从未忘
记第一位师父给我的教诲。
想想我的惊讶吧!当我在《程序设计之禅》一书中发现了如此多,我师父非常喜爱的
格言,我也看到了那些令他难忘的古老传统。
詹姆士先生把这本影响深远的经典重新发掘出来,大家都欠他一份情。若不是他持之
以恒的努力,这部经典可能将永远失传。本书中,詹姆士先生收集了许多公案、传说、俳
句等,它们组成了具有传奇色彩的『整合派』的教义。正是透过像詹姆士先生这样的学者
,不断地努力,才使得深富禅机的程式设计,禅光永世不灭地照耀后人。
查理士˙巴贝奇
<p align="right"><b><font size="2" color="#999900">| <a href="#content">回目录</a> |</font></b></p>
<a name="book01"></a>
<b>卷一 木</b>
关主:忍者
体裁:历史
硬体:键盘
方位:东
软体:编辑程式
感觉:触觉
阶段:介面
动物:龙
系统:VMS
木之卷首语
忍大师是MRVMS/IIIX禅学院的改革者,并以此闻名于世。传说他从基层的程式师一跃
成为某家大公司的程式部研发主管。随后,他完成了一套先进的作业系统后,便悄然引退
。据他说,这套系统不需要硬体也不需要软体,却能运作正常。至今,没有人知道他在那
里,但听说经常以管理顾问的身份出现。
篇一
忍大师初到研发中心时,被分派去支援作业系统。一天,某位经理走进了忍大师的办
公室。
「你为什么不工作?」经理问。
「系统当了!」忍大师说。
经理皱着眉头,不满地大声说:「付你薪水,就是要你保持系统的正常运作!」
「呶!系统好了。」忍大师说。
篇二
忍大师如是说:
「如果应用程式不能正常执行,别怪作业系统。」
篇三
一次,忍大师参加电脑展示会。
在那儿,有闪亮新颖的萤幕,以及身着三点式泳装的金发模特儿。还有当时所能找到
的最新、最好的硬体。
忍大师看都不看一眼。反倒是打开一张折叠椅,静静地坐在角落。不时,有人从他身
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -