编程之道(1987) - Geoffrey James翻译


”The Tao Of Programming编程之道“作者是Nigel Tao,他是Go团队中的主要人物之一,点击标题见原文

  程序员大师说:

     “当你学会从陷阱框架中抓取错误代码时,你就该离开了。” 
-------------------------------------------------- --------------------
                                  1.1 

 神秘的东西,诞生于沉默的虚空中;好似停滞不动,但又时刻仍然不断运动。它是
 所有程序的来源。我不知道它的名字,所以我称它为
 编程之道。

 如果道是伟大的,那么操作系统是伟大的。如果
 操作系统很棒,那么编译器就很棒。如果编译器
 很棒,那么应用程序就很棒。用户很高兴,他们
 的世界就和谐。

 编程之道很远,在早晨的风中回归。

                                  1.2

 道生了机器语言。机器语言催生了汇编程序。

 汇编程序诞生了编译器。现在他们是一万种语言。

 每种语言都有自己的目的,无论多么谦虚。每种语言都表达
 了软件的阴阳。每种语言都在道中占有一席之地。

 但如果可以避免,请不要在COBOL中编程。

                                  1.3 

  道士万物之始,道生了太空和时间。
  因此,空间和时间是编程的阴阳。

  不理解道的程序员总是耗尽
  时间和空间来执行程序。理解了的程序员
  总有足够的时间和空间来实现自己的目标。

  怎么会这样呢?

                                  1.4 

  明智的程序员被告知道并遵循它;普通
  程序员被告知这是道并搜索它;愚蠢的
  程序员听到了道,然后开始笑了。

  如果没有被嘲笑,就没有道。

  最高的声音是最难听到的;前进是一种
  退却的方式;伟大的才能在生命的晚期显现出来。即使是完美的
  程序仍然存在缺陷。

                                 - 3 - 
                
-------------------------------------------------- --------------------- 
                   因此Spake成为程序员大师:

     “经过三天没有编程,生活变得毫无意义。” 
-------------------------------------------------- --------------------- 
                                  2.1 

  旧的程序员是神秘而深刻的。我们无法理解
  他们的想法,所以我们所做的只是描述他们的外表。

  意识到,就像一只穿越水面的狐狸;警报,就像
  战场上的将军一样;善良,就像女主人问候她的客人一样;简单,就像
  未开垦的木块;不透明,就像黑暗的洞穴中的黑色水池。

  谁能说出他们内心的秘密?

  答案只存在于道。

                                  2.2 

  图灵大师曾梦见他是一台机器。当他醒来时,
  他惊呼:

      “我不知道我是图灵梦想还是我是一台机器,
       或者还是一台机器做的梦,正梦想着我是图灵!” 

                                  2.3 

  来自一家大型计算机公司的程序员参加了一个软件
  会议,然后回到他的经理那里报告说:“什么
  样的程序员为其他公司工作?他们表现得很糟糕,并且
  不关心外表。头发很长而且没有头发
  他们的衣服皱了起来,老了。他们吵醒了其他人,他们在我的演讲中发出粗鲁的声音。“ 

  经理说:”我本不应该把你送到会议室。
  那些程序员生活在物理世界之外。他们认为生活
  荒谬,是偶然的巧合。他们来来往往不知道有
  限制。没有照顾,他们只为他们的程序而活。
  他们为什么要打扰社会习俗呢?

  他们在道中活着。

                                  2.4 

  新手问大师:”这是一个从不设计、
  记录或测试他的程序的程序员,然而,所有认识他的人都认为他
  是世界上最好的程序员之一。为什么是这样?”

  大师回答:“那个程序员已经掌握了道。他已经
  超越了设计的需要;当
  系统崩溃时他不会生气,但是他会毫无顾虑地接受宇宙;他已经
  超出了文档的需要;他不再关心是否有其他人
  看到他的代码;他已经超越了测试的需要;他的每一个
  程序都是完美的,平静而优雅,他们的
  目的是不言而喻的。真的,他已经进入了道的神秘面纱。


                                 -  4  - 
                    
----------------------------------------- ------------------------------
                   因此,程序员大师说:

     “当程序正在测试时,进行设计
      更改为时已晚。” 
-------------------------------------------------- --------------------- 
                                  3.1 

  曾经有一个人参加过电脑贸易展。每当
  他进入的时候,那个男人都会告诉门口的警卫:

       “我是一个很好的小偷,因我的入店行窃而闻名。要
        预先警告,因为这个贸易展不会免于被偷盗的。” 

  这个讲话大大扰乱了警卫,因为里面有数百万
  美元的电脑设备,所以他小心看着这个男人
  。但那个男人只是从一个摊位走到另一个摊位,
  静静地哼着自己歌。

  当那个男人离开时,警卫把他拉到一边搜查他的衣服,
  但没有找到任何东西。

  在贸易展的第二天,这名男子回来并责备
  警卫说:“我昨天带着巨大的战利品逃脱,但今天会
  更好战果。” 所以警卫更密切地看着他,但
  无济于事。

  在贸易展的最后一天,警卫
  不再能够抑制他的好奇心。“小偷先生,”他说,“我很困惑,我
  不能安息。请赐教。你
  偷的是什么?” 

  那个男人笑了:“我在窃取idea”

                                  3.2 

  曾经有一位编写非结构化程序的程序员大师,一个
  寻求模仿他的新手程序员也开始编写
  非结构化程序。当新手要求大师评估
  他的进展时,大师批评他写了非结构化的
  程序,说“适合大师的东西不
  适合新手。你必须在
  超越结构之前理解道。” 

                                  3.3 

 曾经有一个程序员被派到吴军阀,军阀问程序员:“会计账务软件包还是操作系统哪个更容易
  设计?”

  “操作系统,”程序员回答道。

  军阀发出一声难以置信的惊叹:“当然,一个
 会计账务包是比操作系统的复杂性稍微复杂些。”


程序员说:“不是这样,在设计会计软件包时,
  程序员在具有不同
  想法的人之间作为调解人;它是如何运行,报告必须如何出现,以及如何
  符合税收;相反,操作系统不受
  外观的限制。在设计操作系统时,
  程序员寻求机器和想法之间最简单的协调。
  这就是为什么操作系统更容易设计的原因。“ 

  吴军阀点头微笑。”这一切都很好,但
  哪个更容易调试?“ 

  程序员没有回复

                                  .3.4 

  一位经理去程序员大师那里并表明他
  对新的应用需求,然后经理问了大师:“这需要多长时间,如果我给你5个设计这个系统
  程序员呢” 

  “大师说”这将需要一年

  “但是我们需要立即甚至更快地使用这个系统!
  如果我指派十名程序员,它需要多长时间?“ 

  主程序员皱起眉头。”在这种情况下,
  需要两年” 

  ‘而如果我给你一百个程序员呢’ 

  主程序员耸耸肩‘那这个项目就永远无法
  完成,’他说。


                                 - 6 - 
                           
------- -------------------------------------------------- -------------- 
                   程序员大师说:

     “一个写得很好的程序就是它自己的天堂; 一个编写得不好的
     程序是它自己的地狱。“ 
--------------------------------------- -------------------------------- 
                                  4.1

  程序应该轻巧灵活,其子程序像
  一串珍珠一样连接。应始终
  保留该方案的精神和意图。应该既没有太少也没有太多,
  既没有不必要的循环也没有无用的变量,既不缺乏
  结构也没有压倒性的刚性。

  一项计划应遵循“最小惊讶法”。这
  规则是什么?简单地说,程序应始终以最
  让他惊讶的方式响应用户。

  一个程序,无论多么复杂,都应该作为一个单元。该
  方案由逻辑指引,而不是由由外表指引。

  如果程序在这些要求中失败,它将处于
  混乱和混乱的状态。解决这个问题的唯一方法是重写
  程序。

                                  4.2 

  一位新手问大师:“我有一个程序,有时运行,
  有时会中止。我遵循编程规则,但我
  完全感到困惑。这是什么原因?” 

  大师回答:“你很困惑,因为你不了解
  道。只有傻瓜才能期待他的同胞的理性行为。
  你为什么期望来自人类构建的机器?
  计算机模拟决定论;只有道是完美的。

  编程规则是暂时的; 只有道是永恒的。
  所以你必须在接受启蒙之前考虑道。“ 

  ”但是,什么时候我意识到我已经接受启蒙了呢?“ 
  新手问道。

  ”你的程序正常运行之时“大师回答

                                  .4.3 

  一位大师对一个新手在解释道的本质,
  “道在所有的软件中体现 - 无论多么
  微不足道,”大师说道,“ 

  道在一个手持式计算器之中吗?”新手问道。

  “是的,”。


                                 -  7  - 
  “道是在视频游戏中吗?”

  “甚至在视频游戏中,”大师说。

  “道在个人电脑的DOS吗?” 

  大师咳嗽并略微改变了姿势。“ 
  今天的上课结束了,”他说。

                                  4.4 

  王子的一个程序员在编码,他的手指在
  键盘上跳舞。程序编译没有错误信息,
  程序像一阵轻柔的风。

  “优秀!” 王子惊呼:“你的技术完美无瑕!” 

  “技术?” 程序员从他的终端转过身来说,“我所
  遵循的是道 - 超越所有技术!
  当我第一次开始编程时, 我会在一个情况中看到整个问题,三年之后
  我再也看不到这种情况;相反,我使用了子程序,到现在
  我就再也没看到。我的整个存在于无形的空虚中,我的感觉
  是空闲的,我的精神,没有计划地自由工作,遵循自己的
  直觉。简而言之,我的程序自编,没错,有时
  会遇到困难,我看到困难来了,我慢下来,我
  默默地看着,然后我改变了一行代码,困难
  就像怠慢的烟雾一样消失了,然后我编译该程序,我坐着
  不动,让工作的快乐充满了我的存在。我闭上眼睛
  片刻,然后注销。“ 

  王子说,”希望我的所有程序员都会这么聪明!“ 

                                 -  8  -
                     
-------------------------------------------- --------------------------- 
                   程序员大师说:

     “虽然一个程序只有三行,但总有一天它
     需要维护“。
-------------------------------------------------- --------------------- 
                                  5.1 

  一个使用良好的门在其铰链上不需要油。
  快速流动的溪流不会停滞不前。
  声音和思想都不能通过真空传播。
  如果不使用,软件会腐烂。

  这些都是很大的谜团。

                                  5.2

  一位经理问程序员他需要多长时间才能完成
  他正在工作的程序。“明天我会完成的,” 
  程序员迅速回复道。

  “我认为你是不现实的,”经理说,“说实话,需要
  多长时间?” 

  程序员想了一会儿。“我有一些我
  希望补充的功能。这至少需要两周时间,”他最后说道。

  “即使这太过于期待了,”经理坚持说,“ 
  如果你在程序完成时告诉我,我会很满意的。” 

  程序员同意这一点。

  几年后,经理退休了。在他的
  退休午餐上,他发现程序员在电脑前面睡着了,他整晚都在编程。

                                  5.3 

  新手程序员曾被指派编写简单的财务包。

  新手工作了很多天,但当他的老师
  审查他的程序时,他发现它包含一个屏幕
  编辑器,一组通用的图形例程,一个人工智能
  界面,但没有提及任何
  财务。

  当老师问到这一点时,新手变得愤怒。
  “不要那么不耐烦,”他说,“我
  最终会放入财务资料。” 

                                  5。

  一个好老师是否会忽视最卑微的学生?
  一个好父亲是否允许一个孩子饿死?
  一个优秀的程序员拒绝维护他的代码吗?

                                 -  9  - 
                       
----------------------------------------- ------------------------------ 
                   因此,程序员大师说:

     “让程序员更多些,管理人员少些 - 然后全部会
     有所作为。“ 
-------------------------------------------------- --------------------- 
                                  6.1

  当经理们举行无休止的会议时,程序员会编写游戏。
  当会计师谈论季度利润时,发展预算
  即将被削减。当资深科学家谈论蓝天时,云层
  即将滚滚而来。真的,这不是编程之道。

  当经理做出承诺时,游戏程序会被忽略。当
  会计师制定长期计划时,和谐与秩序即将
  恢复。当资深科学家解决手头的问题时,
  问题很快就会得到解决。

  确实,这才是编程之道。

                                  6.2 

  为什么程序员没有生产力?因为他们的时间浪费
  在会议上。

  为什么程序员反叛?因为管理干扰
  很多。

  为什么程序员逐个辞职?因为它们被
  烧坏了。

  他们为管理不善而工作,不再重视自己的工作。

                                  6.3 

  一位经理即将被解雇,但为他工作的程序员
  发明了一个新的程序,该程序变得流行并畅销。作为
  结果,经理保住了他的工作。

  经理试图给程序员一个奖金,但程序员
  拒绝了它,说,“我写了这个程序,因为我认为这是
  一个有趣的概念,因此我希望没有奖励。”

  经理听到这个消息后说道,“这位程序员尽管
  缺乏自尊心,但也很清楚
  员工的正确职责。让我们把他提升到
  管理顾问的崇高地位!” 

  但当被告知这一点时,程序员再一次拒绝,说:
  “我存在,所以我可以编程。如果我升职,我什么
  也不做,只会浪费每个人的时间。我现在可以离开吗?我有一个
  需要我照顾的程序等着我呢。” 


                                 -  10  - 
                                  6.4 

  一位经理去找他的程序员并告诉他们:“关于
  你的工作时间:你将不得不在9点来上班
 下午五点离开。“在这一点上,所有人都
  生气了,有几个人当场辞职。” 

  所以经理说:“好吧,在这种情况下,你可以设定自己的
  工作时间,只要你按计划完成你的项目。” 
  现在很满意的程序员开始在中午来上班,工作
  到凌晨。


                                 -  11  - 
               
--------------------------------------- -------------------------------- 
                   因此,程序员大师说:

     “你可以为公司高管演示一个程序,但是
      你不能让他懂电脑。“ 
---------------------------------------- ------------------------------- 
                                  7.1 

  一位新手问大师:“东边有一个很棒的木
  结构,人们称之为“公司总部”。
  与副总统和会计师一起变得臃肿。它发出了
  大量的备忘录,每个备忘录都说“Go, Hence!” 或者“Go, Hither!” 而
  没有人知道是什么意思。每年都有新的名字被放到
  分支机构上,但都无济于事。这样一个不自然的实体如何
  存在?“ 

  大师回答说:”你认识到这种巨大的结构,并且
  对它没有理性的目的感到不安。
  从无尽的旋转中获得乐趣?你不喜欢
  在它的避风分支下进行无忧无虑的编程吗?
  为什么你对它的无用感到困扰?“ 

                                  7.2 

  在东方有一条鲨鱼比其他所有的鱼都要大。
  它变成了一只鸟,它的翅膀就像填满天空的云朵。
  当这只鸟在陆地上移动时,它会带来一条来自
  公司总部的消息。这条消息落入了
  程序员的中间,就像一只海鸥在海滩上留下了痕迹。然后
  鸟儿在风中翱翔,飞上蓝天回到
  家里。

  新手程序员凝视着,因为他对这只鸟感到奇怪
  不理解。一般程序员害怕
  鸟的到来,因为他害怕它的信息。程序员大师继续
  在他的终端工作,因为他不知道这只鸟来了
  又走了。

                                  7.3 

  象牙塔的魔术师带来了他的最新发明,
  供程序员大师检查。
  当在等待大师
  沉默之时,魔术师将一个大黑匣子推进大师的办公室。

  “这是一个集成的,分布式的,通用的工作站,” 
  魔术师开始说,“符合人体工程学设计的专有
  操作系统,第六代语言和多种状态
  艺术用户界面。我的助手花了几百年的
  时间来建造。这不是很了不起。“ 

  大师略微抬起眉毛。”这确实令人惊讶,“他
  说。

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

                                 -  12  - 
  ”当然,“大师回答说,”我会把它
  立即送到数据中心!“魔术师回到他的塔楼,
  很高兴。

  几天后,一个新手徘徊程序员大师办公室说:“
  我找不到我的新程序了,你知道它可能在哪里吗?“ 

  ”是的,“主人回答说,”这些程序被压栈到
  数据中心的平台上。“ 

                                  7.4 

  程序员大师从一个程序开发移动到另外一个程序开发而不用担心。
  管理层的任何改变都不会伤害他,即使
  项目被取消,他也不会被解雇。为什么会这样?他充满了道。

                                 -  13  - 
--------------- -------------------------------------------------- ------ 
                   所以说主程序员:

     “没有风,草就不动了。没有软件,
     硬件就没用了。” 
-------------------------------------------------- --------------------- 
                                  8.1 

  一位新手问大师:“我认为一家电脑公司
  比其他公司大得多。它像
  巨人一样高于竞争对手。其中任何一个部门都可以构成一个完整的
  企业。为什么会如此呢?“ 

  大师回答说:“你为什么要问这么愚蠢的问题?那个
  公司很大,因为它很大。如果它只制造硬件,
  没有人会买它。如果它只制造软件,没有人会使用它。
  如果它只维护系统,那么人们就会像对待仆人一样对待它。
  但因为它结合了所有这些东西,人们认为它
  是众神之一!通过无为,它毫不费力地征服了人类。“ 

                                  8.2 

  一位大师程序员有一天经过一名新手程序员旁边。大师
  注意到新手对手持电脑游戏的关注。
  ”对不起,“他说,”我可以检查一下“ 

  新手转移注意力并将设备交给主人。“我
  看到该设备声称有三个级别的游戏:简单,中等
  和难”,大师说。“然而,每一个这样的设备都有一个级别
  的游戏,设备不寻求征服人类,
  就不会被人类征服了。“ 

  ”祈祷,伟大的大师“,新手恳求,”人们如何找到这个
  神秘的设备?“ 

  大师将设备扔到地上并用
  脚踩碎。突然,新手开悟了

                                  .8.3 

  曾经有一名从事微处理器工作的程序员。“看看
  我在这里的情况如何,”他对前来
  访问的大型机程序员说,“我有自己的操作系统和文件存储设备。我
  不必与任何人分享我的资源。该软件是自我
  一致且易于使用的。你为什么不放弃现在的工作并
  加入我这里?“

  然后大型机程序员开始向他的
  朋友描述他的系统,他说:“大型机就像一个古老的圣人在
  数据中心中冥想。它的磁盘驱动器就像
  端到端的机器的大海一样。软件是像
  钻石一样多面,像原始丛林一样复杂。每个
  独特的程序都像一条快速流淌的河流一样穿过整个系统。这就是
  为什么我喜欢我的地方。“ 

  微电脑程序员听到这个后,沉默了。但这
  两位程序员在他们的日子结束之前仍然是朋友。

                                 -  14  - 
                                  8.4

  硬件在通往Changtse的道路上遇到了软件。软件说:“你
  是阴,我是阳。如果我们一起旅行,我们将成名
  并赚取巨额资金。” 所以一起提出,
  想要征服世界。

  现在,他们遇到了固件Firmware,他穿着破烂的衣服,
  蹒跚地走在一根棘手的棍子上。固件对他们说:“ 
  道在阴阳之外。它是沉默的,仍然是一池水
  。它不寻求名利,因此没有人知道它的存在。它
  不寻求财富,因为它本身就是完整的。它存在
  于时空之外。“ 

  软件和硬件,惭愧,返回家园。

                                 -  15  - 
                       
----------------------------------------- ------------------------------ 
                   因此,主程序员说:

     “你是时候你离开了。”