IT - 编程中的道
当你想起“编程”的时候你会想起什么呢?这是一项能获得高薪的谋生技能?是一个有益身心的智力活动?是一门高价课程?是一个穿着格子衬衫、盯着工资和股票、整天 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.一个大厂的程序员去参加了一个软件会议,回来对自己的主管说:“别的公司的程序员都是些什么人啊?他们举止不雅,不修边幅。他们头发蓬乱,衣服破旧。他们一点礼貌都不讲,在我作报告的时候乱嚷嚷。”
主管说:“我不应该让你参加那个会议。那些程序员生活在物理现实之外。他们认为世俗生活只是一个可笑的、偶然的意外。他们来去自由,无所牵挂,他们只为自己的程序活着。他们何必在意社会习俗呢?”
“他们生活在道中。”
下面这几段是高手对新人的告诫 ——
1.编程大师如是说:“三天不编程,生活变得毫无意义。”
2.编程大师如是说:“既使一个程序只有三行长,也总有一天需要去维护它。”
3.常用的门,门轴上不需要用油。湍急的水流不会停滞不前。声音和思想都不能在真空中传播。软件不使用就会腐坏。
4.曾经有一位编程大师爱写非结构化的程序。一个新手程序员想要模仿他,就也开始写非结构化的程序。新手请大师评价一下他的进步,大师批评了他:“适合高手的并不适合于初学者。在你想要超越结构之前,你必须先理解道。”
5.一个在大学学过很长时间编程的初学者来拜访编程大师。
初学者说:“我已经记住了《计算机编程艺术》十二卷书中所有的算法,我能用 LISP、PROLOG、ALGOL、MODULA2 和 ADA 语言编程。”
大师礼貌地点点头。“我很少遇见像你这样博学的人,”大师说,“我想听听你关于我写过的一个程序的意见。”
“我很高兴助您一臂之力。”初学者挺起了胸脯。
大师走到电脑前,插入一张软盘。“首先我得拷贝一下。”他解释说。
他们坐在那儿,听着旋转的驱动器沙沙作响。突然电脑上显示出一条信息:“磁盘空间不足 - 放弃(Abort)、重试(Retry) 还是忽略(Ignore)?”
大师敲了个“R”键选择重试,他们又一次听到驱动器的声音,接着那个提示又一次出现在屏幕上。大师再次按了个“R”……
最后初学者再也按捺不住了。“磁盘没有空间了,”他生气地说,“它太满了!”
大师说道:“是你的脑袋太满了。”
初学者恍然大悟。
下面这几段是程序员对工作方式的吐槽 ——
1.
一个主管向编程大师提出了一个应用需求。主管问大师:“如果我给你五个程序员,这个系统多久能设计完成?”
“一年,”大师立即说。
“但是我们等不了,这个得越快越好!如果是十个程序员呢?”
大师皱起了眉。“那样的话,得两年。”
“那要是一百个程序员呢?”
大师耸了耸肩。“那这个设计将永远都无法完成,”他说。
2.
一名市场营销员和一名程序员在一次新闻发布会上发言,他们发布了一项新的计算机技术。
市场营销员说:“这项技术比原子弹、晶体管和电话三项发明对世界文明的影响加起来都要大。”
程序员说:“这项技术在有限的领域内,在有限的程度上,解决了一些技术性的问题。”
猜猜看,记者们会引用谁的发言。
3.
两位计算机技术顾问正在谈论一位刚刚去世的同事。
“我简直不能相信,”第一个顾问说:“他看上去很有活力。他知道五十多种文本编辑程序和一百多种编程语言。他有一间屋子,里面堆满了各种品牌的电脑。他属于所有社交网络,每一天收到一百多封电子邮件,并且认真答复每一封邮件。”
“对于他的过世,我也感到很吃惊。”第二个顾问说,“顺便问一句,他怎么死的?”
第一个顾问摇了摇头,“他得了冠心病。”
下面这段是程序员吐槽微软公司的 DOS 操作系统。八十年代末,DOS 是个人电脑的主力操作系统,为电脑普及做出巨大贡献,同时也给微软公司带来了不可思议的商业成功。但是 DOS 是个很糟糕的、临时对付出来的操作系统。本来当时已经有一个非常成熟、极为优秀的操作系统 —— UNIX,只是因为没有及时商业化,被微软用 DOS 抢了先。 对程序员来说,这个感觉就如同瑞士的钟表匠看着来自中国义乌的手表打败了劳力士。
一位大师正在给他的徒弟解释“道”。“道存在于所有软件之中 —— 不论是多么渺小的软件,”大师说。
“手持计算器里也有道吗?”徒弟问。
“是的,”大师回答。
“游戏里也有道吗?”徒弟继续问。
“就连游戏里也有道,”大师说。
“个人电脑的 DOS 操作系统里也有道吗?”
大师咳嗽了一声,轻轻改变了一下姿势。“今天的课就到这里,”他说。
最后这段是詹姆斯模仿的日本俳句,这段无须解释 ——
电子邮件说:“项目已取消,清理文档的时候,我哭了”
注释
[1] 豆瓣书单:https://book.douban.com/subject/1899158/
[2] 一个人工作,十九个人围观
[3] 《编程之道》有不止一个中文版,有的地方翻译的很好有的地方不是很理想。我这里引用的,有的是我直接从英文翻译的,有的是对某个中文版的稍加改写。
[4] 出处声明:得到*精英日课4
热门新闻