奥卡姆剃刀原理
奥卡姆 的威廉爵士是一个厌恶华美装饰以及复杂解释的修士。他对哲学和科学的贡献是奥卡姆剃刀原理:如果对于一个现象有好几种解释,那么最简单的解释往往是最正确的。显然,这跟我们讨论的事物本质和附属性质理论紧密关联。这个原理对于软件的影响度也是出乎我们意料的。
作为软件工业中的一员,过去十年我们一直在进行着某项实验。这个实验始于上世纪90年代中期,主要是由于开发人员发现其开发进度远远跟不上软件需求的增长而引发的(其实在那时这已经不是一个新问题,这个问题自商业软件的想法出现之后就一直存在)。实验的目的是:创造一些工具和环境来提高那些普通开发人员的生产率,即使一些人比如Fred Brooks(去看他的《人月神话》)已经告诉我们软件开发中的一些混乱事实。此实验试图验证:我们是否可以创造一种能限制程序员破坏力的语言而使人摆脱麻烦;我们是否可以无需支付荒唐的大量金钱给那些令人生厌的软件技工(即使在那时候你可能还为找不到足够的软件技工而发愁),而同样生产出软件呢?这些思考让我们创造出了如dBase, PowerBuilder, Clipper和Access这样的工具,并促成了工具和语言相结合的4GL(第四代语言)的崛起,比如FoxPro和Access。
但问题是,即使有这样的工具和环境你也不能完成所有的工作。我同事Terry Dietzler为Access创建了一个叫做"80-10-10"的准则(而我喜欢把它称之为Dietzler定律)。这个定律说的是:80%的客户需求可以很快完成;下一个10%需要花很大的努力才能完成;而最后的10%却几乎是不可能完成的,因为你不能把所有的工具和框架都"招致麾下"。而用户却希望能满足一切需求,所以作为通用目的语言的4GL(Visual BASIC、Java、Delphi以及C#)应运而生。Java和C#的出现主要是由于C++的复杂性和易错性,语言开发者们为了让一般程序员摆脱这些麻烦而在其内建了一些相当严格的限制。在此之后"80-10-10准则"才发生了改变,无法完成的工作已经微乎其微。这些语言都是通用目的语言,只要付出足够的努力,大多数工作都可以完成。但Java虽然比较易用却常常需要大量编码,所以框架出现了,Aspects出现了,大量其它框架蜂拥而至。
花了多少时间?这实际上是一个从Jakarta Commons框架(它提供了一些或许本该内置于Java的帮助类和方法)中提取出来的isBlank方法。一个字符串是否为"空白"由两个条件决定:这个字符串是空字符串,或者它只由空格组成。这段代码的计算公式非常复杂,因为要考虑参数是null的情况,而且还要迭代所有的字符。当然,你还要把字符包装成Character类型以确定它是否空白字符(空格、制表符、换行符等)。总之,太麻烦了!
展开
然而这个时代其实已经过去了。虽然技术仍然很重要,但企业越来越多地认识到,对于程序员更全面的衡量标准,应当是生产率。只有能够以较高的效率完成对项目、对企业有价值的工作,才是团队和组织所真正需要的人才。反之,技术好,但不能真正促进整体价值,甚至其反作用,这样的“技术牛人”已经没有生存空间了。
—— 孟岩 《程序员》杂志总编