在Mathematica(2013)之前有一段时间

2022-02-21 22:32:21

再过几周,这将是25年前的事了:1988年6月23日,Mathematica公司成立的日子。

前一天深夜,我们还在复制软盘,还在往产品盒里塞东西。但6月23日中午,我在圣克拉拉的一个会议中心首次公开启动Mathematica:

(是的,那是最初的启动屏幕,是的,Mathematica 1.0在Mac和各种Unix工作站计算机上运行;PC还不够强大。)

人们非常兴奋地看到Mathematica能做什么。许多计算机行业的领导者,包括史蒂夫·乔布斯(当时的NeXT),都发表了关于Mathematica的承诺的非常好的演讲,尽管他已经有一段时间没有公开露面了,但他还是很友好地来了。有人在活动中有远见地让所有演讲者签署了一本书,这本书当天刚刚在全国各地的书店发售:

从那时起,在四分之一个世纪里,Mathematica发生了很多事情。从Mathematica 1.0开始的系统已经变成了今天的Mathematica。当我看到25周年纪念剪贴簿时,我很自豪地看到Mathematica对发明、发现和教育做出了多少贡献:

但对我来说,也许最令人满意的是,我建立数学的基本原理是如何经受住时间的考验的。以及Mathematica 1.0中的核心思想和语言是如何在今天继续存在的(是的,大多数Mathematica 1.0代码在今天仍将保持不变)。

但是,好吧,Mathematica来自哪里?它是怎么变成这样的?说来话长,真的。与我个人的故事深深交织在一起。但特别是当我展望未来时,我发现了解事物是如何从所有这些历史演变而来很有趣。

也许第一次对Mathematica这样的东西产生微弱的兴趣是在我大约6岁的时候,我意识到我可以通过用两个标尺创建一个“加法计算尺”来“自动化”那些繁琐的加法运算。我从来不喜欢计算数学,也不擅长计算。但从10岁左右开始,我对物理越来越感兴趣,做物理需要做数学。

电子计算器在我12岁的时候就出现了,我很快就成为了一名爱好者。大约在同一时间,我开始使用我的第一台计算机——一个大桌子大小的物体,有8千字的18位内存,主要在汇编程序中使用纸带编程。我试着用它做物理实验,但没有成功。但到我16岁的时候,我已经发表了几篇物理论文,高中毕业,在英国政府的一个实验室工作。那时,“真正的”理论物理学家基本上不使用计算机。但我做到了。交替使用HP台式计算器(带绘图仪!)以及用Fortran编程的IBM大型机。

不过,我基本上只是在做算术。但在我想学的物理中,有各种各样的代数。不仅仅是一点代数。数额巨大。费曼图中的表达式包含数百或数千个术语,如果要得到正确的答案,所有这些术语都必须准确无误。

我不知道该怎么办。我想象着我的一生都在追逐2的负号和因子。但后来我开始考虑用电脑来帮忙。就在那时,有人告诉我,其他人也有这个想法。据我所知,有三个程序是在大约14年前从1962年CERN的一次对话中开始的:Reduce(用LISP编写)、Ashmedai(用Fortran编写)和Schoonschip(用CDC 6000汇编语言编写)。

这些程序是专门的,除了作者之外,不清楚有多少人认真使用过它们。它们的使用非常笨拙:通常你会提交一副卡片,然后在一段时间后返回一个结果,或者更常见的是一条神秘的错误消息。但我设法开始和他们一起学物理。

1977年夏天,我发现了ARPANET,也就是现在的互联网。当时只有256台主机。@O 236进入了麻省理工学院的一台开放式计算机,该计算机运行一个名为Macsyma的程序,该程序可以进行代数运算,并且可以交互使用。我很惊讶很少有人使用它。但没过多久,我就把大部分时间都花在这上面了。我发明了一种在机器上来回工作的方法,尝试一下,看看发生了什么。经常做一些奇怪的事情,比如列举一个积分的不同代数形式,然后只是“实验性地”看看哪个能正确区分。

我的物理论文开始包含各种令人惊叹的公式。人们没有想到我可以使用计算机,而是开始认为我一定是某种伟大的人类代数计算器。我变得越来越雄心勃勃,试图和Macsyma一起做更多的事情。很快我就认为我是它最大的用户。但在1979年的某个时候,我到达了边缘;我已经长大了。

然后是1979年11月。我当时20岁,刚刚拿到物理学博士学位。我在欧洲核子研究中心待了几周,计划着我的未来(正如我所相信的那样)物理学。我得出的一个结论是,要学好物理,我需要比麦克西马更好的东西。过了一会儿,我决定,我真正有机会得到我想要的东西的唯一方法就是自己建造它。

于是我开始了后来的SMP(“符号操纵程序”)。我对当时的其他计算机语言有相当广泛的了解,既有“普通”的ALGOL程序语言,也有LISP和APL程序语言。起初,当我勾勒出SMP时,我的设计看起来很像那些语言中的设计。但渐渐地,随着我对SMP的不同有了更多的了解,我开始尝试自己发明一切。

我想我有一些不错的主意。实际上,甚至我早期的一些SMP设计文档也有一种非常类似数学的味道:

回顾其文档,SMP是一个令人印象深刻的系统,尤其是考虑到我开始设计它时才20岁。但不用说,并不是SMP中的每个想法都是好的。作为一名长期的语言设计鉴赏家,我忍不住在这篇文章的末尾提到了一些我“最喜欢”的错误。

即使在我早期的设计中,SMP也是一个大系统。但不管出于什么原因,我一点也不觉得气馁。我只是想继续实施它。我想确保我做的每件事都尽可能好。我记得当时在想:“我还不懂计算机科学,我最好学学它。”。所以我去了书店,买了我能找到的每一本关于计算机科学的书——整整半个书架。然后把它们都读了一遍。

当时我在加州理工学院工作。我邀请了世界各地所有在相关系统工作过的人来演讲。我在加州理工学院成立了一个小“工作小组”,其中包括理查德·费曼(Richard Feynman)。我开始从校园里招募人来参与“SMP项目”。

早期的一个重大决定是应该用什么语言编写SMP。Macsyma是用LISP写的,很多人说LISP是唯一的可能。但是一个名叫Rob Pike的年轻物理研究生让我相信C是“未来的语言”,是正确的选择。(罗布接着做了各种各样的事情,比如发明围棋语言。)因此,在1980年初,SMP的第一行C代码被编写出来。

研究SMP的小组很有趣。我的第一个新兵是Chris Cole,他曾在IBM工作,成为APL爱好者,后来创立了一家相当成功的公司,名为Peregrine Systems。然后是拥有各种不同技能的学生,还有一位编程爱好者教授,他曾是我在一些物理论文上的合作者。当然,在这一过程中也有一些怪癖。就像编写高效代码的人一样,所有代码都在一行中,函数的名称五颜六色,这样它们的组合就可以理解为小笑话。或者是一个非常出色的本科生,他在这个项目上非常努力,以至于所有课程都不及格,然后他承诺不会碰电脑,但很快就被发现向其他人口授代码。

我自己为SMP写了很多代码(大约1000行/天)。我设计的。我写了大部分文档。我以前从未管理过大型项目。但不知何故,这部分似乎从来都不是很难。果然,到1981年6月,SMP版本1开始运行,甚至看起来有点像Mathematica:

在当时,SMP是一个非常大的软件系统(尽管它的可执行文件不到1兆字节)。它最初的目的是做数学计算。但一路上我意识到,即使要做到这一点,我也必须创造一种整体的、相当普遍的、象征性的语言。我想我认为这有点像物理学,但我没有处理基本粒子,而是试图找到计算的基本组成部分。我发展了一种审美观:总是尝试将最大的能力打包到最小数量的原语中。有时我会花几个星期的时间思考如何做某事,但最终我会想出一个设计,然后实现它。

我理解一切都可以用符号表达的想法。尽管符号索引列表的整个业务阻止了SMP有“表达式头”的概念,这在Mathematica中是如此清晰。在符号表达式的内部实现中肯定有一些有趣之处,最明显的是关于用浮点存储所有数字的奇怪想法。(Schoonschip的作者、后来获得诺贝尔物理学奖的蒂尼·维尔特曼告诉我,用浮点存储数字是他做过的最好的决定之一,因为FPU在算术方面比ALU快得多。)

在SMP之前,我为Macsyma这样的系统编写了很多代码,我意识到我一直试图做的事情是说“如果我有一个这样的表达式,我想把它转换成这样的表达式”。因此,在设计SMP时,模式所代表的符号表达式族的转换规则成为中心思想之一。它并不像Mathematica中那样干净,而且肯定有一些时髦而遥远的想法。但很多核心元素已经存在。

最后,1981年SMP版本1.0文档的目录具有相当程度的现代性:

是的,“图形输出”与“内存管理”一起被归入一个小部分。还有迷人的“编程僵局”(即系统挂起)和“统计表达式生成”(即生成随机表达式)。但“并行处理”以及“程序构造”(即代码生成)已经存在。(SMP甚至有一种方法可以创建C代码,对其进行编译,非常可怕的是,还可以将其动态链接到正在运行的SMP可执行文件中。)这里有很多数学函数和数学运算,虽然远不如Mathematica强大。

但是,好吧。所以SMP1.0正在运行。该怎么办?很明显,有很多人会觉得它很有用。它只能在相当大的计算机上运行,也就是所谓的“小型计算机”,比如VAX,它的大小相当于几台大型冰箱,成本高达几十万美元。不过,我知道有很多研究和工程机构都有这样的机器。

当时我真的对公司或生意一无所知。但我确实明白,付钱给从事SMP工作的人是要花钱的,而且似乎很明显,获得这笔钱的一个好办法是销售SMP的拷贝。我的第一个想法是去加州理工学院现在被称为“技术转让办公室”,看看他们是否能提供帮助。当时,办公室里基本上只有一个讨人喜欢的老家伙。但经过几次尝试,他显然真的不知道该怎么办。我问他这是怎么回事,因为我认为加州理工学院也会经常出现类似的事情。“嗯,”他说,“问题是,教职员工大多只是自己创业,所以我们从未参与其中。”。“哦,”我说,“我能做到吗?”。他翻阅了学校的规章制度,说:“软件是可版权的,学校不主张版权所有,所以,是的,你可以。”。

于是我去开了一家公司。但事情并没有那么简单。因为过了一会儿,大学管理部门突然决定,不,这不好。这件事变得很奇怪,很恶毒(“给我一个机会,我会在这件事上签字的”,等等)。理查德·费曼和默里·盖尔曼代表我进行了调解。大学校长似乎不知道该怎么办。有一段时间,一切都被完全卡住了。但最终我们同意,尽管他们(后来他们试图招募计算机科学教师时发现,这是非常愚蠢的)改变了他们关于软件的规章制度,但大学将许可他们可能拥有的任何权利。

但碰巧有一个“最后一个问题”,是当时的大学教务长提出的。他声称,如果我在大学工作并拥有公司的一部分,那么大学和公司之间持有许可证就会产生利益冲突。“好吧,”我说,“这很容易解决:我要退学。”。这似乎让人大吃一惊。但我辞职了,搬到了普林斯顿的高级研究所。正如当时的主任所指出的,在那里,约翰·冯·诺依曼去世时,他们“把电脑送走了”,所以他们不必太担心知识产权。

多年来,我一直想知道加州理工学院到底发生了什么。碰巧的是,就在几周前,我同意再次访问加州理工学院(以获得“杰出校友奖”),并在那里的教师俱乐部吃午饭——我发现旁边的桌子上不是别人,正是加州理工学院的前教务长,现在即将95岁。他立即深刻地回忆起他所谓的“沃尔夫拉姆事件”(他被“警告过”了吗?)给我留下了深刻印象,在谈话中,我们终于把事情解释得更好了。

坦率地说,这比我想象的更奇怪。从某种意义上讲,这个故事始于20世纪30年代,当时阿诺德·贝克曼在加州理工学院(Caltech),发明了pH计,并留下来寻找贝克曼仪器。到1981年,贝克曼是加州理工学院的主要捐赠者,也是该学院董事会主席。与此同时,生物系主任(Lee Hood)发明了基因测序仪。他告诉我,他曾多次尝试让贝克曼仪器公司对它感兴趣,但都失败了,于是创办了自己的公司(应用生物系统公司),并取得了巨大成功。有人告诉我,在某个时刻,阿诺德·贝克曼感到不安,并告诉政府,他们需要“阻止IP走出校园”。事实证明,当时校园里唯一相关的事情就是我的SMP项目。当时的教务长说,他认为自己有责任“应对”。(好吧,他也是一名化学家,作为物理学家,费曼和盖尔·曼声称他“对物理学家很有兴趣”,等等。)

但尽管经历了这场冒险,我命名为计算机数学公司(Computer Mathematics Corporation)的公司还是成立了。当时,我还以为自己是个年轻的学者,没想到自己会经营一家公司。所以我请来了一位CEO,他的年龄正好是我的两倍。在首席执行官和一些风险资本家的要求下,该公司安排与一家初创公司合并,这家公司正在进行他们认为非常热门的人工智能研发;D

与此同时,SMP开始打着“计算机数学”的旗号销售:

有可怕的失误。CEO:“让我们建造一台工作站计算机来运行SMP”;我:“不,我们是一家软件公司,我见过斯坦福大学网络(SUN)系统,它将比我们能建立的任何系统都要好。”。然后是一家被误导的机构制作的广告:

很快我就觉得整件事太令人沮丧了。SMP仍然是一个摇钱树,尽管这位CEO不擅长赚钱,但他擅长筹集资金,经历了无数轮令人眩晕的投资,直到多年后终于有了一次平淡无奇的IPO。

与此同时,我在做基础科学方面度过了一段美好的时光,发现了为一种新的科学奠定基础的东西。事实上,SMP是我所做工作的关键先驱。因为正是我在为SMP语言发明计算原语方面取得的成功,促使我考虑为大自然发明计算原语,并通过研究这些原语的后果来建立一门科学。

你可能会问SMP发生了什么。直到Mathematica发行后的某个时候,它才开始销售。它的所有代码都没有用于Mathematica。但偶尔我会启动它,只是为了看看它与Mathematica相比“感觉如何”。随着时间的推移,越来越难找到运行SMP的计算机。也许15年前,我们拥有的最后一台可以运行SMP的计算机停止工作了。

嗯,我想,我一直收到一份SMP源代码的个人副本,尽管我已经很久没看过了。那么现在为什么不在现代系统上重新编译呢?但后来我想起了:我有一个“伟大”的想法,我们应该对源代码进行加密。但关键是什么?我问了我能想到的每个人。但没人记得。

多年过去了,我真的很想看到SMP再次运行。这是一个挑战。这是像SMP源代码一样加密的C程序的源代码。实际上,它是加密程序的源代码:circa-1981 Unix crypt实用程序的一个版本,通过更改参数等“巧妙地”修改。有人能破坏加密吗?最后将SMP从奇怪的数字时间保险箱中解放出来,它已经被锁了这么久。(如果只是上传这个原始文件,Wolfram | Alpha Pro会这么说)

但回到正题。1983年,我停止了SMP的工作,开始在基础科学、软件项目和我从事技术和战略咨询的(极具教育意义的)“爱好”之间交替。我使用了一点SMP,但大多数情况下,我最终编写了大量的C代码,通常将算法、图形和接口粘合在一起。

我开始的科学研究进展得很顺利,很明显有很多重要的事情要做。但我决定,我应该试着让其他人参与进来,而不是自己去做。作为其中的一部分,我决定成立一个研究所,并从不同的大学获得了相当于投标的资金。伊利诺伊大学是赢家,所以在1986年8月,我去了那里,开始了复杂系统研究中心。

但此时此刻,我已经开始担心我的“其他人做科学”计划不是很好。在抵达伊利诺伊州的短短几周内,我就想出了B计划:尽我所能建立最好的工具,尽我所能建立最好的个人环境,然后尽我所能自己做尽可能多的科学研究。由于我非常熟悉计算机行业,我知道强大的软件系统很快就能在开始出现的无数个人电脑上运行。所以我知道,如果我能创造一些好东西,就会有一个很好的市场,这将支持一个有趣的公司和环境。

因此,在1986年8月底,我决定尝试构建我的终极计算系统,它可以完成我想要的所有计算,或者可以想象我想要的所有计算。

从SMP和我的其他软件e中,我知道了很多应该做(和不应该做)的事情

......