第9章

可重用性这个ฐ概念多多少少与2๐0่世纪8๖0年代兴起的面向对象编程有些关联。不管怎样寻找证据,也๣不可能ม把这两件事完全分开。某些使用面向对象编程开出来的软件确实具有可重用性,但是这不是因为ฦ它使用了面向对象编程,而是因为ฦ它的开方法是自下而上的。以函数库为例,它们具有可重用性,是因为它们属于语言的一部分,而不是因为它们采用面向对象或者其他编程方法。

既然是谈论未来,最好谈谈并行计算parallelputation,因为看上去并行计算好像就是为未来而存在的。无论怎么想,并行计算似乎都是未来生活的一部ຖ分。

事实上,财富与金钱是两个概念。金钱只是用来交易财富的一种手段,财富才是有价值的东西,我们购买的商品和服务都属于财富。你到海外旅行时,不用看当地人的银行账户就会知道你来到的是富国还是穷国。你只要看看他们的财富就行了:建筑、街道、服装、健康状况等。

这在今天的社会也成立,虽然已经很少有人直接创造财富供自己使用了少量的家务活除外。我们大多数人都在为其他人创造财富,然后用创น造出来的财富交换金钱,再用金钱交换我们需要的另一种财富

软件的布๧

互联网软件则完全不同,就像你写给自己้用的程序一样,修改起来很方便。软件的布过裎可以分解为一系列的渐进式修改,而不是猛地推出一个ฐ大幅变动的版本。常见的桌面软件可能ม一年布一到两个新า版本,而我们在viaທ9eb经常是一天布三到五个ฐ版本。

‘在英语中ณ,“建筑师”architect和“架构师”aທrchitect是同一个词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中ณ的“建筑学”arcນhitecture也是这种双关用法,同时指“架构学”architecture。一译者注’

也许有一天,“计算机科学”分裂成几个独立的部分。这可能ม是一件好事,如果我本人的领域——黑客——能够独立出来,那就更好了。

随大流的代价

使用一种不强大的语言,你的损失有多大?实际上有一些现成的数据可以说明这个问题。

衡量语言的编程能ม力的最简单方法可能就是看代码数量。所谓高级语言,就是能够更强大抽象能力的语言,从某种意义上,就像能够更大的砖头,所以砌墙的时候用到的砖头数量就变少了。因此,语言的编程能ม力越强大,写出来的程序就越短当然不是指字符数量,而是指独立的语法单位。

强大的编程语言如何让你写出更短的程序?一个技巧ู就是在语言允许的前提下使用“自下而上”bottom-up的编程方法。你不是用基础语言ba色浪ฐuage开应用程序,而是在基础语言之ใ上先构建一种你自己的语言,然后再用后者开应用程序。这样写出来的代码会比直接用基础语言开出来的短得多。实际上,大多数压缩算法也๣是这样运作的。“自下而上”的编程往往也便于修改,因为许多时候你自己้添加的中间层根本不需要变化,你只需要修改前端逻辑就可以了。

代码的数量很重要,因为开一个程序所耗费的时间主ว要取决于程序的长度。对于同一个ฐ软件,如果用一种语言写出来的代码比用另一种语言长三倍,这意味着你开它耗费的时间也会多三倍。而且即使多雇人手,也无助于缩短开时间,因为ฦ当团队规模过某个门槛时,再增加人手只会带来净损失。fredooks在他的名着《人月神๰话》中描述了这种现象,我的所见所闻印证了他的说法。

如果使用lisp语言,程序能变得多短?以lisp和c的比较为ฦ例,我听到的大多数说法是c代码的长度是lisp的7倍到10倍。但是最近,ne9๗arcນhitect杂志上有一篇介绍ita软件公司的文章

,里面说“1行lisp代码相当于20行cນ代码”,因为ฦ此文都是引用ita总裁的话,所以我想这个数字来自ita的编程实践。如果真是这样,那么เ我们可以相信这句话。ita的软件不仅使用lisp语言,还同时大量使用cນ和c+ใ+,所以这是他们的经验之ใ谈。

‘jenmuehlbauer,“or逼tz的新突破”or逼tzrea9e9architect,200่2年4๒月号。’

我认为ฦ,这种比例肯定不会是一个常数。如果你遇到更困难的问题๤,或者你雇到เ了更聪明的程序员,这个比例就会增大。一种出色的工具到了真正优秀的黑客手里,可以挥出更大的威力。

总之,根据上面的这个ฐ数字,如果你与itaທ竞争,而且你使用c语言开软件,那ว么ita的开度将比你快20倍。如果你需要一年时间实现某个功能ม,它只需要不到三星期。反过来说,如果ita开某个ฐ新功能用了三个月,那么你需要五年才能ม做出来。

你知道吗?上面的对比还只是考虑到เ最好的情况。当我们只比较代码数量的时候,言下之意就是假设使用功能ม较弱的语言也能开出同样的软件。但是事实上,程序员使用某种语言能做到的事情是有极限的。如果你想用一种低层次的语言解决一个很难的问题