程序设计之道
http://ezo.biz/b/2005/12/the_dao_of_programming.html
卷首插画
卷首的古代插画代表电脑程式界九个不朽。传统莲枝代表专案管理,仙鹤则是组合语言。豺狼如同走狗像极了工作控制语言,磁片表示是档案管理系统。飘浮在空中的沉思老者,是广大无垠的暂存器。在老者上方飞舞的蝙蝠,表示物质世界对人诱惑不定。老者下方是混沌世界的老龙,由祂携来神秘难言的道。
序
电脑考古学是个崭新的领域。即使像我这样的业余者,偶然都有许多饶有兴味的新发现。几年前,我在一堆散乱的老式打孔卡片中找东西,发现一组彷佛以点阵图形出现的密码。这些图形如同三明治般,夹在成千上万张以RPG程式写好的卡片里。如果不是这些手写的注解,我根本不会再看它们一眼。注解上说:「处理完毕就销毁。」
这句话激发我的好奇心,决定一探这些神秘卡片背后隐藏的内涵。
经过加密、解码的繁复过程,这差不多耗去几百个CPU的运算小时。依据第一张图形的大致外貌,解密结果是本书卷一的开始,然而这只是整个解密计画中最简单的部份。手稿是用陌生的文字所写,这也增加我转换时的困难。持续努力着,对我而言,整个轮廓也愈来愈清楚。虽然我面对的并不是一些简单易懂的图形(我是这么深信不移),若非如此,这传说中的「程序设计之道」是不会现身的。
实在很难用笔墨来形容,当我发现这个几近神迹的真相。我彷佛真的听到「程序设计之道」的声音。我和我认识的人从来没看过这份手稿,也不知道这份手稿是谁的。但我曾多次听闻,「程序设计之道」深深、隐秘地影响电脑的发展。与传说相符的是,「程序设计之道」对程式设计这门艺术有机的影响。不过,这个影响也遭致学院派、企业团体激烈的反抗,他们把「程序设计之道」的影响视为重建秩序的重大威胁。「程序设计之道」的传播方式只好改弦易辙,对程式师加以严格筛选方私下传授。
最后,这个人称『整合派』的程式设计哲学,终成为有权有势的一方,不再需要透过暗中传授。但这种形同宗教迫害(其时间点与大罢工时期相同)也导致这个派别的毁灭,尤其是那些只在派系成员中秘密传授的教本。
传说中的事情是无法验证的,因此对这些带有色彩的流言应该打些折扣不能尽信。这些传说的领域,有兴趣的人类考古学者应该多过于电脑考古学者。然而现在这份手稿已完整地呈现在世人面前,它可以用来区分上述传言究竟是事实,还是传言。
这便是「程序设计之道」的由来,虽然它被时光迷雾掩盖踪迹。但从内部种种迹象来推测,我们知道确切的年代应该在积体电路发明之后。但更明确的时间点,可能还有待专家学者就现在所找到的经典去考证。
「程序设计之道」的作者身份至今仍是个谜,一般都认为是属于嬉皮第六世代的庸友希(音译),其他学者(我也不知其名)庸友希只是将这些故事编辑成册,作者的身份还是无法确定。但大家都同意,书的内容极为深奥难明。而作者身份的厘清,恐怕只是最普通的争议。
或许在「程序设计之道」出版后,这些争论将能厘清。若真是如此,那我对这份手稿所做的努力总算没有白费。但我必须承认,要送出这本经典的英译时,我确实有点犹豫。虽然已做了完整的定义与解释,我总担心译文会无法诠释原着深厚的内涵,而失去令人深思的韵味。基于我个人的信仰,这类的问题偶而会出现在我脑海里。在此别郑重申明我对原着表达手法的尊重,但我并不是一个基本教义派,坚持一定要按照内文逐字翻译。特别是,我发现原着在行文之间对管理阶层及组织无情的指责,后人如我者或能理解,那是当时的政治风气使然。
不管未来的纷纷扰扰,我现在将这份「程序设计之道」的拙劣译文呈现在读者面前。如果有人透过这份自以为是的译作,能瞭解到本存之道的意旨为何,我想我会感到无比快意的。
杰弗瑞.詹姆士
1986年于洛杉矶
卷一 静寂虚无
程式名家如是说:「学会在程式的迷魂阵中找到错误的程式码,就是你下山行道的时候了。」
卷一之一
静寂虚无中有奥秘,不静不动,乃程式之源,无以名之,故曰:程序设计之道。如道至大,则作业系统至大;如作业系统至大,编译程式亦然;如编译程式至大,应用程式亦如此。是以用者大悦,世之和谐存焉。
程序设计之道无远弗届,御晨风而返。
卷一之二
道生机器码,机器码生组译器,组译器生编译器,则万余电脑语言相偕而生。
电脑语言皆有其用途,然不外乎表达软体之阴阳两仪。道在其中,各得其所;
若能避免,少用COBOL。
卷一之三
太初有道,道生时空,时空即为程序设计之阴阳两仪。
未能悟道之编程者,将耗尽程式的时空资料。悟道之编程者恒有充分时空达致要求。
除此之外,还有什么?
卷一之四
上智程式师闻道,勤而行之;中智程式师闻道,若存若亡;下智程式师闻道,大笑之。不笑不足以为道。
大音希声,进道若退,大器晚成。
纵使完美的程式还是有虫。
道藏于人可理解范围之外。
卷二 古之大师
程式名家如是说:「三日不写程式则人生无甚趣味。」
卷二之一
古之程式师神秘而渊博,其思维难以度量,惟勉可述其表。
世故,如狐狸涉水;
机警,似沙场老将;
亲切,像女侍待客;
简明,如未雕之木;
晦涩,若暗洞深潭。
谁能指出心灵之秘?
答案仅存道中。
卷二之二
大师涂林曾经作梦变成一部机器,醒后大叫:「不知是我作梦成了机器,还是一部机器作梦变成了我!」
译注:涂林(Turing)为计算机理论创始者,1912年生于伦敦。全名是艾伦.麦昔森.涂林(Alan Mathison Turing),他被誉为「计算机科学之父」。当电子计算机尚未问世,他已将计算机的原理与能力极限,界定清楚。他所提出的计算机理论,深深地影响计算机科学的发展。为了纪念他对计算机科学的贡献,以其理论所发展出来的计算机,则称为涂林机(Turing Machine)。
卷二之三
某大电脑公司的程式师结束软体会议后,向他的经理报告:「你知道其他电脑公司有那些程式师吗?这帮家伙行为乖张,不重外表,边幅不修,衣服既皱且旧,他们破坏了气氛,而且在我简报时无礼地制造噪音。」
经理回答说:「我不该派你参加这个会议的。这些程式师超然物外,认为生命是荒诞不经的。往来无世俗之限,不具烦忧,只为程式而活。为什么他们要受社会积习的侵扰?
他们全然活在道中。
卷二之四
一个初学者向大师请教:「有个程式师编程时不打草稿,也不测试程式,遑论留下文件供人参考。但所有了解他的人都认为他是世间最好的程式师,这是为什么?」
大师说:「这个程式师已了然悟道。他超越设计之需,所以系统毁损不生气,且无条件地接受这个世界。超越文件之需,是因不计较是否有人要看他的程式。超越测试之需,是因他的每个程式皆已圆满无缺、清澈明亮、精致、目的自明。真的,他已进入道中。」
卷三 构思与设计
程式名家如是说:「到测试程式阶段,才发现要修改原设计方案,那就太迟了。」
卷三之一
曾有某人在参观电脑商展时,每日进门前都向警卫说:「先告诉你,我是个贼,你得小心我的妙手空空,这次展览绝对是在劫难逃。」
因为展览会场有价值上百万元的仪器,这段话令警卫非常紧张,只得紧盯着他。不过这个人仅是轻哼小曲,一个摊位又一个摊位地闲逛。
当他要离开会场的时候,警卫将他带到一旁搜身,却一无所获。
第二天这个人又出现了,以略带责备的口吻对警卫说:「昨天收获不错,相信今天会更好。你得小心点。」警卫再度提高警觉,更加注意他,但仍未发现他到底偷了什么。
展览结束的最后一天,警卫再难抑制好奇,问他:「贼大师,近日因您行径搞得我寝食难安,是否可以告诉我,您到底偷走什么?」
这个人笑着说:「我偷的是概念。」
卷三之二
从前有位程式名家,专写非结构化程式。一个生手试着模仿他,也开始写非结构化程式。当生手要求这位名家评量他的程式,名家却批评他写非结构化程式的错误。
「对大师适用的未必适用于生手,在超越结构之前,你必须悟道。」
卷三之三
曾有一位吴姓官长问他手下的一位程式师,「设计会计系统与作业系统,那种比较简单?」
程式师说:「作业系统。」
「什么!」长官发出难以置信的惊呼!
「显然,会计系统不如作业系统复杂。」长官接续着说。
「并非如此!」程式师回答。
「设计会计系统时,程式师是各拥不同想法的使用者其间的桥梁。其需求不外是,应用系统如何操作才符合习惯?报表展现的型式?合法合税与否…
「反过头来,作业系统不受外界表象所限。设计作业系统,程式师只要寻求单纯、简单的介面,令人与机器达致和谐即可。这就是作业系统容易设计的理由。」
长官微笑点头。「说来也对,但那个容易除错呢?」
程式师静默不语。
卷三之四
经理拿着新应用系统的需求规格去找一位程式大师。「如果我给你五位程式师,你需要多久才能完成这个系统?」
大师很快回答:「一年。」
「但这个系统很快就要上线。如果我再派十个程式师给你,你大概多久能完成?」经理又说。
大师皱眉说:「在这样的情形下,需时两年。」
「那我给你一百个程式师呢?」
大师耸耸肩:「那可能永远结不了案!」
卷四 编撰程式
程式名家如是说:「好程式本身就是天堂,烂程式自身就是地狱。」
卷四之一
程式要轻巧灵活。副程式之间的联结如同珍珠相串。原始设计的精神与意念应遍及程式,增一条指令太多,减一条指令太少。没有不必要的回圈,也没有不用的变数。既不缺乏结构,也不受结构所限而僵化。
程式应依据「最少惊愕定律」而为。这是什么定律?简单得要命!当使用者对操作系统之后,出现惊讶的反应愈少愈好。
不论多复杂的程式,只要用同一规律运作,它就是一个整体。所以,可以直接透过内部逻辑来运作,而不是外在表象。
如果程式不能满足这些要求,便容易失序而产生混淆,进而令整个程式的结构崩溃。唯一的补救之道就是:重写!
卷四之二
生手问大师:「我有个程式,它执行的情况时好时坏;我一向依据程式设计规则写程式,却常陷入困扰之中,这是什么道理?」
大师回答:「你会混淆是因为你未能悟道。只有呆子才会期望人类有合理行为。你怎能指望人类生产的机器?电脑只模拟了决定论(determinism),唯有道才是尽善尽美。」
程式设计规则只是暂时,只有道才是永恒。所以你在开窍之前必须对道日思夜虑。」
「但我如何才能知道已经开窍了呢?」生手问。
大师答:「从你的程式已能正确执行那天开始。」
卷四之三
大师对弟子们解释道的本体:「所有软体都包含了道,不论软体规模是大或小。」
「那种手持计算器也有道吗?」弟子问。
「有!」。
「电动游戏机里也有道?」
「当然!」大师说。
「那个人电脑的DOS作业系统也包含道啰?」
大师轻咳,挪动位置后,说:「下课!」
卷四之四
王子的程式师正在写程式,指尖在键盘之间飞舞,程式编译无误顺畅,执行后像微风轻拂。
「了不起!」,王子惊叹。「你的技巧已是无懈可击。」
「技巧?」程式师从终端机上转过头说:「我依循的是道,道是超越任何技巧!我开始学写程式的时候,眼前所见是混成一堆的程式码。三年后,就不再见到这大片程式。我学会使用副程式后,眼前则是一片空灵,什么都没有了,所有东西都进入空无静寂;我的感官也都进入迟滞。」
「我的精神可依直觉而不必依循计划行事。简而言之,是程式自行如行云流水,止于当止之处。当然,有时也有一些困难,我看着它来,我逐渐放缓自己,静视着。当我开始改动程式,困难就会烟消云散。我再次编译我的程式,静坐并令工作的愉悦充满生命。我闭上双眼,然后关机离去。」
王子说:「我所有程式师都这么聪明睿智吗?」
卷五 维护
程式名家如是说:「虽然程式只有三列,但总有一天需要维护。」
卷五之一
常用之门毋需上油;急流不易淤塞。
声音与思想无法在真空中传播。
软体如果不用就会生銹。
这是至大的奥秘。
卷五之二
经理问程式师还要多久手上程式才能完工。「明天就做完。」程式师很快地回答。
经理说:「我觉得你不太踏实,你说真话,究竟还有多久?」
程式员想一会儿:「我希望在程式里多加一些功能,起码要再两个星期。」程式员终于开口。
「时间还是长了。」经理坚持说:「你能不能简单地告诉我,何时才能完成?这样才能令我满意」。
程式师也同意这点。
几年后经理退休了,在欢送的午餐会上发现那位程式师在终端机前睡着了,因为他写程式写了整夜。
卷五之三
一位程式生手被分派去写一个单纯的财务软体。
这名生手狂热地做了许多天,但当大师看他的成品时,却发现这个系统只包含一个萤幕编辑程式、一般性的绘图模组、一个人工操作介面,但却没有与财务系统有关的程式。
大师问他为何如此?这个生手却变得很激动:「不要没有耐心!我最后会把财务的部份加上去。」
卷五之四
一个好农夫会忽视他种的庄稼吗?
一个好老师会忽略他最差的学生吗?
一个好父亲会允许他的孩子挨饿吗?
那么,一个好的程式师会拒绝维护自已的程式吗?
卷六 管理
程式名家如是说:「程式师多,经理少,生产力就会增加。」
卷六之一
专案经理若有开不完的会,那程式师就会写电玩;会计部门若只想到短期利润,那研发经费差不多就会被删;资深科学家只谈蓝天,那么天空只会有浮云掠过。
不过,这并非程序设计之道。
当经理许下承诺,程式师就不再理会电玩;当会计部门有长远规划,自然就会回复和谐与秩序;当资深科学家专注手中问题,问题很快就能解决。
这才是是程序设计之道。
卷六之二
为什么程式师没生产力?因为他们都把时间花在开会。
为什么程式师难以驾御?因为管理层对他们干预太多。
为什么程式师一个个接连辞职?因为他们的热情已耗尽。
在差劲管理者底下工作,程式师不再觉得他的工作有价值。
卷六之三
某个经理快被炒鱿鱼,但他底下的程式师写了一个叫好又叫座的程式;因为这个缘故,经理保住了饭碗。
经理打算给这位程式员奖励,但程式师拒绝接受。他说:「因为这是个有趣的概念,我才会写这个程式,并不是我期望有所回报。」
经理听了之后回答说:「这个程式师虽然职位不高,但却充分了解做为一个职员的责任,我打算把他升成高级管理顾问!」
当这个任命转达给这位程式师时,他再度拒绝,「我之存在是因为可以写程式,如果我升任管理职,除了浪费每一个人的时间,我也将一事无成。好了,我可走了吧?我还得继续工作呢!」
卷六之四
经理告诉程式师:「以下是工作时间的规定,早上九点钟上班,下午五点钟下班」。
所有程式员都很生气,有几个马上递出辞呈。
于是经理说:「好吧!只要能够如期完工,工作时间由你们自己定。」
程式师满意了,每天中午开始工作,直到第二天清晨。
卷七 公司智慧
程式名家如是说:「你可以对主管示范程式,但却无法让他通晓电脑。」
卷七之一
生手问大师:「东方有一种叫”公司总部”的伟大树状结构,上面标满副总裁、会计长的图案。它发出大量的备忘录,每张上面都标明文件流程,但却没人知道实质意义。每年都有新的名字加入新的分枝上,但似乎全都徒劳无功。为什么这不自然的组织还能继续存在?」
大师说:「你已体认这个庞大结构,而被它不合理的目的困扰。你难道不能从它无止的循环中得乐趣吗?不能够欣赏藏在枝叶底,毫无困难的程式设计吗?为什么要被它的无用所困扰呢?」
卷七之二
东海有鱼曰鲲,鲲能变成双翼遮天的大鹏。当大鹏飞越陆地时,带来由公司总部发出的讯息。讯息正好掉落在一群程式员中央,如同海鸥在沙滩上轻点记号。尔后大鹏振翅乘风而归。
生手瞪眼望着大鹏,因为他们对此不明瞭;一般程式员则忧虑大鹏来临,因为他们害怕它带来的讯息;只有大师继续坐在终端机前工作,因为他不知大鹏的来去。
卷七之三
象牙塔里的魔术师带着他的新发明去见大师,他推了个大黑盒子走进大师办公室,大师正静静地等着。
「这是一套整合性、分散式具一般用途的工作站。还有一套专属的作业系统,第六代语言,多项最先进的使用人界面,再加上人体工学的设计;这花了数百人力才完成的,很了不起吧?」魔术师这么说。
大师抬了下眼珠子说:「确实了不起。」
魔术师继续说:「公司总部已下令每个人都要用这部新机器,做为发展新软体的平台,您同意这个看法吗?」
「当然,我马上会把它放到资讯中心去。」于是魔术师高兴地回到象牙塔去。
几天后,一个生手在大师的办公室里团团转,说:「我找不到新程式的报表,您知道会在那儿吗?」
「当然」,大师答道,「报表就堆在资讯中心的台子上!」
卷七之四
大师可以无忧地在程式间转换。管理上的改变伤不到他;纵使专案取消,也不会被解雇。为什么?因为他为道所厚覆。
卷八 硬软体
程式名家如是说:「没有风,草儿一动也不动;没有软体,硬体有什么用!」
卷八之一
生手问大师:「甲电脑公司规模极大,对它的竞争者而言,甲公司高高在上,像是巨人与侏儒的对比;甲公司任一部门都能单独成为一个企业。为什么会这样?」
大师回答:「为什么有这么笨的问题?甲公司就是因为它的确大所以规模才会这么大。如果它只会生产硬体,没有人会买它;如果只卖软体,也没人会用它;如果只维护系统,人们只会把它当成佣人;因为它将所有工作合在一起,人们就视它如神了。它无需竞争,因为胜利根本不费吹灰之力。」
卷八之二
一天,大师经过生手旁,发现生手迷上一台掌上型电玩。「对不起,我可以看看它吗?」大师说。
生手把机器交给大师。大师说:「我看这部机器有三个层次:初级、中级、高级可玩。而真正的玩法应该是,让机器赢不了人类,而人类也胜不了机器。」
「天啊!大师!要如何才能找到这个奇妙玩法的开关?」生手恳求地说。
大师把机器朝地一摔,还用脚将机器踩烂。
突地,生手开窍了。
卷八之三
从前有位微电脑的程式员,一位服务于大型电脑的程式员来拜访他。微电脑的程式员说:「你看,在这儿多好!我自已有作业系统与档案储存设备,毋需与人共用电脑资源;软体可自行开发且易改、易用。为什么你不辞职来加入我们?」
大型电脑的程式员对他的朋友描述大型电脑系统:「大型电脑像古之圣哲般沉思,座落于资讯中心中央。磁盘机一个接一个如同机器装置之于海洋。软体像钻石般地有多种面貌,像丛林般茂密。各个程式如急流般地涌入系统,这就是我在那儿工作的乐趣。」听了这段话之后,微电脑程式员静默无声。自此两人结为好友,终生不渝。
卷八之四
硬体与软体走在路上,软体对硬体说:「你是阴而我是阳,若我们齐心协力,一定能扬名立万,大赚其钱。」
之后,他们自然结合在一起,意欲征服世界。
不久他们在路上碰到韧体,韧体一身破烂衣裳,拄着拐杖,蹒跚跛行而来。韧体对两人说:「道在阴阳之外,静寂不动如古井无波;道不求名,故无人知;道不逐利,因圆浑无缺。道超乎时空之限而存在。」
听毕,硬体与软体羞愧不已,决定回家。
卷九 结语
程式名家如是说:「现在,是你下山行道的时候了!」
关于作者
杰弗瑞˙詹姆士在1977年以优异成绩毕业于加州大学,并在主要电脑制造商担任软体
工程师的职务。
1984年,因为在电脑排版系统上杰出的工作成果,他获得最佳技术人员的奖项。
杰弗瑞着名的软体作品有
1.Enochian Evocation:这套软体用于翻译、转录16世纪科学手抄本。
2.Document Databases:广泛地用于自动排版软体。它也能够进行文字辨识,将本
文转成电子出版的线上文件。
关于本书
我们很荣幸能为您出版这本书。我们的目的是与您分享以枕边温语的方式讲述少数严肃深度的思想。希望两者您都能满意,您可以写信寄到资讯书籍出版社(Info Books)给我们,好让我们知道您的批评与指正。
「程序设计之道」一书中的许多构想,来自作者练罢太极拳后的灵感。作者习太极拳已超过四年。最后一次与作者进行讨论,发行人也开始练太极拳了。
本书的电子格式档是用麦金塔排版并用雷射印表机印出,内文使用Times字体,标题则用Helvetica字体。插图是由我们的艺术总监在烛光下静思,并与作者讨论而绘出的。在艺术总监与发行人之间,因为这些插图而常有会心一笑。
版面在安排的过程,也常将印表机关闭而用手不断地重排,以期能忠实地反应原始精神。
迄今为止,每个读过这本书的人,都有他自己喜爱的格言(顺道一提,每个人的选择都不一样)。也要求我们能有海报般大小的复制品。我们实感荣幸。我们会选择有益人心且令人感到有趣的格言,制成海报插图。以便您挑选自己喜爱的格言海报,用来当成家里或是办公室的装饰品。请参考我们的目录,并写信向我们购买。
希望您会喜欢这本小书!