Geoffrey James
InfoBooks, 1987 InfoBooks, 1988 InfoBooks, 1989
译者序
如今程序设计类的图书可谓是层出不穷,其中绝大部分是以教程、使用手册和编程技巧为主,
它们都是用来处理一些技术性的问题的。
然而,怎样领悟程序设计的内涵和精髓呢?程序员编程时是一种怎样的思维方式?他们的工
作、生活是个什么样子?他们在想些什么?作为一名经理如何同他们相处并处分发挥他们的
积极性?涉及这些方面的书却寥寥无几。但没有并不代表不重要--随着我国程序设计事业
从起步到发展,这些方面的内容显得越来越重要,我们越来越希望了解它们。
美国是个软件工业和程序设计水平处于世界依靠地位的国家,我们是不是可以从那里借鉴点
什么呢?您将要读到的《编程之道》一书便是出息美国的一位善于进行哲学性思考、有十多
年工作经验的程序设计师--Geoffrey James 之手。
在本书中,作者以一种幽默、辛辣的眼光审视着发生在程序设计室里的各种各样的小故事,
并运用东方的哲学体系进行深层次的思考和理解,即进行“道”式的思考和理解。简单的故
事蕴含深奥的道理,是本书的极大特色。
本书不仅语言优美、比喻生动,而且在结构上颇具匠心。
本书在美国出息时分为三册--《编程之道》《编程之禅》和《计算机寓言--信息时代的
启示》,经与作者协商,决定将中译本汇总为一本以《编程之道的》的书名出版。
1、《编程之道》The Tao of Programming
本书的构思新颖而奇特。作者作为一名计算机考古的业余爱好者,偶然发现了在程序设计业
内传说的《编程之道》。这其中的内容,每个程序员都想知道,但谁也没有见到过,就有点
像金庸的小说《射雕英雄传》中的《九阴真经》。于是作者便将它“翻译”成此书,公之于
众。全书共分为九篇:
第一篇 静寂的空宇
第二篇 古代的大师
第三篇 设计
第四篇 编码
第五篇 维护
第六篇 管理
第七篇 公司里的学问
第八篇 硬件和软件
第九篇 尾声
2、《编程之禅》The Zen of Programming
在本书中,作者借用中国传统文化中的五行--“金、木、水、火、土”来代表与计算机相
关的概念,并以此将多个富有祖宗色彩的故事有机地组织起来。全书分为五篇:
第一篇 木
第二篇 火
第三篇 土
第四篇 金
第五篇 水
3、《计算机寓言--信息时代的启示》
Computer Parables: Enlightenment in the Information Age
作者以四季--“春、夏、秋、冬”来组织本书的结构。全书共分为四篇:
第一篇 秋--虚幻与真实
第二篇 冬--战争与死亡
第三篇 春--真爱与新生
第四篇 夏--启示
我们将此书献给那些爱笑也爱思考的程序设计者,以及那些同程序设计者打交道的管理人
员,当然他们也爱笑爱思考。
《编程之道》
目录
前言
第一篇 静寂的空宇
第二篇 古代的大师
第三篇 设计
第四篇 编码
第五篇 维护
第六篇 管理
第七篇 公司里的学问
第八篇 硬件和软件
第九篇 尾声
第一篇 静寂的空宇
编程大师如是说:
“当你有本事夺走我手中的这块水晶石时,就是你出师的时候了。”
1.1
在静寂的空宇里,一种神奇的物质形成并诞生了。它立刻便静止了,独自守候着,毫无动静,
然而又处于永恒的运动之中。它是所有程序的源头,我不知道它的名字,所以我将称它为编
程之道。
如果此道是完美的,那些操作系统就是完美的,如果操作系统是完美的,那么编译程序就是
完美的,如果编译程序是完美的,那么应用程序就是完美的。用户满意之至--和谐便应运
而生。
编程之道流逝远去,又乘着晨风而归。
1.2
此道产生了机器语言,机器语言又产生了汇编语言,
汇编语言产生了编译程序,如今有了上万种的语言。
每一种语言都有其各自的卑微用途。每一种语言都表达出软件的阴和阳。每一种语言都在此
道之中有其一席之地。
但是,应尽量避免用 COBOL 语言编写程序。
1.3
宇宙之初有道,道产生了空间和时间。空间和时间便是程序设计之阴阳。
不能领悟此道的编程者总是耗尽他们所要编写的程序的时间和空间;而领悟了此道的编程者
却总有足够的时间和空间来达到他们的目标。
除此之外,难道还有其它的情形吗?
1.4
精明的编程者听说了此道,并遵循它;平庸的编程者听说了此道,并寻觅它;愚蠢的编程者
听说了此道,却嘲笑它。
要不是因为有嘲笑,道也就不复存在了。
最高的声音最难被听见。前进也是一种倒退。大器晚成。即使是一个完美的程序也仍然会有
隐患。
道深藏不露,难于理解。
第二篇 古代的大师
编程大师如是说:
“倘若三天不编程,生活将变得毫无意义。”
2.1
老一辈的程序员是神秘的、深奥的。我们没法揣摩他们的想法,我们所能做的只是描述一下
他们的表象。
他们是清醒的,就像一只游过水面的狐狸;他们是警惕的,就像一位战场上的将军;他们是
友善的,就像一位招待客人的女主人;他们是简单的,就像未经刻凿的木头;他们还是难以
琢磨的,就像黑暗的洞穴中漆黑的池水。
谁能说出他们心中的秘密?
答案只存在于道中。
2.2
计算机科学巨擘图灵曾经梦到他是一台机器。当他醒来时,他惊叹道:
“我不知道--我是梦到了自己是台机器的图灵,还是一台梦到了自己是图灵的机器?”
2.3
一家大电脑公司的一名程序员参加了一次软件研讨会。他回来后向经理汇报说:“为其它公
司工作的那些程序员都是些什么的人啊?他们行为拙劣,不顾及自己的仪表。他们的头发又
长又乱,衣服又皱又旧。他们闯进我们的会客组,还在我演讲时发生粗鲁的喧闹。”
经理说:“我本不应该让你去参加这个会议。那些程序员是生活在物质世界之外的。他们认
为生活是荒唐的,一种意外的巧合。他们来去自如。他们只为他们的程序而活着,无忧无虑
地活着。为什么要用社会习俗来约束他们呢?
他们活在此道之中。”
2.4
一个礼堂者问大师:“有位程序员,从不构思、编写文档或测试他的程序,然而所有知道他
的人都认为他是世界上最棒的程序员。这是为什么呢?”
大师回答说:“那个人掌握了道。他不需要事先进行构思,当系统崩溃时,他不会因此而闷
闷不乐,而是心平气和地接受整个事实。他还从编写程序说明文档的需要之中超脱了出来,
不在意是否有人看他的编码。他也不需要进行测试。他的每个程序都完美无缺。宁静而优雅,
程序的用途也显而易见。的的确确,他已经进入了道的神奇境界。”
第三篇 设计
编程大师如是说:
“当程序被测试时,再修改设计方案就太迟了。”
3.1
曾经有个人去参加一次电脑展示会,每天当他进入展馆时,都对门卫说:
“我是个大盗,我偷盗的本领是出了名的。事先警告你,这次展示会也在劫难逃。”
这番话让门卫坐立不安,因为里面有价值数百万美元的电脑设备,所以他紧紧地盯住这个人。
但这个人只是从一个展摊逛到另一个展摊,嘴里轻轻地哼着小曲。
当这个人出门时,门卫把他拉到一边,搜查他的衣服,但一无所获。
第二天,这个人又来了,并对着门卫嚣张地嚷着:“昨天我满载而归,但今天的收获会更大。”
于是,门卫盯他盯得更紧了,但仍一无所获。
在展示会的最后一天,门卫再也抑制不住自己的好奇心了。“大盗先生,”门卫说,“我被你
搞糊涂了,实在想不明白。请告诉我,你究竟在偷什么?”
这个人笑了。“我在偷想法。”他说。
3.2
曾经有位编程大师,喜欢编写非结构化的编程。一位初学者试图模仿他,也开始编写非结构
化的程序。当这位徒弟请师父评价他的进展时,师父批评了他的做法。他说:“对一位编程
高手适合的,对初学者来说并不一定适合。在超越结构化之前,你必须先领悟道。”
3.3
曾经有位程序员被派到 IBM 的军机大臣手下工作。军机大臣问程序员:“设计一个财务软件
包,和设计一个操作系统,哪一个更容易?”
“操作系统。”程序员回答说。
军机大臣立刻发生一种不信任的惊叹,“与一个复杂的操作系统,一个财务软件包简直是小
巫见大巫。”他说。
“并非如此,”程序员说,“在设计一个财务软件包时,编程人员是作为一个中介者在观念各
异的人们之间起作用的:这个软件必须如何操作,它的报表必须是什么形式,它必须如何与
税法一致,等等,一个操作系统则不为其外观所限制。当设计一个操作系统时,编程人员只
要在机器与人的思维之间寻找一种最简单的和谐就可以了。这就是为什么操作系统更容易设
计。”
军机大臣点点头,笑了。“说来也是。但要想检测和纠正其中的错误,哪个更容易呢?”
程序员没有回答。
3.4
一位经理到编程大师那里,交给他一份有关一个新应用程序的需求说明。经理问编程大师:
“如果我分配五个程序员给你,你需要多久能设计好这个系统?”
“那将花费一年的时间。”大师立刻回答。
“但我们马上就需要这个系统,甚至要求更快!如果我分配十个程序员给你,你需要多长时
间?”
大师皱了皱眉头,“那样的话,需要两年。”
“如果我分配一百个程序员给你怎么样?”
大师耸了耸肩膀,“那么这项设计将永远无法完成。”他说
第四篇 编码
编程大师如是说:
“一个写得完美的程序是其自身的天堂,而一个写得糟糕的程序则是其自身的地狱。”
4.1
一个程序应当是轻盈的、灵活的,它的子程序就像一串珍珠一样连接着。它的精神和意图应
该贯穿始终。在程序中,内容既不应太多,也不应太少;既不应该有不需要的循环结构,也
不该有冗余的变量;既不缺乏结构性,又不过分僵化。
一个程序,无论多么复杂,都应该以一个整体的方式运行。程序应以其内在的逻辑为指引,
而非外在形态。
如果一个程序不能达到这些要求,它将处于一种杂乱无章的混淆不清的状态。唯一的方法就
是重写这个程序。
4.2
一位初学者问大师:“我有个程序,时灵时不灵。我一直都遵循着编程的规则,结果却整个
儿搞糊涂了。这是什么原因呢?”
大师回答说:“因为你没有领悟道,所以你迷惑不解。只有傻瓜才会指望从人类身上看到理
性的行为,你又能指望一台人类制造的机器怎么样呢?计算机模仿的是决定论,只有道才是
尽善尽美。
编程用的那些条条框框式的规则仅仅是昙花一现,只有道才是永恒的。因此,在你受到道的
启发之前,你必须沉思于道。”
“但是我怎样才能知道我已经受到了启发了呢?”初学者问。
“当你的程序运行无误时。”大师回答说。
4.3
一位大师正在向他的一名初学编程的弟子解释道的真谛。“此道体现在所有的软件当中--
不管它看上去多么无足轻重。”大师说着。
“此道体现在手掌计算器中吗?”初学者问。
“是的。”
“此道在电子游戏中吗?”初学者继续问。
“此道甚至也体现在电子游戏之中。”大师说。
“那么此道也体现在个人电脑的 DOS 系统之中吗?”
大师咳嗽一声,并稍稍挪动了一下位置。“今天的课就到这里吧。”他说。
4.4
一位项目经理手下的一名程序员正编写软件。他的手指在键盘上飞舞着,在程序的编译过程
中没有出现任何错误信息。程序运行起来就像一阵和风。
“太好了!”经理高兴地大叫了起来,“你的技艺简直是完美无缺。”
“技艺?”程序员说着便从他的终端机前转过身来,“我遵循的是道--所有的技艺远不能
及!当我刚开始编程时,我眼前看见的是整个问题乱成一团。三年之后,我再也看不见这种
一团糟的情形了。相反,我用了各种各样的子程序。但现在,我什么也看不见了。我的整个
身心存在于一种无形的虚空里,我的知觉是空荡荡的。
我的精神随其本能而动,不无原则计划就能自由地工作。总而言之,是我的程序自己写出了
自己。诚然,有时会有一些难题。我看见那些难题向我走来,于是我放慢了速度,默默地注
视着他们。然后我更改了一行编码,那些问题就烟消云散了。然后我完成程序的编译。我静
静地坐着,让工作的欢心情舒畅遍布我的全身。我闭上双眼,歇息片刻,然后退出系统。”
经理说,“希望我的所有的程序员都这么聪明!”
第五篇 维护
编程大师如是说:
“即使一个程序只有三行长,总有一天它也不得不需要维护。”
5.1
一记扇经常开启的门的绞链不需要润滑油。