The Other Road Ahead
In this classic 2001 essay, Paul Graham argues that web-based applications will dominate desktop software, drawing from his experience building Viaweb (later Yahoo Store). He details the advantages for users—no installation, universal access, automatic updates—and the radical shift for developers: continuous releases (3-5 per day), instant bug fixing, and the merging of developer and sysadmin roles. With a team of three, Viaweb achieved high reliability and low cost ($5 per user). Graham contends that web apps lower startup barriers and outcompete large companies, despite placing more stress on programmers. He urges hackers to embrace this model as a way to circumvent Microsoft's desktop monopoly.


September 2001 (This article explains why much of the next generation of software may be server-based, what that will mean for programmers, and why this new kind of software is a great opportunity for startups. It's derived from a talk at BBN Labs.)
In the summer of 1995, my friend Robert Morris and I decided to start a startup. The PR campaign leading up to Netscape's IPO was running full blast then, and there was a lot of talk in the press about online commerce. At the time there might have been thirty actual stores on the Web, all made by hand. If there were going to be a lot of online stores, there would need to be software for making them, so we decided to write some.
For the first week or so we intended to make this an ordinary desktop application. Then one day we had the idea of making the software run on our Web server, using the browser as an interface. We tried rewriting the software to work over the Web, and it was clear that this was the way to go. If we wrote our software to run on the server, it would be a lot easier for the users and for us as well.
This turned out to be a good plan. Now, as Yahoo Store, this software is the most popular online store builder, with about 14,000 users.
When we started Viaweb, hardly anyone understood what we meant when we said that the software ran on the server. It was not until Hotmail was launched a year later that people started to get it. Now everyone knows that this is a valid approach. There is a name now for what we were: an Application Service Provider, or ASP.
2001年9月 (这篇文章解释了为什么下一代软件很可能基于服务器,这对程序员意味着什么,以及这种新型软件为何是初创公司的绝佳机会。它源自BBN实验室的一次演讲。)
1995年夏天,我的朋友罗伯特·莫里斯和我决定创办一家初创公司。当时,网景IPO前的公关活动正如火如荼地进行着,媒体上充斥着关于在线商务的讨论。那时,网络上可能只有三十家真正的商店,全部都是手工制作的。如果将来会有大量在线商店,那么就需要有软件来创建它们,于是我们决定写一些这样的软件。
头一周左右,我们打算把它做成一个普通的桌面应用程序。后来有一天,我们突发奇想,让软件运行在我们的Web服务器上,用浏览器作为界面。我们尝试重写软件以在Web上运行,很明显这才是正确的方向。如果把我们的软件放在服务器上运行,对用户和我们自己来说都会容易得多。
结果证明这是一个好计划。现在,作为Yahoo Store,这个软件是最流行的在线商店构建工具,拥有约14000个用户。
当我们创办Viaweb时,几乎没有人理解我们说的“软件运行在服务器上”是什么意思。直到一年后Hotmail推出,人们才开始明白。现在大家都知道这是一种可行的方法。我们当时的身份如今有了一个名称:应用服务提供商(ASP)。
I think that a lot of the next generation of software will be written on this model. Even Microsoft, who have the most to lose, seem to see the inevitablity of moving some things off the desktop. If software moves off the desktop and onto servers, it will mean a very different world for developers. This article describes the surprising things we saw, as some of the first visitors to this new world. To the extent software does move onto servers, what I'm describing here is the future.
我认为下一代软件中很大一部分将按照这种模式编写。即使是损失最大的微软,似乎也看到了将部分功能从桌面迁移出去的必然性。如果软件从桌面转移到服务器,对开发者来说将意味着一个截然不同的世界。本文描述了作为这个新世界最早的一批访客,我们所看到的令人惊讶的事情。就软件向服务器迁移的程度而言,我在这里描述的就是未来。
When we look back on the desktop software era, I think we'll marvel at the inconveniences people put up with, just as we marvel now at what early car owners put up with. For the first twenty or thirty years, you had to be a car expert to own a car. But cars were such a big win that lots of people who weren't car experts wanted to have them as well.
Computers are in this phase now. When you own a desktop computer, you end up learning a lot more than you wanted to know about what's happening inside it. But more than half the households in the US own one. My mother has a computer that she uses for email and for keeping accounts. About a year ago she was alarmed to receive a letter from Apple, offering her a discount on a new version of the operating system. There's something wrong when a sixty-five year old woman who wants to use a computer for email and accounts has to think about installing new operating systems. Ordinary users shouldn't even know the words "operating system," much less "device driver" or "patch."
当我们回顾桌面软件时代时,我想我们会惊叹于人们忍受的诸多不便,就像我们现在惊叹于早期汽车车主所忍受的那样。在最初二三十年里,你必须是个汽车专家才能拥有一辆车。但汽车是如此伟大的一项进步,以至于许多并非汽车专家的人也想要拥有它们。
计算机目前就处于这个阶段。当你拥有一台台式电脑时,你最终会学到比你想知道的更多关于其内部运作的知识。但超过一半的美国家庭都拥有一台。我母亲有一台电脑,用于收发邮件和记账。大约一年前,她收到苹果公司的一封信,提供给她新版操作系统的折扣,这让她感到惊慌。当一个只想用电脑收发邮件和记账的六十五岁老太太不得不考虑安装新操作系统时,这肯定有问题。普通用户甚至不应该知道“操作系统”这个词,更不用说“设备驱动程序”或“补丁”了。
There is now another way to deliver software that will save users from becoming system administrators. Web-based applications are programs that run on Web servers and use Web pages as the user interface. For the average user this new kind of software will be easier, cheaper, more mobile, more reliable, and often more powerful than desktop software.
With Web-based software, most users won't have to think about anything except the applications they use. All the messy, changing stuff will be sitting on a server somewhere, maintained by the kind of people who are good at that kind of thing. And so you won't ordinarily need a computer, per se, to use software. All you'll need will be something with a keyboard, a screen, and a Web browser. Maybe it will have wireless Internet access. Maybe it will also be your cell phone. Whatever it is, it will be consumer electronics: something that costs about $200, and that people choose mostly based on how the case looks. You'll pay more for Internet services than you do for the hardware, just as you do now with telephones. [1]
It will take about a tenth of a second for a click to get to the server and back, so users of heavily interactive software, like Photoshop, will still want to have the computations happening on the desktop. But if you look at the kind of things most people use computers for, a tenth of a second latency would not be a problem. My mother doesn't really need a desktop computer, and there are a lot of people like her.
现在有一种新的软件交付方式,可以让用户免于成为系统管理员。基于Web的应用程序是运行在Web服务器上、以网页作为用户界面的程序。对于普通用户来说,这种新型软件将比桌面软件更容易、更便宜、更具移动性、更可靠,而且通常更强大。
使用基于Web的软件,大多数用户除了他们使用的应用程序之外,不需要考虑任何事情。所有那些混乱、变化的东西都将放在某个服务器上,由擅长此类工作的人维护。因此,你通常不需要一台计算机本身来使用软件。你只需要一个带键盘、屏幕和Web浏览器的设备。它可能具备无线互联网接入功能,也可能就是你的手机。无论它是什么,都将是消费电子产品:售价大约200美元,人们主要根据外观来选择。你将像现在为电话付费一样,为互联网服务支付比硬件更多的钱。[1]
从点击到服务器返回大约需要十分之一秒,因此像Photoshop这样高度交互的软件的用户,仍然希望计算在桌面上进行。但如果你看看大多数人用电脑做的事情,十分之一秒的延迟根本不是问题。我母亲并不真正需要台式电脑,而且有很多像她一样的人。
Near my house there is a car with a bumper sticker that reads "death before inconvenience." Most people, most of the time, will take whatever choice requires least work. If Web-based software wins, it will be because it's more convenient. And it looks as if it will be, for users and developers both.
To use a purely Web-based application, all you need is a browser connected to the Internet. So you can use a Web-based application anywhere. When you install software on your desktop computer, you can only use it on that computer. Worse still, your files are trapped on that computer. The inconvenience of this model becomes more and more evident as people get used to networks.
The thin end of the wedge here was Web-based email. Millions of people now realize that you should have access to email messages no matter where you are. And if you can see your email, why not your calendar? If you can discuss a document with your colleagues, why can't you edit it? Why should any of your data be trapped on some computer sitting on a faraway desk?
The whole idea of "your computer" is going away, and being replaced with "your data." You should be able to get at your data from any computer. Or rather, any client, and a client doesn't have to be a computer.
Clients shouldn't store data; they should be like telephones. In fact they may become telephones, or vice versa. And as clients get smaller, you have another reason not to keep your data on them: something you carry around with you can be lost or stolen. Leaving your PDA in a taxi is like a disk crash, except that your data is handed to someone else instead of being vaporized.
With purely Web-based software, neither your data nor the applications are kept on the client. So you don't have to install anything to use it. And when there's no installation, you don't have to worry about installation going wrong. There can't be incompatibilities between the application and your operating system, because the software doesn't run on your operating system.
Because it needs no installation, it will be easy, and common, to try Web-based software before you "buy" it. You should expect to be able to test-drive any Web-based application for free, just by going to the site where it's offered. At Viaweb our whole site was like a big arrow pointing users to the test drive.
After trying the demo, signing up for the service should require nothing more than filling out a brief form (the briefer the better). And that should be the last work the user has to do. With Web-based software, you should get new releases without paying extra, or doing any work, or possibly even knowing about it.
Upgrades won't be the big shocks they are now. Over time applications will quietly grow more powerful. This will take some effort on the part of the developers. They will have to design software so that it can be updated without confusing the users. That's a new problem, but there are ways to solve it.
With Web-based applications, everyone uses the same version, and bugs can be fixed as soon as they're discovered. So Web-based software should have far fewer bugs than desktop software. At Viaweb, I doubt we ever had ten known bugs at any one time. That's orders of magnitude better than desktop software.
Web-based applications can be used by several people at the same time. This is an obvious win for collaborative applications, but I bet users will start to want this in most applications once they realize it's possible. It will often be useful to let two people edit the same document, for example. Viaweb let multiple users edit a site simultaneously, more because that was the right way to write the software than because we expected users to want to, but it turned out that many did.
When you use a Web-based application, your data will be safer. Disk crashes won't be a thing of the past, but users won't hear about them anymore. They'll happen within server farms. And companies offering Web-based applications will actually do backups-- not only because they'll have real system administrators worrying about such things, but because an ASP that does lose people's data will be in big, big trouble. When people lose their own data in a disk crash, they can't get that mad, because they only have themselves to be mad at. When a company loses their data for them, they'll get a lot madder.
Finally, Web-based software should be less vulnerable to viruses. If the client doesn't run anything except a browser, there's less chance of running viruses, and no data locally to damage. And a program that attacked the servers themselves should find them very well defended. [2]
For users, Web-based software will be less stressful. I think if you looked inside the average Windows user you'd find a huge and pretty much untapped desire for software meeting that description. Unleashed, it could be a powerful force.
我家附近有辆车,保险杠贴纸上写着“死也不麻烦”。大多数人,在大多数时候,都会选择最省事的方案。如果基于Web的软件胜出,那一定是因为它更方便。而且,无论对用户还是开发者来说,看起来它确实会更方便。
要使用纯Web应用,你只需要一个连接互联网的浏览器。因此,你可以在任何地方使用Web应用。而当你把软件安装在台式电脑上时,你只能在那一台电脑上使用它。更糟糕的是,你的文件被困在了那台电脑里。随着人们越来越习惯网络,这种模式的不便之处愈发明显。
最初的突破口是Web邮件。数百万人现在意识到,无论身在何处,你都应该能访问邮件。如果你能查看邮件,为什么不能查看日历呢?如果你能和同事讨论文档,为什么不能编辑它呢?为什么你的任何数据都应该被困在某个遥远的桌面的电脑上?
“你的电脑”这个概念正在消失,取而代之的是“你的数据”。你应该能从任何电脑访问你的数据。或者更确切地说,任何客户端,而且客户端不一定是电脑。
客户端不应该存储数据;它们应该像电话一样。事实上,它们可能变成电话,或者反过来。随着客户端变得越来越小,你还有另一个理由不把数据留在上面:随身携带的东西可能会丢失或被盗。把掌上电脑落在出租车里就像硬盘崩溃,只不过你的数据会落入他人之手,而不是消失。
对于纯Web软件,你的数据和应用程序都不保存在客户端上。因此,你不需要安装任何东西就能使用它。没有了安装过程,你就不必担心安装出错。应用程序和你的操作系统之间不可能出现不兼容,因为软件并不运行在你的操作系统上。
由于无需安装,在“购买”Web软件之前试用它会变得容易且普遍。你应该可以免费试用任何Web应用,只需访问提供该应用的网站。在Viaweb,我们的整个网站就像一个大箭头,引导用户去试用。
试用演示后,注册服务只需填写一个简短的表格(越简短越好)。这应该是用户需要做的最后一项工作。使用Web软件,你应该能够免费获得新版本,无需任何工作,甚至可能对此毫不知情。
升级不会像现在这样是重大冲击。随着时间的推移,应用程序会悄然变得更加强大。这需要开发者付出一些努力。他们必须设计软件,使其在更新时不至于让用户困惑。这是一个新问题,但有办法解决。
使用Web应用,所有人使用同一个版本,而且一旦发现bug就能立即修复。因此,Web软件的错误应该比桌面软件少得多。在Viaweb,我怀疑任何时候我们已知的bug都不超过十个。这比桌面软件好上几个数量级。
Web应用可以同时被多人使用。这对于协作应用来说显然是个优势,但我打赌,一旦用户意识到这是可能的,他们会在大多数应用中都想要这种功能。例如,让两个人同时编辑同一份文档通常会很有用。Viaweb允许用户同时编辑一个站点,这更多是因为这样编写软件才是正确的方式,而不是因为我们预期用户会需要,但结果发现很多用户确实需要。
当你使用Web应用时,你的数据会更安全。硬盘崩溃不会成为过去,但用户将不再听说它们。它们会发生在服务器农场内部。提供Web应用的公司会真正进行备份——不仅因为他们有真正的系统管理员来操心这些事,还因为如果ASP丢失了用户数据,他们将面临非常大的麻烦。当人们在硬盘崩溃中丢失自己的数据时,他们不会那么生气,因为他们只能生自己的气。而当一家公司为他们弄丢了数据时,他们会生气得多。
最后,Web软件应该更不容易感染病毒。如果客户端除了浏览器之外什么都不运行,那么运行病毒的机会就会减少,而且也没有本地数据可破坏。试图攻击服务器本身的程序会发现它们防御得很好。[2]
对用户来说,Web软件会带来更少的压力。我想,如果你审视一下普通Windows用户的内心,你会发现他们对于符合这种描述的软件有着巨大且尚未开发的渴望。一旦释放,这将成为一股强大的力量。
To developers, the most conspicuous difference between Web-based and desktop software is that a Web-based application is not a single piece of code. It will be a collection of programs of different types rather than a single big binary. And so designing Web-based software is like desiging a city rather than a building: as well as buildings you need roads, street signs, utilities, police and fire departments, and plans for both growth and various kinds of disasters.
At Viaweb, software included fairly big applications that users talked to directly, programs that those programs used, programs that ran constantly in the background looking for problems, programs that tried to restart things if they broke, programs that ran occasionally to compile statistics or build indexes for searches, programs we ran explicitly to garbage-collect resources or to move or restore data, programs that pretended to be users (to measure performance or expose bugs), programs for diagnosing network troubles, programs for doing backups, interfaces to outside services, software that drove an impressive collection of dials displaying real-time server statistics (a hit with visitors, but indispensable for us too), modifications (including bug fixes) to open-source software, and a great many configuration files and settings. Trevor Blackwell wrote a spectacular program for moving stores to new servers across the country, without shutting them down, after we were bought by Yahoo. Programs paged us, sent faxes and email to users, conducted transactions with credit card processors, and talked to one another through sockets, pipes, http requests, ssh, udp packets, shared memory, and files. Some of Viaweb even consisted of the absence of programs, since one of the keys to Unix security is not to run unnecessary utilities that people might use to break into your servers.
It did not end with software. We spent a lot of time thinking about server configurations. We built the servers ourselves, from components-- partly to save money, and partly to get exactly what we wanted. We had to think about whether our upstream ISP had fast enough connections to all the backbones. We serially dated RAID suppliers.
But hardware is not just something to worry about. When you control it you can do more for users. With a desktop application, you can specify certain minimum hardware, but you can't add more. If you administer the servers, you can in one step enable all your users to page people, or send faxes, or send commands by phone, or process credit cards, etc, just by installing the relevant hardware. We always looked for new ways to add features with hardware, not just because it pleased users, but also as a way to distinguish ourselves from competitors who (either because they sold desktop software, or resold Web-based applications through ISPs) didn't have direct control over the hardware.
Because the software in a Web-based application will be a collection of programs rather than a single binary, it can be written in any number of different languages. When you're writing desktop software, you're practically forced to write the application in the same language as the underlying operating system-- meaning C and C++. And so these languages (especially among nontechnical people like managers and VCs) got to be considered as the languages for "serious" software development. But that was just an artifact of the way desktop software had to be delivered. For server-based software you can use any language you want. [3] Today a lot of the top hackers are using languages far removed from C and C++: Perl, Python, and even Lisp.
With server-based software, no one can tell you what language to use, because you control the whole system, right down to the hardware. Different languages are good for different tasks. You can use whichever is best for each. And when you have competitors, "you can" means "you must" (we'll return to this later), because if you don't take advantage of this possibility, your competitors will.
Most of our competitors used C and C++, and this made their software visibly inferior because (among other things), they had no way around the statelessness of CGI scripts. If you were going to change something, all the changes had to happen on one page, with an Update button at the bottom. As I've written elsewhere, by using Lisp, which many people still consider a research language, we could make the Viaweb editor behave more like desktop software.
对开发者来说,Web软件和桌面软件最显著的区别在于,Web应用不是一段单一的代码。它将是不同类型程序的集合,而不是一个巨大的二进制文件。因此,设计Web软件就像设计一座城市而不是一栋建筑:除了建筑物,你还需要道路、路标、公用事业、警察和消防部门,以及针对增长和各种灾难的计划。
在Viaweb,软件包括用户直接交互的较大应用程序、这些程序使用的其他程序、持续在后台运行以查找问题的程序、在程序崩溃时尝试重启的程序、定期运行以编译统计信息或构建搜索索引的程序、我们显式运行以进行垃圾回收或移动/恢复数据的程序、假装成用户(用于测量性能或暴露bug)的程序、诊断网络问题的程序、执行备份的程序、与外部服务的接口、驱动一组令人印象深刻的可视化实时服务器统计数据的软件(深受访客欢迎,对我们也不可或缺)、对开源软件的修改(包括bug修复),以及大量的配置文件和设置。在被雅虎收购后,Trevor Blackwell编写了一个出色的程序,用于在不关闭商店的情况下将商店迁移到全国的新服务器上。程序会呼叫我,向用户发送传真和电子邮件,与信用卡处理器进行交易,并通过socket、管道、HTTP请求、SSH、UDP包、共享内存和文件相互通信。Viaweb的某些部分甚至由“程序的缺失”构成,因为Unix安全的关键之一是不要运行不必要的、可能被用来入侵服务器的工具。
这一切并不止于软件。我们花了很多时间思考服务器配置。我们亲手从零开始组装服务器——部分是为了省钱,部分是为了得到我们想要的精确配置。我们必须考虑上游ISP是否有足够快的连接通往所有骨干网。我们先后与多家RAID供应商合作。
但硬件不仅仅是需要操心的事情。当你掌控它时,你可以为用户做得更多。对于桌面应用,你可以指定最低硬件要求,但无法增加更多。如果你管理着服务器,你只需安装相关硬件,就能一步到位地让所有用户能够呼叫人、发送传真、通过电话发送命令、处理信用卡等。我们一直在寻找用硬件添加新功能的方法,不仅因为这能让用户满意,还因为这能让我们与那些(要么因为销售桌面软件,要么通过ISP转售Web应用而)无法直接控制硬件的竞争对手区分开来。
由于Web应用中的软件是程序的集合而非单一二进制文件,它可以用多种不同的语言编写。在编写桌面软件时,你几乎被迫使用与底层操作系统相同的语言——也就是C和C++。因此,这些语言(尤其是在经理和VC等非技术人员眼中)被认为是“严肃”软件开发的语言。但这只是桌面软件交付方式的人为产物。对于基于服务器的软件,你可以使用任何你喜欢的语言。[3]如今,许多顶尖黑客正在使用与C和C++相去甚远的语言:Perl、Python,甚至Lisp。
使用基于服务器的软件,没有人能告诉你该用什么语言,因为你控制着整个系统,直达硬件。不同的语言擅长不同的任务。你可以为每个任务选择最佳的语言。而当你面临竞争对手时,“你可以”意味着“你必须”(我们稍后会回到这一点),因为如果你不利用这种可能性,你的竞争对手就会。
我们的大多数竞争对手使用C和C++,这使得他们的软件明显低劣,因为(除了其他原因)他们无法绕过CGI脚本的无状态性。如果你要修改某些内容,所有更改必须在单个页面上进行,底部有一个“更新”按钮。正如我曾在别处写过的,通过使用许多人仍然认为是研究语言的Lisp,我们能让Viaweb编辑器的行为更像桌面软件。
One of the most important changes in this new world is the way you do releases. In the desktop software business, doing a release is a huge trauma, in which the whole company sweats and strains to push out a single, giant piece of code. Obvious comparisons suggest themselves, both to the process and the resulting product.
With server-based software, you can make changes almost as you would in a program you were writing for yourself. You release software as a series of incremental changes instead of an occasional big explosion. A typical desktop software company might do one or two releases a year. At Viaweb we often did three to five releases a day.
When you switch to this new model, you realize how much software development is affected by the way it is released. Many of the nastiest problems you see in the desktop software business are due to catastrophic nature of releases.
When you release only one new version a year, you tend to deal with bugs wholesale. Some time before the release date you assemble a new version in which half the code has been torn out and replaced, introducing countless bugs. Then a squad of QA people step in and start counting them, and the programmers work down the list, fixing them. They do not generally get to the end of the list, and indeed, no one is sure where the end is. It's like fishing rubble out of a pond. You never really know what's happening inside the software. At best you end up with a statistical sort of correctness.
With server-based software, most of the change is small and incremental. That in itself is less likely to introduce bugs. It also means you know what to test most carefully when you're about to release software: the last thing you changed. You end up with a much firmer grip on the code. As a general rule, you do know what's happening inside it. You don't have the source code memorized, of course, but when you read the source you do it like a pilot scanning the instrument panel, not like a detective trying to unravel some mystery.
Desktop software breeds a certain fatalism about bugs. You know that you're shipping something loaded with bugs, and you've even set up mechanisms to compensate for it (e.g. patch releases). So why worry about a few more? Soon you're releasing whole features you know are broken. Apple did this earlier this year. They felt under pressure to release their new OS, whose release date had already slipped four times, but some of the software (support for CDs and DVDs) wasn't ready. The solution? They released the OS without the unfinished parts, and users will have to install them later.
With Web-based software, you never have to release software before it works, and you can release it as soon as it does work.
The industry veteran may be thinking, it's a fine-sounding idea to say that you never have to release software before it works, but what happens when you've promised to deliver a new version of your software by a certain date? With Web-based software, you wouldn't make such a promise, because there are no versions. Your software changes gradually and continuously. Some changes might be bigger than others, but the idea of versions just doesn't naturally fit onto Web-based software.
If anyone remembers Viaweb this might sound odd, because we were always announcing new versions. This was done entirely for PR purposes. The trade press, we learned, thinks in version numbers. They will give you major coverage for a major release, meaning a new first digit on the version number, and generally a paragraph at most for a point release, meaning a new digit after the decimal point.
Some of our competitors were offering desktop software and actually had version numbers. And for these releases, the mere fact of which seemed to us evidence of their backwardness, they would get all kinds of publicity. We didn't want to miss out, so we started giving version numbers to our software too. When we wanted some publicity, we'd make a list of all the features we'd added since the last "release," stick a new version number on the software, and issue a press release saying that the new version was available immediately. Amazingly, no one ever called us on it.
By the time we were bought, we had done this three times, so we were on Version 4. Version 4.1 if I remember correctly. After Viaweb became Yahoo Store, there was no longer such a desperate need for publicity, so although the software continued to evolve, the whole idea of version numbers was quietly dropped.
在这个新世界里,最重要的变化之一是发布软件的方式。在桌面软件行业,发布一次软件是一次巨大的创伤,整个公司都要汗流浃背地推出一大段代码。无论是过程还是最终产品,都让人不禁联想到某些不雅的东西。
在使用基于服务器的软件时,你可以像为自己写程序一样进行更改。你以一系列渐进式更改的形式发布软件,而不是偶尔的一次大爆发。典型的桌面软件公司可能每年发布一两次。而在Viaweb,我们通常每天发布三到五次。
当你转向这种新模式时,你会意识到软件开发受发布方式的影响有多大。你在桌面软件行业看到的许多最棘手的问题,都源于发布的灾难性本质。
当你每年只发布一个新版本时,你倾向于批量处理bug。在发布日期前一段时间,你组装一个新版本,其中一半的代码被拆除并替换,引入了无数bug。然后一支QA团队介入,开始统计这些bug,程序员们则按照列表逐一修复。他们通常不会到达列表的尽头,而且事实上,没人知道尽头在哪里。这就像从池塘里捞碎石。你永远不知道软件内部到底发生了什么。充其量,你只能达到一种统计意义上的正确性。
对于基于服务器的软件,大部分更改都是小而渐进的。这本身就不太容易引入bug。这也意味着你在即将发布软件时知道最需要仔细测试什么:你最后更改的东西。你对代码的掌控要牢固得多。一般来说,你知道代码内部发生了什么。当然,你并没有记住所有源代码,但当你阅读源码时,你像飞行员扫视仪表盘一样,而不是像侦探试图解开谜团。
桌面软件催生了一种对bug的宿命论。你知道你发布的软件充满了bug,你甚至建立了补偿机制(例如补丁发布)。那么,再多几个bug又何必担心呢?很快,你开始发布你知道有缺陷的整个功能。苹果今年早些时候就这么做了。他们感到有压力要发布新操作系统,其发布日期已经推迟了四次,但某些软件(对CD和DVD的支持)还没有准备好。解决方案是什么?他们发布了操作系统,但去掉了未完成的部分,用户必须以后自行安装。
对于Web软件,你永远不必在软件正常工作之前发布它,一旦它正常工作,你就可以立即发布。
行业老手可能会想,说“你永远不必在软件正常工作前发布它”听起来不错,但当你承诺在某个日期前交付新版本时怎么办?使用Web软件,你不会做出这样的承诺,因为没有版本。你的软件是逐渐且持续变化的。某些更改可能比其他更改更大,但版本的概念根本不适用于Web软件。
如果有人记得Viaweb,这可能听起来很奇怪,因为我们那时总是在宣布新版本。这完全是出于公关目的。我们发现,行业媒体以版本号思考问题。他们会为重大发布(版本号第一位数字改变)给予重要报道,而对于小版本(小数点后数字改变)最多给一段文字。
我们的一些竞争对手提供的是桌面软件,并且确实有版本号。对于这些发布,仅仅因为发布了新版本,他们就能获得各种宣传。我们不想错过,于是也开始给我们自己的软件分配版本号。当我们想要宣传时,我们会列出自上次“发布”以来添加的所有功能,给软件贴上一个新的版本号,然后发布新闻稿说新版本已立即可用。令人惊讶的是,从没有人质疑过我们。
到被收购时,我们已经这样做了三次,所以当时是第4版。如果我没记错的话,是4.1版。在Viaweb成为Yahoo Store后,不再那么迫切需要宣传了,所以尽管软件继续演进,版本号这个概念也就悄然被放弃了。
The other major technical advantage of Web-based software is that you can reproduce most bugs. You have the users' data right there on your disk. If someone breaks your software, you don't have to try to guess what's going on, as you would with desktop software: you should be able to reproduce the error while they're on the phone with you. You might even know about it already, if you have code for noticing errors built into your application.
Web-based software gets used round the clock, so everything you do is immediately put through the wringer. Bugs turn up quickly.
Software companies are sometimes accused of letting the users debug their software. And that is just what I'm advocating. For Web-based software it's actually a good plan, because the bugs are fewer and transient. When you release software gradually you get far fewer bugs to start with. And when you can reproduce errors and release changes instantly, you can find and fix most bugs as soon as they appear. We never had enough bugs at any one time to bother with a formal bug-tracking system.
You should test changes before you release them, of course, so no major bugs should get released. Those few that inevitably slip through will involve borderline cases and will only affect the few users that encounter them before someone calls in to complain. As long as you fix bugs right away, the net effect, for the average user, is far fewer bugs. I doubt the average Viaweb user ever saw a bug.
Fixing fresh bugs is easier than fixing old ones. It's usually fairly quick to find a bug in code you just wrote. When it turns up you often know what's wrong before you even look at the source, because you were already worrying about it subconsciously. Fixing a bug in something you wrote six months ago (the average case if you release once a year) is a lot more work. And since you don't understand the code as well, you're more likely to fix it in an ugly way, or even introduce more bugs. [4]
When you catch bugs early, you also get fewer compound bugs. Compound bugs are two separate bugs that interact: you trip going downstairs, and when you reach for the handrail it comes off in your hand. In software this kind of bug is the hardest to find, and also tends to have the worst consequences. [5] The traditional "break everything and then filter out the bugs" approach inherently yields a lot of compound bugs. And software that's released in a series of small changes inherently tends not to. The floors are constantly being swept clean of any loose objects that might later get stuck in something.
It helps if you use a technique called functional programming. Functional programming means avoiding side-effects. It's something you're more likely to see in research papers than commercial software, but for Web-based applications it turns out to be really useful. It's hard to write entire programs as purely functional code, but you can write substantial chunks this way. It makes those parts of your software easier to test, because they have no state, and that is very convenient in a situation where you are constantly making and testing small modifications. I wrote much of Viaweb's editor in this style, and we made our scripting language, RTML, a purely functional language.
People from the desktop software business will find this hard to credit, but at Viaweb bugs became almost a game. Since most released bugs involved borderline cases, the users who encountered them were likely to be advanced users, pushing the envelope. Advanced users are more forgiving about bugs, especially since you probably introduced them in the course of adding some feature they were asking for. In fact, because bugs were rare and you had to be doing sophisticated things to see them, advanced users were often proud to catch one. They would call support in a spirit more of triumph than anger, as if they had scored points off us.
Web软件的另一个主要技术优势是你可以重现大多数bug。用户的数正据就在你的磁盘上。如果有人搞坏了你的软件,你不需要像桌面软件那样猜测发生了什么:你应该能在他们与你通电话时重现这个错误。如果你在应用程序中内置了错误检测代码,你可能已经知道了。
Web软件全天候被使用,因此你做的每一件事都会立刻受到考验。Bug会迅速出现。
有时软件公司被指责让用户来调试他们的软件。而我所倡导的正是这种做法。对于Web软件来说,这实际上是个好策略,因为bug更少且是暂时的。当你逐步发布软件时,一开始的bug就少得多。而且当你能够重现错误并立即发布更改时,你可以在大多数bug一出现时就找到并修复它们。在任何时候,我们都没有多到需要正式bug跟踪系统的bug。
当然,你应该在发布之前测试更改,因此不应该有重大bug被发布出去。那些不可避免地漏网之鱼涉及边界情况,只会影响少数在有人打电话投诉前遇到它们的用户。只要你立即修复bug,对普通用户而言,总体效果是bug大大减少。我怀疑普通Viaweb用户从没见过bug。
修复新bug比修复旧bug更容易。通常,在刚刚编写的代码中找到bug相当快。当它出现时,你往往在看源代码之前就已经知道哪里出错了,因为你在潜意识里已经担心过它。修复你六个月前写的代码中的bug(如果每年发布一次,这是平均情况)要费劲得多。而且由于你对代码不那么熟悉,你更有可能以一种丑陋的方式修复它,甚至引入更多bug。[4]
当你早期捕获bug时,你也会得到更少的复合bug。复合bug是指两个独立的bug相互作用:你下楼时绊了一下,伸手去抓扶手,结果扶手脱落了。在软件中,这种bug最难找到,而且往往后果最严重。[5]传统的“先破坏一切,再过滤出bug”的方法本质上会产生大量复合bug。而通过一系列小更改发布的软件天然倾向于避免这种情况。地面不断被清扫干净,任何可能后来卡住东西的松散物体都会被清除。
如果你使用一种叫做函数式编程的技术,这会有所帮助。函数式编程意味着避免副作用。你在研究论文中比在商业软件中更常见到它,但对于Web应用来说,它确实非常有用。将整个程序写成纯函数式代码很困难,但你可以用这种方式编写相当大的一部分。它使软件的这些部分更容易测试,因为它们没有状态,这在不断进行小规模修改和测试的情况下非常方便。我以这种风格编写了Viaweb编辑器的大部分代码,并让我们的脚本语言RTML成为一种纯函数式语言。
来自桌面软件行业的人会觉得难以置信,但在Viaweb,bug几乎成了一种游戏。由于大多数发布的bug涉及边界情况,遇到它们的用户很可能是高级用户,正在尝试突破极限。高级用户对bug更宽容,特别是考虑到你很可能是在添加他们要求的功能时引入了这些bug。事实上,因为bug很少见,而且必须做复杂的事情才能看到它们,高级用户常常以抓到bug为荣。他们打电话给支持时,更多的是得意而非愤怒,仿佛从我们这里得了分。
When you can reproduce errors, it changes your approach to customer support. At most software companies, support is offered as a way to make customers feel better. They're either calling you about a known bug, or they're just doing something wrong and you have to figure out what. In either case there's not much you can learn from them. And so you tend to view support calls as a pain in the ass that you want to isolate from your developers as much as possible.
This was not how things worked at Viaweb. At Viaweb, support was free, because we wanted to hear from customers. If someone had a problem, we wanted to know about it right away so that we could reproduce the error and release a fix.
So at Viaweb the developers were always in close contact with support. The customer support people were about thirty feet away from the programmers, and knew that they could always interrupt anything with a report of a genuine bug. We would leave a board meeting to fix a serious bug.
Our approach to support made everyone happier. The customers were delighted. Just imagine how it would feel to call a support line and be treated as someone bringing important news. The customer support people liked it because it meant they could help the users, instead of reading scripts to them. And the programmers liked it because they could reproduce bugs instead of just hearing vague second-hand reports about them.
Our policy of fixing bugs on the fly changed the relationship between customer support people and hackers. At most software companies, support people are underpaid human shields, and hackers are little copies of God the Father, creators of the world. Whatever the procedure for reporting bugs, it is likely to be one-directional: support people who hear about bugs fill out some form that eventually gets passed on (possibly via QA) to programmers, who put it on their list of things to do. It was very different at Viaweb. Within a minute of hearing about a bug from a customer, the support people could be standing next to a programmer hearing him say "Shit, you're right, it's a bug." It delighted the support people to hear that "you're right" from the hackers. They used to bring us bugs with the same expectant air as a cat bringing you a mouse it has just killed. It also made them more careful in judging the seriousness of a bug, because now their honor was on the line.
After we were bought by Yahoo, the customer support people were moved far away from the programmers. It was only then that we realized that they were effectively QA and to some extent marketing as well. In addition to catching bugs, they were the keepers of the knowledge of vaguer, buglike things, like features that confused users. [6] They were also a kind of proxy focus group; we could ask them which of two new features users wanted more, and they were always right.
当你能够重现错误时,你对客户支持的态度也会改变。在大多数软件公司,支持只是为了安抚客户。他们要么是因为已知的bug打电话,要么就是操作有误,你需要找出问题所在。无论哪种情况,你从他们身上学不到多少东西。因此,你倾向于把支持电话视为麻烦,希望尽可能让开发者远离它们。
但Viaweb的情况并非如此。在Viaweb,支持是免费的,因为我们想听到客户的声音。如果有人遇到问题,我们希望立即知道,这样我们就能重现错误并发布修复。
因此,在Viaweb,开发者始终与支持团队保持密切联系。客户支持人员离程序员只有大约十米远,并且知道他们可以随时打断任何工作来报告真正的bug。我们会离开董事会会议去修复一个严重的bug。
我们的支持方式让每个人都更快乐。客户很高兴。想象一下,当你打支持电话时,对方把你当成带来重要消息的人,那会是怎样的感受。客户支持人员喜欢这样做,因为这让他们能够帮助用户,而不是照着脚本念。程序员们也喜欢这样做,因为他们能够重现bug,而不是只听到模糊的二手报告。
我们即时修复bug的政策改变了客户支持人员与黑客之间的关系。在大多数软件公司,支持人员是低薪的人肉盾牌,而黑客则是小小的上帝化身——世界的创造者。无论报告bug的流程是什么,它很可能是单向的:支持人员听到bug后填写某种表格,最终(可能通过QA)传递给程序员,程序员把它添加到待办事项列表中。在Viaweb,情况截然不同。从客户那里听到bug后不到一分钟,支持人员就能站在程序员旁边,听到他说“该死,你说得对,这确实是个bug。”听到黑客说“你说得对”,让支持人员非常高兴。他们带着像猫把刚抓到的老鼠叼给你一样的期待神情来报告bug。这也使他们在判断bug严重性时更加谨慎,因为现在他们的名誉也押上了。
被雅虎收购后,客户支持人员被搬到了离程序员很远的地方。直到那时我们才意识到,他们实际上是QA,在某种程度上也是市场人员。除了抓bug,他们还掌握着更模糊、类似bug的问题的知识,比如让用户困惑的功能。[6]他们还充当了代理焦点小组的角色;我们可以问他们两个新功能中用户更想要哪一个,他们的答案总是对的。
Being able to release software immediately is a big motivator. Often as I was walking to work I would think of some change I wanted to make to the software, and do it that day. This worked for bigger features as well. Even if something was going to take two weeks to write (few projects took longer), I knew I could see the effect in the software as soon as it was done.
If I'd had to wait a year for the next release, I would have shelved most of these ideas, for a while at least. The thing about ideas, though, is that they lead to more ideas. Have you ever noticed that when you sit down to write something, half the ideas that end up in it are ones you thought of while writing it? The same thing happens with software. Working to implement one idea gives you more ideas. So shelving an idea costs you not only that delay in implementing it, but also all the ideas that implementing it would have led to. In fact, shelving an idea probably even inhibits new ideas: as you start to think of some new feature, you catch sight of the shelf and think "but I already have a lot of new things I want to do for the next release."
What big companies do instead of implementing features is plan them. At Viaweb we sometimes ran into trouble on this account. Investors and analysts would ask us what we had planned for the future. The truthful answer would have been, we didn't have any plans. We had general ideas about things we wanted to improve, but if we knew how we would have done it already. What were we going to do in the next six months? Whatever looked like the biggest win. I don't know if I ever dared give this answer, but that was the truth. Plans are just another word for ideas on the shelf. When we thought of good ideas, we implemented them.
At Viaweb, as at many software companies, most code had one definite owner. But when you owned something you really owned it: no one except the owner of a piece of software had to approve (or even know about) a release. There was no protection against breakage except the fear of looking like an idiot to one's peers, and that was more than enough. I may have given the impression that we just blithely plowed forward writing code. We did go fast, but we thought very carefully before we released software onto those servers. And paying attention is more important to reliability than moving slowly. Because he pays close attention, a Navy pilot can land a 40,000 lb. aircraft at 140 miles per hour on a pitching carrier deck, at night, more safely than the average teenager can cut a bagel.
This way of writing software is a double-edged sword of course. It works a lot better for a small team of good, trusted programmers than it would for a big company of mediocre ones, where bad ideas are caught by committees instead of the people that had them.
能够立即发布软件是一个巨大的激励因素。常常在走路去上班的路上,我会想到一些对软件的改动,然后当天就把它实现。对于更大的功能也是如此。即使某个功能需要两周才能写完(很少有项目耗时更长),我也知道一旦完成,我就能立即在软件中看到效果。
如果我必须等待一年才能发布下一个版本,我可能会搁置大部分想法,至少暂时如此。但想法的问题在于,它们会引发更多想法。你有没有注意到,当你坐下来写东西时,最终写出来的想法中有一半是你在写作过程中想到的?软件也是如此。实现一个想法会给你带来更多想法。所以搁置一个想法不仅让你延迟了实现,还损失了实现它本会带来的所有想法。事实上,搁置想法甚至可能抑制新想法:当你开始思考某个新功能时,你瞥见了搁置架,心想“但我已经有很多新东西想在下一个版本中做了。”
大公司不是实现功能,而是规划功能。在Viaweb,我们有时会因此遇到麻烦。投资者和分析师会问我们对未来有什么计划。诚实的回答是,我们没有任何计划。我们有想改进的总体思路,但如果我们知道怎么做,早就做了。未来六个月我们打算做什么?什么看起来收益最大就做什么。我不知道我是否敢给出这个答案,但事实就是如此。计划只是搁置想法的另一种说法。当我们想到好主意时,我们就去实现它。
在Viaweb,和许多软件公司一样,大多数代码有明确的所有者。但当你拥有某段代码时,你就真正拥有它:除了代码所有者,没有人需要批准(甚至知道)一次发布。防止破坏的唯一保护是害怕在同事面前显得像个傻瓜,而这已经足够了。我可能给人留下了我们只是轻率地向前推进写代码的印象。我们确实速度很快,但在把软件发布到那些服务器上之前,我们思考得非常仔细。对于可靠性来说,专注比速度更重要。由于高度专注,海军飞行员可以在夜间、在颠簸的航母甲板上以140英里/小时的速度降落一架40000磅的飞机,这比普通青少年切百吉饼还要安全。
当然,这种编写软件的方式是一把双刃剑。它对于由优秀、可信赖的程序员组成的小团队效果很好,但对于由平庸程序员组成的大公司则不然,在后一种情况下,坏主意是由委员会而不是想出它们的人来纠正的。
Fortunately, Web-based software does require fewer programmers. I once worked for a medium-sized desktop software company that had over 100 people working in engineering as a whole. Only 13 of these were in product development. All the rest were working on releases, ports, and so on. With Web-based software, all you need (at most) are the 13 people, because there are no releases, ports, and so on.
Viaweb was written by just three people. [7] I was always under pressure to hire more, because we wanted to get bought, and we knew that buyers would have a hard time paying a high price for a company with only three programmers. (Solution: we hired more, but created new projects for them.)
When you can write software with fewer programmers, it saves you more than money. As Fred Brooks pointed out in The Mythical Man-Month, adding people to a project tends to slow it down. The number of possible connections between developers grows exponentially with the size of the group. The larger the group, the more time they'll spend in meetings negotiating how their software will work together, and the more bugs they'll get from unforeseen interactions. Fortunately, this process also works in reverse: as groups get smaller, software development gets exponentially more efficient. I can't remember the programmers at Viaweb ever having an actual meeting. We never had more to say at any one time than we could say as we were walking to lunch.
If there is a downside here, it is that all the programmers have to be to some degree system administrators as well. When you're hosting software, someone has to be watching the servers, and in practice the only people who can do this properly are the ones who wrote the software. At Viaweb our system had so many components and changed so frequently that there was no definite border between software and infrastructure. Arbitrarily declaring such a border would have constrained our design choices. And so although we were constantly hoping that one day ("in a couple months") everything would be stable enough that we could hire someone whose job was just to worry about the servers, it never happened.
I don't think it could be any other way, as long as you're still actively developing the product. Web-based software is never going to be something you write, check in, and go home. It's a live thing, running on your servers right now. A bad bug might not just crash one user's process; it could crash them all. If a bug in your code corrupts some data on disk, you have to fix it. And so on. We found that you don't have to watch the servers every minute (after the first year or so), but you definitely want to keep an eye on things you've changed recently. You don't release code late at night and then go home.
幸运的是,Web软件确实需要更少的程序员。我曾在一家中型桌面软件公司工作,整个工程部门有超过100人,其中只有13人从事产品开发。其余的人都忙于发布、移植等工作。而对于Web软件,你(最多)只需要那13个人,因为没有发布、移植等需求。
Viaweb仅由三个人编写。[7]我一直面临招聘更多人的压力,因为我们希望被收购,而且我们知道收购方很难为一个只有三个程序员的公司出高价。(解决方案:我们招了更多人,但为他们创建了新项目。)
当你能用更少的程序员编写软件时,节省的不仅仅是钱。正如弗雷德·布鲁克斯在《人月神话》中指出的,向项目添加人手往往会拖慢进度。开发者之间可能的连接数随着团队规模呈指数增长。团队越大,他们花在会议上协商软件如何协同工作上的时间就越多,因不可预见的交互而产生的bug也越多。幸运的是,这个过程也可以反向进行:随着团队变小,软件开发的效率呈指数级提高。我不记得Viaweb的程序员开过任何正式的会议。我们任何时候需要说的话,都像在走去吃午饭的路上那样简短。
如果说有什么缺点,那就是所有程序员都必须在某种程度上兼任系统管理员。当你托管软件时,必须有人盯着服务器,而实际上只有编写软件的人才能做好这件事。在Viaweb,我们的系统有太多组件,变化如此频繁,以至于软件和基础设施之间没有明确的界限。武断地划定这样的界限会限制我们的设计选择。因此,尽管我们一直希望有一天(“再等几个月”)一切都会稳定到可以雇一个人专门负责服务器,但这一天从未到来。
我认为,只要你仍在积极开发产品,就不可能不这样。Web软件永远不会是你写完、提交、然后回家就完事的东西。它是一个活的东西,此刻正运行在你的服务器上。一个严重的bug可能不仅使一个用户的进程崩溃,还可能使所有用户崩溃。如果你的代码中的bug破坏了磁盘上的数据,你必须修复它。等等等等。我们发现,你不需要每分钟都盯着服务器(第一年之后),但你绝对需要密切关注你最近更改过的东西。你不会在深夜发布代码然后回家。
With server-based software, you're in closer touch with your code. You can also be in closer touch with your users. Intuit is famous for introducing themselves to customers at retail stores and asking to follow them home. If you've ever watched someone use your software for the first time, you know what surprises must have awaited them.
Software should do what users think it will. But you can't have any idea what users will be thinking, believe me, until you watch them. And server-based software gives you unprecedented information about their behavior. You're not limited to small, artificial focus groups. You can see every click made by every user. You have to consider carefully what you're going to look at, because you don't want to violate users' privacy, but even the most general statistical sampling can be very useful.
When you have the users on your server, you don't have to rely on benchmarks, for example. Benchmarks are simulated users. With server-based software, you can watch actual users. To decide what to optimize, just log into a server and see what's consuming all the CPU. And you know when to stop optimizing too: we eventually got the Viaweb editor to the point where it was memory-bound rather than CPU-bound, and since there was nothing we could do to decrease the size of users' data (well, nothing easy), we knew we might as well stop there.
Efficiency matters for server-based software, because you're paying for the hardware. The number of users you can support per server is the divisor of your capital cost, so if you can make your software very efficient you can undersell competitors and still make a profit. At Viaweb we got the capital cost per user down to about $5. It would be less now, probably less than the cost of sending them the first month's bill. Hardware is free now, if your software is reasonably efficient.
Watching users can guide you in design as well as optimization. Viaweb had a scripting language called RTML that let advanced users define their own page styles. We found that RTML became a kind of suggestion box, because users only used it when the predefined page styles couldn't do what they wanted. Originally the editor put button bars across the page, for example, but after a number of users used RTML to put buttons down the left side, we made that an option (in fact the default) in the predefined page styles.
Finally, by watching users you can often tell when they're in trouble. And since the customer is always right, that's a sign of something you need to fix. At Viaweb the key to getting users was the online test drive. It was not just a series of slides built by marketing people. In our test drive, users actually used the software. It took about five minutes, and at the end of it they had built a real, working store.
The test drive was the way we got nearly all our new users. I think it will be the same for most Web-based applications. If users can get through a test drive successfully, they'll like the product. If they get confused or bored, they won't. So anything we could do to get more people through the test drive would increase our growth rate. I studied click trails of people taking the test drive and found that at a certain step they would get confused and click on the browser's Back button. (If you try writing Web-based applications, you'll find that the Back button becomes one of your most interesting philosophical problems.) So I added a message at that point, telling users that they were nearly finished, and reminding them not to click on the Back button. Another great thing about Web-based software is that you get instant feedback from changes: the number of people completing the test drive rose immediately from 60% to 90%. And since the number of new users was a function of the number of completed test drives, our revenue growth increased by 50%, just from that change.
使用基于服务器的软件,你与代码的联系更紧密。你也可以与用户保持更紧密的联系。Intuit 以在零售店向客户介绍自己并请求跟随他们回家而闻名。如果你曾看过别人第一次使用你的软件,你就会知道他们会遇到什么样的惊喜。
软件应该做用户认为它会做的事情。但相信我,在观察用户之前,你根本无法知道他们在想什么。而基于服务器的软件能为你提供前所未有的用户行为信息。你不再局限于小型的人工焦点小组。你可以看到每个用户的每一次点击。你需要仔细考虑要看什么,因为你不想侵犯用户的隐私,但即使是最通用的统计抽样也能非常有用。
例如,当用户在你的服务器上时,你不需要依赖基准测试。基准测试是模拟用户。使用基于服务器的软件,你可以观察真实的用户。要决定优化什么,只需登录服务器,看看是什么消耗了所有的 CPU。你也知道何时停止优化:我们最终让 Viaweb 编辑器达到内存受限而非 CPU 受限的程度,既然我们无法减少用户数据的大小(好吧,没有简单的方法),我们知道不妨就此打住。
效率对基于服务器的软件很重要,因为你需要为硬件付费。每台服务器能支持的用户数是资本成本的分母,所以如果你能让软件非常高效,你就可以以低于竞争对手的价格出售,同时还能盈利。在 Viaweb,我们将每个用户的资本成本降到了大约 5 美元。现在可能更低,可能低于给他们寄第一张账单的成本。如果你的软件足够高效,硬件现在几乎是免费的。
观察用户不仅可以指导设计,还可以指导优化。Viaweb 有一种叫做 RTML 的脚本语言,让高级用户可以定义自己的页面样式。我们发现 RTML 成了一个建议箱,因为用户只有在预定义页面样式不能满足他们需求时才会使用它。例如,最初编辑器在页面顶部放置按钮栏,但一些用户使用 RTML 将按钮放在左侧后,我们将其设为预定义页面样式中的一个选项(事实上是默认选项)。
最后,通过观察用户,你通常能看出他们何时遇到困难。既然客户永远是对的,那就是你需要修复的迹象。在 Viaweb,获取用户的关键是在线试用。它不仅仅是营销人员制作的一系列幻灯片。在我们的试用中,用户实际使用了软件。大约需要五分钟,结束时他们就能建立一个真实可用的商店。
试用是我们获得几乎所有新用户的方式。我认为大多数 Web 应用也会如此。如果用户能成功完成试用,他们就会喜欢这个产品。如果他们感到困惑或无聊,就不会喜欢。所以,任何能帮助更多人完成试用的事情都会提高我们的增长率。
我研究了进行试用的用户的点击路径,发现在某一步他们会被搞糊涂并点击浏览器的“后退”按钮。(如果你尝试编写 Web 应用,你会发现“后退”按钮会成为你最有趣的哲学问题之一。)于是我在那个位置添加了一条消息,告诉用户他们快完成了,并提醒他们不要点击“后退”按钮。Web 软件的另一个好处是你能即时获得更改的反馈:完成试用的人数立即从 60% 上升到 90%。由于新用户数量是完成试用次数的函数,仅这一项改动就让我们的收入增长了 50%。
In the early 1990s I read an article in which someone said that software was a subscription business. At first this seemed a very cynical statement. But later I realized that it reflects reality: software development is an ongoing process. I think it's cleaner if you openly charge subscription fees, instead of forcing people to keep buying and installing new versions so that they'll keep paying you. And fortunately, subscriptions are the natural way to bill for Web-based applications.
Hosting applications is an area where companies will play a role that is not likely to be filled by freeware. Hosting applications is a lot of stress, and has real expenses. No one is going to want to do it for free.
For companies, Web-based applications are an ideal source of revenue. Instead of starting each quarter with a blank slate, you have a recurring revenue stream. Because your software evolves gradually, you don't have to worry that a new model will flop; there never need be a new model, per se, and if you do something to the software that users hate, you'll know right away. You have no trouble with uncollectable bills; if someone won't pay you can just turn off the service. And there is no possibility of piracy.
That last "advantage" may turn out to be a problem. Some amount of piracy is to the advantage of software companies. If some user really would not have bought your software at any price, you haven't lost anything if he uses a pirated copy. In fact you gain, because he is one more user helping to make your software the standard-- or who might buy a copy later, when he graduates from high school.
When they can, companies like to do something called price discrimination, which means charging each customer as much as they can afford. [8] Software is particularly suitable for price discrimination, because the marginal cost is close to zero. This is why some software costs more to run on Suns than on Intel boxes: a company that uses Suns is not interested in saving money and can safely be charged more. Piracy is effectively the lowest tier of price discrimination. I think that software companies understand this and deliberately turn a blind eye to some kinds of piracy. [9] With server-based software they are going to have to come up with some other solution.
Web-based software sells well, especially in comparison to desktop software, because it's easy to buy. You might think that people decide to buy something, and then buy it, as two separate steps. That's what I thought before Viaweb, to the extent I thought about the question at all. In fact the second step can propagate back into the first: if something is hard to buy, people will change their mind about whether they wanted it. And vice versa: you'll sell more of something when it's easy to buy. I buy more books because Amazon exists. Web-based software is just about the easiest thing in the world to buy, especially if you have just done an online demo. Users should not have to do much more than enter a credit card number. (Make them do more at your peril.)
Sometimes Web-based software is offered through ISPs acting as resellers. This is a bad idea. You have to be administering the servers, because you need to be constantly improving both hardware and software. If you give up direct control of the servers, you give up most of the advantages of developing Web-based applications.
Several of our competitors shot themselves in the foot this way-- usually, I think, because they were overrun by suits who were excited about this huge potential channel, and didn't realize that it would ruin the product they hoped to sell through it. Selling Web-based software through ISPs is like selling sushi through vending machines.
早在20世纪90年代初,我读到一篇文章,其中有人说软件是一种订阅业务。起初这听起来非常愤世嫉俗。但后来我意识到它反映了现实:软件开发是一个持续的过程。我认为公开收取订阅费更干净利落,而不是强迫人们不断购买和安装新版本以持续付费。幸运的是,订阅是Web应用的天然计费方式。
托管应用程序是一个领域,公司将在其中扮演自由软件不可能填补的角色。托管应用程序压力很大,而且有实际开销。没有人愿意免费做这种事。
对于公司来说,Web应用是理想的收入来源。你不需要每个季度从零开始,而是拥有经常性收入流。由于你的软件逐步演进,你不用担心新模式会失败;根本不需要所谓的新模式,如果你对软件做了用户讨厌的改动,你会立刻知道。你不会有坏账的麻烦;如果有人不付款,你可以直接关闭服务。而且不存在盗版的可能性。
最后一个“优势”可能反而成为问题。一定程度的盗版对软件公司是有利的。如果某个用户无论如何都不会购买你的软件,那么他用盗版对你没有任何损失。实际上你还有收益,因为他成为了帮助你的软件成为标准的一个用户——或者他以后从高中毕业时可能会买一份。
在可能的情况下,公司喜欢做所谓价格歧视,即向每个客户收取他们能承受的最高价格。[8]软件特别适合价格歧视,因为边际成本接近于零。这就是为什么某些软件在Sun机器上比在Intel机器上运行更贵:使用Sun的公司不在乎省钱,可以放心地收取更多费用。盗版实际上就是价格歧视的最低一层。我认为软件公司明白这一点,并故意对某些盗版睁一只眼闭一只眼。[9]但对于基于服务器的软件,他们必须想出其他解决办法。
Web软件卖得很好,尤其是与桌面软件相比,因为它很容易购买。你可能会认为人们先决定购买,然后执行购买,是两个独立的步骤。在Viaweb之前我也是这么想的,就我对这个问题的思考而言。实际上,第二步会反向影响第一步:如果某样东西很难购买,人们会改变主意,不再想要它。反之亦然:当某样东西容易购买时,你会卖出更多。因为亚马逊存在,我买了更多的书。Web软件几乎是世界上最容易购买的东西,尤其是当你刚刚完成在线演示时。用户只需输入信用卡号即可。(让他们多做一步,后果自负。)
有时Web软件通过充当转售商的ISP提供。这是一个坏主意。你必须亲自管理服务器,因为你需要不断改进硬件和软件。如果你放弃对服务器的直接控制,你就放弃了开发Web应用的大部分优势。
我们的一些竞争对手就因此搬起石头砸了自己的脚——我认为,通常是因为他们被那些对这个巨大潜在渠道兴奋不已、却没有意识到这会毁了他们想通过该渠道销售的产品的高管们冲昏了头脑。通过ISP销售Web软件就像通过自动售货机卖寿司。
Who will the customers be? At Viaweb they were initially individuals and smaller companies, and I think this will be the rule with Web-based applications. These are the users who are ready to try new things, partly because they're more flexible, and partly because they want the lower costs of new technology.
Web-based applications will often be the best thing for big companies too (though they'll be slow to realize it). The best intranet is the Internet. If a company uses true Web-based applications, the software will work better, the servers will be better administered, and employees will have access to the system from anywhere.
The argument against this approach usually hinges on security: if access is easier for employees, it will be for bad guys too. Some larger merchants were reluctant to use Viaweb because they thought customers' credit card information would be safer on their own servers. It was not easy to make this point diplomatically, but in fact the data was almost certainly safer in our hands than theirs. Who can hire better people to manage security, a technology startup whose whole business is running servers, or a clothing retailer? Not only did we have better people worrying about security, we worried more about it. If someone broke into the clothing retailer's servers, it would affect at most one merchant, could probably be hushed up, and in the worst case might get one person fired. If someone broke into ours, it could affect thousands of merchants, would probably end up as news on CNet, and could put us out of business.
If you want to keep your money safe, do you keep it under your mattress at home, or put it in a bank? This argument applies to every aspect of server administration: not just security, but uptime, bandwidth, load management, backups, etc. Our existence depended on doing these things right. Server problems were the big no-no for us, like a dangerous toy would be for a toy maker, or a salmonella outbreak for a food processor.
A big company that uses Web-based applications is to that extent outsourcing IT. Drastic as it sounds, I think this is generally a good idea. Companies are likely to get better service this way than they would from in-house system administrators. System administrators can become cranky and unresponsive because they're not directly exposed to competitive pressure: a salesman has to deal with customers, and a developer has to deal with competitors' software, but a system administrator, like an old bachelor, has few external forces to keep him in line. [10] At Viaweb we had external forces in plenty to keep us in line. The people calling us were customers, not just co-workers. If a server got wedged, we jumped; just thinking about it gives me a jolt of adrenaline, years later.
So Web-based applications will ordinarily be the right answer for big companies too. They will be the last to realize it, however, just as they were with desktop computers. And partly for the same reason: it will be worth a lot of money to convince big companies that they need something more expensive.
There is always a tendency for rich customers to buy expensive solutions, even when cheap solutions are better, because the people offering expensive solutions can spend more to sell them. At Viaweb we were always up against this. We lost several high-end merchants to Web consulting firms who convinced them they'd be better off if they paid half a million dollars for a custom-made online store on their own server. They were, as a rule, not better off, as more than one discovered when Christmas shopping season came around and loads rose on their server. Viaweb was a lot more sophisticated than what most of these merchants got, but we couldn't afford to tell them. At $300 a month, we couldn't afford to send a team of well-dressed and authoritative-sounding people to make presentations to customers.
A large part of what big companies pay extra for is the cost of selling expensive things to them. (If the Defense Department pays a thousand dollars for toilet seats, it's partly because it costs a lot to sell toilet seats for a thousand dollars.) And this is one reason intranet software will continue to thrive, even though it is probably a bad idea. It's simply more expensive. There is nothing you can do about this conundrum, so the best plan is to go for the smaller customers first. The rest will come in time.
客户会是谁?在Viaweb,他们最初是个人和小公司,我认为这将是Web应用的规律。这些用户愿意尝试新事物,部分是因为他们更灵活,部分是因为他们想要新技术的低成本。
Web应用对大公司来说通常也是最好的选择(尽管他们会很慢才意识到这一点)。最好的内网就是互联网。如果一家公司使用真正的Web应用,软件会运行得更好,服务器会得到更好的管理,员工可以从任何地方访问系统。
反对这种做法的理由通常集中在安全上:如果员工更容易访问,那么坏人也会更容易。一些较大的商家不愿意使用Viaweb,因为他们认为客户的信用卡信息在自己的服务器上更安全。要想委婉地说明这一点并不容易,但事实上,数据在我们手里几乎肯定比在他们手里更安全。谁能雇到更好的人来管理安全?是一家整个业务就是运行服务器的技术初创公司,还是一家服装零售商?我们不仅有更好的人来操心安全,我们更关心安全。如果有人入侵了服装零售商的服务器,最多影响一个商家,可能被掩盖过去,最坏的情况下一个人被解雇。如果有人入侵了我们的服务器,可能影响数千个商家,很可能成为CNet上的新闻,并让我们关门大吉。
如果你想让钱安全,你是把它藏在床垫下,还是存到银行?这个论点适用于服务器管理的每个方面:不仅仅是安全,还有正常运行时间、带宽、负载管理、备份等。我们的生存依赖于把这些事情做好。服务器问题对我们来说是绝对的禁忌,就像玩具制造商眼中的危险玩具,或食品加工商眼中的沙门氏菌爆发。
一个使用Web应用的大公司在某种程度上是在外包IT。尽管听起来很极端,但我认为这通常是个好主意。公司通过这种方式获得的服务很可能比内部系统管理员提供的更好。系统管理员可能会变得暴躁和反应迟钝,因为他们没有直接承受竞争压力:销售人员必须应对客户,开发者必须应对竞争对手的软件,但系统管理员,就像一个老光棍,几乎没有外部力量来约束他。[10]在Viaweb,我们有大量的外部力量来约束我们。给我们打电话的是客户,不仅仅是同事。如果一台服务器卡住了,我们会立刻跳起来;多年后回想起来,我仍然会感到一阵肾上腺素飙升。
因此,Web应用通常对大公司来说也是正确的答案。然而,他们会是最后意识到这一点的,就像他们对待台式电脑一样。部分原因相同:要让大公司相信他们需要更昂贵的东西,可以赚很多钱。
富有的客户总是倾向于购买昂贵的解决方案,即使便宜的方案更好,因为提供昂贵方案的人可以花更多钱来推销。在Viaweb,我们一直面临这种情况。我们失去了一些高端客户,他们被Web咨询公司说服,认为花50万美元在自己的服务器上定制一个在线商店会更好。通常,他们并没有得到更好的结果,不止一个客户在圣诞节购物季到来、服务器负载上升时发现了这一点。Viaweb比这些商家得到的大多数方案要先进得多,但我们无法负担向他们展示的费用。每月300美元,我们请不起一队穿着得体、听起来权威的人去给客户做演示。
大公司多付的很大一部分是用于向他们推销昂贵物品的成本。(如果国防部为马桶座圈支付一千美元,部分原因是推销一千美元的马桶座圈成本很高。)这也是内网软件将继续蓬勃发展的原因之一,尽管它很可能是个坏主意。它只是更贵。对此你无能为力,所以最好的策略是先争取小客户。其余的迟早会来。
Running software on the server is nothing new. In fact it's the old model: mainframe applications are all server-based. If server-based software is such a good idea, why did it lose last time? Why did desktop computers eclipse mainframes?
At first desktop computers didn't look like much of a threat. The first users were all hackers-- or hobbyists, as they were called then. They liked microcomputers because they were cheap. For the first time, you could have your own computer. The phrase "personal computer" is part of the language now, but when it was first used it had a deliberately audacious sound, like the phrase "personal satellite" would today.
Why did desktop computers take over? I think it was because they had better software. And I think the reason microcomputer software was better was that it could be written by small companies.
I don't think many people realize how fragile and tentative startups are in the earliest stage. Many startups begin almost by accident-- as a couple guys, either with day jobs or in school, writing a prototype of something that might, if it looks promising, turn into a company. At this larval stage, any significant obstacle will stop the startup dead in its tracks. Writing mainframe software required too much commitment up front. Development machines were expensive, and because the customers would be big companies, you'd need an impressive-looking sales force to sell it to them. Starting a startup to write mainframe software would be a much more serious undertaking than just hacking something together on your Apple II in the evenings. And so you didn't get a lot of startups writing mainframe applications.
The arrival of desktop computers inspired a lot of new software, because writing applications for them seemed an attainable goal to larval startups. Development was cheap, and the customers would be individual people that you could reach through computer stores or even by mail-order.
The application that pushed desktop computers out into the mainstream was VisiCalc, the first spreadsheet. It was written by two guys working in an attic, and yet did things no mainframe software could do. [11] VisiCalc was such an advance, in its time, that people bought Apple IIs just to run it. And this was the beginning of a trend: desktop computers won because startups wrote software for them.
It looks as if server-based software will be good this time around, because startups will write it. Computers are so cheap now that you can get started, as we did, using a desktop computer as a server. Inexpensive processors have eaten the workstation market (you rarely even hear the word now) and are most of the way through the server market; Yahoo's servers, which deal with loads as high as any on the Internet, all have the same inexpensive Intel processors that you have in your desktop machine. And once you've written the software, all you need to sell it is a Web site. Nearly all our users came direct to our site through word of mouth and references in the press. [12]
Viaweb was a typical larval startup. We were terrified of starting a company, and for the first few months comforted ourselves by treating the whole thing as an experiment that we might call off at any moment. Fortunately, there were few obstacles except technical ones. While we were writing the software, our Web server was the same desktop machine we used for development, connected to the outside world by a dialup line. Our only expenses in that phase were food and rent.
There is all the more reason for startups to write Web-based software now, because writing desktop software has become a lot less fun. If you want to write desktop software now you do it on Microsoft's terms, calling their APIs and working around their buggy OS. And if you manage to write something that takes off, you may find that you were merely doing market research for Microsoft.
If a company wants to make a platform that startups will build on, they have to make it something that hackers themselves will want to use. That means it has to be inexpensive and well-designed. The Mac was popular with hackers when it first came out, and a lot of them wrote software for it. [13] You see this less with Windows, because hackers don't use it. The kind of people who are good at writing software tend to be running Linux or FreeBSD now.
I don't think we would have started a startup to write desktop software, because desktop software has to run on Windows, and before we could write software for Windows we'd have to use it. The Web let us do an end-run around Windows, and deliver software running on Unix direct to users through the browser. That is a liberating prospect, a lot like the arrival of PCs twenty-five years ago.
在服务器上运行软件并不新鲜。事实上,这是旧模式:大型机应用都是基于服务器的。如果说基于服务器的软件是个好主意,为什么上次它输了呢?为什么台式电脑取代了大型机?
起初,台式电脑看起来并不构成太大威胁。第一批用户都是黑客——或者当时被称为爱好者。他们喜欢微型计算机,因为它们便宜。这是你头一次可以拥有自己的电脑。“个人电脑”这个词现在已是日常用语,但第一次使用时它带有一种刻意大胆的语气,就像今天的“个人卫星”这个词。
为什么台式电脑接管了?我认为是因为它们有更好的软件。而微型计算机软件更好的原因在于它可以由小公司编写。
我认为没有多少人意识到初创公司在最初阶段有多么脆弱和试探性。许多初创公司几乎是偶然开始的——一两个人,要么有日常工作,要么在上学,编写一些东西的原型,如果看起来有希望,就会变成一家公司。在这个幼虫阶段,任何重大障碍都会让创业公司当场夭折。编写大型机软件需要太多的前期投入。开发机器昂贵,而且因为客户会是大公司,你需要一支看起来令人印象深刻的销售队伍去推销。创办一家编写大型机软件的初创公司,要比晚上在你的Apple II上捣鼓出些东西严肃得多。因此,没有多少初创公司编写大型机应用。
台式电脑的到来激发了大量新软件,因为为它们编写应用对于幼虫阶段的初创公司来说似乎是一个可以实现的目标。开发成本低廉,客户是个人,可以通过电脑店甚至邮购接触到。
将台式电脑推向主流的应用是VisiCalc,第一个电子表格。它是由两个在阁楼工作的人编写的,却能做到没有大型机软件能做到的事情。[11] VisiCalc 在当时是如此先进,以至于人们为了运行它而购买Apple II。这是趋势的开始:台式电脑赢了,因为初创公司为它们编写软件。
看起来这次基于服务器的软件会很好,因为初创公司会编写它。现在计算机如此便宜,你可以像我们一样,用台式电脑作为服务器起步。廉价的处理器已经吞噬了工作站市场(你现在甚至很少听到这个词了),并且正在蚕食服务器市场;雅虎的服务器处理着互联网上数一数二的负载,但它们都使用着你台式机中同样廉价的Intel处理器。一旦你编写了软件,你只需要一个网站来销售它。几乎我们所有的用户都是通过口碑和媒体推荐直接来到我们网站的。[12]
Viaweb是一个典型的幼虫初创公司。我们害怕创办公司,头几个月靠把整件事当作一个随时可以叫停的实验来安慰自己。幸运的是,除了技术问题,几乎没有其他障碍。在编写软件时,我们的Web服务器就是用于开发的同一台台式电脑,通过拨号线路连接到外部世界。那个阶段我们唯一的开销就是食物和房租。
现在初创公司更有理由编写Web软件,因为编写桌面软件已经变得不那么有趣了。如果你想编写桌面软件,你必须按照微软的规则来,调用它们的API,并绕开其充满bug的操作系统。如果你成功地编写了某个流行起来的东西,你可能会发现你只是在为微软做市场调研。
如果一家公司想打造一个初创公司会基于其构建的平台,它必须让黑客自己也想使用它。这意味着它必须便宜且设计精良。Mac刚推出时很受黑客欢迎,许多人为它编写软件。[13]你在Windows上就不太看到这种情况,因为黑客不使用它。擅长编写软件的那种人现在往往运行着Linux或FreeBSD。
我认为我们不会创办一家编写桌面软件的初创公司,因为桌面软件必须在Windows上运行,而我们在为Windows编写软件之前必须先使用它。Web让我们绕过Windows,将运行在Unix上的软件直接通过浏览器交付给用户。这是一个解放的趋势,很像25年前个人电脑的到来。
Back when desktop computers arrived, IBM was the giant that everyone was afraid of. It's hard to imagine now, but I remember the feeling very well. Now the frightening giant is Microsoft, and I don't think they are as blind to the threat facing them as IBM was. After all, Microsoft deliberately built their business in IBM's blind spot.
I mentioned earlier that my mother doesn't really need a desktop computer. Most users probably don't. That's a problem for Microsoft, and they know it. If applications run on remote servers, no one needs Windows. What will Microsoft do? Will they be able to use their control of the desktop to prevent, or constrain, this new generation of software?
My guess is that Microsoft will develop some kind of server/desktop hybrid, where the operating system works together with servers they control. At a minimum, files will be centrally available for users who want that. I don't expect Microsoft to go all the way to the extreme of doing the computations on the server, with only a browser for a client, if they can avoid it. If you only need a browser for a client, you don't need Microsoft on the client, and if Microsoft doesn't control the client, they can't push users towards their server-based applications.
I think Microsoft will have a hard time keeping the genie in the bottle. There will be too many different types of clients for them to control them all. And if Microsoft's applications only work with some clients, competitors will be able to trump them by offering applications that work from any client. [14]
In a world of Web-based applications, there is no automatic place for Microsoft. They may succeed in making themselves a place, but I don't think they'll dominate this new world as they did the world of desktop applications.
It's not so much that a competitor will trip them up as that they will trip over themselves. With the rise of Web-based software, they will be facing not just technical problems but their own wishful thinking. What they need to do is cannibalize their existing business, and I can't see them facing that. The same single-mindedness that has brought them this far will now be working against them. IBM was in exactly the same situation, and they could not master it. IBM made a late and half-hearted entry into the microcomputer business because they were ambivalent about threatening their cash cow, mainframe computing. Microsoft will likewise be hampered by wanting to save the desktop. A cash cow can be a damned heavy monkey on your back.
I'm not saying that no one will dominate server-based applications. Someone probably will eventually. But I think that there will be a good long period of cheerful chaos, just as there was in the easy days of microcomputers. That was a good time for startups. Lots of small companies flourished, and did it by making cool things.
当台式电脑刚出现时,IBM 是每个人都害怕的巨人。现在很难想象,但我清楚地记得那种感觉。现在令人恐惧的巨人是微软,我不认为他们对面临的威胁像 IBM 那样盲目。毕竟,微软故意在 IBM 的盲点中建立了自己的业务。
我前面提到我母亲并不真正需要台式电脑。大多数用户可能也不需要。这对微软来说是个问题,他们知道这一点。如果应用程序运行在远程服务器上,那么没人需要 Windows。微软会怎么做?他们能否利用对桌面的控制来阻止或限制这一代新软件?
我猜测微软会开发某种服务器/桌面混合体,其中操作系统与他们控制的服务器协同工作。至少,文件将集中提供给有需要的用户。我不认为微软会走极端,在服务器上进行计算、只留一个浏览器作为客户端——如果他们能避免的话。如果你只需要一个浏览器作为客户端,你就不需要微软的客户端,而如果微软不能控制客户端,他们就无法将用户推向他们的基于服务器的应用。
我认为微软将很难把魔鬼关回瓶子里。客户端的类型太多,他们无法全部控制。如果微软的应用只能与某些客户端配合,那么竞争对手就能通过提供可从任何客户端使用的应用来击败他们。[14]
在 Web 应用的世界里,微软没有天然的位置。他们或许能为自己争取一席之地,但我认为他们不会像统治桌面应用世界那样统治这个新世界。
与其说是竞争对手会绊倒他们,不如说他们会自己绊倒自己。随着 Web 软件的兴起,他们将面临的不只是技术问题,还有他们自己的一厢情愿。他们需要做的是吞食自己现有的业务,而我看不到他们能面对这一点。将他们带到今天这种地步的一心一意,现在将与他们作对。IBM 曾处于完全相同的境地,但他们没能克服。IBM 进入微型计算机业务既晚又三心二意,因为他们对威胁自己的现金牛——大型机计算——感到矛盾。同样,微软也会因想要拯救桌面而受到阻碍。现金牛可以是背上一只该死的沉重猴子。
我不是说没有人会统治基于服务器的应用。最终可能会有人做到。但我认为将会有一段相当长的愉快混乱时期,就像微型计算机早期那样。那是初创公司的好时光。许多小公司蓬勃发展,通过制造酷东西而成功。
The classic startup is fast and informal, with few people and little money. Those few people work very hard, and technology magnifies the effect of the decisions they make. If they win, they win big.
In a startup writing Web-based applications, everything you associate with startups is taken to an extreme. You can write and launch a product with even fewer people and even less money. You have to be even faster, and you can get away with being more informal. You can literally launch your product as three guys sitting in the living room of an apartment, and a server collocated at an ISP. We did.
Over time the teams have gotten smaller, faster, and more informal. In 1960, software development meant a roomful of men with horn rimmed glasses and narrow black neckties, industriously writing ten lines of code a day on IBM coding forms. In 1980, it was a team of eight to ten people wearing jeans to the office and typing into vt100s. Now it's a couple of guys sitting in a living room with laptops. (And jeans turn out not to be the last word in informality.)
Startups are stressful, and this, unfortunately, is also taken to an extreme with Web-based applications. Many software companies, especially at the beginning, have periods where the developers slept under their desks and so on. The alarming thing about Web-based software is that there is nothing to prevent this becoming the default. The stories about sleeping under desks usually end: then at last we shipped it and we all went home and slept for a week. Web-based software never ships. You can work 16-hour days for as long as you want to. And because you can, and your competitors can, you tend to be forced to. You can, so you must. It's Parkinson's Law running in reverse.
The worst thing is not the hours but the responsibility. Programmers and system administrators traditionally each have their own separate worries. Programmers have to worry about bugs, and system administrators have to worry about infrastructure. Programmers may spend a long day up to their elbows in source code, but at some point they get to go home and forget about it. System administrators never quite leave the job behind, but when they do get paged at 4:00 AM, they don't usually have to do anything very complicated. With Web-based applications, these two kinds of stress get combined. The programmers become system administrators, but without the sharply defined limits that ordinarily make the job bearable.
At Viaweb we spent the first six months just writing software. We worked the usual long hours of an early startup. In a desktop software company, this would have been the part where we were working hard, but it felt like a vacation compared to the next phase, when we took users onto our server. The second biggest benefit of selling Viaweb to Yahoo (after the money) was to be able to dump ultimate responsibility for the whole thing onto the shoulders of a big company.
Desktop software forces users to become system administrators. Web-based software forces programmers to. There is less stress in total, but more for the programmers. That's not necessarily bad news. If you're a startup competing with a big company, it's good news. [15] Web-based applications offer a straightforward way to outwork your competitors. No startup asks for more.
经典的创业公司快速、非正式,人少钱少。那少数人非常努力,技术放大了他们决策的效果。如果他们赢了,就赢大了。
在编写Web应用的初创公司中,你与创业相关的所有特质都会被推向极致。你可以用更少的人和更少的钱来编写和推出产品。你必须更快,并且可以更加非正式。你可以像我们一样,三个人坐在公寓的客厅里,加上一台托管在ISP的服务器,就推出产品。
随着时间的推移,团队变得更小、更快、更非正式。1960年,软件开发意味着一屋子戴着角框眼镜、系着窄黑领带的男人,勤勉地在IBM编码表单上每天写十行代码。1980年,是八到十人的团队穿着牛仔裤去办公室,在vt100终端上打字。现在,是几个人坐在客厅里用笔记本电脑。(而牛仔裤显然不是非正式的终点。)
创业压力很大,不幸的是,对于Web应用来说,这一点也被推向了极致。许多软件公司,尤其是在初期,都有开发者睡在办公桌下之类的时期。Web软件令人担忧的是,没有什么能阻止这成为常态。那些睡在办公桌下的故事通常以这样的结尾:最后我们发货了,然后回家睡了一个星期。Web软件永远不会有“发货”的时刻。你可以想工作16小时就工作16小时。而因为你可以,你的竞争对手也可以,你往往被迫如此。你可以,所以你必须。这是反过来的帕金森定律。
最糟糕的不是工作时间,而是责任。程序员和系统管理员传统上各有各的担忧。程序员要担心bug,系统管理员要担心基础设施。程序员可能长时间埋头于源代码,但最后他们可以回家然后忘掉工作。系统管理员则永远无法完全放下工作,但当他们在凌晨4点被呼,通常不需要做太复杂的事。对于Web应用,这两种压力合二为一。程序员变成了系统管理员,但没有通常让这份工作可以忍受的明确界限。
在Viaweb,头六个月我们只是在编写软件。我们像早期创业公司一样长时间工作。在桌面软件公司,这应该是我们努力工作的阶段,但与下一阶段——当我们将用户带到服务器上——相比,那感觉就像度假。将Viaweb卖给雅虎的第二大好处(仅次于金钱)就是能够将整个事情的最终责任甩给大公司。
桌面软件强迫用户成为系统管理员。Web软件强迫程序员成为系统管理员。总体上压力更小,但对程序员来说压力更大。这未必是坏消息。如果你是一个与大公司竞争的初创公司,这是好消息。[15] Web应用提供了一种直接的方式来比你的竞争对手更努力。创业公司不再要求更多。
One thing that might deter you from writing Web-based applications is the lameness of Web pages as a UI. That is a problem, I admit. There were a few things we would have really liked to add to HTML and HTTP. What matters, though, is that Web pages are just good enough.
There is a parallel here with the first microcomputers. The processors in those machines weren't actually intended to be the CPUs of computers. They were designed to be used in things like traffic lights. But guys like Ed Roberts, who designed the Altair, realized that they were just good enough. You could combine one of these chips with some memory (256 bytes in the first Altair), and front panel switches, and you'd have a working computer. Being able to have your own computer was so exciting that there were plenty of people who wanted to buy them, however limited.
Web pages weren't designed to be a UI for applications, but they're just good enough. And for a significant number of users, software that you can use from any browser will be enough of a win in itself to outweigh any awkwardness in the UI. Maybe you can't write the best-looking spreadsheet using HTML, but you can write a spreadsheet that several people can use simultaneously from different locations without special client software, or that can incorporate live data feeds, or that can page you when certain conditions are triggered. More importantly, you can write new kinds of applications that don't even have names yet. VisiCalc was not merely a microcomputer version of a mainframe application, after all-- it was a new type of application.
Of course, server-based applications don't have to be Web-based. You could have some other kind of client. But I'm pretty sure that's a bad idea. It would be very convenient if you could assume that everyone would install your client-- so convenient that you could easily convince yourself that they all would-- but if they don't, you're hosed. Because Web-based software assumes nothing about the client, it will work anywhere the Web works. That's a big advantage already, and the advantage will grow as new Web devices proliferate. Users will like you because your software just works, and your life will be easier because you won't have to tweak it for every new client.
[16]I feel like I've watched the evolution of the Web as closely as anyone, and I can't predict what's going to happen with clients. Convergence is probably coming, but where? I can't pick a winner. One thing I can predict is conflict between AOL and Microsoft. Whatever Microsoft's .NET turns out to be, it will probably involve connecting the desktop to servers. Unless AOL fights back, they will either be pushed aside or turned into a pipe between Microsoft client and server software. If Microsoft and AOL get into a client war, the only thing sure to work on both will be browsing the Web, meaning Web-based applications will be the only kind that work everywhere.
How will it all play out? I don't know. And you don't have to know if you bet on Web-based applications. No one can break that without breaking browsing. The Web may not be the only way to deliver software, but it's one that works now and will continue to work for a long time. Web-based applications are cheap to develop, and easy for even the smallest startup to deliver. They're a lot of work, and of a particularly stressful kind, but that only makes the odds better for startups.
可能阻止你编写Web应用的一件事是网页作为UI的局限性。我承认这是个问题。我们当时确实有一些很想添加到HTML和HTTP中的东西。但关键在于,网页已经足够好了。
这与早期的微型计算机有相似之处。那些机器中的处理器原本并不是被设计成计算机的CPU的。它们被设计用于交通信号灯之类的东西。但像设计Altair的Ed Roberts这样的人意识到它们已经足够好了。你可以将这种芯片与一些内存(第一个Altair只有256字节)和前面板开关组合起来,就能得到一台可工作的计算机。能够拥有自己的计算机这件事如此令人兴奋,以至于有很多人想买,尽管功能非常有限。
网页并不是被设计成应用程序的UI的,但它们已经足够好了。对相当多的用户来说,能够从任何浏览器使用的软件本身就是一大胜利,足以抵消UI上的任何笨拙。也许你无法用HTML写出最好看的电子表格,但你可以写出一个能让多人从不同地点同时使用、无需特殊客户端软件的电子表格,或者能整合实时数据源,或者在满足特定条件时呼你。更重要的是,你可以编写出还没有名字的新型应用。毕竟,VisiCalc不仅仅是大型机应用的微型机版本——它是一种新型应用。
当然,基于服务器的应用不一定非要是Web应用。你也可以有其他类型的客户端。但我很确定那是个坏主意。如果你能假定每个人都会安装你的客户端,那会非常方便——方便到你很容易说服自己他们都会这样做——但如果他们没有,你就完了。因为Web软件对客户端不做任何假设,它将在Web能到达的任何地方工作。这已经是一个巨大的优势,而且随着新的Web设备激增,这个优势还会增长。用户会喜欢你,因为你的软件就是能用;你的生活也会更轻松,因为你不需要为每个新客户端进行调整。
[16] 我觉得我和任何人一样密切地关注着Web的演进,但我无法预测客户端会发生什么。融合可能正在到来,但方向是什么?我选不出赢家。我能预测的一件事是AOL和微软之间的冲突。无论微软的.NET最终是什么样子,它很可能涉及将桌面连接到服务器。除非AOL反击,否则他们要么被挤到一边,要么变成微软客户端和服务器软件之间的管道。如果微软和AOL陷入客户端战争,唯一保证在两者上都工作的就是浏览Web,这意味着Web应用将是唯一一种到处都能工作的应用。
这一切将如何展开?我不知道。如果你押注Web应用,你也不需要知道。没有人能在不破坏浏览功能的情况下破坏这一点。Web可能不是交付软件的唯一方式,但它是现在能工作、并且会在很长一段时间内继续工作的一种方式。Web应用开发成本低廉,即使是最小的初创公司也能轻松交付。它们工作量大,压力特别大,但这也让初创公司获胜的几率更大。
E. B. White was amused to learn from a farmer friend that many electrified fences don't have any current running through them. The cows apparently learn to stay away from them, and after that you don't need the current. "Rise up, cows!" he wrote, "Take your liberty while despots snore!"
If you're a hacker who has thought of one day starting a startup, there are probably two things keeping you from doing it. One is that you don't know anything about business. The other is that you're afraid of competition. Neither of these fences have any current in them.
There are only two things you have to know about business: build something users love, and make more than you spend. If you get these two right, you'll be ahead of most startups. You can figure out the rest as you go.
You may not at first make more than you spend, but as long as the gap is closing fast enough you'll be ok. If you start out underfunded, it will at least encourage a habit of frugality. The less you spend, the easier it is to make more than you spend. Fortunately, it can be very cheap to launch a Web-based application. We launched on under $10,000, and it would be even cheaper today. We had to spend thousands on a server, and thousands more to get SSL. (The only company selling SSL software at the time was Netscape.) Now you can rent a much more powerful server, with SSL included, for less than we paid for bandwidth alone. You could launch a Web-based application now for less than the cost of a fancy office chair.
As for building something users love, here are some general tips. Start by making something clean and simple that you would want to use yourself. Get a version 1.0 out fast, then continue to improve the software, listening closely to the users as you do. The customer is always right, but different customers are right about different things; the least sophisticated users show you what you need to simplify and clarify, and the most sophisticated tell you what features you need to add. The best thing software can be is easy, but the way to do this is to get the defaults right, not to limit users' choices. Don't get complacent if your competitors' software is lame; the standard to compare your software to is what it could be, not what your current competitors happen to have. Use your software yourself, all the time. Viaweb was supposed to be an online store builder, but we used it to make our own site too. Don't listen to marketing people or designers or product managers just because of their job titles. If they have good ideas, use them, but it's up to you to decide; software has to be designed by hackers who understand design, not designers who know a little about software. If you can't design software as well as implement it, don't start a startup.
Now let's talk about competition. What you're afraid of is not presumably groups of hackers like you, but actual companies, with offices and business plans and salesmen and so on, right? Well, they are more afraid of you than you are of them, and they're right. It's a lot easier for a couple of hackers to figure out how to rent office space or hire sales people than it is for a company of any size to get software written. I've been on both sides, and I know. When Viaweb was bought by Yahoo, I suddenly found myself working for a big company, and it was like trying to run through waist-deep water.
I don't mean to disparage Yahoo. They had some good hackers, and the top management were real butt-kickers. For a big company, they were exceptional. But they were still only about a tenth as productive as a small startup. No big company can do much better than that. What's scary about Microsoft is that a company so big can develop software at all. They're like a mountain that can walk.
Don't be intimidated. You can do as much that Microsoft can't as they can do that you can't. And no one can stop you. You don't have to ask anyone's permission to develop Web-based applications. You don't have to do licensing deals, or get shelf space in retail stores, or grovel to have your application bundled with the OS. You can deliver software right to the browser, and no one can get between you and potential users without preventing them from browsing the Web.
You may not believe it, but I promise you, Microsoft is scared of you. The complacent middle managers may not be, but Bill is, because he was you once, back in 1975, the last time a new way of delivering software appeared.
E. B. 怀特从一个农民朋友那里得知,许多通电的围栏实际上并没有电流通过。显然奶牛学会了远离它们,之后你就不需要电流了。“起来吧,奶牛们!”他写道,“在暴君打鼾时夺取自由!”
如果你是一个曾想过某一天创办一家初创公司的黑客,可能有两件事在阻止你。一是你对商业一无所知。二是你害怕竞争。这两种围栏里都没有电流。
关于商业,你只需要知道两件事:构建用户喜欢的东西,并且挣得比花得多。如果你这两点做对了,你就会领先于大多数初创公司。剩下的你可以在实践中学习。
一开始你可能挣得比花得少,但只要差距在迅速缩小,你就能生存。如果你起步时资金不足,那至少会养成节俭的习惯。花得越少,就越容易挣得比花得多。幸运的是,启动一个Web应用可以非常便宜。我们启动时花了不到一万美元,现在会更便宜。我们当时不得不花几千美元买服务器,再花几千美元购买SSL(当时唯一出售SSL软件的公司是网景)。现在你可以租用一台更强大的服务器,包含SSL,价格比我们当时仅支付的带宽费用还低。你现在启动一个Web应用的成本可以低于一把高档办公椅的价格。
至于构建用户喜欢的东西,这里有一些通用建议。从制作一个你自己会用的干净简单的东西开始。快速推出1.0版,然后持续改进软件,同时密切关注用户的反馈。客户永远是对的,但不同的客户对不同的东西是对的;最不懂的用户告诉你需要简化和澄清什么,最懂的用户告诉你需要添加什么功能。软件最好的状态是易用,但实现的方法是把默认设置做对,而不是限制用户的选择。不要因为竞争对手的软件很烂就自满;比较你软件的标准应该是它可能达到的水平,而不是你当前竞争对手恰好拥有的水平。自己一直使用你的软件。Viaweb本来是一个在线商店构建器,但我们也用它来制作我们自己的网站。不要仅仅因为头衔就听市场人员、设计师或产品经理的话。如果他们有好的想法,就采纳,但决定权在你;软件必须由理解设计的黑客来设计,而不是由懂一点软件的设计师来设计。如果你不能像实现软件那样设计软件,就不要创办初创公司。
现在我们来谈谈竞争。你害怕的,大概不是像你一样的黑客群体,而是真正的公司,有办公室、商业计划和销售人员等等,对吧?嗯,他们比你更害怕你,而且他们是对的。两个黑客学会租办公室或雇销售人员,比任何规模的公司编写出软件要容易得多。我两边都待过,我知道。当Viaweb被雅虎收购后,我突然发现自己在一家大公司工作,就像在齐腰深的水里奔跑。
我不是要贬低雅虎。他们有一些优秀的黑客,高层管理人员是真正的实干家。作为一家大公司,他们很出色。但他们的生产力仍然只有小初创公司的十分之一左右。没有哪家大公司能做得比这好多少。微软的可怕之处在于,一个这么大的公司居然还能开发软件。他们就像一座能行走的山。
不要被吓倒。你能做微软做不到的事,就像微软能做你做不到的事一样。而且没有人能阻止你。你不需要任何人的许可来开发Web应用。你不需要做许可交易,不需要在零售店获得货架空间,也不需要低声下气地求人把你的应用捆绑到操作系统中。你可以直接把软件交付到浏览器,没有人能在不阻止用户浏览Web的情况下插在你和潜在用户之间。
你可能不相信,但我向你保证,微软怕你。那些自满的中层管理者可能不怕,但比尔怕,因为他在1975年也曾是你,那是上一种新的软件交付方式出现的时候。
[1] Realizing that much of the money is in the services, companies building lightweight clients have usually tried to combine the hardware with an online service. This approach has not worked well, partly because you need two different kinds of companies to build consumer electronics and to run an online service, and partly because users hate the idea. Giving away the razor and making money on the blades may work for Gillette, but a razor is much smaller commitment than a Web terminal. Cell phone handset makers are satisfied to sell hardware without trying to capture the service revenue as well. That should probably be the model for Internet clients too. If someone just sold a nice-looking little box with a Web browser that you could use to connect through any ISP, every technophobe in the country would buy one.
[2] Security always depends more on not screwing up than any design decision, but the nature of server-based software will make developers pay more attention to not screwing up. Compromising a server could cause such damage that ASPs (that want to stay in business) are likely to be careful about security.
[3] In 1995, when we started Viaweb, Java applets were supposed to be the technology everyone was going to use to develop server-based applications. Applets seemed to us an old-fashioned idea. Download programs to run on the client? Simpler just to go all the way and run the programs on the server. We wasted little time on applets, but countless other startups must have been lured into this tar pit. Few can have escaped alive, or Microsoft could not have gotten away with dropping Java in the most recent version of Explorer.
[4] This point is due to Trevor Blackwell, who adds "the cost of writing software goes up more than linearly with its size. Perhaps this is mainly due to fixing old bugs, and the cost can be more linear if all bugs are found quickly."
[5] The hardest kind of bug to find may be a variant of compound bug where one bug happens to compensate for another. When you fix one bug, the other becomes visible. But it will seem as if the fix is at fault, since that was the last thing you changed.
[6] Within Viaweb we once had a contest to describe the worst thing about our software. Two customer support people tied for first prize with entries I still shiver to recall. We fixed both problems immediately.
[7] Robert Morris wrote the ordering system, which shoppers used to place orders. Trevor Blackwell wrote the image generator and the manager, which merchants used to retrieve orders, view statistics, and configure domain names etc. I wrote the editor, which merchants used to build their sites. The ordering system and image generator were written in C and C++, the manager mostly in Perl, and the editor in Lisp.
[8] Price discrimination is so pervasive (how often have you heard a retailer claim that their buying power meant lower prices for you?) that I was surprised to find it was outlawed in the U.S. by the Robinson-Patman Act of 1936. This law does not appear to be vigorously enforced.
[9] In No Logo, Naomi Klein says that clothing brands favored by "urban youth" do not try too hard to prevent shoplifting because in their target market the shoplifters are also the fashion leaders.
[10] Companies often wonder what to outsource and what not to. One possible answer: outsource any job that's not directly exposed to competitive pressure, because outsourcing it will thereby expose it to competitive pressure.
[11] The two guys were Dan Bricklin and Bob Frankston. Dan wrote a prototype in Basic in a couple days, then over the course of the next year they worked together (mostly at night) to make a more powerful version written in 6502 machine language. Dan was at Harvard Business School at the time and Bob nominally had a day job writing software. "There was no great risk in doing a business," Bob wrote, "If it failed it failed. No big deal."
[12] It's not quite as easy as I make it sound. It took a painfully long time for word of mouth to get going, and we did not start to get a lot of press coverage until we hired a PR firm (admittedly the best in the business) for $16,000 per month. However, it was true that the only significant channel was our own Web site.
[13] If the Mac was so great, why did it lose? Cost, again. Microsoft concentrated on the software business, and unleashed a swarm of cheap component suppliers on Apple hardware. It did not help, either, that suits took over during a critical period.
[14] One thing that would help Web-based applications, and help keep the next generation of software from being overshadowed by Microsoft, would be a good open-source browser. Mozilla is open-source but seems to have suffered from having been corporate software for so long. A small, fast browser that was actively maintained would be a great thing in itself, and would probably also encourage companies to build little Web appliances.
Among other things, a proper open-source browser would cause HTTP and HTML to continue to evolve (as e.g. Perl has). It would help Web-based applications greatly to be able to distinguish between selecting a link and following it; all you'd need to do this would be a trivial enhancement of HTTP, to allow multiple urls in a request. Cascading menus would also be good.
If you want to change the world, write a new Mosaic. Think it's too late? In 1998 a lot of people thought it was too late to launch a new search engine, but Google proved them wrong. There is always room for something new if the current options suck enough. Make sure it works on all the free OSes first-- new things start with their users.
[15] Trevor Blackwell, who probably knows more about this from personal experience than anyone, writes:
"I would go farther in saying that because server-based software is so hard on the programmers, it causes a fundamental economic shift away from large companies. It requires the kind of intensity and dedication from programmers that they will only be willing to provide when it's their own company. Software companies can hire skilled people to work in a not-too-demanding environment, and can hire unskilled people to endure hardships, but they can't hire highly skilled people to bust their asses. Since capital is no longer needed, big companies have little to bring to the table."
[16] In the original version of this essay, I advised avoiding Javascript. That was a good plan in 2001, but Javascript now works.
[1] 意识到大部分利润来自服务后,制造轻量级客户端的公司通常试图将硬件与在线服务捆绑起来。这种方法效果不佳,部分因为制造消费电子和运营在线服务需要两种不同类型的公司,部分因为用户讨厌这个想法。免费送剃须刀、靠刀片赚钱的模式对吉列可能有效,但剃须刀的承诺比Web终端小得多。手机制造商满足于销售硬件,并不试图同时获取服务收入。这或许也应该是互联网客户端的模式。如果有人只卖一个带有Web浏览器的小盒子,你可以通过任何ISP连接,那么全国每一个技术恐惧者都会买一个。
[2] 安全性通常更多取决于不出纰漏,而非任何设计决策,但基于服务器的软件的性质会让开发者更加注意不出纰漏。服务器被攻破可能造成巨大损害,因此ASP(想要继续经营的)很可能会注意安全。
[3] 1995年,当我们创办Viaweb时,Java applet曾被看作是所有人开发服务器端应用的技术。Applet在我们看来是一种老套的想法。下载程序到客户端运行?不如更彻底一点,直接在服务器上运行程序。我们在applet上没花什么时间,但无数其他初创公司肯定被引进了这个沥青坑。很少能活着逃出来,否则微软不可能在最新版的Explorer中放弃Java。
[4] 这个观点来自Trevor Blackwell,他补充说:“编写软件的成本随其规模增长的速度超过线性。也许这主要是由于修复旧bug,如果所有bug都能快速找到,成本可以更接近线性。”
[5] 最难找到的bug可能是复合bug的一种变体,其中一个bug恰好补偿了另一个。当你修复一个bug时,另一个bug变得可见。但看起来像是修复出了问题,因为修复是你最后更改的事情。
[6] 在Viaweb内部,我们曾举办过一个竞赛,描述我们软件最糟糕的地方。两名客服人员并列第一,他们的描述我至今回想起来仍会不寒而栗。我们立即修复了这两个问题。
[7] Robert Morris编写了订单系统,供购物者下订单。Trevor Blackwell编写了图片生成器和管理器,供商家检索订单、查看统计信息和配置域名等。我编写了编辑器,供商家构建网站。订单系统和图片生成器用C和C++编写,管理器主要用Perl,编辑器用Lisp。
[8] 价格歧视如此普遍(你听过多少次零售商声称他们的购买力意味着更低的价格给你?),以至于我惊讶地发现它在美国被1936年的《罗宾逊-帕特曼法案》定为非法。这项法律似乎并未得到严格执行。
[9] 在《No Logo》中,Naomi Klein说受“城市青年”青睐的服装品牌并不太过努力防止入店行窃,因为在他们目标市场中,小偷同时也是时尚领导者。
[10] 公司经常纠结于什么该外包、什么不该外包。一种可能的答案是:外包任何不直接承受竞争压力的工作,因为外包会使其暴露于竞争压力之下。
[11] 那两个人是Dan Bricklin和Bob Frankston。Dan用Basic在几天内写了一个原型,然后在接下来的一年里他们(主要在晚上)一起工作,用6502机器语言编写了一个更强大的版本。Dan当时在哈佛商学院,Bob名义上有一份编写软件的日常工作。“做生意没什么大风险,”Bob写道,“如果失败了就失败了。没什么大不了的。”
[12] 并不像我说的那么容易。口碑传播花了很长时间才起步,直到我们以每月16,000美元雇佣了一家公关公司(公认是业内最好的),才开始获得大量媒体报道。然而,唯一重要的渠道确实是我们自己的网站。
[13] 如果Mac这么好,为什么它输了呢?还是成本问题。微软专注于软件业务,并放出一大群廉价组件供应商冲击苹果硬件。另外,在关键时期被高管接管也没起到帮助作用。
[14] 有一件事会对Web应用有帮助,并帮助下一代软件不被微软遮蔽,那就是一个好的开源浏览器。Mozilla是开源的,但似乎因为长期作为企业软件而受损。一个小巧快速、积极维护的浏览器本身就是一个伟大的东西,而且很可能还会鼓励公司制造小型Web设备。
除此之外,一个合适的开源浏览器将促使HTTP和HTML继续演进(例如Perl那样)。能够区分选中链接和跟随链接将极大地帮助Web应用;要实现这一点,只需要对HTTP做一个微不足道的增强,允许一个请求中包含多个URL。级联菜单也会很好。
如果你想改变世界,写一个新的Mosaic。觉得太晚了吗?1998年很多人认为推出一个新搜索引擎太晚了,但谷歌证明了他们错了。如果当前选项足够烂,总是有空间容纳新东西。首先确保它在所有免费操作系统上都能工作——新事物从用户开始。
[15] Trevor Blackwell,可能比任何人都更了解这一点,他写道:
“我会进一步说,因为基于服务器的软件对程序员如此严苛,它导致了一种根本性的经济转变,远离大公司。它需要程序员具有的那种强度和奉献精神,只有当他们为自己的公司工作时才愿意提供。软件公司可以雇佣有技能的人在不太苛刻的环境中工作,也可以雇佣无技能的人忍受艰苦,但他们无法雇佣高技能的人拼命干。既然不再需要资本,大公司几乎没什么能拿出手的。”
[16] 在本文的原始版本中,我建议避免使用JavaScript。那是2001年的好建议,但现在JavaScript已经可用了。