编程::编程之道
第 1 册 - 寂静的虚空
主程序员如是说:
“当你学会了从陷阱帧中抓取错误代码时,你就该离开了。“
1.1
某种神秘的东西形成,在寂静的虚空中诞生。独自等待,一动不动,它既静止又不断运动。它是所有程序的来源。我不知道它的名字,所以我称之为编程之道。
如果道是美好的,那么操作系统是美好的。如果操作系统是美好的,那么编译器也是美好的。如果编译器是美好的,那么应用程序也是美好的。用户满意,世界和谐。
编程之道远流归于晨风。
1.2
道催生了机器语言。机器语言催生了汇编程序。
汇编器催生了编译器。现在有一万种语言。
每种语言都有其目的,无论多么卑微。每种语言都表达了软件的阴阳。每种语言在道中都有它的位置。
但是,如果可以避免,请不要在 COBOL 中编程。
1.3
起初是道。道催生出了空间和时间。所以空间和时间是编程的阴阳。
不懂道的程序员总是没有时间和空间来编写他们的程序。懂道的程序员总有足够的时间和空间来实现他们的目标。
不然呢?
1.4
聪明的程序员被告知道并遵循它。普通程序员被告知道并搜索它。愚蠢的程序员被告知道并嘲笑它。
若非欢笑,便无道。
曲高和寡。
进亦是退。
大器晚成。
即使是完美的程序仍然存在错误。
第 2 册 - 古代大师
主程序员如是说:
“三天没有编程,生活变得毫无意义。”
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 册 - 结语
主程序员如是说:
“是时候离开了。”