但是,真正的问题在于,并行计算到เ底能达到哪个抽象层次?一百年后它就会影响到开应用软件的程序员吗?或者,它还只是编译器作者需要考虑的事情,在应用软件的代码中根本就无处寻觅?

可重用性这个概念多多少少与20世纪8๖0年代兴起的面向对象编程有些关联。不管怎样寻找证据,也不可能ม把这两件事完全分开。某些使用面向对象编程开出来的软件确实具有可重用性,但是这不是因为它使用了面向对象编程,而是因为ฦ它的开方法是自下而上的。以函数库为例,它们具有可重用性,是因为它们属于语言的一部分,而不是因为它们采用面向对象或者其他编程方法。

大学生往往依靠父母的资助,还没有想过父母的钱๥是从哪里来的;继承人靠着他人遗产过活;教授与政客距离创造财富最远,不管是否努力工作,得到เ的报酬都差不多,新闻记者部分由á于他们的专业守则,必须与本行业产生收入的那ว部分——广告销售部——保持隔离。所有这些人中,有许多人从来没有直面过这个事实,那ว就是他们拿到手的金钱,都来自别人先前创造出来的财富新闻记者除外,他们的工作是创造财富的,但是不直接用财富交换金钱๥。在这些人的世界ศ中ณ,收入是由á某个外部权威根据某种看似公平的抽象原则ท对于继承人来说则是随机原则进行分配,不是来自与他人交换别人需要的东西。所以,在这些人看来,真实世界的其他部分不采用同样的分配方แ式就是不公平的事情。

事实上,财富与金钱是两个ฐ概念。金钱只是用来交易财富的一种手段,财富才是有价值的东西,我们购买຀的商品和服务都属于财富。你到เ海外旅行时,不用看当地人的银行账户就会知道你来到เ的是富国还是穷国。你只要看看他们的财富就行了:建筑、街道、服装、健康状况等。

如果一年布一个新า版本,你很可能会以打包方式处理bug,把它们留着,然后一次性全部解决。在布新版本前,你可能会修改和更换一半的代码,从而又引入无数新的bug。接着,质量监控人员qualityassurance开始测试新代码,逐一列出新现的bug,你再按照这张清单把它们一个个ฐ消เ除。通常没办法把清单全部ຖ做完,它随时都在增长,说实话,谁也不确定它到底会有多长。这就好像在足球场上捡小石块一样费劲,你永远不知道为ฦ什么软件内部会出这么เ多问题。最好的结果也不过是,你得到了一个ฐ统计学意义แ上“合格”的版本。

软件的布

数学家看来并不在乎自己搞的是计算机还是数学。他们很高兴来到这个新地方แ,然后就开始埋头证明新的定理,与数学系的数学家干的事情完全一样。不一会儿,他们可能就忘了办公楼外的牌子上写的是“计算机科学系”。但是对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工作被称为科学,这会让他们感到自己应该做得像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情设计优美的软件,而是觉得自己应该写一些研究性的论文。

‘在英语中,“建筑师”architect和“架构师”arcນhitect是同一个ฐ词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中ณ的“建筑学”architecture也是这种双关用法,同时指“架构学”architecture。一译者注’

‘“弱即是强"指的是一种软件传播的模式,由摸nlisp专家理查德·加布里埃尔richardpgaiel于19๗91年在lisp:goodne9s,bຘadne9๗s,ho9to9in逼gdreaທmsongs9ibhtml一文中ณ先提出。它的含义非常广泛,涉แ及软件设计思想的各个方面,其中的一个ฐ重要结论就是软件功能的增加并不必然带来质量的提高。有时候,更少的功能“弱”反而是更好的选择“强”,因为这会使得软件的可用性提高。相比那些体积庞大、功能全面、较难上手的软件,一种功能有限但易于使用的软件可能ม对用户有更大的吸引力。加布里埃尔本人经常举unix和9๗ix和c在设计上考虑了实际环境,放弃了一些功能,但是保证了简单性,这使得它们最终在竞争中胜出,成为主流操作系统和编程语言。——译者注’

与之对照,还有另一种软件设计思想,也许可以被称为ฦ“万福玛丽ษ亚”模式。它不要求尽快拿出原型,然后再逐步优化,它的观点是你应该等到完整的成品出来以后再一下子隆重地推向市场,就像圣母玛丽亚降临ภ一样,哪怕整个过程漫长得像橄揽球运动员长途奔袭、达阵得分也没有关系。在互联网泡沫时期,无数创业公司因为ฦ相信了这种模式而自毁前程。我还没听说过有人采用这种模式而获得成功。

软件领域以外的人可能ม没听过“弱即是强”,所以意识不到这种模式在艺术领域普遍存在。以绘画为例,文艺复兴时期就有人现了这一点。如今,几乎所有的美术老师都会告诉你准确画出一个事物的方法,不是沿着轮廓慢慢一个ฐ部分、一个ฐ部分地把它画出来,因为这样的话各个部ຖ分的错误会累积起来,最终导致整幅画失真。你真正应该采用的方法是快地用几根线画出一个大致准确的轮廓,然后再逐步地加工草稿。

在大多数艺术领域,原型使用的材料与成品的材料é一般来说是不一样的。印刷活字先画在纸上,然后才做成铅字。雕塑先用石蜡创作,然后才用青铜浇铸。地毯图案先用墨水画出纸型,然后才织成地毯。建筑物先做出木模型,然后才做成石头建筑。

为什么เ15๓世纪油画ฑ次亮相会引起轰动并很快流行起来?原因就是油彩使得画家可以在原型上直接画ฑ出最后的样子。你可以按照自己的想法画ฑ出初稿,但是它并不对你构成限制ๆ。接下来你可以逐步加上细节,甚至对初稿做出重大修改,直到最后完成。

软件开也可以这样做。原型prototype并不只是模型摸del,不等于将来一定要另起炉灶,你完全能够在原型的基础上直接做出最后的成品。我认为,只要有可能ม,你就应该这样做。这样的方式使得你可以利用在开过程中一路产生的新想法。不过更重要的是,这样做有助于鼓舞士气。

士气是设计的关键因素า。令我吃惊的是,大家很少提到这一点。我的一位美术启蒙老师告诉我:如果你觉得画某样东西很乏味,那么你画出来的东西就会真的很乏味。比如,假设你必须画一幢建筑物,你决定从每一块砖头开始画ฑ起。你觉得自己可以坚持下去,但是画到一半的时候突然感到很厌倦,于是你就不再认真观察每块砖头并画ฑ出它们各自不同的特点,而是以一种机械重复的方แ式草草地把砖头画完了事。这样一来,你的作品效果就很差,甚至还不如一开始就不采用写实手法,只是若隐若现地暗示砖头的存在。

先做出原型,再逐步加工ื做出成品,这种方式有利于鼓舞士气,因为ฦ它使得你随时都可以看到เ工作的成效。开软件的时候,我有一条规则ท:任何时候,代码都必须能够运行。如果你正在写的代码一个小时之后就可以看到运行结果,这好比让你看到不远处就是唾手可得的奖励,你因此会受到激励和鼓舞。其他艺术领域也๣是如此,尤其是油画。大多数画家都是先画一个ฐ草图,然后再逐步加工。如果你采用这种方式,那么从理论上说,你每天收工ื的时候都可以看到整体的效果,不会对最后的成品一点感觉都没有。跟你说实话吧,画ฑ家之间甚至流传着一句谚语:“画作永远没有完工ื的一天,你只是不再画下去而已๐。”这种情况对于第一线的程序员真是再熟悉不过了。

士气也可以解释为什么เ很难为ฦ低端用户设计出优秀产品。因为优秀设计的前提是你自己้必须喜欢这种产品,否则你不可能对设计有兴趣,更不要说士气高昂了。为了把产品设计好,你必须ี对自己้说:“哇,这个产品太棒了,我一定要设计好!”而不是心想:“这种垃圾玩意,只有傻瓜才会喜欢,随便设计一下就行了。”

设计意味着做出符合人类特点和需要的产品。但是,“人类”不仅包括用户,还包括设计师,所以设计工作本身也必须符合设计师的特点和需要。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━⌒