要是我们真能这样控制质量就好了。但现实世界不会让我们生产出太多真正完美的产品,尤其是完全没有Bug的软件。时间、技术、急躁合力对抗着我们。然而,莫要太沮丧。如《IEEE软件》杂志上一篇由爱德华·尤登写的文章《够好即可的软件就是最好的》[You95]所述,你能训练自己写出够好即可的软件—对用户、未来的维护者来说够好即可,只要好的程度能让你自己内心平静就可以。你会发现,你变得更有效率,用户也更快乐。而且,可能让你更开心的是,更短的孵化期促使你的程序实际上更好了。在进一步讨论之前,我们需要对将要讨论的内容做一些限定。“够好即可”这个词并不意味着草率或糟糕的代码。所有系统必须达到用户的需求才算完成,需要达到基本的性能、隐私和安全标准。你做的东西,从用户需求角度来说是否足够好?最好还是留给用户一个机会,让他们能亲自参与评判。
将质量要求视为需求问题人们经常会遇到需要权衡利弊的情况。令人惊讶的是,许多用户宁愿今天就用上一个毛糙的软件,也不愿意多等上一年再用那个打磨光亮、功能齐备的版本(而且,实际上他们一年后真正需要的东西可能完全不同)。许多预算紧张的IT部门会同意这样的说法。与构想中的明天那个完美的软件相比,今天就还不错的软件通常更讨人喜欢。如果你早点给用户一点东西玩,他们的反馈常常能引领你做出更好的最终方案(参见第51页的话题12:曳光弹)。知道何时止步在某些方面,编程就像绘画。你从一张空白的画布开始,只有一些非常基础的原料。你糅合了科学、艺术、工艺手段来决定用这些原料做点什么。你勾勒出一个整体的形状,绘制出潜在的基调,然后再装点细节。你不断地带着批判的眼光回顾自己已完成的部分。你会时不时地扔掉一张画布,然后重新开始。不过艺术家会告诉你,如果你不知道什么时候该停止,那么所有的努力就都白费了。如果你不断地一层叠一层,细节盖细节,绘画将迷失在颜料中。不要让过度的修饰和精炼侵蚀掉一个完好的程序。继续前行,让代码在它该有的位置驻留一段时间。它或许并不完美,不要紧的—它就算永不完美也没关系。
知识组合我们可以将程序员所了解的一切有关计算过程的事实、工作的应用领域,以及所有经验,视为他们拥有的知识组合。管理知识组合和管理金融投资组合非常的类似:1.正规投资者有定期投资的习惯。2.多样化是长线成功的关键。3.聪明的投资者会平衡保守型和高风险高回报型投资的组合。4.投资者用低买高卖来获得最大的回报。5.应定期审查和重新平衡投资组合。要想事业成功,你必须用同样的指导方针管理你的知识组合。好消息是,管理这类投资是一项技能,就像其他技能一样—可以学会。诀窍是让自己一开始就这样做,并养成习惯。制定一个你能遵循的例行规程,照此去做,直到大脑将其内化。做到这个程度后,你会发现自己会自动吸收新知识。