第9章

可重用性这个概念多多少少与20世纪80年代兴起的面向对象编程有些关联。不管怎样寻找证据,也不可能ม把这两ä件事完全分开。某些使用面向对象编程开出来的软件确实具有可重用性,但是这不是因为ฦ它使用了面向对象编程,而是因为ฦ它的开方法是自下而上的。以函数库为例,它们具有可重用性,是因为它们属于语言的一部分,而不是因为ฦ它们采用面向对象或者其他编程方法。

可重用性这个概念多多少少与2๐0世纪8๖0年代兴起的面向对象编程有些关联。不管怎样寻找证据,也๣不可能把这两ä件事完全分开。某些使用面向对象编程开出来的软件确实具有可重用性,但是这不是因为它使用了面向对象编程,而是因为它的开方法是自下而上的。以函数库为例,它们具有可重用性,是因为它们属于语言的一部ຖ分,而不是因为它们采用面向对象或者其他编程方法。

事实上,财富与金钱๥是两个ฐ概念。金钱只是用来交易财富的一种手段,财富才是有价值的东西,我们购买຀的商品和服务都属于财富。你到海外旅๓行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看看他们的财富就行了:建筑、街道、服装、健康状况等。

事实上,财富与金钱๥是两ä个概念。金钱只是用来交易财富的一种手段,财富才是有价值的东西,我们购买຀的商品和服务都属于财富。你到海外旅行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看看他们的财富就行了:建筑、街道、服装、健康状况等。

软件的布๧

软件的布๧

‘在英语中ณ,“建筑师”aທrchitect和“架构师๲”arcນhitect是同一个词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中的“建筑学”architecture也๣是这种双关用法,同时指“架构学”aທrchitecນture。一译者注’

‘在英语中,“建筑师”arcນhitect和“架构师”architecນt是同一个ฐ词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中的“建筑学”aທrchitecture也是这种双关用法,同时指“架构学”aທrchitecture。一译者注’

随大流的代价

使用一种不强大的语言,你的损失有多大?实际上有一些现成的数据可以说明这个ฐ问题。

衡量语言的编程能ม力的最简单方法可能就是看代码数量。所谓高级语言,就是能够更强大抽象能力的语言,从某种意义แ上,就像能够更大的砖头,所以砌墙的时候用到的砖头数量就变少了。因此,语言的编程能力越强大,写出来的程序就越短当然不是指字符数量,而是指独立的语法单位。

强大的编程语言如何让你写出更短的程序?一个技巧就是在语言允许的前提下使用“自下而上”bottom-ๅup的编程方法。你不是用基础语言bຘaທ色浪uage开应用程序,而是在基础语言之上先构建一种你自己的语言,然后再用后者开应用程序。这样写出来的代码会比直接用基础语言开出来的短得多。实际上,大多数压缩算法也๣是这样运作的。“自下而上”的编程往往也便于修改,因为许多时候你自己添加的中ณ间层根本不需要变化,你只需要修改前端逻辑就可以了。

代码的数量很重要,因为开一个程序所耗费的时间主要取决于程序的长度。对于同一个软件,如果用一种语言写出来的代码比用另一种语言长三倍,这意味着你开它耗费的时间也会多三倍。而且即使多雇人手,也๣无຀助于缩短开时间,因为当团队规模过某个门槛时,再增加人手只会带来净损失。fredooks在他的名着《人月神话》中描述了这种现象,我的所见所闻印证了他的说法。

如果使用lisp语言,程序能ม变得多短?以lisp和cນ的比较为例,我听到เ的大多数说法是c代码的长度是lisp的7倍到1้0倍。但是最近,ne9architect杂志上有一篇介绍ita软件公司的文章

,里面说“1行lisp代码相当于20行c代码”,因为ฦ此文都是引用itaທ总裁的话,所以我想这个ฐ数字来自ita的编程实践。如果真是这样,那么我们可以相信这句话。itaທ的软件不仅使用lisp语言,还同时大量使用cນ和c+ใ+,所以这是他们的经验之ใ谈。

‘jenmuehlbauer,“or逼tz的新า突破”or逼tzreaທ9e9architect,2๐002年4๒月号。’

我认为,这种比例肯定不会是一个常数。如果你遇到更困难的问题๤,或者你雇到เ了更聪明的程序员,这个比例就会增大。一种出色的工ื具到了真正优秀的黑客手里,可以挥出更大的威力。

总之,根据上面的这个数字,如果你与itaທ竞争,而且你使用cນ语言开软件,那么เita的开度将比你快20倍。如果你需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果ita开某个ฐ新功能用了三个月,那么เ你需要五年才能做出来。

你知道吗?上面的对比还只是考虑到最好的情况。当我们只比