第4章(1 / 2)

加入书签 本章报错

黑客与画家强烈推荐:

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

我一直不喜欢“计算机科学”puters9๗ce这个ฐ词。主ว要原因是根本不存在这种东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部研究局darpaທ的项目资助。中间部ຖ分是计算机博物学家,研究各种专门性的题๤目,比如网络数据的路由á算法。另一端则ท是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。所以,在“计算机科学”的名下,数学家、物理学家、建筑师都不得不待在同一个ฐ系里。

电å子技术的展,使得计算机日益成为人类社ุ会必不可少的一部分。

对于互联网软件,没人规定只能使用某些语言开,因为ฦ所有的硬件都控制ๆ在你手里,你想要用什么语言,就能ม用什么语言。不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工ื具。尤其是在竞争者存在的情况下,“可以这样做”就变成了“必须ี这样做”详见后文,因为如果你不利用语言的优势,那ว就会听任对手过你。

我们的大多数竞争者使用c和cນ++,这使得他们的软件明显不如我们,因为不考虑其他原因他们无຀法解决cgi脚๐本不能识别用户状态的问题๤。如果用户想要修改表单的部ຖ分内容,你不得不把表单的所有内容都放在同一个页ษ面上,然后在最下面放一个“更新”按钮。正如我将在第1้2章中ณ解释的,通过使用lisp这种许多人眼中ณ的教学语言,我们使得via9ebຘ编辑器更接近桌面软件带给用户的体验。

软件的布๧

互联网软件带来的最大变化之一,就是软件布๧方式的改变。对于桌面软件来说,布新版本是一个ฐ很痛苦的过程,整个公司不得不使尽全力,满头大汗地挤出一大块巨型代码。从过程和结果上来看,无异于一次分娩。

互联网软件则ท完全不同,就像你写给自己用的程序一样,修改起来很方แ便。软件的布过裎可以分解为一系列的渐进式修改,而不是猛地推出一个大幅变动的版本。常见的桌面软件可能ม一年布๧一到两ä个新า版本,而我们在via9eb经常是一天布三到五个版本。

一旦ຆ采用了这种新า模式,你就会知道布方แ式对软件开的影响有多么重大。桌面软件开之ใ中的许多棘手问题,都是源自于它的那种灾难性的布方แ式。

如果一年布一个新า版本,你很可能会以打包方แ式处理bຘug,把它们留着,然后一次性全部解决。在布๧新版本前,你可能会修改和更换一半的代码,从而又引入无数新的bug。接着,质量监控人员qualityassuraທncນe开始测试新代码,逐一列出新现的bug,你再按照这张清单把它们一个个ฐ消เ除。通常没办法把清单全部做完,它随时都在增长,说实话,谁也不确定它到底会有多长。这就好像在足球场上捡小石块一样费劲,你永远不知道为什么软件内部ຖ会出这么เ多问题。最好的结果也不过是,你得到เ了一个ฐ统计学意义แ上“合格”的版本。

对于互联网软件来说,大部分的变化都是细微和渐进的,所以引入bug的机会比较小。而且,在布前测试的时候,你知道应该最仔细地测试哪个部分——显然就是你修改过的部分。这使得你对代码的掌握变得牢固得多。一般来说,这时候你确实是对软件内部ຖ的情况一清二楚。当然,这不是说你把所有代码都装在了脑子里,而是说你阅读代码的时候,非常自如流畅,不会像侦探破案那样苦思冥想,而是像飞行员那样,瞄一眼仪表板,就对飞行状况胸有成竹。

桌面软件导致了bug的宿命论。你很清楚,布๧出去的软件肯定有bຘug,你甚至早就准备好了应对机制比如布补丁。既ຂ然如此,bug再多一点又何妨?没过多久,你要布下一个版本了,你明知其中某个操作完全不能使用,但还是照样布。苹果公司前几年就干过这种事。他们必须布๧新า版操作系统了,压力越来越大,布日期已经推迟了四次,无法再推了,可是有些部分还一点儿没写比如cd和dvd操作的部分。怎么办?他们就把没写完的操作系统布出去了,用户必须日后自己动手安装ณ缺失的部分。

互联网软件的布๧规则是:它运行不了,你就无法布;一且它能运行了,你就可以立刻布。

这个ฐ行业的老手可能会想:你说得好听!软件运行不了,就不布๧,但是如果你已๐经对外承诺了明确的布日期,到时却没有准备好,怎么เ办?这个问题听起来有道理,但是事实上,你不会对互联网软件做出这样的承诺,因为它根本没有“版本”这个概ฐ念。你的软件是连续性渐变的,某些更新า也许比较重大,但是“版本”这个ฐ概念不适用于互联网软件。

如果你还没忘记viaທ9eb的旧事,你可能会觉得我这么说听上去很奇怪,因为那时我们总是宣布๧将有新า版本推出。这只是公关伎俩啦,我们知道媒体喜欢听到เ版本号。如果你布๧一个大的版本更新版本号的第一位数生变动,它们就会以大篇幅报道;如果你布一个小的版本更新版本号小数点后生变化,它们最多只用一段话提一下。

我们的一些竞争对手的产品是桌面软件,确实有版本号。对我们来说,这种布๧方式只表明他们的落后,但是他们却因此把媒体的目光都吸引过去了。我们不想做局外人,所以也开始为自己้的软件加上版本号。什么时候需要媒体宣传了,就开出一张单子,上面总结了自从上次“布๧”以来,我们新增的所有功能,然后在上面填一个新า的版本号,出一个新า闻稿,宣布๧新版本已经准备就绪了。真是神๰奇啊,从来没有人看穿我们的把戏。

到被收购的时候,我们已经这样干了三次,所以已๐经到เ了第四版。如果我没记错的话,那ว时是41้版。via9ebຘ变成yahoostore以后,媒体的曝光就没有那ว么เ必要了。所以,虽然软件一直没有中ณ断开,但是版本号却悄悄地被放弃了。

软件bug

互联网软件的另一个ฐ技术优势在于,你能ม再现大部分的bug。用户的数据都在你的硬盘上。如果某个ฐ用户使用软件时出错了,你就不必像开桌面软件那样苦苦猜测到底生了什么事情。一般来说,只要用户通过电å话向你描述一番,你就能把问题再现出来。如果你的程序中有自动侦测错误的代码,那么不用等到用户找上门,你可能已经知道哪里出错了。

互联网软件每时每刻都在被使用。你的代码一上线,就会经历严酷考验。bug很快就会浮ด出水面。

软件公司有时会受到指责,因为他们竟然把现bug的任务交给用户去完成。说实话,我其实提倡这种做法。对于互联网软件,这样做的好处很多,因为ฦ它的bug相对比较少,而且处理周期比较短。我们连续不断地布新版本,所以bug就比较少。我们能够再现用户遇到เ的问题,又能在修复后立刻布๧,使得用户不用等很长时间,所以大部分bug的处理周期都比较短。我们的bຘug数量一直不多,以至于没有必要使用一个正式的bຘug追踪系统。

当然,在布之ใ前,你应该对修改之处进行测试,避免出现重大的bug。难免会有一些bug成为漏网之鱼๠,不过它们纯属罕见情况下才会生的个案,在真正接到用户投诉之前,几乎不会影响到เ什么เ人。只要你能立刻解决bug,对于普通用户来说,他们就会觉得你的软件几乎是亳无问题๤的。我觉得,普通的viaທ9๗eb用户可能一个ฐbug都没遇到过。

解决新代码的bug要比解决历史遗留代码的bug容易。在自己้刚ธ刚写好的代码中,找出bug往往会比较快。有时,你只要看到เ出错提示,就知道问题出在哪里,甚至都不用看源码,因为潜意识中你已๐经在担心那个ฐ地方可能ม会出错。如果你要解决的bug出自于6๔个ฐ月前写好的代码假定你一年布๧一个新版本,那ว么6๔个ฐ月就是现bug的平均时间,那么เ就麻烦了,就要大费周章了。那时,你对代码也๣已经不熟悉了,就更可能采用危险的方式解决问题๤,甚至引入更多的bug

‘这个观点引申自特雷弗·布莱克韦尔trevorblaທck9ell的话,他说:“随着软件规模的增大,开成本指数式上升。这可能ม是因为修正旧bຘug的原因。如果bug都能被快现,成本的上升形态就能ม基本保持线性。”’

早ຉ一点现bug就不容易形成复合式bug,也就是互相影响的两个ฐbug。举ะ例来说,一个ฐbug是楼梯很滑,另一个bug是扶手松了,那么只有当这两ä个bຘug互相作用时,才会导致你从楼ä梯上摔下来。在软件中,复合式bug是最难现的bຘug,往往也๣会导致最大的损失

。传统的方แ法是:“把软件彻底拆开,将所有bຘug统统清理干净。”这样做难免产生一大堆的复合式bug。如果软件是经常性布,每次只有小幅度的变化,那么เ就不容易产生复合式bຘug。这就好比做扫除:你一直在打扫大厅,掉落在地板上的东西会被立刻๑清理,省得它们时间一长与其他东西粘在一起。

‘复合式bug有一个ฐ子类型:两个ฐbug是互相弥补的,好比“负负得正”,软件反而能正常运行。这种bug可能ม才是最难现的bຘug。当你修正了其中ณ的一个bug,另一个bug才会暴露出来。这时对你来说,你会觉得刚ธ才修正错了,因为那ว是你最后修改的地方,你就怀疑自己在那里做错了,但是你其实是对的。’

有一种编程方法叫做“函数式编程”fun9g,它对你会有帮助,可以避免一些副作用。函数式编程在学术文献中研究得比较多,在商业软件中用得比较少。但是,对于互联网软件,它却很有用。很难用纯粹的“函数式编程”完成整个程序,但是它可以用来编写一些重要的部分,使得这些部ຖ分易于调试,因为ฦ它们不包含“状态”state,非常便于不断进行小幅的修改和测试。我大量使用这种方แ法开viaທ9ebຘ的编辑器,我们自己้的脚本语言rtml就是一种纯粹的函数式编程语目。

桌面软件行业的人可能ม很难相信,找出via9๗ebຘ的bug几乎ๆ成了一种游戏。因为软件布以后,大多数bຘug都是罕见情况下才会生的个案,受到影响的用户往往都是高级使用者,他们喜欢试验那ว些不常用的、难度大的操作。高级使用者对bug的容忍度比较高,尤其如果这些bຘug是在开新功能ม的过程中引入的,而这些新功能又正是他们所需要的,他们就更能理解了。事实上,因为ฦbຘug不多,你只有经过一些复杂的过程以后才会遇到เ它们,所以高级使用者往往因为现了bຘug感到很得意。他们打电å话给客服时,多半是一副胜利者的口吻,而不是怒气冲冲的样子,好像他们击败我们得分了一样。

客户支持

当你可以再现错误时,你开展客服支持的方式就变了。大多数软件公司将客户支持看作提高客户满意度的一种方式。在这些公司看来,要么是客户打电话来,报告一个ฐ已知的bug,要么是客户执行了错误的操作,你必须判断ษ出他到底什么เ地方做错了。这两ä种情况对公司的知识积累็都没有太大益处。所以,你开始觉得客户支持是一件令人头痛的事情,决定将客服人员与开人员尽可能ม分离。

viaທ9eb不是这样。我们的客户支持是免费的,因为我们希๶望知道用户的反应。如果他们使用时遇到เ困难,我们希望立刻知道,这样就能再现错误、解决问题、布新版本。

所以,via9๗eb的开人员总是与客服人员保持密切联系。客服人员坐在距离程序员只有9米的地方,知道自己可以随时打断ษ程序员的工作,提交新า证实的bug的报告。遇到重大bug,我们就算在开董事会,也会马上回来修改程序。

我们的这种方法让所有人都感到满意。客户很高兴,拨打厂商服务热线是免费的,而且还被当作通风报信的人,受到เ郑重对待。客服人员也喜欢这样,因为ฦ这使得他们可以帮助用户,而不是对着用户读操作手册;程序员喜欢这样,因为他们能够再现bຘug,而不是通过模糊不清的二手报吿了解bຘug。

我们的政策是当场修复bug,这改变了客服人员与黑客之ใ间的关系。在大多数软件公司,客服人员是低工资的边缘人,黑客则ท是呼风唤雨的主宰者。这些公司有各种各样的bug报告流程,伹是几乎都是单向式的:使用者打电话给客服人员报告bຘug,客服人员填写某种形式的表格,传递给程序员可能会经质量监控部ຖ门之ใ手,程序员把bຘug写入待解决问题的清单。via9eb不是这样,在收到使用者的bຘug报告之ใ后一分钟内,程序员就会对站在身边的客服人员说:“没错,你是对的,这是一个bຘug。”客服人员从黑客嘴里听到“你是对的”,会感到欢欣鼓舞。客服人员告诉我们现bຘug的时候,他们心里怀着期待,就好像小猫想让别人知道自己抓住了一只老鼠一样。这也使得客服人员在判断bຘug严重性时格外小心,因为这关系到เ他们的声誉。

我们被雅虎收购后,客服人员被移到离程序员很远的地方。直到เ那时,我们才意识到客户支持实际上就是质量监控,也是某种程度的市场营销。除了记录bug,客服人员还必须大概了解相关知识,回答与bug相关的一些问题、解释令使用者迷惑不解的功能ม等

。有时,他们也๣扮演了使用者的代理人,我们会问他们哪个新า功能ม是用户更想要的,他们总是能做出正确的回答。

‘我们在via9๗eb举办过一个比赛,看谁能ม说出我们软件中最差ๆ劲的地方。两位客服人员并列第一,我至今想起他们的叙述都不寒而栗。比赛一结束,我们立刻๑修复了那两个ฐ问题๤。’

全身心投入

能够即时布软件,对开者是一个ฐ巨大的激励。步行上班途中,我经常会想哪些地方还需要变动,然后当天就予以实现。一些重大功能也๣是这样来的。即使某个功能要花两个ฐ星期或者更长时间开,我也๣很确定,一旦写完就可以立刻๑看到效果。

如果软件的新า版本要等到一年后才能ม布๧,我就会把大部分新า构思束之高阁,至少过上一段时间再来考虑。但是,构思这种东西有一个ฐ特点,那ว就是它会导致更多的构思。你有没有注意过,坐下来写东西的时候,一半的构思是写作时产生的?软件也是这样。实现某个ฐ构思,会带来更多的构思。所以,将一个构思束之高阁,不仅意味着延迟它的实现,还意味着延迟所有在实现过程中激的构思。事实上,将一个构思束之高阁,甚至会限制新构思的产生。因为ฦ你看一眼堆放在一边、还没有实现的构思,就会想“我已经为下一个ฐ版本准备了很多新า东西要实现了”,你就懒得再思考更多的新功能了。

大公司的做法不是立刻实现新功能,而是先对新า功能做一个计划ฐ。我们在via9eb就是因为ฦ这个原因而遇到เ了麻烦。投资者和分析家会问,你们对未来有何计划。真实的回答是,我们没有任何计划。我们有改进的想法,但是如果我们想到应该怎么改进,就已๐经把它实现了。接下来六个月我们要做什么?所有能ม想到เ的最佳改进。我不知道自己是否有胆量公开这么เ说,但这是实话。计划ฐ这个词,只是将构思束之ใ高阁的另一种表达方式。只要想到เ好的构思,我们就立刻着手实现。

viaທ9eb和其他许多软件公司一样,大部ຖ分代码都有明确的负责人,而且只有一个。如果你负责某件事,那ว就真的是你负责。除了你以外,没有人能ม批准他们甚至都不知道这部分代码的布。如果你出错了,没有人会提醒你,唯一的代码保护机制就是你的羞耻心,你不想被同事当成傻瓜,这就足矣。我这么เ说或许会让人误以为via9๗ebຘ的代码是漫不经心地编写出来的。实际上我们的开进度很快,但是把代码放到服务器上布之前๩,我们会深思熟虑。提高软件可靠性的关键在于开时全神๰贯注,而不是降低开度。正是因为飞行员全神๰贯注,他才能ม在夜间让一架18๖吨重的飞机以2๐2๐5๓公里的时平安降落在航空母舰的甲â板上,做得比小孩子切面包还要安全。

当然,这样写软件也有局限。它适用于小型的、由优秀可靠程序员组成的开团队,不适用于大型的、充斥大量平庸之ใ辈的软件公司,在那里不是程序员想出好的构思,而是一个ฐ委员会集体批准坏的构思。

逆向的《人月神话》

‘《人月神๰话》themythi9th是布鲁๥克斯frederickooks所写的一本软件项目管理名着。所谓“人月”就是一个人在一个ฐ月内所能完成的工ื作量。假如某个ฐ项目预ไ估需要12๐个ฐ人月,那么เ派4个人处理这个ฐ项ำ目,理论上需要3个月,派6๔个人则ท只需要2个月。但是,布鲁๥克斯认为这种换算机制在软件业行不通,是一个ฐ神话,因为软件项ำ目是交互关系复杂的工作,需要大量的沟通成本,人力的增加会使沟通成本急剧上升,反而无຀法达到เ缩短工期的目的。在本质上,软件项目的人力与工ื期是无法互换的,当项目进度落后时,光靠增加人力到เ该项目中ณ,并不会加快进度,反而有可能使进度更加延后。该书๰英文版已๐由人民邮ุ电å出版社出版。——译者注’

幸好开互联网软件需要的程序员比较少。我曾在一家中等规模的桌面软件公司工作,那里的工ื程部ຖ规模就过10่0人,但是其中只有1้3人负责产品开,剩ທ下的人负责软件布๧、软件移植以及其他事情。开互联网软件,你最多只需要那13个ฐ人,因为不存在软件布๧、软件移植以及其他事情。

via9ebຘ的开者只有3个人

。我一直在不停地招聘,压力很大,因为ฦ我们要把公司卖掉。我们很清楚地知道,买家不愿花大价钱买຀下一个只有3๑个ฐ程序员的公司。解决方法:雇更多的人,在公司内创น设其他项目,让他们去做。

‘罗伯特·莫里斯写了客户下单的前๩台订单系统,特雷弗·布๧莱克韦尔写了图片系统和后台管理系统商家用来处理订单、查看统计数据、修改设置等,我写了站点生成器商家用来搭建网站的外观。订单系统和图片系统的开语言是c和cນ++ใ,后台管理系统主要是perl,站点生成器是摸nlisp。’

开软件需要的程序员人数减少,不仅意味着省下更多的钱。正如《人月神๰话》一书中ณ所指出的,向一个项目增加人手,往往会拖慢项目进程。随着参与人数的增加,人与人之ใ间需要的沟通呈现指数式增长

。人数越来越多,开会讨论各个部分如何协同工ื作所需的时间越来越长,无法预ไ见的互相影响越多越大,产生的bug也๣越多越多。幸运的是,这个ฐ过程的逆向也๣成立:人数越来越少,软件开的效率将指数式增长。我不记得我们在via9ebຘ开过讨论如何编程的会议。步行去吃午饭的路上,我们就能ม把该说的话说完,从来没有例外。

‘这里的“指数式”exponentially,我用的是口语中ณ的表达方式。更合适的词应该是“多项ำ式似的”polynomially。’

如果要说有什么缺点,就是由á于开人员比较少,每个程序员都必须承担一点儿系统管理的责任。当你在服务器上布软件时,必须有人监控服务器,但是由于人员太少,监控员只能ม由开人员兼任。via9๗eb有许多系统组件,变动非常频๗繁,导致应用软件和系统软件之ใ间的界ศ线很难区分。硬性指定一条界线将限制我们的开。所以,虽然我们总是安慰自己้,公司运营很快就能ม走上正轨,一两ä个月后就能平稳展,那时就可以雇一个ฐ专职的系统管理员让他专门负责服务器了,但是这个愿望一直没有实现。

只要你还在很活跃地开产品,就免不了要亲自做系统管理,我认为没有其他可能。如果你想写完代码,向服务器递交9๗,然后就可以回家,一天工ื作结束,这在互联网软件身上肯定没有实现的可能。互联网软件是活的,每时每刻๑都在你的服务器上运行。一个严重的bຘug影响的可能ม不是一个ฐ用户,而是所有用户。如果某个bຘug破坏了硬盘上的数据,更是必须马上修复,诸如此类。我们的心得是,第一年之后就不必每分钟都盯着服务器了,但是对新变动的部分一定要密切关注。不要在半夜里布代码,然后回家睡觉。

关注用户

互联网软件不仅把开者与他的代码更紧ู密地联系在了一起,而且把开者与他的用户也更紧ู密联系在了一起。财务软件公司intuit的销售方式很出名,他们的销售员会在软件零售店里向顾ุ客做自我介绍,然后请求顾客跟他们回公司,以便进一步了解软件。如果你亲眼见到某人第一次使用你的软件,你就会知道软件的哪个ฐ地方最打动他。

软件应该做到用户认为ฦ它可以做到เ的事情。但是,你不知道用户到เ底怎么想,除非你亲眼看到他们如何使用你的软件,相信我,看到和看不到大不相同。互联网软件能ม够让你前๩所未有地了解用户行为ฦ。你不必再人为ฦ挑选一个小型的用户样本,进行重点观察。每个用户的每一次点击你都可以看到เ。所以,你不得不仔细斟酌到底要看哪些行为ฦ,因为你不应该侵犯用户的隐私。但是,即使是最常见的统计项ำ目,也能ม大量信息。

因为你能ม得到用户数据,所以就不用依赖基准测试

了。基准测试不过是在模拟用户,而你现在能ม看到真实的用户。你想知道应该优化什么เ地方,那就登录到服务器,看看什么เ程序最消耗cນpu。你也๣会知道什么เ时候应该停止优化,当我们后来现via9eb编辑器的瓶颈是内存而不是cນpu时,就知道可能应该停止优化了,因为我们没办法压缩用户数据的大小。唉,其实是有办法的,但是做起来很不容易。

‘基准测试bencນhmaທrktest指的是先设置一个基本的数据环境,测试应用程序的表现,然后把这个表现当作“基准”bຘencນhmaທrk,用来比较其他情况下应用程序的表现。——译者注’

效率对互联网软件至关重要,因为ฦ硬件费用由你支付。你的资本支出成本除以服务器所能ม支持的最大用户数量,就是你为ฦ每个ฐ用户付出的成本。如果你的软件效率高,你就能比同样硬件配置的竞争对手多展用户,获得更多的利润。我们在via9eb的时候,每个用户的硬件成本大约是5๓美元,现在应该更低,可能ม比把第一个月的账单寄给他们的成本还要低。如果软件效率足够高,每个用户的硬件成本现在可以接近免费。关注用户不仅有助于优化程序,还有助于指导你的设计。viaທ9ebຘ的脚本语言rtml允许高级用户自定义页面风格。我们现rtml有点像留言本,用户通过它向我们提建议,因为只有当预设的页面风格不能ม满足用户需求时,他们才会使用rtml。举例来说,编辑器的工具栏原先是横跨页面的,但是许多使用rtml的用户将它放在左下方,于是我们也就把工具栏的默认位置调整为左ุ下方了。

最后,通过关注用户,你可以知道他们在使用软件的过程中什么时候遇到เ了麻烦。因为顾客总是对的,所以这表明你需要修正软件。推广via9๗ebຘ的关键,就是允许访问者在线试用。这可不是仅仅展示ิ几张图片,而是真的让你使用我们的产品。只需要五分钟,你就能自己搭建起一个ฐ真实可用的网上商店。

几乎所有我们的新客户都是通过在线试用展起来的。我想大多数互联网软件都是如此。如果用户坚持从头到尾成功地完成在线试用,那么表明他们喜欢这个产品。如果他们感到很困惑或者很乏味,就不会坚持试用到เ底。所以,只要我们能让更多的访问者坚持完成在线试用,我们的用户增长率就会提升。

我研究了用户点击行为ฦ,现在某一个地方แ,在线试用的用户会停止前进,改为点击浏览器的“后退”按钮。如果你写过互联网软件,你会现“后退”按钮是设计中ณ最费脑筋的问题之ใ一,很有意思。所以,我就在那个地方แ加了一条提示,告诉用户已经接近终点了,提醒他们不要点击“后退”按钮๢。这时,互联网软件的另一个好处就体现出来了,你做了修改,马上就可以得到反馈。完成在线试用的用户比例从6๔0%立刻上升到了9๗0่%ื。由于新า增付费用户的数量是完成在线试用的用户数量的一个函数,所以与修改前相比,我们的收入增长了将近5๓0%ื。

金钱问题๤

20世纪9๗0年代早ຉ期,我读过一篇文章,它称应该让用户像订报纸那样按照使用时间长短订购软件的使用权。第一眼看上去,这种说话好像很滑稽。但是后来,我意识到เ这个观点是对的,因为ฦ它反映了软件开的现实:软件开不是静态的,而是一个持续不断ษ的动态过程。按照传统的软件销售模式,厂商每推出一个新版本,就会强迫现有用户重新า出钱购买,然后安装升级,只有这样厂商才能ม持续不断获得收入。我认为,如果公开收取软件的订阅费,而不是让用户购买软件的所有权,操作起来会更自然、更简便。“订报纸模式”正是互联网软件天然的收费模式。互联网软件不可能ม用自由á软件的模式经营,只能ม由商业性公司来经营。因为ฦ经营互联网软件要承担很大的风险,会产生大量支出,没有人会免费做这件事情的。

对于软件公司来说,互联网软件是一个很理想的收入来源。你每个季度的销售额๩不是从零开始,而是拥有一个持续的现金流。因为互联网软件每时每刻都可以升级,所以你不用担心做错什么事。事实上,你不可能真的做错什么เ事,因为ฦ如果用户痛恨你对软件的修改,你马上就会知道。你也๣不会有坏账的烦恼,如果谁不付钱๥,你就停止对他的服务。此外,你也๣不可能遇到เ盗版问题。

没有盗版是一种“优势”,但也是一个ฐ问题。一定数量的盗版对软件公司是有好处的。不管你的软件定价多少,有些用户永远都不会购买。如果这样的用户使用盗版,你并没有任何损失。事实上,你反而赚到了,因为你的软件现在多了一个ฐ用户,市场影响力就更大了一些,而这个用户可能ม毕业以后就会出钱购买຀你的软件。

只要有可能ม,商业性公司就会采用一种叫做“价格歧视”pri9๗的定价方แ法,也๣就是针ฤ对不同的客户给出不同的报价,使得利润๰最大化

。软件的定价特别适合采用价格歧视,因为软件的边际成本

接近于零。这就是为ฦ什么很多软件的sun服务器版本比intel服务器版本更贵的原因,因为如果一个公司购买sun服务器,就表明它很有钱,不在乎对设备的投资,那么为什么不向它开个ฐ高价呢?盗版实质上是一种价格歧视,只不过针对的是最底层的消เ费者。我觉得,软件公司明白这个道理,所以故意对某些盗版行为ฦ睁一只眼闭一只眼

。由á于互联网软件无法盗版,所以软件公司必须ี想出其他策略๓推广软件。

‘价格歧视无所不在,所以当我现193๑6年的《鲁๥宾逊—帕特曼法案》规定价格歧视在美国属于非法行为时,不免感到เ震惊。这个ฐ法案看来并没有得到严å格执行。’

‘“边际成本”是一个经济学概念,指下一个单位产品的生产成本。软件的边际成本就是复制ๆ代码的成本,所以接近零。这意味着,对软件公司来说,增加一个ฐ用户几乎没有增加生产成本。它与价格歧视的关系在于,边际成本越低,厂商的定价空间就越大,它可以针ฤ对特定消费者定出很低的价格,从而达到เ扩大销售、利ำ润最大化的目的。——译者注’

‘naomiklein在nologo一书中ณ说,有些服装品牌的目标客户是“都市๦青少年”这些品牌的专卖店对店内偷窃行为就睁一只眼闭一只眼,因为ฦ在它们的目标市场中ณ,那些在店内行窃的“顾ุ客”也是流行风尚的带头人,可能ม会带动本品牌的销售。’

相比桌面软件,互联网软件卖得更好,因为它易于销售。你可能认为,购买຀商品时,人们是先做出决定,然后再购买,好像这个ฐ行为ฦ分成两个ฐ独立的步骤。创立via9๗eb之前,我也๣是这样想的,不过我从未对这个问题进行过深入思考。事实上,第二步对第一步有反作用,如果某样商品购买຀起来很困难,人们就会改变主ว意,放弃购买。反过来也成立,如果某样东西易于购买,你就会多买一点。自从有了亚马逊网上书๰店,我买的新书比什么เ时候都多。互联网软件的服务可能是世界上购买起来最方便的东西,如果你试用完de摸再买຀,那就更是如此了。购买时,除了输入信用卡号码以外,用户不应该再被要求做其他事。要求用户做得越多,你担的风险就越大。

软件公司有时会采用分销模式,让isp分销互联网软件。这样做很不好。服务器必须ี在你自己的控制之ใ中,因为你需要不断ษ改进硬件和软件。如果你放弃对服务器的直接控制,你就放弃了互联网软件的大部ຖ分优势。我们的几个ฐ竞争对手就采用分销模式,那ว是作茧自缚。我常常想,这可能因为ฦ他们受到某些西装ณ革履、衣冠楚楚的家伙的压制。后者只看到分销管道的销售潜力是多么令人兴奋,却没有意识到เ这将毁了他们正在销售的产品。通过isp分销互联网软件,就好比让自动售货机出售寿司。

目标客户

谁是互联网软件的目标客户?via9eb一开始就把个人和小企业当作目标客户。我认为这是互联网软件的通行规则。这些客户决策比较灵活,又需要低成本的新技术,所以他们更愿意尝试新า事物。

互联网软件往往也๣是大公司的最佳选择。虽然大公司反应迟钝ๅ,不一定能意识到这一点。最好的内部网intraທ就是互联网inter。如果一家公司采用互联网软件,那ว么这家公司的软件系统将表现得更出色,服务器将得到更好的管理,员工可以不受地域限制使用这个ฐ系统。反对者往往声称互联网软件不安全。如果员工可以很容易地登录,那么坏人也可以很容易地登录。一些大型批商就不太愿意使用via9eb,觉得不能把客户的信用卡资料é交给我们,而是放在自己的服务器上更安全。可能ม没法很婉转地向他们表达我们的观点,但是事实上,他们的服务器就是没我们的安全,我们对数据的保护几乎肯定比他们好。想想看,谁能雇到更高水平的网络安全专家,是一个ฐ所有业务就是管理服务器的技术型创น业公司,还是一家服装零售商?不仅因为我们有技术水平更出色的员工,还因为我们比他们更关心数据的安全。如果一家服装零售商的服务器被入侵,最多只影响到เ这家公司本身,这件事也很可能在公司内部被掩盖起来,最严å重的情况下可能ม还会有一个员工被解雇。但是,如果我们的服务器被入侵,就有成千上万家公司可能受到影响,这件事也๣许还会被当作新闻表在业内新闻网站cນ上面,使得我们的生意做不下去,不得不关门歇业。

如果你想把钱๥藏在安全的地方,请问你是选择放在家中ณ床垫下面,还是放在银行?这个ฐ比喻对服务器管理的方แ方面面都适用,不仅是安全性,还包括正常运行时间、带宽、负载管理、备份等,都是我们占优。只有把这些事情都做对,我们才能保证自己้生存下去。服务器管理对我们是生死攸关的大事,玩具制ๆ造商如何看待对人体不安全的玩具,或者食品制ๆ造商如何看待感染了沙门氏菌的食品,我们就如何看待有缺陷的服务器管理。

某种程度上,使用互联网软件的大公司就好像把它的it部门外包出去了。虽然听起来很激进,但是我认为ฦ这样做很好。比起自己้雇用系统管理员,外包可以让这些公司得到เ更好的服务。非it公司的内部系统管理员没有行业竞争压力,日຅久ื天长就会变得工作效率低下、不负责任。要让员工表现优秀,必须ี有竞争压力。销售员必须面对消费者,程序员必须面对竞争对手的软件,但是内部系统管理员就像老年单身汉,能ม够激励他的外部ຖ压力几乎没有

。我们在viaທ9eb就有足够的外部压力,使得我们努力前进,不会被别人甩在后面。我们直接接到เ客户的电å话,而不只是同事的电话。如果服务器被入侵,我们会急得跳起来。即使过了这么多年,我现在想起当时的情景,肾上腺素า还是会迅上升。

‘不少公司都很想知道,什么事情可以外包,什么เ事情不可以外包。一个ฐ可能的答案是,公司内部所有不直接感受到เ竞争压力的部门都应该外包出去,让它们暴露在竞争压力之下。我这里所说的“外包”,指的是聘请另一个ฐ公司来执行,而不是指把业务部门转移到海外。’

所以,互联网软件通常也是大公司的正确选择。可是,大公司太迟钝ๅ,不到最后一刻想不通这一点,就像以前๩他们迟迟没有现桌面电脑才是计算机展的方แ向一样。这也是大公司往往会购买很贵商品的原因之一,所以你高额๩投入,向大公司推销你的商品,也就变得值得了。

有钱的客户倾向于更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买຀。这种现象普遍存在。原因就是,那些索要高价的人将更多的钱投入推销。via9ebຘ不采用这种做法。互联网咨询公司从我们手里抢走了几个高端商家。他们说服这些商家,让他们相信更好的选择就是,花50万美元,将网上商店开在自己้的服务器上。结果是意料之ใ中的,当圣诞节购物高峰来临时,服务器的负载陡然上升,这些商家一个ฐ接一个地现,他们的选择并不是那么เ正确。via9eb的系统远比大多数商家自己搭建的系统更高级更先进,但是我们付不起高额的宣传费,无຀法让他们明白这一点。我们的宣传费每月只有300美元,无法派遣一个ฐ衣冠楚楚、言之凿凿的团队到客户公司做演示。

有一段时间,我们构思了一种新类型的服务,名叫“viaທ9ebຘ黄金版”。它比我们普通类型的服务贵十倍,但是功能ม一模一样,唯一的区别就是有专人穿着西装面对面把它卖给你。我们从未把这个构思付诸实践,但是我很肯定,要是真推出的话,一定会有商家购买。

大公司付出的高价之中ณ,很大一部分是商家为了让大公司买຀下这个商品而付出的费用。如果国防部ຖ花100่0่美元买一个ฐ马桶座圈,部分原因是要让国防部买下它本身就需要花很多钱。这就是为什么公司内部ຖ的局域网软件明明不可取、但是还会继续存在并且不断ษ展的一个原因。这样的软件更昂贵,但是你对这个ฐ难题就是无能为ฦ力。所以,最好的安排就是把个ฐ人和小企业客户放在第一位。其他的客户该来的时候就会来。

桌面电脑

在服务器上运行软件并不是新鲜事。事实上,旧ງ有的模式就是这样,大型机的应用程序都是在服务器上运行的。如果这个ฐ模式真那ว么เ好,为什么เ以前没有获得成功呢?为什么随着桌面电å脑แ的兴起,大型机变得黯然失色呢?

刚开始的时候,桌面电脑似乎对大型机不构成威แ胁。最早的桌面电脑แ用户只是一些黑客或者业余爱好者那ว时,别ี人就是这么เ称呼黑客的。他们喜欢微型计算机的原因只是价格便宜。有史以来第一次,个人拥有了自己้的电å脑แ。“个ฐ人电å脑”pc这个ฐ词现在是日常语言的一部ຖ分,但是当它刚ธ出现的时候,听上去简直就是痴心妄想,就像今天我们听到“个人卫星”personalsaທtellite时的那ว种感觉。

↑返回顶部↑

书页/目录

黑客与画家