荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: limt (晴转多云间阴有小到中雨局部大到暴雨), 信区: Program
标  题: 《编程之道》全文 (转载)
发信站: 荔园晨风BBS站 (Tue Nov  5 22:40:10 2002), 站内信件

蓝森林 http://www.lslnet.com 2001年1月1日 21:55


作 者: Geoffrey James


[美]Geoffrey James

小赵 录入整理

声明:
本文内容来自《编程之道》一书, 小赵只负责录入. 所有版权归该书的出版社。本
文由原
来的三册书组成:《编程之道》 《编程之禅》《计算机时代的寓言》

目录

前言
第一篇 静寂的空宇
第二篇 古代的大师
第三篇 设计
第四篇 编码
第五篇 维护
第六篇 管理
第七篇 公司里的学问
第八篇 硬件和软件
第九篇 尾声



第一篇 静寂的空宇

编程大师如是说:

“当你有本事夺走我手中的这块水晶石时,就是你出师的时侯了。”

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

一记扇经常开启的门的绞链不需要润滑油。

一条湍急的河流不会变得污浊。

无论是声音还是想法都不可能在真空中传播。

软件如果不用就会腐朽。

这世界真奇妙。

5.2

一个程序员正在编写他的程序,经理问他还需要多长时间完成。

“明天就可以完成。”程序员立刻回答。

“我想你这是不切实际,”经理说,“实话实说,这需要多长时间?”

程序员想了一会儿。“我还想加进一些新的特色,这需要花至少两个星期的时间。
”他最
后说。

“即使那样也期望过高,”经理坚持说,“只要你编完程序时告诉我一声,我也就
满足了
。”

程序员答应了。

几年以后,那位经理要退休了。在他去退休午餐会的路上。他发现那个程序员趴在
他的终
端机前睡着了。整个晚上都在忙于编写那个程序。

5.3

一次一位初学编程者被指派编写一个简单的财务软件包。这位初学者大张旗鼓地工
作了许
多天。但当他的师父检查这套程序时,发现其中包含有一个屏幕编辑器,一套通用
图表程
序,一个人工智能界面,然而却没有任何财务方面的东西。

当师父问及此事时,初学者显得愤愤不平。“不要这样没有耐心嘛,”他说,“我
最后加
些财务的素材进去就是了。”

5.4

难道一位好农民会漏掉他所种的一株庄稼吗?

难道一位好老师会放弃哪怕是最差的学生吗?

难道一位好父亲会允许哪一个孩子挨饿吗?

难道一位好程序员会不愿维护他的程序吗?


第六篇 管理

编程大师如是说:

“让程序员多而经理少--然后生产效率就会高。”

6.1

当经理们没完没了地开会时,程序员就写些游戏玩;当财务主管们谈到季度利润时
,开发
用的预算马上就要被削减;当资深科学家们谈论蓝蓝的天空时,马上就会风起云涌


其实,这并不是编程之道。

当经理们忠于职守时,游戏程序就会被搁置到一边;财务主管们制订出长远的计划
时,和
谐秩序将很快恢复;当资深科学家们着手于眼前的问题时,这些问题不久就会解决


其实,这才是编程之道。

6.2

为什么程序员没有效率?

因为他们的时间浪费在开会上。

为什么程序员很难管束?

因为管理层多管闲事。

为什么程序员接二连三地辞职?

因为他们的热情已耗尽。

在糟糕的管理之下工作,他们不再敬业。

6.3

一位经理即将被解职,但此时他手下的一名程序员发明了一个新的程序。这个程序
流行起
来,并且极为畅销。结果,经理又回到了原来的岗位上。

经理试图要发给那位程序员一笔资金,但程序员拒绝了。他说:“我写这个程序,
因为我
认为这是个很有意思的想法。我并不期望有所回报。”

经理听到这话,评论说:“这位程序员虽然身居卑位,却能很好地理解一位雇员应
尽的职
责。让我们提拔他到管理顾问的高位上吧!”

然而,接到通知后,那位程序员又一次拒绝了。他说:“我在属于我的位置上,才
能较好
地编程。如果我被提升了,除了浪费每个人的时间,我将一事无成。现在我可以走
了吗?
我还有一个程序要编呢。”

6.4

一位经理走过来对他的程序员们说:“关于你们的上班时间:你们要早上九点钟到
,下午
五点钟下班。”听了这话,所有的程序员都很气愤,其中有几位要当场辞职。

于是,经理只好又说:“好吧,那样的话,你们可以自己安排上班时间,只要你们
能按时
完成项目。”程序员们满意了。以后,他们中午来到办公室,一起工作到凌晨。



第七篇 公司里的学问

编程大师如是说:

“你可以向一位公司总裁演示一个程序,但你无法使他学会使用电脑。”

7.1

一位初学者问大师:“在东方(此处喻指美国的东海岸,有许多大公司的总部--
译注)
,有一个不寻常的树状结构,人们称它为‘公司总部’。它的副总裁们和财务主管
们的数
量之大,使它鼓得不成开关。它签发大师的便函,每份上都写着”归去”“来兮”
,却没
有人知道那是什么意思。它的那些分支机构每年都要换新的名字,但都毫无价值。
如此一
个不正常的实体怎么能继续存在呢?”

大师回答说:“你探察这个庞大的邓因其没有合理的用途而心神不定。难道你不能
从它那
无尽的回旋中得到乐趣吗?你不会享受一下在它所蔽护的部分里的编程的那种无忧
无虑的
轻松吗?你为什么要因为它毫无用处而心烦意乱呢?”

7.2

在东方,有一条大鱼,比其它所有的鱼都要大。它变成了一只鸟,它的翅膀就像云
朵一个
布满了天空。当这只鸟飞过陆地时,它带来了“公司总部”的消息,像蜻蜓点水一
样把这
个消息丢在了那些程序员中间。然后这只鸟驾着风,背负蓝天,返回了家园。

初学编程者惊奇地盯着那只鸟,因为他根本无法理解;平庸的程序员畏惧那只鸟的
到来,
因为他害怕鸟儿带来的消息;而编程大师却仍然在他的终端机前工作,因为他不知
道那只
鸟来了又去了。

7.3

象牙塔里的魔术师带来了他最新的发明,要让编程大师检验一下。魔术师把一只大
黑箱子
推进办公室,大师静静地等侯着。

“这是一台集成的、分布式的、通用的工作站,”魔术师开始,“运用人类工程学
原理,
使用享有专利的操作系统、第六代评议和多重状态用户界面而设计完成。建造这台
工作站
,花了我几百名助手几年的时间。这不足以令人惊奇吗?”

大师轻轻地扬了扬眉毛。“这的确令人惊奇。”他说。

“公司总部已经命令,”魔术师继续说,“每个人都得使用这台工作站作为操作平
台来设
计新的程序。你同意吗?”

“当然同意,”大师说,“我马上就把它运到数据中心去。”于是魔术师兴高采烈
地回到
了象牙塔去了。

几天后,一位初学者走进大师的办公室问道:“我找不到我的新程序清单了。你知
道它会
放在哪儿吗?”

“知道,”大师回答说,“那些清单就堆放在数据中心的台子(platform“可以指
操作平
台”,也可以指普通的台子--译注)上。”

7.4

编程大师从不惧怕在设计不同程序的岗位间调来调去;管理层的变动不可能对他有
所损害
;他不会被解雇,即使项目取消了。这是为什么呢?因为他胸有成“道”。


第八篇 硬件和软件

编程大师如是说:

“没有风,草儿静止不动;没有软件,硬件则无所为用。”

8.1

一位初学者问大师:“我觉察到有一家电脑公司比其它所有的公司都要大得多。它
在中遥
遥领先,就如同鹤立鸡群一般。它的任意一个部门都可以组成一个完整的企业。这
是为什
么呢?”

大师回答说:“你怎么问这么愚蠢的问题呢?因为那家公司大,所以它就大嘛。如
果它仅
仅生产硬件,没人愿买;如果它仅仅生产软件,没人愿用;如果它仅仅维护一下系
统,人
们将把它当作是佣人。然而,因为它把所有这些东西都结合了起来,它便摇身一变
,被人
们看作是诸神之一。不费吹灰之力,它便能取胜。

8.2

一天,一位大师从初学编程者身边经过,他发现这位初学者正在全神贯注于掌上电
脑游戏
。“对不起,”他说,”我可以看一下吗?”

初学者立刻紧张起来,把那个玩意儿递给了大师。“我知道这种设备提供了三个游
戏级别
:容易、中等和高难,”大师说,“然而每个这样的设备都有另一个级别,在这一
级,游
戏机既不想赢人,也不想被人打败。”

“请问,尊敬的大师,”初学者恳求道,“怎样才能找到这个奇妙的级别设置呢?


大师把那个玩意儿扔到地上,踩到粉碎。突然间,那个初学者明白了什么。

8.3

曾经有一个程序员,擅长在微电脑上编程,“瞧,我在这里过得多好呀,”他对另
一位来
访的程序员说,这位程序员是在大型主机上工作的,“我有自己的操作系统和文件
存储设
备,我不必和其他任何人分享我的资源。这里的软件自相一致,很容易使用。你为
何不辞
去现在的工作,加入到我这里来呢?”

于是,主机程序员开始向他的这位朋友描绘他的系统:“主机就像一位陷入沉思的
圣人一
样,端坐在数据中心。它的磁盘器首尾声相连,就如同机器的海洋。这里的软件既
像钻石
一样能多面反射光芒,又像原始丛林一样复杂难测。这里的程序,各具特色,它们
像湍急
的河流穿过系统。这就是我乐于此处的原因。

微电脑程序员听到这里,陷入了沉默。但这两位程序员至死都保持着友谊。

8.4

在去硅谷的路上,硬件碰上了软件。软件说:“你是阴,我是阳。如果我们携手同
路,我
们将闻名于世,并能赚大笔的钱。”于是,这一对阴和阳便一同往前走,想着怎么
征服世
界。

不一会儿,他们遇到了固件(firmware,硬件和软件结合在一起的部件,如IC卡-
-译注
),他衣衫褴褛,手里拄着根带刺的拐杖,蹒跚地走着。固件对他们说:“道存在
于阴、
阳之外。它默默无闻,静如止水。它不追求名誉,所以没人知道它的存在;它不追
求财富
,因其自身完整圆满。它存在于空间和时间之外。”

软件和硬件,自觉惭愧,掉头回家去了。


第九章 尾声

编程大师如是说:

“现在该是你出师的时侯了。”




--

远在远方的风比远方更远.......

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.48.43]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店