深度解析塑造未来的技术文章。

VisiCalc:让硬件值得购买的软件

VisiCalc 不只是发明了电子表格,它证明了软件可以带动硬件销售,从根本上改变了计算机的经济模式。

一张纸质账本网格溶解在一台 1970 年代老式电脑的绿色屏幕中

在 VisiCalc 出现之前,个人电脑是爱好者的玩具;出现之后,它们成了商业工具。这并不夸张,Apple II 的销售轨迹有据可查:它从一台小众的爱好者机器,变成了企业的必需品,而这几乎完全归功于一款软件,它让会计们不必再用纸质表格算账。

Dan Bricklin 和 Bob Frankston 于 1979 年发布了 VisiCalc。一年之内,Apple II 的销量就增长了六倍。人们走进电脑店,直接说“我要买能跑 VisiCalc 的那台机器”。“杀手级应用”这个概念由此诞生,指的是那种强大到足以让人为之购买硬件的软件。这种模式在计算机历史上反复出现,理解它,也就能理解软硬件之间为什么会是现在这种关系。

VisiCalc 究竟做了什么

回头看,电子表格似乎是显而易见的东西,但在 1979 年可不是。纸质电子表格,也就是用于财务计算的大张方格纸,是每家会计事务所的标准工具。会计做预算预测时,要在一行行、一列列的格子里填写数字,靠手算或计算器算出合计和公式结果,再把结果写进对应的单元格。

问题出在迭代上。如果某个假设变了,比如预计增长率从 8% 调到 10%,会计就得把所有依赖这个假设的单元格重新算一遍。在复杂的模型里,这意味着数小时的手工重算,而每次重算都可能出错。“假设分析”,也就是探索不同假设会如何影响结果,因为太耗费人力,很少有人能做得细致。

VisiCalc 把这件事完全自动化了。改一个单元格,所有依赖它的单元格立刻更新。过去要花会计几个小时的工作,现在几秒钟就能完成。它的价值主张并不是“用电脑代替纸”,而是“过去做一个方案的时间,现在能探索 50 个方案”。这是财务分析能力的一次质变。

塑造设计的技术限制

VisiCalc 运行在一台 32 KB 内存、1 MHz 处理器、40 列文本显示的 Apple II 上。这些限制迫使它做出了一些事后看来相当有远见的设计决策。

网格模型,也就是由行和列组成、每个单元格存放数值或公式的结构,在一定程度上是对有限显示能力的回应。40×24 个字符的显示屏天然适合呈现网格。如果做成自由排版的文档画布,就需要滚动和排版算法,而当时的硬件根本扛不住。网格这种约束让界面一目了然:用户无需任何说明,就能看清数据的结构。

公式系统默认使用相对单元格引用。比如 C1 中引用了 A1 和 B1 的公式,复制到 C2 时会自动变成引用 A2 和 B2。这个设计源于一个观察:大多数电子表格公式都沿着行或列遵循某种规律。它极大地减轻了搭建模型的工作量:公式只需定义一次,往下拖一拖,就完成了。

只有 32 KB 内存,VisiCalc 没法在内存里存下一个超大的网格。解决办法是:只存储包含数据的单元格,空单元格不占内存。这种稀疏存储方式至今仍是现代电子表格的工作原理。Excel 理论上有 170 亿个单元格,如果用稠密方式存储,需要 PB 级的空间。迫使 VisiCalc 走向稀疏存储的限制,最终被证明是一个架构上的正确决定,与内存大小无关。

“杀手级应用”模式

VisiCalc 确立了一种模式,此后一直推动着整个科技行业:一款软件创造的价值如此之大,足以让人为运行它所需的硬件买单。

  • VisiCalc → Apple II。Apple II 售价 1300 到 2700 美元(按今天的币值大约相当于 5000 到 10000 美元)。VisiCalc 售价 100 美元。企业花 2000 美元买电脑来跑 100 美元的软件,因为效率提升几周就能把钱赚回来。
  • Lotus 1-2-3 → IBM PC。VisiCalc 迟迟没有移植到 IBM PC 上,Lotus 1-2-3 趁机填补了空白,成为 IBM 兼容机的杀手级应用。Lotus 是专门为 IBM PC 的硬件设计的,在同类任务上比 VisiCalc 跑得更快。
  • PageMaker → Macintosh + LaserWriter。桌面出版让 Macintosh 的高昂售价显得物有所值。一台 Mac 加一台 LaserWriter 要花 7000 多美元,但它们取代的排版设备却要 5 万美元。
  • 网页浏览器 → 网络连接。Netscape Navigator 让非技术用户也能用上互联网,从而带动了 ISP 订阅和网络基础设施的需求。
  • ChatGPT → GPU 集群。当前的 AI 热潮正在推动对 NVIDIA 硬件前所未有的需求。企业之所以愿意在 GPU 基础设施上投入数十亿美元,是因为 AI 应用创造的价值足以支撑这笔开销。

这一模式惊人地一致:有人开发出一款软件,把硬件从一件新奇玩意变成了必需品。硬件厂商获益巨大,Apple 的业务基本上就是靠 VisiCalc 建立起来的。但软件的创造者往往只拿到较少的价值。Dan Bricklin 和 Bob Frankston 的公司 Software Arts 后来竟被他们自己的发行商以敌意收购的方式吞并。他们发明的电子表格每年创造的经济价值以万亿美元计,而他们自己分到的却微乎其微。

电子表格为何长盛不衰

VisiCalc 被 Lotus 1-2-3 取代,Lotus 1-2-3 又被 Excel 取代,如今 Excel 又面临 Google Sheets 的挑战。但它的核心概念,也就是包含数值和公式、能自动重算的单元格网格,在 45 年间几乎没有变过。为什么?

电子表格可以说是有史以来最成功的编程环境。非程序员使用的公式,从结构上看就是一门函数式编程语言:纯函数(公式没有副作用)、引用透明(单元格引用总是返回当前值)以及响应式更新(输入变化会自动传导)。每年,Excel 用户写下的“代码”量,超过了所有专业程序员的总和。

VisiCalc 做对的关键一点,也是后继者都保留下来的,就是即时反馈。改个值,马上看到结果。没有编译步骤,没有部署,也不用等待。这种紧密的反馈循环,让电子表格成为探索性数据工作、快速计算和临时分析的天然工具。每一次想用“正经”软件取代电子表格的尝试(专门的预算工具、商业智能平台、定制应用),都得面对一个事实:电子表格让你在三秒钟内就能开始干活。

重建 VisiCalc

近来有人尝试根据原始源代码重建 VisiCalc,这为我们提供了一个观察极端约束下软件如何诞生的绝佳视角。原版 Apple II 版本完全使用 6502 汇编语言编写。当时并没有哪种高级语言能在 32 KB 内存里装得下,同时又快到足以支撑交互式重算。

研读这次重建可以发现,为了让程序在 1 MHz 处理器上显得灵敏,作者们花了多少心思。重算引擎优先处理可见单元格:屏幕上当前显示的单元格会最先重算,让用户立刻得到视觉反馈,而依赖它们的其他单元格则在后台更新。这种感知层面的优化,让 VisiCalc 的体验比它实际的运算速度要快得多。

单元格存储系统使用了一个链表,先按列排序,再在每列内按行排序。这让按列的操作(比如求列和、插入列)非常快,反映出一个假设:财务表格通常是时间段按列组织、类别按行组织。这种数据结构编码了一个关于会计如何思考的领域假设。

内存管理完全是手动的,VisiCalc 自己维护一个堆并做压缩。删除单元格时,它会压缩剩余的单元格存储以回收内存。这实际上就是一个用汇编写成的手动垃圾回收器,而且运行在一个没有内存保护的系统上。它能够稳定工作,本身就说明了工程质量之高。

对现代软件的启示

在计算资源充裕的今天,VisiCalc 的成功蕴含的几点经验很容易被忽视。

  • 为真实的人解决真实的问题。VisiCalc 并没有创造一个市场,它只是把数百万人已经在手工完成的工作流程自动化了。最好的软件消除的是繁琐劳动,而不是凭空创造能力。会计本来就知道怎么搭建财务模型,VisiCalc 只是让它快了 100 倍。
  • 约束驱动好的设计。32 KB 内存限制迫使它采用稀疏存储;40 列的显示迫使它采用网格界面;1 MHz 的 CPU 迫使它使用感知优化的技巧。每一项约束都催生了一个设计决策,而这些决策在任何规模下都被证明是正确的。
  • 反馈速度本身就是一项功能。让 VisiCalc 变得引人入胜的即时重算,与现代开发工具中的热重载、设计工具中的实时预览以及 REPL 驱动的开发,背后是同一个原理。从修改到看到结果之间的时间间隔,直接影响人们对自己工作的思考方式。
  • 发明者很少能拿到价值。Bricklin 和 Frankston 发明了电子表格,却没有从中按比例获得经济回报。这种模式一再重演:创造出具有变革性软件的人,往往只看到大部分价值流向了硬件厂商、平台所有者,或者是那些擅长分发的后来者。在动手开发之前,值得先想清楚商业模式。

VisiCalc 问世 45 年后,我们依然生活在它所开创的世界里。电子表格仍是临时数据工作的默认工具。“杀手级应用”模式依然在推动硬件销售,只需把 VisiCalc 换成 ChatGPT,把 Apple II 换成 NVIDIA H100 即可。而“软件创造的价值超过硬件”这一原则,依然和当年一样成立:一款 100 美元的程序,把一台 2000 美元的电脑从新奇玩意变成了企业的必需品。