最后,我终于明白,所有用我的理性思维去理解《编码藏经》的努力都是徒劳的,这使我很绝望。师父觉察到了我思想上的这个变化,他开始向我传授开机。他教给我冥想和查错的技巧,他说这些技巧是从计算机时代之初,由技术支持部一代一代地传下来的。
我听着听着,开始意识到一个关于我以前的编程体验的特大事实。在大学里,我一起认为程序员的工作主要是控制硬件和软件的活动,编程的最高艺术境界是,为了完成一项任务或达到一个目标而成功地运用高超的编程技巧。但程序维护是不同于程序开发的。要想维护一个程序,就要把程序看作是一棵渐渐成长的植物,拔苗助长是毫无益处的。事实上,这样的行为更容易导致植物的死亡。一个程序必须被小心地滋养。程序员在对程序进行改动之前,必须对每一个逻辑关系非常熟悉,必须对程序的意图有很深刻的理解力。这种理解力不是在一夜之间就可以得来的,需要长时间的积累。
好几个月以后,我终于能够给《编码藏经》成功地设计修补程序了,但设计之前要经过长时间的冥想,还要把那本程序清单打开着支在我的桌子上。我还发现,如果我工作的时侯点燃一支香,口中不停在重复师父教给我的口诀:“Null-So-Stix-Etx-Eot”(ASCII码表中头五个字节NUL、SOH、STX、ETX、EOT的发音--译注),我更容易集中注意力。师父说,那个口诀意味着宇宙的“五原”。
不久我发现我不再关心是否能为工作成绩而得到奖励了,在我自身和我所维护的程序之间也看不见任何分离了。我像一个一生都活在阴影里的人一样,开始理解编程之禅,这是一种隐于程序员设计背后的难以言喻和难以形容的力量,就像投射影子的太阳一样。
从那毫无意义的“自我的存在”中摆脱出来后,我开始发觉,那些伟大的编程语句过去对我来说似乎模糊不清,只是因为我还没有彻悟,无法理解它们。我现在知道了为什么过去的那些程序员从不为他们的程序提供文档,因为英语语言的描述本身更让人迷惑,而非使人受到启发。
一天,我发现自己正在解决的一个问题涉及到《编码藏经》中最复杂的部分--错误分析全程。我在对此一无所知的情况下,给出了一个修补程序,它能通过对硬件中断区的内容进行检查来测定错误的情况,使程序能继续正确执行。
那天下午,师父第一次走进了我的工作间,他把手放在我的肩膀上,眼睛朝下看着我,“现在该是你出师的时侯了。”他说。
这些就是我第一次接触禅式程序设计的经历。虽然从那以后我被指派参加过很多项目设计,但我从未忘记过我的第一位师父给我的教诲。
想象一下我的惊奇--当我在《编程之禅》中发现了如此之多的我师父非常喜爱的语言时。我终于看到了那些隐于他那难忘的演说背后的古代传统。
James先生将那本经典的影响深远的著作重新发掘出来,我们大家都欠他一份人情。要不是他的持之以恒,它可能会永远失传。在本书中,James先生收集了一大堆定期,如异端的说教、民间故事和诗歌等,它们组成了具有传奇色彩的“集成教”的教义。正是通过James先生这样的学者的努力,才使得深藏禅机的程序设计的光芒永世不灭地照耀着后代的人们。
第一篇 木
大师:忍者
媒体:编年史
硬件:键盘
方向:东
软件:编辑程序
感觉:触觉
阶段:界面
动物:龙
系统:VMS
木
作为MRVMS/IIIX禅学院的复兴者,编程大师忍者(这是后人给他起的绰号,他的真实姓名无法核实--译注 )非常有名。有一些传说,说他从一名不起眼的程序员一跃成为某家实力雄厚的程序设计机构的开发部主管。他在完成了一套先进的操作系统后,便悄然消失了。据他说,这套系统既不需要硬件也不需要软件,同样能准确地发挥功能。他现在的去处无人知晓,但听说,他时常以一位管理顾问的装束出现。
一
忍者最初来到那家开发中心工作的时侯,他被分配去支持操作系统。一天,一位经理走进了忍者的工作间。
"你为什么不工作?"经理问。
"系统瘫痪了。"忍者说。
"经理皱起了眉头。"我们付给你薪水,是要你保持系统的正常运行!"他大声说。
"系统没有瘫痪。"忍者说。
二
忍者大师如是说:
"如果你的应用程序不能正确地运行,不要去责怪操作系统。"
三
忍者大师参加一次电脑展示会。
许多公司都押运出了明亮的显示器和他们所能搜罗到的所有最新、最大的硬件,以及身着泳装的金发模特儿。
忍者甚至一眼也未瞥那些展摊。相反,他只是打开一张折叠椅,静静地坐在角落里。不时地有人从他身边经过,并问他一两个问题。他思考片刻,然后用简短的话作出回答。
人们盘着腿围坐在这位大师身旁--那些收集来的宣传册散落在一边--静静地等着他开口说话。
四
忍者大师如是说:
“对于聪明的人,只要一个字;对于快马,只要轻轻一鞭;对于写得好的程序,只要单独的一个命令。”
五
忍者大师参加一次董事会。当他开始解释有关那套软件的技术特性时,那些公司行政官们,有的在座位上烦躁不安,有的盯着窗外,有的望着咖啡杯发呆。
于是,这位大师开始谈那套软件将会赚多少钱了,这时那些行政官们便纷纷竖起了耳朵,并开始在房间里欢蹦着,显然,他们被这悦耳的声音吸引住了。
六
一位公司行政官来看忍者,他发现这位大师正在玩电脑游戏。“这是什么意思?”行政官询问道。
“我正在测试系统。”大师说。
行政官凑近屏幕定眼一看,果然如此。
七
一天,董事会成员集中在一起讨论业务善,他们召来忍者大师,让他作个报告。“你的季度预测是怎样的?”他们问。
“没有季度预测。”忍者回答道。
“那么你今年的预算计划呢?”他们问。
“没有今年的预算计划。”忍者回答说。
然后他们问:“你能确认你是忍者大师吗?”
“没有忍者大师。”忍者大师回答着。
董事们被搞得糊涂了,只好暂停会议各自回家去了。
八
忍者大师如是说:
“设计一个千百万程序的操作系统很容易,要改变一个人的本性却困难得多。”
九
三名来自不同的电脑公司的行政官前去向忍者学习领导艺术的真谛。
忍者问第一位行政官,“你有你们公司现在的机构设置图吗?”
第一位行政官从口袋中掏出了一张纸,“我一直带着一张在身边。”他说着便把那张纸递给了忍者。
忍者饶有兴趣地看着那张纸,“这看上去似乎已经在计算机上建立了模板。”他评论说。
“的确如此,”这位行政官骄傲地说,“我们已经把我们的机构设置图都计算机化了,以便一接到通知就能立刻选择调用。”
忍者笑着,把那张纸递了回去,“我帮不了你什么。”他说。
第二位行政官接着问忍者领导艺术的真谛。
“你有你们公司现在的机构设置图吗?”忍者问。
第二位行政官摇摇着,“我们的机构设置在这几年都未变过,我几年前就记住了。”
忍者皱起了眉头,“我帮不了你什么。”了说。
第三位行政官还是问忍者领导艺术的真谛。
“你有你们公司现在的机构设置图吗?”忍者问。
第三位行政官耸了耸肩,“我们没有机构设置图,”他说,“每个人喜欢做什么就做什么,喜欢什么时侯做就什么时侯做。”
忍者紧皱眉头,“我帮不了你什么。”他说。
三位行政官凑到一边耳语了一阵,转过身来对忍者说:“那么好吧,让我们看看你的机构设置图。”
忍者领着他们来到一片开阔地上,那里孤零零地长着一棵树。“这就是我的机构设置图。”忍者边说边把手搭在那表皮粗糙地树干上。
第二篇 火
大师:行者
媒体:民间故事
硬件:显示器
方向:南
软件:格式化程序
感觉:视觉
阶段:设计
动物:凤凰
系统:CP-6
火
编程大师行者收集了各种各样有关开发刺目的民间故事。最近的计算机考古研究显示,下面的这些民间故事是以历史事实为基础的。虽然一部分夸张的成分可能会无意中被添加进去,但其历史真相的核心内容依然存在。
一
当一位项目经理为他的软件项目配备人员时,他会在一天内雇佣三百名程序员。一位获得计算机科学博士学位的学者前来求职,他被给予了一个薪水很高的职位。
一天,那位项目经理被解职了。“我认为,每个人都应清楚自己的职责和履行自己的职责。”新来的项目经理在检阅他的程序员队伍时如此说道。听到这话,那位学者悄悄地溜走了。
二
两位程序员正在急诊有关用户界面的问题。
“在‘使用起来简单轻松’方面,许多意义重大的革新正在进行当中,”第一位程序员说,“不久以后,人们在使用电脑之前将不再需要阅读那些冗长乏味的用户手册了。程序都将是不言自明的。”
第二位程序员想了一会儿,然后说:“上个星期我准备劈些木柴烧火,但我的斧子又旧又钝。于是,我去五金店买了把新的。”
“这挺有趣儿,”第一位程序员说,“但这和用户界面有什么关系呢?”
“这把新斧子附带有一本长达八页的使用说明书。”他回答说。
三
一次有一位第三者问一名工程师、一名数学家、一名物理和一名程序员:“一只盒子有几个面?”
工程师首先回答。“一只盒子有四个面。”他说。
“此话怎讲?”智者问。
“四个垂直的面就是我所说的面,它们被一顶一底连接在一起。”工程师回答。
“太荒唐了,”数学家评论道,“一只盒子有六个面。”
“此话怎讲?”智者问。
“盒子是一个立方体,因此有六个面。”,数学家回答。
“不对,”物理学家说,“一只盒子有十二个面。”
“此话怎讲?”智者问。
“严格说来,有六个外部的面和六个内部的面。”物理学家回答。
智者看着一声未吭的程序员。“你的意见呢?”智者问。
“一只盒子只有两个面。”程序员说。
听了这话,工程师、数学家和物理学家大笑起来。
“此话怎讲--一只盒子只有两个面?”笑声停住后智者问道。
“这是基于个人经验,”程序员说,“那‘里面’是安置电路板的地方,而‘外面’是放显示器的地方。”
“正是如此。”智者说。
四
一位新上任的董事正在召开与程序员们的见面会。
在宴会进行当中,一位程序员背诵起了如下的演说--“我们一直都在期盼着你的到来,您的前任根本没有您这种高贵的能力。现在你来了,我们会变得真正具有生产力。”
这位新董事被奉承的喜形于色,“这演说词是你自己写的吗?”他问。
“这是我们开发中心的惯例,”那位程序员说,“无论哪位新董事到任的时侯,我们都要发表那段演说,这是我所知道的唯一的一段演说词。”
五
一天,开发中心的一位程序员发现了一套可以生成迷宫图案的算法系统。他非常勤奋地对这套算法进行了修改,这样可以让它在长长的打印纸带上生成一个不间断的迷宫。
不久,他制做了一个有几百万条分贫的迷宫,四十英尺长,七英尺宽。他把打印纸带挂在了程序员办公室门口长长的过道上,不一会儿,所有编程人员都挤在了那个迷宫前,试图解决这个庞大的难题。
开发中心的主任恰巧从旁边经过,他惊愕地盯着这场景,面色阴沉。但当他走进编程大师的办公室想寻求帮助时,大师早已不在那儿了。
六
五名初学者哭着走进了大师的办公室,“呜,呜!听说我们的项目可能要被取消了。”
大师说:“所有事情照常继续,直到它们停止。”
听了这话,那些初学者便返回各自的工作中去了。
七
一天,开发中心接到消息,一位新主任将被任命来负责这里,他是位军机大臣,对电脑知之甚少。
程序员们听到这条消息都非常吃惊,纷纷停止了编程,把许多时间都浪费在揣摩那即将到来的不幸的日子。
看到这些,一位大师决定必须得做点什么。于是,他借来了一套装扮大猩猩的服装。
不久,那位大臣就职了,他把所有的经理召集到一间小会议室,随行而来的是几位总部的公司行政官,据说,他们是来使开发中心“平稳过渡”的。
突然,那位大师穿着装扮大猩猩的服装破门而入。他蹦上会议桌,把文件踢得到处都是,并对着那些行政官咆哮嗥叫,行政官们坐在那里只剩下目瞪口呆了。然后,他唰地一下离开了会议室,正如他来时一样。
听到这件事,程序员们便都回到各自的工作岗位上去了。
<作者按>
作者曾经和几个人谈过,他们都亲眼目睹过此传说中描绘的事件。作者也曾听说,一年之后,类似的挑衅行为在IBM的某部门中发生了。这第二起事件与第一起的不同之处在于,程序员穿了一套运动服,站在门口大声地咳嗽。
八
一组程序员正在向董事长汇报。“今年最大的成果是什么?”董事长问。
那些程序员在一起商量了一会儿,然后回答说:“我们今年解决的bug(程序错误--译注)比去年多百分之五十。”
董事长疑惑地看着他们,很显然,他不知道BUG是什么意思。他小声地与身边的大臣嘀咕一阵后,转过身来对着程序员,气得满脸通红。“如此差劲的质量控制,你们应该问心有愧。明年不允许有‘BUG’!他命令道。
可以肯定,第二年那些程序员向董事长汇报的时侯,有关BUG只字未提。
九
一位公司行政官来参观开发中心,他在长长地走廊里走着,就像一位检阅部队的将军一样。他不时地偏上来和他遇到的人谈谈话。最后,他走进了一位程序员的办公室,这位程序员正在聚精会神地为操作系统查错。
行政官环顾了一下办公室,注意到有尊猪的雕像摆在程序员的终端上。”我常常被程序员收集的那些古玩和纪念品所深深吸引,”行政官说,“在它们背后似乎有一些非常有趣的故事。比如说吧,那里的那个雕像是什么意思?”他指着那尊雕像。
程序员从终端前抬起头来,眨眨眼睛,然后盯着那尊雕像,就好像是头一回看到它似的。“这是头猪呀!”他说。
第三篇 土
大师:隐者
媒体:说教
硬件:CPU
方向:中
软件:调试程序
感觉:嗅觉
阶段:编码
动物:牛
系统:OS/VS
土
以下语录的作者,编程大师隐者,在人们心目中的形象一直很模糊。他被COBOL语言标准委员会的特务所暗杀,除此之外,人们对他知之甚少。
一
我听说过:
开始时似乎比较容易的事情,结尾时往往是最困难的。这就是为什么程序员说--“开发前面的百分之九需要一半时间,而另一半时间则用来完成最后的百分之十。”
二
我听说过:
在人机界面中犯的最大错误是忽视计算机的权利。被迫与旧概念兼容的系统总是受到历史的限制。计算机不应该模拟现实--它们应该超越现实。
三
我听说过:
一家计算机公司设计了一套强大的系统,这套系统超前于它所在的时代。因为担心这套新设计可能会被复制,他们对硬件的结构设计保密,并为操作系统申请了专利。
十年以后,一位初学者向编程大师问起那个放在数据中心后面的又脏又旧的木箱子。
四
我听说过:
不要让政治原因影响技术方面的决定;也不要根据科技论文来做出政治决定。只有在无知者的头脑中,这些东西才会混到一直。
五
我听说过:
项目计划和公布的时间表,本身毫无意义。那些日期和项目进展的里程碑本质上不意味着什么。然而有一个秘密的时间表,它被所有工作于一个项目的人所理解。这个秘密的时间表从未被外界的关注所愚弄,也从未被操纵以迎合市场的方案。这个秘密的时间表总是被遵守,因为它反映了所有开发部成员之间的相互理解。当项目反映了这个现实时,程序会如期完成;当项目计划与此现实相矛盾时,程序会被延误。
六
我听说过:
有三种情况肯定会导致程序设计项目的失败。第一种情况是,主管此项目的经理对软件一无所知;第二种情况是,对程序代码负责的项目带头人对编写代码毫无兴趣;第三种情况是,编写代码的程序员是临时雇佣的,对项目缺乏忠诚。这三种情况中的任何一种都会导致项目的失败;三种情况同时出现,就必死无疑了。
七
我听说过:
许多公司行政官乐于看到把他们摆在高高在上,而让他们的下属居于其下的机构设置图。这些行政官无异于那些玩“山上的国王”游戏的孩子们。机构设置图有时侯叫做树状结构,但使用那些结构图的行政官们似乎总是忘记,树叶在底下的树是已经被连根拔起的树,活不了多久。优秀的行政官总是把自己看作是组织的询问,承受作为领导的重担,因为这才是他发挥作用的最佳途径。
这就是关于编程大师忍者的著名寓言--他没法传授领导艺术的真谛,因为那三位想当他学生的人太相信他们自己的力量了。当一个组织被出色地领导时,雇员甚至不知道他们正在被领导。当项目完成时,他们会对自己说:“看看我们通过我们自己的努力所取得的成绩吧!”
八
我听说过:
一个程序的价值不能由它的宣传册的大小,或出现在大众计算机杂志上的整页广告的数量来判断。这些噪音越响,程序越不可能有用;真正优秀的程序不需要广告,用户会口口相伟。
九
我听说过:
有一种循环,这是一种宇宙的节奏。今天一个程序流行,明天是另一个;今天修正了五百个程序中的错误,明天又将出现五百个新的。要理解生命,就要知道这种节奏的存在。要理解禅,就要活在这种节奏之外,从日常生活的牵挂之中超脱出来。只有这样,头脑才会自由。
第四篇 金
大师:大力神
媒体:公案
硬件:打印机
方向:西
软件:解释程序
感觉:听觉
阶段:排错
动物:兔
系统:MS-DOS
金
编程大师大力神试图在讲解中使用公案--禅的一种独特的教学手段。通常说来,每个公案的含意都很难辨析,并且常常有好肉食的和外在的意思。
一
一个在大学里学习了很长时间的初学者来拜访编程大师。
初学者说:“我已经记住了《计算机编程艺术》的十二卷书中所汇集的算法,我能用LISP、PROLOG、ALGOL、MODULA2和ADA语言编程。
大师礼貌的点点头。”我很少遇见像你这样博学的人,”他说,“我想听听你关于我写过的一个程序的意见。”
“我很高兴助您一臂之力。”说着,初学者骄傲地挺起了胸脯。
大师走到他的电脑前插入一张软盘。“首先我得拷贝一下。”他解释说。
他们坐在那儿,听着旋转的驱动器沙沙作响同。突然电脑上显示出一条信息,“磁盘上没有空间--Abort,Retry or Ignore?”
大师敲了个“R”进行重试,他们又一次听着驱动器的声音,接着那提示又一次出现在屏幕上。大师仅仅再次摁了个“R”,重复着同样的事情。
最后初学者再也按捺不住了。“磁盘上没有空间了,”他生气地说,“他太满了!”
大师说道:“是你的脑袋太满了。”
初学者一下子恍然大悟。
二
大师如是说:“任何一个程序,无论它多么小,总存在着错误。”
初学者不相信大师的话,“如果一个程序小得只执行一个简单的功能,那么会怎样?”他问。
“这样一个程序将没有意义,”大师说,“但假设这样一个程序存在的话,操作系统最后将失效。产生一个错误。”
但初学者不满足。“如果操作系统不失效,那么会怎样?”他问。
“没有不失效的操作系统,”大师说,“但假设这样一个操作系统存在的话,硬件最后将失效,产生一个错误。”
初学者仍不满足。“如果硬件不失效,那么会怎样?”他问。
大师长叹一声。“没有不失效的硬件,”他说,“但假设这样的硬件存在的话,用户就会想让这个程序做一件不同的事,这件事也是一个错误!”
没有错误的程序是一则谬论,世间难寻。假设存在着一个没有任何错误的程序,那么这个世界将会不复存在。
三
象牙塔里的魔术师前来拜访编程大师,像往常一样,带来了他最新的发明。
编程大师从他的终端前抬起头来,看见魔术师站在门口,“这次你带来了什么呀?”大师问。
“这是我最伟大的发明,”魔术师说着,用车推着一个盒子进了屋,“这是终极桌上印刷系统,有了它,排字机、描图桌和照相机能做的事我全能做。我已经设计好了,任何熟悉传统印刷术的人能够在几个月内学会。这儿有我制作的样张,看,它像《古腾保圣经》的首页。”
大师仔细地看了看样张,露出一丝微笑。“这部装置打算用来干什么?”他问。
“我们将用它来印刷技术说明资料。”魔术师说。
<作者按>
这位魔术师经常出现在禅的民间故事中,作为对立面。这个人物是否真正存在,不得而知。然而有传说说,这座象牙塔曾被一伙狂热的信徒控制,这伙人被唆使去干软件盗版、谋杀以及其它各种各样的不道德的事情,以报复机器时代的Cray-2超级计算机的统治。
这座象牙塔在第三个朝代末被包围并几乎毁掉,但由于政府的援助而幸免于难,并得以重建。
四
一位初学者走进大师的工作间,看见一台新电脑摆在大师的桌上。
“那台电脑是什么?”初学者问。
大师把手搭在一个小盒子上,这个小盒子通过一根电缆与那台电脑相连。“看,”大师说,“这部装置控制着我们在屏幕上看到的东西。”
初学者紧紧地盯着屏幕,但他看到的只是毫无意义的符号。
“这个屏幕模仿的是一张桌子,”大师解释道,“比如说,屏幕的这里是文件柜和垃圾桶,这里是打字机和计算器。”
“这是一项伟大的发明。”初学者敬畏地低声说道。
“并不像看上去的那样伟大。”大师说,他推着初学者的肩膀往后退了几尺,“你能看见那两张桌子吗?”大师问道。
初学者点点头。“一张在地板上,另一板在屏幕上。”他说。