麻省理工:来自美国Nasa的编程之道
译者:杰弗里-詹姆斯
注:我从 http://misspiggy.gsfc.nasa.gov/tao.html 复制了此文,并删除了所有 IMHO 无关格式。
—亚历克斯
第一册
寂静的虚空
程序设计大师如是说
“当你学会从陷阱框架中攫取错误代码时,就是你离开的时候了。”
1.1
有一种神秘的东西在寂静的虚空中形成、诞生。它孤独地等待着,一动不动,既是静止的,又是不断运动的。它是所有程序的源头。我不知道它的名字,所以我称它为程序设计之 “道”。
道大,则操作系统大。
操作系统大,则编译器大。
编译器好,应用程序就好。
用户满意,世界和谐。
编程之道,流于远方,归于晨风。
1.2
道生机器语言。机器语言诞生了汇编器。
汇编器产生了编译器。现在,有一万种语言。
每种语言都有其目的,无论多么卑微。每种语言都表达了软件的阴阳。每种语言在 “道 ”中都有自己的位置。
但如果可以避免,请不要使用 COBOL 编程。
1.3
道生一,一生二,二生三,三生万物。道产生了空间和时间。
因此,空间和时间是编程的阴阳。
不懂 “道 ”的程序员,其程序的时间和空间总是不够用。悟道的程序员总是有足够的时间和空间来完成他们的目标。
怎么可能不是这样呢?
1.4
聪明的程序员知道 “道”,并遵循 “道”。普通程序员闻道而寻之。愚蠢的程序员闻道而笑。
如果没有笑,就没有道。
至音难闻。进则退,退则进。大器晚成。再完美的程序也有漏洞。
第二册
古代大师
程序员大师说过
“三天不编程,生命就变得毫无意义。”
2.1
古代的程序员神秘而深邃。我们无法揣摩他们的思想,只能描述他们的外貌。
警觉,如狐狸过水。
警觉,像战场上的将军。
亲切,像迎接客人的女主人。
简单,像未经雕琢的木块。
不透明,像黑暗洞穴中的黑潭。
谁能说出他们心灵的秘密?
答案只存在于 “道 ”之中。
2.2
图灵大法师曾梦见自己是一台机器。当他醒来时,他感叹道:
“我不知道是图灵梦见自己是一台机器,还是机器梦见自己是图灵!”
2.3
一家大型计算机公司的程序员去参加一个软件会议,回来后向他的经理汇报说:”什么样的程序员会在公司工作?“什么样的程序员会在其他公司工作?他们的行为举止很糟糕,而且不注重外表。他们头发又长又乱,衣服又皱又旧。他们砸了我们的招待套房,还在我演讲时发出粗鲁的声音。
经理说: “我真不该派你去参加会议。那些程序员生活在物质世界之外。他们认为生活是荒谬的,是偶然的巧合。他们来无影去无踪。他们无忧无虑,只为自己的程序而活。他们何必在意社会习俗呢?
他们活在’道’之中”。
2.4
一位新手问大师 “这位程序员从不设计、记录或测试他的程序。然而,所有认识他的人都认为他是世界上最好的程序员之一。这是为什么呢?
大师回答说 这位程序员已经掌握了 “道”。他已经超越了设计的需要;当系统崩溃时,他不会生气,而是无忧无虑地接受宇宙。他已经超越了对文档的需求;他不再关心别人是否看到他的代码。他已经超越了测试的需要;他的每一个程序本身都是完美的,宁静而优雅,其目的不言自明。他真正进入了’道’的奥秘”。
第 3 册
设计
程序设计大师如是说
“当程序正在接受测试时,再进行设计修改就为时已晚了。”
3.1
曾经有一个人去参加一个电脑展销会。每天一进门,他就对门口的保安说:
“我是个大盗,以偷窃闻名 请大家提高警惕,因为这次交易会不可能不被洗劫一空。”
这番话让警卫非常不安,因为里面有价值数百万美元的计算机设备,所以他小心翼翼地盯着这个人。但这个人只是在一个个展台之间徘徊,嘴里还小声地哼着歌。
当这个人离开时,警卫把他带到一边,搜查了他的衣服,但什么也没找到。
展会第二天,那人又回来了,他责备警卫说: “我昨天带着一大笔赃物逃走了 但今天会更好” 于是,警卫更加密切地监视着他,但毫无结果。
展会的最后一天,卫兵再也抑制不住好奇心了。“盗贼先生,“他说,”我很困惑,无法平静地生活。请告诉我。你偷的是什么?”
那人笑了。“我在偷思想。”他说。
3.2
曾经有一位程序设计大师,他编写的程序是非结构化程序。一个程序员新手想模仿他,也开始编写非结构化程序。当新手请大师评价他的进步时,大师批评他写的是非结构化程序,并说:”适合大师的东西不适合新手。你必须先悟道,再超越结构”。
3.3
曾经有一个程序员隶属于吴国军阀的宫廷。军阀问他 “会计软件包和操作系统哪个更容易设计?”
“程序员回答说:”操作系统。
军阀发出了一声难以置信的惊叹。“他说:”与操作系统的复杂性相比,会计软件包肯定微不足道。
“不是这样的,“程序员说,”在设计会计软件包时,程序员的工作是在有不同想法的人之间进行调解:它必须如何运行,它的报告必须如何显示,它必须如何符合税法。相比之下,操作系统则不受外界表象的限制。在设计操作系统时,程序员寻求的是机器与想法之间最简单的和谐。这就是为什么操作系统更容易设计的原因。”
吴军阀点头微笑。“这都很好,但哪个更容易调试呢?”
程序员没有回答。
3.4
一位经理找到程序设计大师,向他展示了一个新应用程序的需求文档。经理问主程序员 “如果我指派五名程序员来设计这个系统,需要多长时间?
“需要一年。”程序设计大师爽快地说。
“但我们需要这个系统,而且是立即需要,甚至更快!如果我派十个程序员去做,需要多长时间?”
程序设计大师皱起了眉头。“这样的话,需要两年。”
“那如果我派一百个程序员去做呢?”
程序设计大师耸了耸肩。“那就永远无法完成设计了。”他说。
第 4 册
编码
程序设计大师如是说:
“写得好的程序是自己的天堂,写得不好的程序是自己的地狱。
4.1
程序应轻巧灵活,其子程序应像珍珠串一样连接起来。程序的精神和意图应贯穿始终。既不能太少,也不能太多。既不能有无谓的循环,也不能有无用的变量;既不能缺乏结构,也不能过于死板。
程序应遵循 “最小惊奇定律”。这是什么定律呢?简单地说,就是程序应始终以最不惊奇的方式回应用户。
无论程序多么复杂,都应作为一个整体来运行。程序应遵循内在逻辑而非外在表现。
如果程序不能满足这些要求,就会处于无序和混乱的状态。纠正这种情况的唯一办法就是重写程序。
4.2
一位新手问大师 “我有一个程序,有时运行,有时中止。我已经遵守了编程规则,但我完全不明白。这是什么原因呢?
大师回答说 “你之所以困惑,是因为你不懂道。只有傻瓜才会对人类的理性行为抱有期望。为什么你会对人类制造的机器抱有期望呢?计算机模拟的是决定论;只有道才是完美的。
编程的规则是短暂的,只有 “道 ”是永恒的。因此,你必须先思考 “道”,然后才能获得启迪。
“新手问道:”但我怎么知道我什么时候得到了启迪呢?
“大师回答说:”你的程序会正常运行。
4.3
大师正在向他的一个新手解释 “道 ”的本质。
“大师说:”道体现在所有软件中,无论多么微不足道。
“道体现在手持计算器中吗?”新手问道。
“大师回答说:”是的。
“新手问:”电子游戏里有‘道’吗?
“大师说:”游戏机里也有道。
“道在个人电脑的 DOS 中吗?”新手问。
大师咳嗽了一声,稍微移动了一下位置。“今天的课程到此结束。”他说。
4.4
王公子的程序员正在编写软件。他的手指在键盘上飞舞。程序编译完毕,没有出现任何错误信息,程序运行起来像一阵轻柔的风。
“太棒了!”王子赞叹道。“你的技术无懈可击!”
“技术?“程序员转过身来说道,”我遵循的是道–超越一切技术的道!当我刚开始编程时,我看到的是整个问题一目了然。三年后,我不再看到这个整体。相反,我使用了子程序。但现在我什么也看不到了。我整个人都存在于无形的虚空之中。我的感官无所事事。我的精神无拘无束,按照自己的本能工作。简而言之,我的程序是自己编写的。的确,有时会遇到棘手的问题。我看到它们来临,我放慢脚步,静静地观察。然后,我只需修改一行代码,困难就会像一阵闲散的烟雾般消失。然后,我编译程序。我静静地坐着,让工作的喜悦充满我的内心。我闭上眼睛片刻,然后注销”。
王公子说:”但愿我所有的程序员都有这样的智慧!”
第 5 册
维护
程序设计大师如是说
“程序虽只有三行,但总有一天要维护。
5.1
一扇使用良好的门不需要在铰链上涂油。
湍急的溪流不会停滞不前。
鹿与森林的色彩完美融合。
软件不用就会腐烂。
这些都是伟大的奥秘。
5.2
一位经理问一位程序员,他需要多长时间才能完成正在编写的程序。“程序员爽快地回答:”我明天就能完成。
“我觉得你太不现实了,“经理说,”实话实说,需要多长时间?”
程序员想了一会儿。“我想增加一些功能。这至少需要两周时间。”他最后说。
经理坚持说:“即使是这样,你的期望也太高了。””只要你告诉我程序什么时候完成,我就满意了。”
程序员同意了。
几年后,经理退休了。在去参加退休午宴的路上,他发现程序员在终端机前睡着了。他整晚都在编程。
5.3
一位程序员新手曾被指派编写一个简单的财务软件包。
这位新手狂热地工作了许多天,但当他的师傅审查他的程序时,发现其中包含一个屏幕编辑器、一套通用图形例程和一个人工智能界面,但却没有丝毫金融方面的内容。
当大师问及此事时,这位新手愤愤不平。“别这么不耐烦,“他说,”我最终会把金融方面的东西放进去的。”
5.4
一个好农民会忽视他种下的庄稼吗?
一个好老师会忽视最不起眼的学生吗?
一个好父亲会让一个孩子挨饿吗?
一个好的程序员会拒绝维护他的代码吗?
第 6 册
管理
程序设计大师如是说
“让程序员多起来,让管理者少起来 — 这样所有人都会有成就感”。
6.1
当管理者召开无休止的会议时,程序员正在编写游戏。
当会计们谈论季度利润时,开发预算即将被削减。
当资深科学家谈论蓝天时,乌云即将翻滚。
诚然,这不是编程之道。
当管理者做出承诺时,游戏程序就会被忽视。
当会计做出长远规划时,和谐与秩序即将恢复。
当资深科学家正视眼前的问题时,问题很快就会迎刃而解。
这就是真正的 “编程之道”。
6.2
为什么程序员没有生产力?因为他们的时间都浪费在开会上了。
程序员为什么叛逆?因为管理层干预太多。
为什么程序员一个接一个辞职?因为他们已经精疲力竭。
他们为糟糕的管理层工作,不再珍惜自己的工作。
6.3
一位经理即将被解雇,但为他工作的一位程序员编写了一个新程序,该程序大受欢迎,销量很好。结果,经理保住了工作。
经理想给程序员发奖金,但程序员拒绝了,他说:”我写这个程序是因为我觉得它是一个有趣的概念,因此我不期望得到任何奖励。
经理听后说道:”这位程序员虽然职位不高,但他深知作为一名员工的职责所在。让我们把他提升为管理顾问这个崇高的职位吧!”
“但当被告知这一点时,这位程序员再次拒绝了,他说:”我的存在就是为了编程。如果我被提拔了,除了浪费大家的时间,我什么也做不了。我能走了吗?我还有一个程序正在做呢。”
6.4
一位经理去找他的程序员,告诉他们 “关于你们的工作时间:你们必须早上九点上班,下午五点下班。一听这话,所有程序员都怒了,有几个当场辞职。
于是经理说 “好吧,这样的话,你们可以自己确定工作时间,只要按时完成项目就行。” 程序员们这才满意,开始中午上班,一直工作到凌晨。
第 7 册
企业智慧
程序设计大师如是说:
“你可以为企业高管演示程序,但你无法让他懂电脑。”
7.1
一位新手问大师 “在东方,有一棵大树,人们称之为’公司总部’。它臃肿得不成样子,副总经理和会计都在其中。它发布大量的备忘录,每个备忘录都说’去吧!’或’去吧!’,没有人知道什么意思。每年都有新的分支机构被命名,但都无济于事。这样一个非自然的实体怎么会存在呢?
大师回答道 “你看到了这个巨大的结构,却因为它没有合理的目的而感到不安。难道你不能从它无休止的旋转中得到乐趣吗?难道你不喜欢在它遮蔽的树枝下无忧无虑地做节目吗?你为什么要为它的无用而烦恼呢?
7.2
东方有一种鲨鱼,它比其他所有鱼类都大。它变化成一只鸟,翅膀像云朵一样布满天空。当这只鸟在陆地上移动时,它会带来来自公司总部的信息。它把信息扔到程序员中间,就像海鸥在沙滩上留下自己的印记。然后,鸟儿乘风而上,背靠蓝天,返回家园。
程序员新手惊奇地望着这只鸟,因为他不了解它。普通程序员害怕鸟儿的到来,因为他害怕鸟儿传递的信息。程序设计大师则继续在终端机前工作,丝毫没有意识到小鸟的到来和离去。
7.3
象牙塔里的魔术师带来了他的最新发明,供程序设计大师检查。魔术师把一个黑色的大箱子推到了程序设计大师的办公室,而程序设计大师则静静地等待着。
“这是一个集成式、分布式、通用工作站,“魔术师说,”它的设计符合人体工程学,采用了专有操作系统、第六代语言和多种最先进的用户界面。我的助手们花了几百年的时间才建造完成。是不是很神奇?”
程序设计大师微微扬起眉毛。“的确令人惊叹。”他说。
“公司总部命令,“魔术师继续说,”所有人都要把这个工作站作为新程序的平台。你同意吗?”
“当然,”大师回答道。“我马上把它运到数据中心!” 魔法师高兴地回到了他的塔楼。
几天后,一个新手来到编程大师的办公室,说:”我找不到我的新程序的列表。你知道它在哪里吗?
“是的,“主程序员回答道,”列表就堆放在数据中心的平台上。”
7.4
程序设计大师毫无顾忌地从一个程序转到另一个程序。管理层的任何变动都不会伤害到他。即使项目被取消,他也不会被解雇。这是为什么呢?因为他心中充满了 “道”。
第 8 册
硬件与软件
程序设计大师如是说
“没有风,草不会动。没有软件,硬件无用”。
8.1
一位新手问大师 “我发现有一家计算机公司比其他所有公司都要大得多。它就像矮人中的巨人,高高在上。它的任何一个部门都可以构成整个企业。为什么会这样呢?
大师回答说:”你为什么要问这么愚蠢的问题呢?那家公司之所以大,是因为它大。如果它只生产硬件,没有人会买它。如果它只做软件,没人会用。如果它只维护系统,人们会把它当成仆人。但正因为它集所有这些于一身,人们才把它视为神之一!它不求奋斗,不费吹灰之力就能征服一切”。
8.2
一天,一位程序设计大师与一位程序设计新手擦肩而过。
大师注意到新手正专注于一款掌上电脑游戏。
“他说:”对不起,我可以检查一下吗?”
新手立刻立正,把设备递给了大师。“我看到这个设备声称有三个游戏级别: 简单、中等和困难。”大师说。“然而,每一个这样的装置都有另一个游戏级别,在这个级别中,装置不寻求征服人类,也不寻求被人类征服。”
“请问,大师,“新手恳求道,”如何才能找到这个神秘的设置呢?”
大师把装置扔到地上,用脚后跟踩碎。新手恍然大悟。
8.3
曾经有一个为个人电脑编写软件的程序员。“他对一位前来拜访的大型机程序员说:”看看我这里有多好。“我有自己的操作系统和文件存储设备。我不必与任何人分享我的资源。软件自成体系,易于使用。你为什么不辞掉现在的工作,来这里加入我呢?”
然后,这位大型机程序员开始向他的朋友描述他的系统,他说:”大型机就像一位古老的圣人,静静地坐落在数据中心的中央。它的磁盘驱动器首尾相接,就像一个巨大的机械海洋。软件像钻石一样多面,像原始丛林一样错综复杂。每个程序都是独一无二的,它们像湍急的河流一样在系统中穿梭。这就是为什么我在这里很快乐”。
个人计算机程序员听后,沉默了。不过,这两位程序员一直是朋友,直到生命的最后一刻。
8.4
在去往昌子的路上,硬件遇到了软件。软件说 “你是阴,我是阳。如果我们结伴而行,一定会出人头地,赚大钱”。于是,他们一起出发,想着征服世界。
这时,他们遇到了 “固件”。“固件 ”衣衫褴褛,拄着一根带刺的棍子,步履蹒跚。他对他们说 “道在阴阳之外。它无声无息,静如止水。它不求名,所以无人知晓它的存在。它不求财富,因为它本身就是完整的。它超越时空而存在。”
软件和硬件羞愧地回到了自己的家中。
第 9 册
后记
程序大师说:
“你们该走了”
本文文字及图片出自 The Tao of Programming