第4章

流行的道德观念与其他普通的流行时尚的产生方แ式似乎ๆ是不一样的。一般来说,流行的时尚产生于某个有影响力的人物,他突奇想,接着其他人纷纷模仿。15世纪晚期,欧洲流行一种宽头鞋oad-ๅtoedshoe,原因是当时的法国皇帝查理八世长了六根脚๐趾。20่世纪20年代,着名电影明星fraທnk9k改成一个ฐ印第安纳州工业小镇的名字gaທry,以便突出自己粗犷硬朗的铁汉形象,结果导致这个名字风靡一时,很多父母都为儿子取名为ฦgaທry。但是,流行的道德观念不是这样,它们往往不是偶然产生的,而是被刻意创造出来的。如果有些观点我们不能说出口,原因很可能是某些团体不允许我们说。

黑客与画家的共同之ใ处,在于他们都是创作者。与作曲家、建筑师๲、作家一样,黑客和画家都是试图创น作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会现一些新技术那样当然更好。

电子技术的展,使得计算机日຅益成为人类社会必不可少的一部ຖ分。

对于互联网软件,没人规定只能ม使用某些语言开,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么เ语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。尤其是在竞争者存在的情况下,“可以这样做”就变成了“必须ี这样做”详见后文,因为ฦ如果你不利用语言的优势,那就会听任对手过你。

我们的大多数竞争者使用c和c+ใ+ใ,这使得他们的软件明显不如我们,因为不考虑其他原因他们无法解决cນgi脚本不能识别ี用户状态的问题。如果用户想要修改表单的部分内容,你不得不把表单的所有内容都放在同一个页面上,然后在最下面放一个“更新า”按钮。正如我将在第12章中ณ解释的,通过使用lisp这种许多人眼中的教学语言,我们使得via9ebຘ编辑器更接近桌面软件带给用户的体验。

软件的布๧

互联网软件带来的最大变化之ใ一,就是软件布方แ式的改变。对于桌面软件来说,布๧新版本是一个很痛苦的过程,整个ฐ公司不得不使尽全力,满头大汗地挤出一大块巨型代码。从过程和结果上来看,无຀异于一次分娩ກ。

互联网软件则ท完全不同,就像你写给自己用的程序一样,修改起来很方便。软件的布过裎ย可以分解为一系列的渐进式修改,而不是猛地推出一个ฐ大幅变动的版本。常见的桌面软件可能ม一年布๧一到เ两个ฐ新า版本,而我们在via9๗eb经常是一天布๧三到五个版本。

一旦采用了这种新模式,你就会知道布方式对软件开的影响有多么重大。桌面软件开之中ณ的许多棘手问题,都是源自于它的那ว种灾难性的布方แ式。

如果一年布一个ฐ新า版本,你很可能会以打包方式处理bug,把它们留แ着,然后一次性全部解决。在布新版本前๩,你可能ม会修改和更换一半的代码,从而又引入无数新า的bug。接着,质量监控人员qualityassurance开始测试新代码,逐一列出新现的bug,你再按照这张清单把它们一个个消除。通常没办法把清单全部做完,它随时都在增长,说实话,谁也不确定它到底会有多长。这就好像在足球场上捡小石块一样费劲,你永远不知道为什么软件内部ຖ会出这么多问题。最好的结果也不过是,你得到เ了一个ฐ统计学意义แ上“合格”的版本。

对于互联网软件来说,大部分的变化都是细微和渐进的,所以引入bug的机会比较小。而且,在布前๩测试的时候,你知道应该最仔细地测试哪个部ຖ分——显然就是你修改过的部分。这使得你对代码的掌握变得牢固得多。一般来说,这时候你确实是对软件内部的情况一清二楚。当然,这不是说你把所有代码都装ณ在了脑子里,而是说你阅读代码的时候,非常自如流畅ม,不会像侦探破案那样苦思冥想,而是像飞行员那样,瞄一眼仪表板,就对飞行状况胸有成竹。

桌面软件导致了bຘug的宿命论。你很清楚,布出去的软件肯定有bຘug,你甚至早就准备好了应对机制比如布补丁。既ຂ然如此,bຘug再多一点又何妨?没过多久ื,你要布๧下一个版本了,你明知其中ณ某个操作完全不能ม使用,但还是照样布。苹果公司前几年就干过这种事。他们必须ี布๧新版操作系统了,压力越来越大,布日期已๐经推迟了四次,无຀法再推了,可是有些部分还一点儿没写比如cd和dvd操作的部分。怎么เ办?他们就把没写完的操作系统布出去了,用户必须ี日后自己动手安装ณ缺失的部ຖ分。

互联网软件的布规则是:它运行不了,你就无຀法布;一且它能运行了,你就可以立刻布๧。

这个行业的老手可能ม会想:你说得好听!软件运行不了,就不布,但是如果你已经对外承诺了明确的布日期,到时却没有准备好,怎么เ办?这个ฐ问题听起来有道理,但是事实上,你不会对互联网软件做出这样的承诺,因为ฦ它根本没有“版本”这个概念。你的软件是连续性渐变的,某些更新า也许比较重大,但是“版本”这个ฐ概ฐ念不适用于互联网软件。

如果你还没忘记via9๗eb的旧ງ事,你可能会觉得我这么说听上去很奇怪,因为