NeXT 上的 Lotus Improv

Lobsters Hottest 新闻

摘要

回顾 Lotus Improv——这款经典的透视表电子表格曾是 NeXT 平台独占应用,本文深入探讨其创新的多维数据建模、与 Steve Jobs 及 NeXT 的历史背景,以及它为何在商业上失败,却又深远影响了现代电子表格软件。

<p><a href="https://lobste.rs/s/zmuawx/lotus_improv_on_next">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/10/13 11:57

# NeXT 上的 Lotus Improv 来源:https://stonetools.ghost.io/lotusimprov-next/ 电子表格 (https://stonetools.ghost.io/tag/spreadsheet/) "经典邪典"(cult classic)这个词通常不会用来形容软件,但如果真有这样的说法,那它就是最佳代表—— NeXT 上的 Lotus Improv 人们用崇敬的语调谈论它,像念咒语一样引用它,低声传说它是计算机史上那些"未竟之路"的神话之一。它的拥趸们撰写热情洋溢的报告和溢美之词的 YouTube 评测,为其在商业上的失败扼腕叹息,每个人都会为其未能席卷世界提供一番解释。可以说,*Lotus Improv*的传说至今仍在流传。 如果我们把自己放到 1988 年 Steve Jobs 的角度,就很容易理解他为何会对一个我们现在称之为"数据透视表"的早期预览一见倾心。NeXT 当时正在苦苦寻找市场,急需能证明购买其系统的独占软件。"也许*Improv*能为 NeXT 所做的,就像当年*VisiCalc*为 Apple II 所做的一样"——Jobs 的脑海中一定闪过这个念头。将其做成 NeXT 独占软件,*Improv*似乎是对那个一直困扰公司的问题——*NeXTWORLD Magazine*创刊号提出的"为什么选 NeXT?"——的一个目光长远、答案明确的回应。 **NeXTWORLD Magazine** 主编 Michael Miley 在其首篇专栏"Black Box"中的回答大意是:NeXT 是一种"新型计算机",一台"人际计算机",是第一台从零开始为"协作计算"而打造的计算机。 NeXT 和*Improv*都为各自时代的核心计算难题带来了创新方案。NeXT 让 UNIX 对害怕终端的用户变得平易近人,在百万像素级显示屏上首发了 Display PostScript,并让系统开发变得轻松惬意。*Improv*重新思考了多维数据建模,提供了类英语的公式语法,并让用户可以随心所欲地重排数据视图。 两者的基因至今犹存。NeXT 的操作系统 NeXTSTEP / OPENSTEP 演变为了 macOS,进而衍生出了 iOS。Lotus 很快就放弃了*Improv*,但放眼今天的电子表格,数据透视表已被普遍采纳。 即便在今天,它给人的感觉依然独一无二,仍能完成其他任何电子表格都无法如此优雅地完成的数据戏法。鉴于它的神话地位,我觉得自己有种极客义务去热爱它。 然而…… --- ## 历史背景 文中提到的 CIA 数据来自这篇文章:https://www.msn.com/en-us/news/technology/the-hidden-debt-that-apple-owes-to-the-cia/ar-AA2avYYa?ref=stonetools.ghost.io --- ## 今日配置 - *Previous* v4.4(Windows 11 上运行) - NeXTstation Turbo - 68040 CPU(可变时钟频率;约 40 - 50 MHz) - 128MB 内存 - 2GB 硬盘 - 单色"Megapixel"显示屏 - NeXTSTEP 3.3 - *Lotus Improv* Rel 1.0(v108r0) --- ## 开始工作吧 各种因素汇聚在一起,让现在成为终于来聊聊*Lotus Improv*的恰当时机。首先,"国际电子表格日"又到了。其次,由于*Improv*最初是 NeXT 独占软件,在 Steve Jobs 逝世 15 周年之际来看看那台机器,似乎再合适不过。第三,虽然有点自夸,但这也是本博客的一周年纪念。 *Lotus Improv*是我当初决定创建 Stone Tools 时心目中的四款软件之一。事实上,它正是最初触发我这个念头——"我真希望有一个地方可以聊聊这类东西"——的那款软件。第一篇文章介绍的*Deluxe Paint*也在这四款之中。还有两款尚未登场,欢迎下注。 给喜欢看社会崩塌的人带来一个令人兴奋的消息:我建立了一个完全且仅仅围绕我个人的预测市场。2027 年 2 月 9 日我会走多少步?我读的那本书周四会读到哪一页?**明天我的袜子会不会配对?!** 问题在于,虽然我对*Deluxe Paint*了如指掌,可以直接上手,但对其他类别的生产力软件我确实毫无经验。如果不先熟悉它诞生时的环境,就不可能公正地评价*Improv*。所以我耐心等待了一段时间。 伙计,我想让你深切感受到我在等待整整一年后才来审视*Improv*所展现的那种超人般的自制力。 创造我所期待的未来。 我想我们都明白,*Improv*作为一款电子表格,当然会计算求和、超越函数以及其他数学运算。"它能算数学!"并不是一个特别有说服力的存在理由,也不足以支撑它作为"NeXT 一代电子表格"的定位。相反,让我们通过展示其**独特**优势的实例来了解它。在*Improv 2.1 Revealed!*一书的建议下,我们来建模一些经典的美式棒球数据——这是我热爱并且完全理解的一项运动。 ### NXIsle NeXT 最初员工使用的宝丽来照片临时工牌。我记得唯一没有找到的是 Susan Kare 的那张。RRAuction 拍卖品编号 #4402;这套工牌于 2024 年 8 月以 $12,501 成交,据说是被一个加价 $1 的狙击买家拍走的。 行业史学家们远比我更有资格讲述 Steven Paul Jobs 先生被逐出 Apple 又回归 Apple 的故事。我在时间线中简单提过要点,如果你真的渴望那些精彩八卦,就在今年出版了一本书 (https://geoffreycain.net/steve-jobs-in-exile/?ref=stonetools.ghost.io) 能满足你的需求。 虽然 NeXT 的硬件备受赞誉,但从长远来看,NeXT 工程团队更好的成果是 NeXTSTEP——它将 UNIX 完美地包裹在一个简洁、用户友好的图形界面中。这是一项了不起的成就。 尊重你的前辈。 **DOOM**和万维网(此处展示的是 Tim Berners-Lee 的第一台 Web 服务器)都诞生于 NeXT 之上。 对我而言,NeXTSTEP/OPENSTEP 开发工具背后的技术——Objective-C 和 Interface Builder——在它们成为 OS X 开发环境后(向 Big Nerd Ranch 的 Aaron Hillegass 的 Cocoa Bootcamp 致意 (https://web.archive.org/web/20040607161721/http://www.bignerdranch.com/classes/cocoa1.shtml))点燃了我的编程生涯。即使在 iOS 和 Swift 问世多年后的今天,NeXT 技术仍保留在 Apple 软件的 Foundation 层中,体现在带有 `NS` 前缀的类上(这是 Objective-C 时代的命名空间技巧)。 NSCapable。NXPlicable。NXCusable。我本来有一整串这些词想写。 本次探索我使用的是 NeXTSTEP 3.3,即过渡到 OPENSTEP 之前的最后一个版本。NeXTSTEP 看起来和用起来都像一个现代系统,只是一些细节颇有不同。熟悉任何现代操作系统——尤其是 macOS——足以让你在使用它时不会起荨麻疹。 考虑到 Jobs 在 Apple 合并后似乎热衷于为 OS X 添加的视觉糖果,NeXTSTEP 相当沉稳克制;这里没有一样东西在喊"让人想舔 (https://youtu.be/Ko4V3G4NqII?t=404&ref=stonetools.ghost.io)"。如果你曾经好奇 Susan Kare 如果拥有比初代 Mac 更大的画布和调色板(NeXTSTEP 是 2 位色的)能创造出什么,那么答案就在这里。我喜欢它。 Dock 确实存在,但比它过渡到 OS X 后获得的那种俏皮的流动性要僵硬得多。没有"神灯效应"(genie effect),也没有动态放大;它始终存在,不使用时也不会隐藏。某些应用程序在运行时会改变 Dock 中的图标(比如*Mail*),而另一些则不会(比如*Edit*)。一个奇怪的细节是 Dock 如何标识正在运行的应用——通过图标磁贴上**缺失**三个点来表示。给**未激活**的图标添加装饰,这个选择真是奇特。 文件浏览为系统使用增加了一点复杂性。文件浏览器包含自己的迷你 Dock 用于收藏夹,当前选中项目路径以巨大图标呈现,以及文件浏览器本身。拖动文件和文件夹只能使用项目的全尺寸图标完成。比如,如果你在列表视图中浏览,就无法将列表项拖入文件夹或 Dock。这确实让人挠头。 所有应用程序的菜单都通过一个可由用户定位的垂直菜单栏来管理。将菜单固定在某个位置后,它就为当前活动的应用程序设定了位置,每个应用程序都可以有自己的位置。理论上,当你在应用之间切换时,菜单会四处乱跳。好消息是它也可以在鼠标当前位置通过右键弹出——颇有 RISC OS 的影子。 另外,对那些喜欢 macOS 旋转彩色小球的人来说,好消息!当它出现时你也会感受到那种小小的 ASMR 快感,尤其是如果你使用的是彩色工作站的话。能让人产生"家"的感觉的事物真是有趣。 即使最初的 NX 前缀(NX 是 NeXTSTEP;NS 是 OPENSTEP)也像藤壶一样附着在某些代码表面上。 说实话,我适应 NeXTSTEP 的最大问题是鼠标。默认情况下,它用起来感觉很奇怪,采用双层加速曲线——慢速移动一层,快速移动一层。当光标从"慢速"跨越到"快速"阈值时,备用加速曲线就会介入,光标一下子跳到屏幕另一头。除非我非常非常慢地移动鼠标,否则永远找不到光标。幸运的是,模拟器*Previous*有一些工具可以帮忙补偿(*参见"Sharpening the Stone"部分*)。 总的来说,你只需要在各处稍微调整一下思维,忘掉一些现代习惯,就能很快适应 NeXTSTEP。35 年后的今天,它看起来和用起来仍与任何现代操作系统非常相似。 令人沮丧地相似?也许这是改天再谈的话题。 ### Formula 1 问题:以下*Improv*截图有什么有趣之处? 答案:它包含了构建一个副本所需的全部信息。所有数据、公式、维度和关系都是公开可见的。我提到这一点并不是说截图是分享*Improv*工作表的好方法——虽然你确实可以这样做;实际上上面那张表就是从截图重建的。相反,我想展示在*Improv*的环境中数据可以有多么"可把握"。它的公式读起来自然流畅,数值引用与表格中的项目名称完全吻合。这款软件确实做到了它所声称的。 让我们更深入地探究一下。 要理解*Improv*,就要忘记我们所知道的关于电子表格的一切。斜杠命令?没听说过。B1?J93?K12 = int(A14 * lookup(B2..B7))?简直是疯人呓语。我们不再使用通用的字母数字列/行标识符,而是**自己**定义与特定领域相关的"项目类别"作为行和列。 换一种说法,我们不再声称"A 到 L 列代表月份,第 1 行到第 31 行代表日期",而是创建一个名为"months"的类别,为其定义十二个项目——"January"、"February"等等;再创建一个名为"days"的类别,定义 31 个项目。 看看这些展示差异的对比视频。首先,我用*LibreOffice Calc*创建一个月份/日期网格,给 1 月 1 日赋一个值,然后计算 12 月 31 日为 1 月 1 日的倍数。 0:00 /0:47 以下是同一个表格在*Improv*中的创建方式。有三件事值得注意:顺序项目如何生成、类别如何命名(对于这个简单示例并非严格必要)、以及公式如何创建/应用。 0:00 /0:42 有很多内容需要消化,我知道,首先——一个全新的空白工作表由一个单元格组成,而不是一张无穷无尽的空单元格表格。*Improv*只处理我们定义的且恰好只有我们定义的数据。在*LibreOffice*的示例中,我们在每列顶部添加标签来赋予列以含义,那是为我们自己服务的,而不是为*Calc*服务的。 我大可为了感受经典行列命名那种温暖舒适的毯子感,创建一个名为"columns"的*Improv*类别,将项目命名为 A、B、C 等等,再创建一个名为 rows 的类别,命名为 1、2、3 等等。但如果我们对类别和项目采用如此平淡无奇的方式,就会削弱*Improv*公式构建器的魔力。 底部面板包含**所有**公式,它们按照显示的顺序在所定义的粒度上应用。在示例中,我指定了 `December:1 =`,但也可以通过指定 `December =` 来轻松地针对整个 12 月。这一个公式就会应用于 12 月中的每个列表项,无需将公式复制到每个单元格,也无需为单元格引用设置绝对/相对标记。 这是对之前表格的一个简单扩展。1 月中每一天增长 10%,而 12 月中对应的一天将 1 月的值翻倍。 Formula 1 针对一个特定项目 January,通过 `THIS` 为其拾取每个项目的当前 Day(在当前布局中视觉上显示为 `Days` 行),然后通过 `PREV` 向后跳一个单元格。更明确地说,我们是在说,"January 中的这一天 = January 中前一天的值 * 1.1"。之后,更笼统地,我们定义每个 12 月的值等于对应 1 月值的两倍("当前行"是隐含的)。 上面显示的两个公式就是整个工作表中仅有的两个公式。我想强调这一点:没有其他公式潜伏在单元格中,隐藏在视线之外,等待通过选择或编辑操作被揭示。没有每个单元格都有重复公式的做法,每个都把相对单元格引用递增 `* 1.1`。我们只是引用类别(在这种情况下是 "months" 或 "days")、项目(如 "January" 或 "27")或特定交叉点(如 "April:19"),包括相对性标记 `[THIS]`、`[PREV]` 和 `[NEXT]`。 你可能在想如何欺骗这个系统;如何让它困惑和迷失。为什么要欺负一个老应用呢?*Improv*做了什么要遭受如此粗暴的对待?"如果有两个项目同名怎么办?如果两个公式指向同一个单元格怎么办?"别担心,一切都会揭晓,你会为自己试图迷惑这个老程序而感到惭愧。 我用反色高亮标出了三种场景:歧义项目名称、索引引用和歧义公式解析。 在上面的示例中,我将其中一个 Day 重命名为 "March",以在引用 "March" 时制造歧义。现在 "March" 指的是 Day 还是 Month?我们可以明确指定,比如 `Months:March`。但请注意,如果我们不明确指定,*Improv*会识破我们的把戏并指出问题,就像公式 5 中那样。 在公式 2 中,我将 `December:15` 设为静态值 `1000`。在公式 3 中,我又将它设为"等于对应 1 月值的两倍"的计算。注意那些公式上的"重叠"图标(两个交叉的正方形)以及单元格中的 `Overlap` 文字。点击重叠图标,我们可以明确选择哪个公式在该单元格中胜出,从而解决歧义。 干净利落地处理公式歧义,最初被原型团队视为一个无法解决的工程难题。摘自 Simson L. Garfinkel 的《Improv: The Inside Story》,刊载于 *NeXTWORLD*,1991 年秋季号: > Back Bay(*Improv*的开发代号)团队认为公式冲突的可能性是该程序的一个真正弱点。似乎没有办法自动解决冲突。"Jobs 说,'这不是一个弱点,这是一个伟大的功能!'" Paul (Kleppner) 回忆道。"在 *1-2-3* 中,你可以复制并覆盖掉一个公式。" *Improv*能够自动检测冲突并告知用户,这本身就是一大进步。 就个人而言,我喜欢*Improv*的解决方案。我真诚地认为更多软件应该表现得"很笨",不要试图直觉或猜测我想要什么。用清晰的语言告诉我问题,然后提供最简单的工具,让我最大程度地掌控问题的解决。在帮助我这件事上应该聪明地做事,而不是靠耍聪明来帮我。 ### 自助 在我们深入之前,我想确保提及*Improv*那美丽的帮助系统,内容丰富……

相似文章

Lotus Notes 与从零开始的危险

Hacker News Top

本文追溯了 Lotus Notes 和 PLATO Notes 的历史,强调了它们在数字协作和电子邮件方面的早期创新,并反思了在技术发展中从零开始的挑战。

一次一台Lisp机器,创造未来

Hacker News Top

Larry Masinter和Frank Halasz回顾了他们在Xerox PARC的经历,讲述了Interlisp和NoteCards的开发,以及当前Medley/Interlisp的重生计划,反思了研究文化以及早期计算环境的持久价值。

Windows 3.1 平台上的 Visual Basic

Lobsters Hottest

关于 Visual Basic 在 Windows 3.1 上兴衰的回顾,探讨比尔·盖茨的雄心以及微软在个人计算领域的霸主地位。

AppleWorks 在 Apple II 上

Lobsters Hottest

对1984年Apple II电脑上AppleWorks软件的概述,突出其在流行文化重要时刻如'Thriller'的发行和Macintosh的发布中所扮演的角色。