获得让事情变简单的勇气
在我第二份程序员的工作中,我有一个很有意思的老板。当召开设计会议的时候,我们围坐在一个白色书写板前,我的老板Roger提出一些需要完成的东西。我和其他的程序员则给出解决方案,然后Roger就会说,“真的吗?如果X(译者注:X表示某种解决方法)那会怎么样?”而X往往总是荒唐可笑且简单至极的东西。
当然,X一般都行不通。有时我们当中会有人挑出他想法中的漏洞,然后所有人就设法去修补这个漏洞,但在某些方面这个想法又开始变得复杂而不合乎Roger的口味了。“Y怎么样?”仍是简单得可笑而且他恨不得马上就实现出来。他时不时地“骗人”,将问题本身进行重定义使其变成简单一点的问题,或是让问题符合一些现有可用的解决方案。我们抱着这种心理直到解决方案简单得看起来都无法有任何实质性的实现了,或者变得极其清晰但问题没有得到简化。在这种情况下我们虽然试图解决问题却也只好搁置起来,而且说不定哪一天又会重新捡起来研究。
我想有时候人们会认为由于它自身原因我将问题复杂化了,但真的不是这么回事。如果你看到我陷入复杂问题研究之中,这只是说明我在寻找简单化的方法,而这些方法往往会躲在很远的地方。有时候,在程序所需要完成的事情中彼此的不同可能会掩盖它们潜在隐藏的内在联系。如果要是能将这些联系公之于众,你就可以通过从内部和外部对其进行简化来改进设计。最具创新性的软件产品通常不是仅增加了新特性的,而是发现了一种解决问题的新途径,它使解决过程更简单,以至很少有特别需要的特性。
我可以举Roger工作的小例子,他设计了一个房地产推荐跟踪包,其中包含一个称为“Follow-up Date(商讨日期)”的量。他有意选用这个名字,因为他注意到当和某人商讨推荐(referral)时人们会有两种思考方式。一个是将计划安排下一个会面日期作为首要事情,另一个是和很久未联系的人一起商讨。经过对该名字不断调整,他能使其达到所谓的“明显的不确定(clearly ambiguous)”的境界。
这意味着那些依据行程安排决定的人会认为,“Follow-up Date”显然是意味着他们预定的日子。而同时,那些以不断保持联系为依据的人将认为,“Follow-up Date”无疑意味着是最后参加商讨的日子。由于软件仅由个人在一个确定的房产办事处里使用,(大多数人在目前行情价格下只能承担一台计算机)因而在一个办公室中不会因为含糊不清而引发“用的很棒/没有用”之类的争论,我们从中也获益颇丰。
首先,因为目标机器是具有48K RAM的dual-floppy TRS-80,从技术角度看必须只能有一个量(field)是真正重要的,因此它本可以显著地降低软件处理性能以得到另一个量。其次,用户看重的是它能做什么,这样的思考方式是有利于销售的。在商谈期间,你只需了解他们follow-up的方式,无论是什么样的,然后说明如何恰当地利用软件来完成这些就可以了。
然而回顾过去那段时间,我并没有领悟到简单所带来的好处。我在公司最开始的一个项目是将TRS-80中的软件和其他产品转移到新型IBM PC中。当时我17岁,却冒出了程序生成器这个想法:编写程序的程序。所以自然我就想这肯定是完成这个转移工作的理想方法:载入数据库schema并生成PC程序。但是Roger已想让我写一个在TRS-80上用的PC版的运行时数据库。而我却认为我能做得“更好”。
直至过去很长时间我才认识到Roger的方法其实更简单,但这种简单也并不那么容易判断。我的方法所产生的长远影响就是我们不能在基于PC的运行时数据库上定制新产品了,而如果我按照他的要求去做,那其实是应该可以的。我至今没能学会如何看待我选择的设计方案所产生的效益和附带的影响。
我在Roger犀利的目光下学习了很多年。之后我开始培养“看清楚”因果关系和所产生影响的能力。没错,我说的是“开始”,因为这将永远不会停下来。你一开始需要知道的实际是当做错事的时候如何才能意识到错了。(令人惊讶的是有时连这人们也是很难意识到的。毕竟你怎样才能知道你没在用绑着砖的铅笔写字呢?与你的同事作对照基本没什么用,因为他们没准也在绑着砖写字呢!)
有时候,对系统的一个很小的改进就会产生巨大的效益。一英寸的差别能够造就与众不同,正如Twain提出的“lightning”和“lightning bug”之间的差异。VisiCalc取代了大型机的财务软件,如果你将后者的复杂度与取代它的简易的电子制表软件(spreadsheet)进行比较,你就会发现复杂的另一边是简单。是它产生了世间所有的差异。
顺便提一下,Roger本职不是程序员。他是一个老师,主要教有学习障碍的儿童。耐心、简单—只有需要就会做任何事情,无论多么荒唐可笑—是他的格言。我很感激他所教过我的东西,但现在我还要特别感谢简单(simplicity),是它使我有了提出疑问的勇气:“如果X怎么样?那样做行得通吗?它能更简单点吗?我们还能得到什么?”。