第4章

为了在全社会制造出一个禁忌,负责实施ๅ的团体必定既ຂ不是特别ี强大也不是特别弱小。如果一个团体强大到无຀比自信,它根本不会在乎别人的抨击。美国人或者英国人对外国媒体的诋毁就毫不在意。但是,如果一个团体太弱小,就会无力推行禁忌。有一种行为怪癖叫做“嗜粪症”coprophilaທ,它的患者人数以及影响势力眼下似乎就不太强大,无法把自己的观点推广给其他人。

我一直不喜欢“计算机科学”puters9ce这个词。主要原因是根本不存在这种东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部研究局darpa的项ำ目资助。中间部分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。另一端则ท是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料é。所以,在“计算机科学”的名下,数学家、物理学家、建筑师๲都不得不待在同一个ฐ系里。

想要把握这个时代,就必须ี理解计算机。理解计算机的关键,则ท是要理解计算机背后的人。表面上这是一个ฐ机器的时代,但是实际上机器的设计者决定了我们的时代。程序员的审美决定了你看到的软件界ศ面,程序员的爱好决定了你有什么样的软件可以使用。

对于互联网软件,没人规定只能使用某些语言开,因为ฦ所有的硬件都控制ๆ在你手里,你想要用什么语言,就能ม用什么语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工ื具。尤其是在竞争者存在的情况下,“可以这样做”就变成了“必须这样做”详见后文,因为如果你不利用语言的优势,那就会听任对手过你。

我们的大多数竞争者使用c和c+ใ+,这使得他们的软件明显不如我们,因为不考虑其他原因他们无຀法解决cgi脚๐本不能识别用户状态的问题๤。如果用户想要修改表单的部分内容,你不得不把表单的所有内容都放在同一个页面上,然后在最下面放一个ฐ“更新”按钮๢。正如我将在第12章中解释的,通过使用lisp这种许多人眼中ณ的教学语言,我们使得via9ebຘ编辑器更接近桌面软件带给用户的体验。

软件的布๧

互联网软件带来的最大变化之一,就是软件布方式的改变。对于桌面软件来说,布๧新版本是一个很痛苦的过程,整个ฐ公司不得不使尽全力,满头大汗地挤出一大块巨型代码。从过程和结果上来看,无຀异于一次分娩。

互联网软件则ท完全不同,就像你写给自己้用的程序一样,修改起来很方便。软件的布过裎ย可以分解为一系列的渐进式修改,而不是猛地推出一个ฐ大幅变动的版本。常见的桌面软件可能一年布一到两个新版本,而我们在viaທ9eb经常是一天布三到เ五个版本。

一旦ຆ采用了这种新模式,你就会知道布方式对软件开的影响有多么重大。桌面软件开之中的许多棘手问题๤,都是源自于它的那种灾难性的布๧方式。

如果一年布一个ฐ新า版本,你很可能会以打包方แ式处理bug,把它们留着,然后一次性全部ຖ解决。在布新า版本前,你可能会修改和更换一半的代码,从而又引入无数新的bug。接着,质量监控人员qualityassuraທnce开始测试新代码,逐一列出新า现的bug,你再按照这张清单把它们一个个消เ除。通常没办法把清单全部做完,它随时都在增长,说实话,谁也不确定它到底会有多长。这就好像在足球场上捡小石块一样费劲,你永远不知道为什么เ软件内部ຖ会出这么多问题。最好的结果也不过是,你得到了一个统计学意义上“合格”的版本。

对于互联网软件来说,大部ຖ分的变化都是细微和渐进的,所以引入bug的机会比较小。而且,在布๧前测试的时候,你知道应该最仔细地测试哪个部ຖ分——显然就是你修改过的部分。这使得你对代码的掌握变得牢固得多。一般来说,这时候你确实是对软件内部ຖ的情况一清二楚。当然,这不是说你把所有代码都装ณ在了脑แ子里,而是说你阅读代码的时候,非常自如流畅,不会像侦探破案那样苦思冥想,而是像飞行员那ว样,瞄一眼仪表板,就对飞行状况胸有成竹。

桌面软件导致了bug的宿命论。你很清楚,布出去的软件肯定有bug,你甚至早就准备好了应对机制比如布补丁。既然如此,bຘug再多一点又何妨?没过多久,你要布๧下一个ฐ版本了,你明知其中某个ฐ操作完全不能使用,但还是照ั样布。苹果公司前๩几年就干过这种事。他们必须布๧新版操作系统了,压力越来越大,布日຅期已经推迟了四次,无法再推了,可是有些部分还一点儿没写比如cd和dvd操作的部分。怎么เ办?他们就把没写完的操作系统布๧出去了,用户必须日຅后自己动手安装缺失的部ຖ分。

互联网软件的布๧规则是:它运行不了,你就无຀法布;一且它能ม运行了,你就可以立刻布๧。

这个行业的老手可能ม会想:你说得好听!软件运行不了,就不布,但是如果你已经对外承诺了明确的布