未来的另一条道路
Original2001年9月
(本文解释了为什么下一代软件的很大一部分可能是基于服务器的,这对程序员意味着什么,以及这种新型软件为何是初创公司的巨大机会。它源自于在BBN实验室的一次演讲。)
在1995年夏天,我的朋友罗伯特·莫里斯和我决定创办一家初创公司。在那时,Netscape的首次公开募股(IPO)宣传活动正在全力进行,媒体上关于在线商业的讨论非常热烈。当时网络上可能只有三十家实际的商店,都是手工制作的。如果要有很多在线商店,就需要有制作它们的软件,因此我们决定写一些。
在最初的一周左右,我们打算将其做成一个普通的桌面应用程序。然后有一天,我们想到了让软件在我们的Web服务器上运行,使用浏览器作为接口。我们尝试重写软件以便在Web上工作,很明显这是一条可行的道路。如果我们编写的软件在服务器上运行,对用户和我们来说都会容易得多。
这证明是一个好计划。现在,作为Yahoo Store,这款软件是最受欢迎的在线商店构建工具,拥有大约14,000名用户。
当我们开始Viaweb时,几乎没有人理解我们所说的“软件在服务器上运行”是什么意思。直到一年后Hotmail推出,人们才开始明白。现在每个人都知道这是一种有效的方法。现在有一个名称来描述我们所做的:应用服务提供商,或ASP。
我认为下一代软件的很多部分将会基于这种模型编写。即使是微软,作为失去最多的公司,似乎也意识到将某些东西从桌面上移走是不可避免的。如果软件从桌面转移到服务器上,这将意味着开发人员将面临一个非常不同的世界。本文描述了我们作为这个新世界的首批访客所看到的惊人事物。在软件转移到服务器的程度上,我在这里描述的就是未来。
下一个趋势?
当我们回顾桌面软件时代时,我认为我们会惊讶于人们所忍受的不便,就像我们现在惊讶于早期汽车拥有者所忍受的那样。在最初的二三十年里,拥有一辆汽车需要成为汽车专家。但汽车的优势如此巨大,以至于许多不是汽车专家的人也想拥有它们。
计算机现在正处于这个阶段。当你拥有一台桌面计算机时,你最终会学到比你想知道的更多关于它内部发生的事情。但美国超过一半的家庭拥有一台。我的母亲有一台计算机,她用来发送电子邮件和记账。大约一年前,她收到了一封来自苹果的信,提供给她新版本操作系统的折扣。当一个想用计算机进行电子邮件和记账的65岁女性不得不考虑安装新操作系统时,这就有问题了。普通用户甚至不应该知道“操作系统”这个词,更不用说“设备驱动程序”或“补丁”了。
现在有另一种交付软件的方式,可以让用户免于成为系统管理员。基于Web的应用程序是在Web服务器上运行的程序,使用网页作为用户界面。对于普通用户来说,这种新型软件将比桌面软件更容易、更便宜、更灵活、更可靠,并且通常更强大。
使用基于Web的软件,大多数用户不需要考虑除了他们使用的应用程序以外的任何事情。所有混乱和变化的东西都将存放在某个服务器上,由擅长此类事情的人维护。因此,通常你不需要一台计算机来使用软件。你所需要的只是一个带有键盘、屏幕和Web浏览器的设备。也许它会有无线互联网接入。也许它也会是你的手机。无论它是什么,它都将是消费电子产品:价格大约200美元,人们主要根据外观选择。你将为互联网服务支付的费用将比硬件费用更高,就像现在的电话一样。[1]
点击到达服务器并返回大约需要十分之一秒,因此使用高度交互式软件(如Photoshop)的用户仍然希望在桌面上进行计算。但如果你看看大多数人使用计算机的方式,十分之一秒的延迟并不是问题。我的母亲实际上并不需要一台桌面计算机,还有很多像她这样的人。
用户的胜利
在我家附近有一辆车,后窗贴着“宁死不屈”的贴纸。大多数人,大多数时候,会选择最少工作量的选择。如果基于Web的软件获胜,那将是因为它更方便。而且看起来它确实会对用户和开发者都如此。
要使用纯粹的基于Web的应用程序,你只需要一个连接到互联网的浏览器。因此,你可以在任何地方使用基于Web的应用程序。当你在桌面计算机上安装软件时,你只能在那台计算机上使用它。更糟糕的是,你的文件被困在那台计算机上。随着人们习惯于网络,这种模型的不便变得越来越明显。
这里的薄弱环节是基于Web的电子邮件。数以百万计的人现在意识到,无论你身在何处,都应该能够访问电子邮件消息。如果你可以查看你的电子邮件,为什么不能查看你的日历?如果你可以和同事讨论一个文档,为什么不能编辑它?为什么你的任何数据要被困在某台远处桌子上的计算机上?
“你的计算机”这个概念正在消失,取而代之的是“你的数据”。你应该能够从任何计算机访问你的数据。或者更确切地说,任何客户端,而客户端不一定是计算机。
客户端不应该存储数据;它们应该像电话一样。实际上,它们可能会变成电话,反之亦然。随着客户端变得更小,你还有另一个理由不把数据存储在它们上:你随身携带的东西可能会丢失或被盗。把你的PDA落在出租车里就像磁盘崩溃,除了你的数据被别人拿走,而不是被消灭。
使用纯粹的基于Web的软件,你的数据和应用程序都不会保存在客户端上。因此,你不需要安装任何东西来使用它。当没有安装时,你不必担心安装出错。因为软件不在你的操作系统上运行,所以不可能存在应用程序和你的操作系统之间的不兼容性。
因为它不需要安装,所以在“购买”之前尝试基于Web的软件将变得简单而普遍。你应该期望能够通过访问提供该软件的网站免费试用任何基于Web的应用程序。在Viaweb,我们整个网站就像一个大箭头,指向用户进行试驾。
在尝试演示后,注册服务只需填写一份简短的表格(越简短越好)。这应该是用户需要做的最后一件事。使用基于Web的软件,你应该能够在不支付额外费用、或不做任何工作,甚至可能不知道的情况下获得新版本。
升级不会像现在这样带来巨大的冲击。随着时间的推移,应用程序将悄然变得更强大。这需要开发人员付出一些努力。他们必须设计软件,以便可以在不混淆用户的情况下进行更新。这是一个新问题,但有解决方法。
使用基于Web的应用程序,每个人使用相同的版本,错误可以在发现后立即修复。因此,基于Web的软件应该比桌面软件有更少的错误。在Viaweb,我怀疑我们曾经在任何时候有十个已知的错误。这比桌面软件好几个数量级。
基于Web的应用程序可以被多个人同时使用。这对协作应用程序来说是一个显而易见的胜利,但我敢打赌,一旦用户意识到这是可能的,他们会开始希望在大多数应用程序中实现这一点。例如,让两个人编辑同一个文档通常是有用的。Viaweb允许多个用户同时编辑一个网站,这更多是因为这是编写软件的正确方式,而不是因为我们预期用户会想这样做,但结果证明许多人确实想这样做。
当你使用基于Web的应用程序时,你的数据将更安全。磁盘崩溃不会成为过去,但用户将不再听到它们。它们将在服务器农场内发生。而提供基于Web应用程序的公司实际上会进行备份——不仅因为他们会有真正的系统管理员担心这些事情,还因为一个丢失用户数据的ASP将面临巨大的麻烦。当人们在磁盘崩溃中丢失自己的数据时,他们不会太生气,因为他们只能对自己生气。当一家公司为他们丢失数据时,他们会更加生气。
最后,基于Web的软件应该对病毒的攻击更不易受害。如果客户端除了浏览器之外不运行任何东西,那么运行病毒的机会就更小,并且没有本地数据可以损坏。而攻击服务器本身的程序应该会发现它们得到了很好的防御。[2]
对于用户来说,基于Web的软件将是更少压力的。我认为如果你看看普通Windows用户的内心,你会发现他们对满足这种描述的软件有着巨大的、几乎未被开发的渴望。一旦释放,这可能成为一种强大的力量。
代码之城
对于开发人员来说,基于Web的软件和桌面软件之间最显著的区别在于,基于Web的应用程序不是一块单一的代码。它将是不同类型程序的集合,而不是一个大的二进制文件。因此,设计基于Web的软件就像设计一个城市,而不是一栋建筑:除了建筑物,你还需要道路、路标、公用设施、警察和消防部门,以及对增长和各种灾难的规划。
在Viaweb,软件包括用户直接交互的相当大的应用程序、这些程序使用的程序、在后台不断运行以寻找问题的程序、在出现故障时尝试重启的程序、偶尔运行以编译统计数据或构建搜索索引的程序、我们明确运行以垃圾回收资源或移动或恢复数据的程序、假装是用户的程序(以测量性能或暴露错误)、用于诊断网络故障的程序、用于备份的程序、与外部服务的接口、驱动显示实时服务器统计信息的令人印象深刻的仪表盘的软件(对访客来说很受欢迎,但对我们来说也不可或缺)、对开源软件的修改(包括错误修复)以及大量的配置文件和设置。特雷弗·布莱克威尔为将商店迁移到全国各地的新服务器编写了一款出色的程序,而无需关闭它们,在我们被雅虎收购后。程序向我们发送页面,向用户发送传真和电子邮件,与信用卡处理器进行交易,并通过套接字、管道、http请求、ssh、udp数据包、共享内存和文件相互通信。Viaweb的一些部分甚至是程序的缺失,因为Unix安全的一个关键是不要运行可能被人用来入侵你的服务器的不必要的实用程序。
这并不仅仅是软件的问题。我们花了很多时间考虑服务器配置。我们自己从组件中构建服务器——部分是为了节省资金,部分是为了获得我们想要的东西。我们必须考虑我们的上游ISP是否与所有骨干网有足够快的连接。我们逐一约会RAID供应商。
但硬件不仅仅是一个需要担心的事情。当你控制它时,你可以为用户做更多的事情。使用桌面应用程序,你可以指定某些最低硬件要求,但你不能添加更多。如果你管理服务器,你可以一步到位地使所有用户能够发送页面、发送传真、通过电话发送命令或处理信用卡等,只需安装相关硬件。我们总是寻找通过硬件添加功能的新方法,不仅因为这让用户满意,还因为这是我们与竞争对手(无论是因为他们销售桌面软件,还是通过ISP转售基于Web的应用程序)区分开来的方式,他们没有直接控制硬件。
由于基于Web的应用程序中的软件将是程序的集合,而不是单一的二进制文件,因此可以用多种不同的语言编写。当你编写桌面软件时,你几乎被迫使用与底层操作系统相同的语言来编写应用程序——这意味着C和C++。因此,这些语言(尤其是在像经理和风险投资家这样的非技术人员中)被视为“严肃”软件开发的语言。但这只是桌面软件交付方式的一个产物。对于基于服务器的软件,你可以使用任何你想要的语言。[3] 现在,许多顶尖黑客正在使用与C和C++相去甚远的语言:Perl、Python,甚至Lisp。
使用基于服务器的软件,没有人可以告诉你使用什么语言,因为你控制整个系统,甚至包括硬件。不同的语言适合不同的任务。你可以为每个任务使用最合适的语言。当你有竞争对手时,“你可以”意味着“你必须”(我们稍后会回到这一点),因为如果你不利用这个可能性,你的竞争对手就会。
我们大多数竞争对手使用C和C++,这使他们的软件明显劣于我们,因为(除了其他原因)他们无法绕过CGI脚本的无状态性。如果你要更改某些内容,所有更改都必须在一个页面上进行,并在底部有一个更新按钮。正如我在其他地方所写的,通过使用Lisp,许多人仍然认为这是一种研究语言,我们能够使Viaweb编辑器的行为更像桌面软件。
发布
在这个新世界中,最重要的变化之一是发布的方式。在桌面软件行业,发布是一个巨大的创伤,整个公司都在为推出一块巨大的代码而紧张和努力。显而易见的比较使人联想到这个过程和最终产品。
使用基于服务器的软件,你可以几乎像为自己编写程序一样进行更改。你以一系列增量更改的形式发布软件,而不是偶尔的大爆炸。一个典型的桌面软件公司可能每年发布一到两个版本。在Viaweb,我们经常每天发布三到五个版本。
当你切换到这个新模型时,你会意识到软件开发在很大程度上受到发布方式的影响。你在桌面软件行业看到的许多最棘手的问题都是由于发布的灾难性性质造成的。
当你每年只发布一个新版本时,你往往会批量处理错误。在发布日期之前的一段时间,你会组装一个新版本,其中一半的代码被撕掉并替换,导致无数错误。然后,一组质量保证(QA)人员介入并开始计算这些错误,程序员逐一修复它们。他们通常无法到达列表的末尾,实际上,没有人确定末尾在哪里。这就像从池塘里钓鱼碎石。你永远无法真正知道软件内部发生了什么。充其量,你最终得到的是一种统计上的正确性。
使用基于服务器的软件,大多数更改都是小而增量的。这本身就不太可能引入错误。这也意味着你知道在即将发布软件时最需要仔细测试的内容:你最后更改的内容。你对代码的掌控会更加牢固。一般来说,你知道内部发生了什么。当然,你不会记住源代码,但当你阅读源代码时,你就像飞行员扫描仪表盘,而不是侦探试图解开某个谜团。
桌面软件滋生了一种对错误的宿命论。你知道你正在发布的东西充满了错误,你甚至设立了补偿机制(例如补丁发布)。那么,为什么要担心更多的错误呢?很快你就会发布你知道是坏的整个功能。苹果在今年早些时候就这样做了。他们感到压力,必须发布他们的新操作系统,发布日期已经推迟了四次,但某些软件(对CD和DVD的支持)尚未准备好。解决方案?他们发布了没有未完成部分的操作系统,用户将不得不稍后安装它们。
使用基于Web的软件,你永远不必在软件工作之前发布它,并且可以在它工作时立即发布。
行业老手可能会想,声称你永远不必在软件工作之前发布是个好听的想法,但当你承诺在某个日期交付新版本时会发生什么?使用基于Web的软件,你不会做这样的承诺,因为没有版本。你的软件逐渐和持续地变化。有些变化可能比其他变化大,但版本的概念并不自然地适用于基于Web的软件。
如果有人记得Viaweb,这可能听起来奇怪,因为我们总是宣布新版本。这完全是出于公关目的。我们了解到,贸易媒体以版本号为思维方式。他们会对主要发布进行重大报道,这意味着版本号的首位数字发生变化,而对于小版本发布,通常最多只会有一段文字。
我们的一些竞争对手提供桌面软件,实际上有版本号。对于这些发布,单单这一事实在我们看来似乎证明了他们的落后,他们会获得各种各样的宣传。我们不想错过,因此我们也开始给我们的软件分配版本号。当我们想要一些宣传时,我们会列出自上次“发布”以来添加的所有功能,给软件贴上一个新版本号,并发布新闻稿,称新版本立即可用。令人惊讶的是,没有人对此提出质疑。
在我们被收购时,我们已经这样做了三次,所以我们处于版本4。如果我没记错的话,是版本4.1。在Viaweb成为Yahoo Store之后,宣传的迫切需求不再如此,因此尽管软件继续发展,但版本号的整个概念被悄然放弃。
错误
基于Web软件的另一个主要技术优势是你可以重现大多数错误。你有用户的数据就在你的磁盘上。如果有人破坏了你的软件,你不必像桌面软件那样猜测发生了什么:你应该能够在他们和你通话时重现错误。如果你在应用程序中内置了错误检测代码,你甚至可能已经知道它。
基于Web的软件全天候使用,因此你所做的一切都会立即受到检验。错误很快就会出现。
软件公司有时被指责让用户调试他们的软件。而这正是我所倡导的。对于基于Web的软件,这实际上是一个好计划,因为错误更少且是短暂的。当你逐渐发布软件时,起初你会遇到的错误会少得多。而当你能够重现错误并立即发布更改时,你可以在错误出现后尽快找到并修复大多数错误。我们从未在任何时候有足够的错误需要处理一个正式的错误跟踪系统。
当然,你应该在发布更改之前进行测试,因此不应发布任何重大错误。那些不可避免地漏掉的错误将涉及边缘情况,并且只会影响在有人打电话投诉之前遇到它们的少数用户。只要你立即修复错误,平均用户的净效果就是错误会少得多。我怀疑普通的Viaweb用户曾经见过错误。
修复新错误比修复旧错误要容易。通常,找到你刚写的代码中的错误是相对快速的。当它出现时,你通常在查看源代码之前就知道出了什么问题,因为你已经在潜意识中担心它。修复你六个月前写的代码中的错误(如果你每年发布一次,这是平均情况)要费力得多。而且由于你对代码的理解不够,你更有可能以一种丑陋的方式修复它,甚至引入更多的错误。[4]
当你早期捕捉到错误时,你也会得到更少的复合错误。复合错误是两个独立的错误相互作用:你下楼时绊倒了,当你伸手去抓扶手时,它却在你手中掉落。在软件中,这种错误是最难找到的,并且往往会产生最糟糕的后果。[5] 传统的“破坏一切然后过滤错误”的方法本质上会产生大量复合错误。而以一系列小更改发布的软件本质上不会这样。地板上不断被清扫干净,清除任何可能稍后卡在某个东西里的松散物体。
如果你使用一种称为函数式编程的技术,这会有所帮助。函数式编程意味着避免副作用。这在商业软件中比在研究论文中更常见,但对于基于Web的应用程序来说,这被证明是非常有用的。将整个程序编写为纯函数式代码是困难的,但你可以以这种方式编写相当大的一部分。这使得软件的这些部分更容易测试,因为它们没有状态,这在你不断进行小修改和测试的情况下非常方便。我以这种风格编写了Viaweb编辑器的大部分代码,并且我们将我们的脚本语言RTML设计为一种纯函数式语言。
来自桌面软件行业的人可能会很难相信,但在Viaweb,错误几乎变成了一种游戏。由于大多数发布的错误涉及边缘情况,遇到它们的用户往往是高级用户,推动着极限。高级用户对错误更宽容,尤其是因为你可能是在添加他们要求的某些功能的过程中引入了这些错误。实际上,由于错误很少,而且你必须做一些复杂的事情才能看到它们,高级用户往往会为捕捉到一个错误而感到自豪。他们会以一种胜利而非愤怒的精神拨打支持电话,就好像他们从我们这里得到了分数。
支持
当你能够重现错误时,这会改变你对客户支持的看法。在大多数软件公司中,支持被视为让客户感觉更好的方式。他们要么在打电话询问已知的错误,要么只是做错了什么,你必须弄清楚是什么。在这两种情况下,你都无法从他们那里学到太多。因此,你往往将支持电话视为一种麻烦,尽可能地将其与开发人员隔离。
在Viaweb,情况并非如此。在Viaweb,支持是免费的,因为我们希望听到客户的声音。如果有人遇到问题,我们希望立即知道,以便我们能够重现错误并发布修复。
因此,在Viaweb,开发人员始终与支持保持密切联系。客户支持人员与程序员之间的距离大约是三十英尺,他们知道只要报告真正的错误,就可以随时打断任何事情。我们会在董事会会议上离开,以修复严重的错误。
我们对支持的处理使每个人都更快乐。客户感到高兴。想象一下,拨打支持热线时被视为带来重要消息的人会是什么感觉。客户支持人员喜欢这样,因为这意味着他们可以帮助用户,而不是对他们念脚本。程序员也喜欢这样,因为他们可以重现错误,而不仅仅是听到模糊的二手报告。
我们在现场修复错误的政策改变了客户支持人员和黑客之间的关系。在大多数软件公司中,支持人员是薪水低的“人肉盾牌”,而黑客则是小型的上帝父亲,世界的创造者。无论报告错误的程序是什么,它都可能是单向的:听到错误的支持人员填写某种表格,最终传递给程序员,程序员将其列入待办事项清单。在Viaweb,这种情况截然不同。在听到客户报告错误后的一分钟内,支持人员可以站在程序员旁边,听到他喊“该死,你说得对,这是个错误。”听到黑客说“你说得对”让支持人员感到高兴。他们曾经像猫带着刚刚捕到的老鼠一样,期待地把错误带给我们。这也使他们在判断错误的严重性时更加小心,因为现在他们的荣誉也在其中。
在我们被雅虎收购后,客户支持人员被远远移开了程序员。直到那时我们才意识到,他们实际上是质量保证(QA)人员,在某种程度上也是市场营销人员。除了捕捉错误,他们还是模糊的、类似错误的事物的知识守护者,比如让用户困惑的功能。[6] 他们也是一种代理焦点小组;我们可以问他们用户更想要哪两个新功能,他们总是正确的。
士气
能够立即发布软件是一个巨大的动力。每当我走路上班时,我都会想到想要对软件进行的某些更改,并在当天完成。这对更大的功能也适用。即使某些东西需要两周才能编写(很少有项目需要更长时间),我知道一完成就可以在软件中看到效果。
如果我必须等一年才能发布下一个版本,我可能会将大多数这些想法搁置一段时间。然而,想法的特点是,它们会引发更多的想法。你是否注意到,当你坐下来写东西时,最终出现在其中的一半想法是在写作过程中想到的?软件也是如此。实现一个想法的工作会给你带来更多的想法。因此,搁置一个想法不仅会让你在实施它时延迟,还会失去实施它所引发的所有想法。实际上,搁置一个想法甚至可能抑制新的想法:当你开始考虑某个新功能时,你会看到搁置的想法,想“但我已经有很多新东西想在下一个版本中做了。”
大公司所做的事情是计划功能。在Viaweb,我们有时在这方面遇到麻烦。投资者和分析师会问我们对未来的计划。真实的答案是,我们没有任何计划。我们对想要改进的事情有一般的想法,但如果我们知道怎么做,我们早就做到了。我们在接下来的六个月里要做什么?无论看起来是最大的胜利。 我不知道我是否敢给出这个答案,但这就是事实。计划只是搁置想法的另一种说法。当我们想到好的想法时,我们就会实施它们。
在Viaweb,像许多软件公司一样,大多数代码都有一个明确的所有者。但当你真正拥有某样东西时,你就真正拥有它:除了软件的所有者,没有人需要批准(甚至知道)发布。没有保护措施来防止破坏,除了对同事看起来像个傻瓜的恐惧,而这已经足够了。我可能给人留下了我们只是无忧无虑地编写代码的印象。我们确实走得很快,但在将软件发布到那些服务器之前,我们会非常仔细地考虑。而关注比缓慢移动更重要,因为他密切关注,一名海军飞行员可以在夜间以每小时140英里的速度在摇晃的航母甲板上安全降落一架40,000磅的飞机,而普通青少年切割贝果的安全性则不如他。
这种编写软件的方式当然是双刃剑。对于一小组优秀、值得信赖的程序员来说,它的效果要比对于一大群平庸的程序员要好得多,因为坏主意会被委员会而不是提出这些主意的人所捕捉。
布鲁克斯的反转
幸运的是,基于Web的软件确实需要更少的程序员。我曾在一家中型桌面软件公司工作,该公司在整个工程部门有超过100人。只有13人从事产品开发。其余的都在处理发布、移植等。使用基于Web的软件,你最多只需要这13个人,因为没有发布、移植等。
Viaweb是由仅仅三个人编写的。[7] 我一直面临着招聘更多人的压力,因为我们想被收购,我们知道买家很难为只有三名程序员的公司支付高价。(解决方案:我们招聘了更多人,但为他们创建了新项目。)
当你可以用更少的程序员编写软件时,这不仅仅是节省金钱。正如弗雷德·布鲁克斯在《神话般的人月》中指出的那样,向项目中添加人员往往会减慢进度。开发人员之间的可能连接数量随着团队规模的增长而呈指数级增长。团队越大,他们在会议上花费的时间就越多,以协商他们的软件如何协同工作,来自意想不到的交互的错误也会越多。幸运的是,这个过程也可以反向进行:随着团队规模的缩小,软件开发的效率呈指数级提高。我不记得Viaweb的程序员曾经召开过实际的会议。我们从未在任何时候有比在走去吃午餐时能说的更多的话。
如果这里有一个缺点,那就是所有程序员在某种程度上也必须是系统管理员。当你托管软件时,必须有人监控服务器,而实际上,只有编写软件的人才能正确地做到这一点。在Viaweb,我们的系统有如此多的组件并且变化如此频繁,以至于软件和基础设施之间没有明确的界限。任意声明这样的边界会限制我们的设计选择。因此,尽管我们不断希望有一天(“几个月内”)一切会稳定到我们可以雇佣一个专门负责服务器的人,但这从未发生。
我认为只要你仍在积极开发产品,就不可能有其他方式。基于Web的软件永远不会是你编写、提交然后回家的东西。它是一个活生生的东西,正在你的服务器上运行。一个坏的错误可能不仅会崩溃一个用户的进程;它可能会崩溃所有用户。如果你代码中的错误损坏了磁盘上的某些数据,你必须修复它。等等。我们发现,你不必每分钟都监控服务器(在头一年左右之后),但你确实希望关注最近更改的内容。你不会在深夜发布代码然后回家。
观察用户
使用基于服务器的软件,你与代码的联系更紧密。你也可以与用户的联系更紧密。Intuit因在零售店向客户自我介绍并请求跟随他们回家而闻名。如果你曾经看过某人第一次使用你的软件,你就会知道他们面临的惊喜。
软件应该做用户认为它会做的事情。但相信我,你无法知道用户会在想什么,直到你观察他们。而基于Web的软件为你提供了前所未有的关于他们行为的信息。你不再局限于小型、人工的焦点小组。你可以看到每个用户的每一次点击。你必须仔细考虑你要查看的内容,因为你不想侵犯用户的隐私,但即使是最一般的统计抽样也可以非常有用。
当用户在你的服务器上时,你不必依赖基准测试。例如,基准测试是模拟用户。使用基于Web的软件,你可以观察实际用户。要决定优化什么,只需登录服务器,查看哪些内容消耗了所有CPU。你也知道何时停止优化:我们最终将Viaweb编辑器优化到内存受限而不是CPU受限的程度,由于我们无法减少用户数据的大小(好吧,没有简单的方法),我们知道可以停止了。
效率对基于Web的软件很重要,因为你在为硬件付费。每台服务器可以支持的用户数量是你资本成本的除数,因此如果你能使软件非常高效,你就可以以低于竞争对手的价格出售产品,同时仍然获利。在Viaweb,我们将每个用户的资本成本降低到大约5美元。现在可能更低,可能低于向他们发送第一个月账单的成本。如果你的软件合理高效,硬件现在是免费的。
观察用户可以指导你的设计以及优化。Viaweb有一种名为RTML的脚本语言,让高级用户定义自己的页面样式。我们发现RTML成为了一种建议箱,因为用户只有在预定义的页面样式无法满足他们的需求时才会使用它。例如,最初编辑器将按钮栏放在页面上,但在许多用户使用RTML将按钮放在左侧边后,我们将其作为预定义页面样式中的一个选项(实际上是默认选项)。
最后,通过观察用户,你通常可以判断他们何时遇到问题。由于客户永远是对的,这表明你需要修复某些东西。在Viaweb,获取用户的关键是在线试驾。这不仅仅是一系列由市场营销人员制作的幻灯片。在我们的试驾中,用户实际上使用了软件。它大约需要五分钟,最后他们建立了一个真实的、可工作的商店。
试驾是我们获得几乎所有新用户的方式。我认为对于大多数基于Web的应用程序也是如此。如果用户能够成功完成试驾,他们会喜欢这个产品。如果他们感到困惑或无聊,他们就不会。因此,我们可以做的任何事情来让更多人通过试驾将提高我们的增长率。
我研究了进行试驾的人们的点击轨迹,发现他们在某个步骤会感到困惑并点击浏览器的后退按钮。(如果你尝试编写基于网络的应用程序,你会发现后退按钮成为你最有趣的哲学问题之一。)因此,我在那个时候添加了一条消息,告诉用户他们快完成了,并提醒他们不要点击后退按钮。基于网络的软件的另一个好处是,你可以立即从更改中获得反馈:完成试驾的人数立即从60%上升到90%。而且,由于新用户的数量是完成试驾数量的函数,我们的收入增长仅凭这一变化就增加了50%。
钱
在1990年代初,我读到一篇文章,其中有人说软件是一种订阅业务。起初,这似乎是一个非常愤世嫉俗的说法。但后来我意识到这反映了现实:软件开发是一个持续的过程。我认为如果你公开收取订阅费用,而不是强迫人们不断购买和安装新版本以便继续支付你,这样会更清晰。幸运的是,订阅是为基于网络的应用程序收费的自然方式。
托管应用程序是一个公司将扮演的角色,这个角色不太可能被免费软件填补。托管应用程序压力很大,并且有真实的开销。没有人会想要免费做这件事。
对于公司来说,基于网络的应用程序是理想的收入来源。你不再需要每个季度从零开始,而是拥有一个经常性收入流。因为你的软件逐渐演变,你不必担心新模型会失败;实际上,根本不需要一个新模型,如果你对软件做了用户讨厌的事情,你会立刻知道。你不会遇到无法收回的账单;如果有人不愿意支付,你可以直接关闭服务。而且没有盗版的可能性。
最后一个“优势”可能会变成一个问题。某种程度的盗版对软件公司是有利的。如果某个用户真的不会以任何价格购买你的软件,那么如果他使用盗版副本,你也没有损失。实际上,你是得到了,因为他是一个更多的用户,帮助使你的软件成为标准——或者他可能在高中毕业后购买一份。
当他们可以时,公司喜欢做一种叫做价格歧视的事情,这意味着向每个客户收取他们能承受的费用。软件特别适合价格歧视,因为边际成本接近于零。这就是为什么某些软件在Suns上运行的成本比在Intel机器上高:使用Suns的公司并不关心节省开支,可以安全地收取更高的费用。盗版实际上是价格歧视的最低层次。我认为软件公司理解这一点,并故意对某些类型的盗版视而不见。对于基于服务器的软件,他们将不得不想出其他解决方案。
基于网络的软件销售良好,尤其是与桌面软件相比,因为它很容易购买。你可能认为人们决定购买某样东西,然后购买它是两个独立的步骤。这是我在Viaweb之前的想法,甚至在我考虑这个问题时。实际上,第二步可以回溯到第一步:如果某样东西很难购买,人们会改变他们是否想要它的想法。反之亦然:当某样东西容易购买时,你会卖出更多。我因为亚马逊的存在而购买更多书籍。基于网络的软件几乎是世界上最容易购买的东西,尤其是如果你刚刚进行了在线演示。用户不应该做太多,只需输入信用卡号码。(让他们做更多的事情是有风险的。)
有时,基于网络的软件通过作为转售商的ISP提供。这是个坏主意。你必须管理服务器,因为你需要不断改进硬件和软件。如果你放弃对服务器的直接控制,你就放弃了开发基于网络的应用程序的大部分优势。
我们的一些竞争对手就是这样自毁前程——通常,我认为,这是因为他们被对这个巨大潜在渠道感到兴奋的西装包围,而没有意识到这会毁掉他们希望通过它销售的产品。通过ISP销售基于网络的软件就像通过自动售货机销售寿司。
客户
客户会是谁?在Viaweb,他们最初是个人和小公司,我认为这将是基于网络的应用程序的规则。这些用户准备尝试新事物,部分原因是他们更灵活,部分原因是他们想要新技术的低成本。
基于网络的应用程序通常对大公司也是最好的选择(尽管他们会慢慢意识到这一点)。最好的内联网就是互联网。如果一家公司使用真正的基于网络的应用程序,软件将更好地工作,服务器将得到更好的管理,员工将可以从任何地方访问系统。
反对这种方法的论点通常集中在安全性上:如果员工的访问更容易,坏人也会更容易。有些大型商家不愿意使用Viaweb,因为他们认为客户的信用卡信息在他们自己的服务器上会更安全。很难以外交的方式阐明这一点,但实际上,数据几乎肯定在我们手中比在他们手中更安全。谁能雇到更好的人来管理安全,技术初创公司其整个业务是运行服务器,还是一家服装零售商?我们不仅有更好的人来担心安全问题,我们还更担心。如果有人闯入服装零售商的服务器,最多会影响一个商家,可能会被掩盖,最坏的情况下可能会让一个人被解雇。如果有人闯入我们的服务器,可能会影响成千上万的商家,可能会在CNet上成为新闻,并可能使我们破产。
如果你想保护你的钱,是把它放在家里的床垫下,还是放在银行里?这个论点适用于服务器管理的各个方面:不仅仅是安全性,还有正常运行时间、带宽、负载管理、备份等。我们的生存依赖于正确地做这些事情。服务器问题对我们来说是大忌,就像对玩具制造商来说危险的玩具,或对食品加工商来说是沙门氏菌爆发。
使用基于网络的应用程序的大公司在某种程度上是在外包IT。听起来很激进,但我认为这通常是个好主意。通过这种方式,公司可能会获得比内部系统管理员更好的服务。系统管理员可能会变得脾气暴躁和不响应,因为他们没有直接面临竞争压力:销售人员必须与客户打交道,开发人员必须与竞争对手的软件打交道,但系统管理员就像一个老光棍,几乎没有外部力量来约束他。在Viaweb,我们有很多外部力量来约束我们。给我们打电话的人是客户,而不仅仅是同事。如果服务器出现问题,我们会立刻反应;仅仅想到这一点,几年后仍然让我感到一阵肾上腺素激增。
因此,基于网络的应用程序通常也是大公司的正确答案。然而,他们将是最后意识到这一点的,就像他们对桌面计算机的反应一样。部分原因也是因为:说服大公司需要更昂贵的东西将会是非常有价值的。
富有的客户总是倾向于购买昂贵的解决方案,即使便宜的解决方案更好,因为提供昂贵解决方案的人可以花更多的钱来销售它们。在Viaweb,我们总是面临这个问题。我们失去了几家高端商家给那些说服他们支付50万美元在自己的服务器上定制在线商店的网络咨询公司。通常,他们并没有更好,正如多个商家在圣诞购物季节到来时发现的那样,服务器的负载上升。Viaweb比这些商家得到的要复杂得多,但我们无法负担告诉他们。在每月300美元的情况下,我们无法负担派一支穿着得体、听起来权威的团队去向客户做演示。
大公司额外支付的很大一部分是向他们销售昂贵商品的成本。(如果国防部为马桶座支付一千美元,那部分原因是销售马桶座的成本很高。)这也是内联网软件将继续繁荣的原因之一,尽管这可能是个坏主意。它就是更贵。你对此困境无能为力,因此最好的计划是先争取小客户。其余的客户会随着时间的推移而来。
服务器之子
在服务器上运行软件并不是什么新鲜事。实际上,这是一种旧模式:大型机应用程序都是基于服务器的。如果基于服务器的软件是个好主意,为什么上次会失败?为什么桌面计算机会超越大型机?
起初,桌面计算机看起来并不是一个威胁。最初的用户都是黑客——或者说是当时的爱好者。他们喜欢微型计算机,因为它们便宜。第一次,你可以拥有自己的计算机。“个人计算机”这个词现在已经成为语言的一部分,但当它首次使用时,它听起来是故意大胆的,就像今天的“个人卫星”这个词一样。
为什么桌面计算机会占据主导地位?我认为这是因为它们有更好的软件。而我认为微型计算机软件更好的原因是它可以由小公司编写。
我认为很多人没有意识到初创公司在最早阶段是多么脆弱和不确定。许多初创公司几乎是偶然开始的——几个人,或者有日常工作或在学校,编写一个可能在看起来有希望时转变为公司的原型。在这个幼虫阶段,任何重大障碍都会让初创公司停滞不前。编写大型机软件需要过多的前期承诺。开发机器很贵,而且因为客户将是大公司,你需要一个看起来令人印象深刻的销售团队来向他们销售。创建一个初创公司来编写大型机软件将比在晚上用你的Apple II拼凑一些东西要严肃得多。因此,你不会看到很多初创公司编写大型机应用程序。
桌面计算机的到来激发了许多新软件,因为为它们编写应用程序似乎是初创公司可以实现的目标。开发成本低,客户将是你可以通过计算机商店甚至邮购接触到的个人。
推动桌面计算机进入主流的应用程序是VisiCalc,第一个电子表格。它是由两个在阁楼里工作的人编写的,然而做的事情是任何大型机软件都无法做到的。VisiCalc在当时是如此的进步,以至于人们购买Apple II只是为了运行它。这是一个趋势的开始:桌面计算机获胜是因为初创公司为它们编写了软件。
看起来这次基于服务器的软件会很好,因为初创公司会为它编写。现在计算机如此便宜,以至于你可以像我们一样,使用桌面计算机作为服务器。廉价的处理器已经吞噬了工作站市场(你现在几乎听不到这个词),并且在服务器市场也走到了大部分;Yahoo的服务器处理的负载与互联网上的任何负载一样高,全部都配备了与桌面机器相同的廉价Intel处理器。一旦你编写了软件,你所需要的只是一个网站来销售它。几乎所有我们的用户都是通过口碑和媒体报道直接来到我们的网站的。
Viaweb是一个典型的幼虫初创公司。我们对创建公司感到恐惧,在最初的几个月里,通过把整个事情当作一个我们随时可以取消的实验来安慰自己。幸运的是,除了技术障碍外,几乎没有其他障碍。在我们编写软件的同时,我们的Web服务器是我们用于开发的同一台桌面机器,通过拨号线路连接到外部世界。在那个阶段,我们唯一的开销是食物和房租。
现在初创公司更有理由编写基于网络的软件,因为编写桌面软件变得不那么有趣。如果你现在想编写桌面软件,你必须按照微软的要求来做,调用他们的API并绕过他们的错误操作系统。如果你设法编写出某种成功的东西,你可能会发现你只是为微软做市场调研。
如果一家公司想要创建一个初创公司将建立的平台,他们必须使其成为黑客自己想要使用的东西。这意味着它必须便宜且设计良好。Mac在首次推出时受到黑客的欢迎,很多人为其编写了软件。你在Windows上看到的情况较少,因为黑客不使用它。擅长编写软件的人现在往往在运行Linux或FreeBSD。
我认为我们不会创建一个初创公司来编写桌面软件,因为桌面软件必须在Windows上运行,而在我们能够为Windows编写软件之前,我们必须使用它。网络让我们能够绕过Windows,直接通过浏览器向用户提供在Unix上运行的软件。这是一个解放的前景,类似于二十五年前个人计算机的到来。
微软
在桌面计算机到来时,IBM是每个人都害怕的巨头。现在很难想象,但我非常清楚那种感觉。现在令人恐惧的巨头是微软,我认为他们并不像IBM那样对面临的威胁视而不见。毕竟,微软故意在IBM的盲点中建立了他们的业务。
我之前提到过,我母亲实际上并不需要一台桌面计算机。大多数用户可能也不需要。这对微软来说是个问题,他们知道这一点。如果应用程序在远程服务器上运行,没人需要Windows。微软会怎么做?他们能否利用对桌面的控制来阻止或限制这一新一代软件?
我猜微软会开发某种服务器/桌面混合体,操作系统与他们控制的服务器协同工作。至少,文件将对希望这样做的用户集中可用。我不期望微软完全走到极端,只用浏览器作为客户端来进行计算,如果他们可以避免的话。如果你只需要一个浏览器作为客户端,你就不需要微软在客户端上,如果微软不控制客户端,他们就无法推动用户使用他们的基于服务器的应用程序。
我认为微软将很难将魔鬼留在瓶子里。将有太多不同类型的客户端,他们无法全部控制。如果微软的应用程序只与某些客户端兼容,竞争对手将能够通过提供可以从任何客户端工作的应用程序来超越他们。
在基于网络的应用程序的世界中,微软没有自动的位置。他们可能会成功地为自己创造一个位置,但我认为他们不会像在桌面应用程序的世界中那样主导这个新世界。
并不是说竞争对手会绊倒他们,而是他们会自我绊倒。随着基于网络的软件的兴起,他们将面临的不仅仅是技术问题,还有他们自己的美好愿望。他们需要做的是自我吞噬现有的业务,而我看不出他们会面对这一点。推动他们走到今天的那种单一心态现在将对他们不利。IBM正处于完全相同的境地,他们无法掌控。IBM在微型计算机业务中迟到且半心半意的进入,因为他们对威胁他们的摇钱树——大型机计算感到矛盾。微软同样会因为想要拯救桌面而受到阻碍。摇钱树可能是你背上沉重的猴子。
我并不是说没有人会主导基于服务器的应用程序。最终可能会有人。但我认为会有一个相当长的愉快混乱的时期,就像微型计算机的早期一样。那是初创公司的好时光。许多小公司蓬勃发展,并通过制作酷炫的东西来实现。
初创公司,但更甚
经典的初创公司快速且非正式,人员少且资金少。这些人工作非常努力,技术放大了他们所做决策的效果。如果他们成功,他们就会大获成功。
在编写基于网络应用程序的初创公司中,你与初创公司相关的一切都被推向了极端。你可以用更少的人和更少的钱编写和推出产品。你必须更快,且可以更随意。你可以字面上在三个人坐在公寓的客厅里,和一个在ISP的服务器上推出你的产品。我们就是这样做的。
随着时间的推移,团队变得更小、更快和更非正式。在1960年,软件开发意味着一屋子戴着角框眼镜和窄黑领带的男人,勤奋地在IBM编码表上写十行代码。在1980年,团队由八到十个人组成,穿着牛仔裤在办公室里,使用vt100进行输入。现在是几个人坐在客厅里用笔记本电脑工作。(而且牛仔裤并不是非正式的最后一字。)
初创公司是有压力的,不幸的是,这在基于网络的应用程序中也被推向了极端。许多软件公司,尤其是在开始时,有开发人员在桌子下睡觉的时期。基于网络软件的令人担忧之处在于,没有什么可以阻止这种情况成为默认状态。关于在桌子下睡觉的故事通常以这样的结尾:然后我们终于发货了,我们都回家睡了一周。基于网络的软件从未发货。你可以工作16小时,想工作多久就工作多久。因为你可以,而你的竞争对手也可以,你往往被迫这样做。你可以,所以你必须。这是帕金森法则的反向运行。
最糟糕的不是工作时间,而是责任。程序员和系统管理员传统上各自有各自的担忧。程序员必须担心错误,而系统管理员必须担心基础设施。程序员可能会花一整天埋头于源代码,但在某个时刻,他们可以回家并忘记它。系统管理员从未完全离开工作,但当他们在凌晨4点被呼叫时,他们通常不需要做任何复杂的事情。对于基于网络的应用程序,这两种压力结合在一起。程序员变成了系统管理员,但没有通常使工作可承受的明确界限。
在Viaweb,我们花了前六个月只编写软件。我们工作了初创公司通常的长时间。在一家桌面软件公司,这本该是我们努力工作的部分,但与接下来将用户引入我们的服务器的阶段相比,这感觉像是度假。将Viaweb出售给Yahoo的第二大好处(在金钱之后)是能够将整个事情的最终责任转移到一家大公司的肩上。
桌面软件迫使用户成为系统管理员。基于网络的软件迫使程序员成为系统管理员。总体压力较小,但程序员的压力更大。这不一定是坏消息。如果你是一家与大公司竞争的初创公司,这就是好消息。基于网络的应用程序提供了一种直接超越竞争对手的方式。没有初创公司要求更多。
刚好足够好
可能会阻止你编写基于网络应用程序的一件事是网页作为用户界面的无能。我承认这是个问题。我们确实有几件事情非常想添加到HTML和HTTP中。然而,重要的是,网页刚好足够好。
这里与第一批微型计算机有一个平行。那些机器中的处理器实际上并不是为了成为计算机的CPU而设计的。它们是为了用于交通信号灯等东西而设计的。但是像Ed Roberts这样的家伙,设计了Altair,意识到它们刚好足够好。你可以将其中一个芯片与一些内存(第一台Altair中为256字节)和前面板开关结合在一起,你就会有一台工作计算机。能够拥有自己的计算机是如此令人兴奋,以至于有很多人想要购买它们,尽管功能有限。
网页并不是为了成为应用程序的用户界面而设计的,但它们刚好足够好。对于相当数量的用户来说,能够从任何浏览器使用的软件本身就是一个足够的胜利,足以抵消用户界面中的任何尴尬。也许你无法使用HTML编写出最好看的电子表格,但你可以编写一个多个用户可以同时从不同位置使用的电子表格,而无需特殊的客户端软件,或者可以集成实时数据源,或者在某些条件被触发时可以提醒你。更重要的是,你可以编写新的应用程序类型,甚至还没有名称。毕竟,VisiCalc不仅仅是大型机应用程序的微型计算机版本——它是一种新类型的应用程序。
当然,基于服务器的应用程序不必是基于网络的。你可以有其他类型的客户端。但我很确定这是个坏主意。如果你可以假设每个人都会安装你的客户端,那将是非常方便的——如此方便,以至于你可以轻易地说服自己他们都会这样做——但如果他们不这样做,你就完了。因为基于网络的软件对客户端没有任何假设,它将在网络工作的任何地方都能工作。这已经是一个巨大的优势,随着新的网络设备的普及,这种优势将会增长。用户会喜欢你,因为你的软件就是好用,而你的生活会更轻松,因为你不必为每个新客户端进行调整。
我觉得我像任何人一样密切关注了网络的发展,我无法预测客户端会发生什么。融合可能即将到来,但在哪里?我无法选出赢家。我可以预测的一件事是AOL和微软之间的冲突。无论微软的.NET最终会是什么,它可能都会涉及将桌面与他们控制的服务器连接起来。除非AOL反击,否则他们将被挤到一边,或者变成微软客户端和服务器软件之间的管道。如果微软和AOL陷入客户端战争,唯一可以在两者上正常工作的东西将是浏览网页,这意味着基于网络的应用程序将是唯一可以在任何地方工作的类型。
这一切将如何发展?我不知道。如果你押注于基于网络的应用程序,你也不必知道。没有人可以在不破坏浏览的情况下打破这一点。网络可能不是交付软件的唯一方式,但它是现在有效并将继续有效的方式。基于网络的应用程序开发成本低,甚至最小的初创公司也能轻松交付。它们需要大量工作,并且是特别有压力的类型,但这只会使初创公司的机会更好。
为什么不呢?
E.B.怀特从一个农民朋友那里得知,许多电气化的围栏实际上并没有电流通过,这让他感到好笑。显然,牛会学会远离它们,之后你就不需要电流了。“起来吧,牛!”他写道,“在暴君打鼾的时候,抓住你的自由!”
如果你是一个曾考虑有一天创办初创公司的黑客,可能有两件事让你无法做到。其一是你对商业一无所知。其二是你害怕竞争。这两种围栏里都没有电流。
你只需要知道两件事关于商业:构建用户喜爱的东西,并且赚得比你花的多。如果你把这两件事做好,你就会领先于大多数初创公司。其余的可以在你前进的过程中慢慢摸索。
你可能一开始赚得比你花的多,但只要差距缩小得足够快,你就会没事。如果你一开始资金不足,至少会鼓励你养成节俭的习惯。你花得越少,赚得比你花的多就越容易。幸运的是,启动基于网络的应用程序可以非常便宜。我们在不到10,000美元的情况下启动,而今天会更便宜。我们不得不花几千美元购买服务器,几千美元购买SSL。(当时唯一出售SSL软件的公司是Netscape。)现在你可以租用一台更强大的服务器,SSL也包括在内,费用低于我们当时仅仅支付带宽的费用。你现在可以以低于一把豪华办公椅的价格启动一个基于网络的应用程序。
至于构建用户喜爱的东西,这里有一些一般性的建议。首先,制作一些干净简单的东西,你自己也想使用。快速推出1.0版本,然后继续改进软件,密切倾听用户的反馈。客户永远是对的,但不同的客户对不同的事情是对的;最不成熟的用户会告诉你需要简化和澄清的地方,而最成熟的用户会告诉你需要添加的功能。软件最好的状态是简单,但做到这一点的方法是正确设置默认值,而不是限制用户的选择。如果你的竞争对手的软件很糟糕,不要自满;比较你软件的标准是它可能达到的水平,而不是你当前竞争对手的水平。自己使用你的软件,始终如此。Viaweb本应是一个在线商店构建器,但我们也用它来制作我们自己的网站。不要仅仅因为他们的职位头衔就听从市场营销人员、设计师或产品经理。如果他们有好的想法,就使用它们,但决定权在你;软件必须由理解设计的黑客设计,而不是了解一点软件的设计师。如果你不能像实现软件一样设计软件,就不要创办初创公司。
现在让我们谈谈竞争。你害怕的并不是像你一样的黑客团体,而是实际的公司,拥有办公室、商业计划和销售人员等等,对吗?好吧,他们比你更害怕你,他们是对的。对于一群黑客来说,弄清楚如何租用办公空间或雇佣销售人员要容易得多,而对于任何规模的公司来说,编写软件则要困难得多。我在两边都待过,我知道。当Viaweb被Yahoo收购时,我突然发现自己在一家大公司工作,这就像试图在腰深的水中奔跑。
我并不是想贬低Yahoo。他们有一些优秀的黑客,顶层管理人员也是真正的强人。对于一家大公司来说,他们是出色的。但他们的生产力仍然只有小型初创公司的十分之一。没有大公司能做得比这更好。微软令人恐惧的地方在于,像他们这样的大公司居然能开发软件。他们就像一座可以走动的山。
不要感到畏惧。你能做到的事情与微软无法做到的事情一样多,而没有人能阻止你。你不需要任何人的许可来开发基于网络的应用程序。你不需要进行许可交易,或在零售店获得货架空间,或卑躬屈膝地让你的应用程序与操作系统捆绑在一起。你可以直接将软件交付到浏览器,没有人能在你和潜在用户之间设置障碍,而不妨碍他们浏览网络。
你可能不相信,但我向你保证,微软是害怕你的。那些自满的中层管理人员可能不害怕,但比尔是害怕的,因为他曾经是你,在1975年,最后一次出现新的软件交付方式时。
注释
[1] 意识到大部分钱在于服务,构建轻量级客户端的公司通常试图将硬件与在线服务结合在一起。这种方法效果不佳,部分原因是你需要两种不同类型的公司来构建消费电子产品和运营在线服务,部分原因是用户讨厌这个想法。免费赠送剃须刀并通过刀片赚钱可能对吉列有效,但剃须刀比网络终端的承诺要小得多。手机制造商满意于销售硬件,而不试图捕获服务收入。这可能应该是互联网客户端的模型。如果有人仅仅销售一个漂亮的小盒子,里面有一个可以通过任何ISP连接的网络浏览器,国内的每个技术恐惧者都会购买一个。
[2] 安全性总是更多地依赖于不出错,而不是任何设计决策,但基于服务器的软件的性质将使开发人员更加关注不出错。妥协一个服务器可能造成如此大的损害,以至于希望继续经营的ASP可能会对安全性非常小心。
[3] 在1995年,当我们开始Viaweb时,Java小程序本应是每个人用来开发基于服务器的应用程序的技术。小程序在我们看来是一个过时的想法。下载程序在客户端上运行?直接在服务器上运行程序更简单。我们几乎没有花时间在小程序上,但无数其他初创公司一定被引诱进入这个泥潭。很少有人能活着逃脱,否则微软就无法在最新版本的Explorer中放弃Java。
[4] 这一点归功于特雷弗·布莱克威尔,他补充说:“编写软件的成本随着其规模的增加而增加,可能主要是由于修复旧错误,如果所有错误都能迅速发现,成本可能会更线性。”
[5] 最难发现的错误可能是复合错误的变体,其中一个错误恰好补偿另一个错误。当你修复一个错误时,另一个错误就会显现出来。但这看起来似乎是修复有问题,因为那是你最后更改的内容。
[6] 在Viaweb内部,我们曾经举行过一个比赛,描述我们软件中最糟糕的事情。两名客户支持人员以我仍然感到颤栗的条目并列第一。我们立即修复了这两个问题。
[7] 罗伯特·莫里斯编写了订购系统,购物者用它来下订单。特雷弗·布莱克威尔编写了图像生成器和管理器,商家用它来检索订单、查看统计数据和配置域名等。我编写了编辑器,商家用它来构建他们的网站。订购系统和图像生成器是用C和C++编写的,管理器主要用Perl编写,编辑器用Lisp编写。
[8] 价格歧视是如此普遍(你听到零售商声称他们的购买力意味着更低的价格的频率有多高?),以至于我惊讶地发现它在美国被1936年的罗宾逊-帕特曼法案禁止。该法律似乎并没有得到严格执行。
[9] 在《无标志》中,娜奥米·克莱因说,受到“城市青年”青睐的服装品牌并不太努力地防止盗窃,因为在他们的目标市场中,盗窃者也是时尚领袖。
[10] 公司经常想知道什么该外包,什么不该外包。一个可能的答案是:外包任何不直接面临竞争压力的工作,因为外包将使其面临竞争压力。
[11] 这两个人是丹·布里克林和鲍勃·弗兰克斯顿。丹在几天内用Basic编写了一个原型,然后在接下来的一年中,他们(主要是在晚上)一起工作,制作了一个用6502机器语言编写的更强大的版本。丹当时在哈佛商学院,鲍勃名义上有一份编写软件的日常工作。“做生意没有什么风险,”鲍勃写道,“如果失败就失败了。没什么大不了的。”
[12] 这并不像我说的那么简单。口碑传播的启动花费了非常长的时间,我们在雇佣了一家公关公司(无疑是业内最好的)每月16,000美元后,才开始获得大量媒体报道。然而,确实只有我们自己的网站是唯一重要的渠道。
[13] 如果Mac如此出色,为什么会失败?成本,再一次。微软专注于软件业务,并释放了一大批廉价组件供应商来对付苹果硬件。在一个关键时期,西装的接管也没有帮助。
[14] 一件有助于基于网络应用程序的事情,并帮助下一代软件不被微软遮蔽的事情将是一个好的开源浏览器。Mozilla是开源的,但似乎因为长期以来是企业软件而受到影响。一个小而快速的浏览器,如果得到积极维护,将是一个伟大的事情,并可能鼓励公司构建小型网络设备。
此外,一个合适的开源浏览器将使HTTP和HTML继续发展(例如,Perl已经这样做了)。能够区分选择链接和跟随链接将极大地帮助基于网络的应用程序;你所需要的只是对HTTP的微小增强,以允许请求中包含多个URL。级联菜单也会很好。
如果你想改变世界,编写一个新的Mosaic。觉得太晚了吗?在1998年,很多人认为推出一个新的搜索引擎已经太晚,但谷歌证明了他们是错的。如果当前的选择糟糕到足够的程度,总会有新的东西出现。确保它首先在所有免费的操作系统上运行——新事物从用户开始。
[15] 特雷弗·布莱克威尔,可能比任何人都更了解这一点,写道:
“我会更进一步地说,由于基于服务器的软件对程序员的压力如此之大,它导致了一个根本性的经济转变,远离大型公司。它需要程序员提供那种强度和奉献精神,而他们只有在自己的公司时才会愿意提供。软件公司可以雇佣熟练的人在不太苛刻的环境中工作,并可以雇佣不熟练的人忍受艰辛,但他们无法雇佣高技能的人来拼命工作。由于不再需要资本,大公司几乎没有什么可以提供的。”
[16] 在这篇文章的原始版本中,我建议避免使用Javascript。这在2001年是个好计划,但现在Javascript可以正常工作。
感谢莎拉·哈林、特雷弗·布莱克威尔、罗伯特·莫里斯、埃里克·雷蒙德、肯·安德森和丹·吉芬阅读这篇论文的草稿;感谢丹·布里克林和鲍勃·弗兰克斯顿提供关于VisiCalc的信息;再次感谢肯·安德森邀请我在BBN演讲。
你会在黑客与画家中找到这篇文章和其他14篇。