## 编程中的道

当你想起“编程”的时候你会想起什么呢？这是一项能获得高薪的谋生技能？是一个有益身心的智力活动？是一门高价课程？是一个穿着格子衬衫、盯着工资和股票、整天 996 的职业吗？

这一讲我想帮你从另一个角度看编程这个技艺。其实我想说的不是编程，而是任何一种允许你达到高水平的技艺。这是一个古老的角度。是从古至今，每一个心无旁骛、诚实面对技艺、追求最高级的智慧、对手艺乐在其中的高手所坚持的角度 —— 也就是“道”。

我想向你介绍一本曾经在学生时代激励过我的书。这本书的作者叫杰弗里·詹姆斯（Geoffrey James），他曾经是一位软件架构师、营销主管和自由撰稿人。这本书的中文版叫《编程之道》，多年来一直在程序员中间低调地流传，在豆瓣网 [1] 被人列为“程序员四大奇书”之一。另外三本是《编程之美》《编程之魂》和……《颈椎病康复指南》。

这是一本热爱编程的人喜欢读的书。

中文版的《编程之道》其实是詹姆斯在上世纪八十年代写的三本小书的合集，分别是《编程中的道》（The Tao of Programming，1987）、《编程中的禅》（The Zen of Programming，1988）和《计算机预言：信息时代的悟道》（Computer Parables: Enlightenment in the Information Age，1989）。

詹姆斯是个土生土长的美国人，他写这些书的时候才三十多岁。而这些书，却把“编程”这么一个特别现代的技艺，和中国古老的“道”、“禅”、以及一些典故结合在了一起。

这个结合的效果是“编程”变成了一门高深莫测的技艺。程序员的世界成了武侠、甚至是修仙世界，里面有各种深藏不露的大师。詹姆斯还特意在书中加了几段导言，假装世界上最高水平的编程大师是住在西藏的某个寺院之中……

*

其实詹姆斯这几本书可以说都是游戏之作，是智识的玩笑。詹姆斯非常理解程序员，而且相当理解中国智慧，他描写了一种正确的趣味。不过这个趣味未必适合今天的、作为程序员的这个特定职业。

今天的软件行业已经非常非常地规模化和工业化了，绝大多数程序员都在做一些相对简单、并不需要太高技艺的事情，这个局面跟八十年代那种作坊式的编程行为不可同日而语。现在并不是每个公司都需要一两个黑客级的人物，所以这本书未必能让很多人共鸣。

但编程毕竟是一项讲究技艺的劳动。我们专栏讲过 [2]，高水平程序员和普通程序员的差距不是十倍，而是一百倍甚至一万倍。我相信每一个需要人的创造性的行业里，都会有一些绝地武士（Jedi）一样的大师。

《编程中的道》这几本书并不能教给你任何编程技艺，但是你可以从中体会到一种可能性 ——

作为现代人，在现代化的工作之中，实践“道”的可能性。

道不应该是什么虚无缥缈高不可攀只属于古代传说中的圣人的东西。当詹姆斯把道安放在程序员身上的时候，你发现一切都是那么自然。詹姆斯提醒我们，道就在你我做的事情之中。

好，闲话少说，咱们直接欣赏几段 [3]。

……也许你能猜到詹姆斯致敬的是哪一段经典。

1

王总手下的一个程序员正在写软件。他的手指在键盘上飞舞。程序编译时没有一条错误信息，运行起来就如同一阵微风。

“太精彩了！”王总赞叹道，“你的技术已经无可挑剔！”

“技术？”程序员从终端机转过身来说，“我所遵循的是道 —— 道超越一切技术。刚开始编程的时候，我眼前的程序是整个的一大团。三年以后，我就看不到一整团了，我看到的是一个个子程序。而现在我看到的是虚空。我的感官很悠闲，我的精神自由地按照它自己的直觉前进。我的程序如同是自己在写自己。确实，有时候我会遇到难题。当我发现难题的时候，我会慢下来，安静地观察。然后我改变一行代码，困难就烟消云散。写好程序，我一边让机器编译，一边安静地坐在那里，享受工作的喜悦。我闭一会儿眼睛，然后退出系统。”

王总说，“如果我的程序员都能这样该多好！”

2

忍者大师如是说：

“对于聪明的人，只要一个字；对于快马，只要轻轻一鞭；对于写得好的程序，只要单独的一个命令。”

3

图灵祖师有一次梦见自己是一个机器。醒来后，他感叹说：

“我不知道我是梦见自己是机器的图灵，还是梦见自己是图灵的机器！”

4

一个大厂的程序员去参加了一个软件会议，回来对自己的主管说：“别的公司的程序员都是些什么人啊？他们举止不雅，不修边幅。他们头发蓬乱，衣服破旧。他们一点礼貌都不讲，在我作报告的时候乱嚷嚷。”

主管说：“我不应该让你参加那个会议。那些程序员生活在物理现实之外。他们认为世俗生活只是一个可笑的、偶然的意外。他们来去自由，无所牵挂，他们只为自己的程序活着。他们何必在意社会习俗呢？”

“他们生活在道中。”

*

5

编程大师如是说：

“三天不编程，生活变得毫无意义。”

6

编程大师如是说：

“既使一个程序只有三行长，也总有一天需要去维护它。”

7

常用的门，门轴上不需要用油。

湍急的水流不会停滞不前。

声音和思想都不能在真空中传播。

软件不使用就会腐坏。

8

曾经有一位编程大师爱写非结构化的程序。一个新手程序员想要模仿他，就也开始写非结构化的程序。新手请大师评价一下他的进步，大师批评了他：“适合高手的并不适合于初学者。在你想要超越结构之前，你必须先理解道。”

9

一个在大学学过很长时间编程的初学者来拜访编程大师。

初学者说：“我已经记住了《计算机编程艺术》十二卷书中所有的算法，我能用 LISP、PROLOG、ALGOL、MODULA2 和 ADA 语言编程。”

大师礼貌地点点头。“我很少遇见像你这样博学的人，”大师说，“我想听听你关于我写过的一个程序的意见。”

“我很高兴助您一臂之力。”初学者挺起了胸脯。

大师走到电脑前，插入一张软盘。“首先我得拷贝一下。”他解释说。

他们坐在那儿，听着旋转的驱动器沙沙作响。突然电脑上显示出一条信息：“磁盘空间不足 - 放弃（Abort）、重试（Retry） 还是忽略（Ignore）?”

大师敲了个“R”键选择重试，他们又一次听到驱动器的声音，接着那个提示又一次出现在屏幕上。大师再次按了个“R”……

最后初学者再也按捺不住了。“磁盘没有空间了，”他生气地说，“它太满了！”

大师说道：“是你的脑袋太满了。”

初学者恍然大悟。

*

10

一个主管向编程大师提出了一个应用需求。主管问大师：“如果我给你五个程序员，这个系统多久能设计完成？”

“一年，”大师立即说。

“但是我们等不了，这个得越快越好！如果是十个程序员呢？”

大师皱起了眉。“那样的话，得两年。”

“那要是一百个程序员呢？”

大师耸了耸肩。“那这个设计将永远都无法完成，”他说。

11

一名市场营销员和一名程序员在一次新闻发布会上发言，他们发布了一项新的计算机技术。

市场营销员说：“这项技术比原子弹、晶体管和电话三项发明对世界文明的影响加起来都要大。”

程序员说：“这项技术在有限的领域内，在有限的程度上，解决了一些技术性的问题。”

猜猜看，记者们会引用谁的发言。

12

两位计算机技术顾问正在谈论一位刚刚去世的同事。

“我简直不能相信，”第一个顾问说：“他看上去很有活力。他知道五十多种文本编辑程序和一百多种编程语言。他有一间屋子，里面堆满了各种品牌的电脑。他属于所有社交网络，每一天收到一百多封电子邮件，并且认真答复每一封邮件。”

“对于他的过世，我也感到很吃惊。”第二个顾问说，“顺便问一句，他怎么死的?”

第一个顾问摇了摇头，“他得了冠心病。”

*

13

一位大师正在给他的徒弟解释“道”。“道存在于所有软件之中 —— 不论是多么渺小的软件，”大师说。

“手持计算器里也有道吗？”徒弟问。

“是的，”大师回答。

“游戏里也有道吗？”徒弟继续问。

“就连游戏里也有道，”大师说。

“个人电脑的 DOS 操作系统里也有道吗？”

大师咳嗽了一声，轻轻改变了一下姿势。“今天的课就到这里，”他说。

*

14

电子邮件说

项目已取消

清理文档的时候

我哭了

![图片](https://piccdn3.umiwi.com/img/202012/17/202012172146008096858603.jpg)
