跳转到内容
← 返回先驱
工程先驱1906–199215 分钟阅读

格蕾丝·霍普

Grace Hopper

1947 年 9 月 9 日,哈佛大学 Mark II 计算机出现故障。操作团队在继电器(Relay 70)触点之间找到了一只飞蛾,把它用胶带粘在日志本上,在旁边写道:"First actual case of bug being found(首次发现真正的 bug 实例)。"这一页日志至今保存在史密森尼美国国家历史博…

编译器COBOL程序调试军用计算女性计算机科学家

1947 年 9 月 9 日,哈佛大学 Mark II 计算机出现故障。操作团队在继电器(Relay #70)触点之间找到了一只飞蛾,把它用胶带粘在日志本上,在旁边写道:"First actual case of bug being found(首次发现真正的 bug 实例)。"这一页日志至今保存在史密森尼美国国家历史博物馆。当时格蕾丝·穆雷·霍普(Grace Murray Hopper)少将也在 Mark II 团队中——她并非亲手发现飞蛾或写下那行字的人,但此后数十年她极爱讲这个故事,于是它几乎成了她的标志。霍普本人是第一批计算机程序员之一、编译器的先驱、COBOL 的推动者。

破除误解:"bug"不是她发明的,那只飞蛾也不是她贴的

"格蕾丝·霍普发明了'bug'(程序缺陷)这个词"是互联网上广泛流传的故事,但并不准确。"bug"作为机械故障的隐喻,早在 19 世纪就已存在(爱迪生在书信中使用过);那只 1947 年的飞蛾,也并非霍普亲手所贴。

霍普真正的贡献,是把这个生动的故事讲了几十年,让它在计算机领域广为流传,并在描述计算机错误时沿用这个词汇。她还借此把所有人的注意力引向一个事实——机器会出错,而调试(debug)是工作中不可回避的一部分,需要系统化的方法处理。

现场:数学家从军

格蕾丝·穆雷 1906 年 12 月 9 日生于纽约市。她从小对机械着迷,传说她七岁时把家里所有的闹钟都拆开来看结构。1928 年她从瓦萨学院(Vassar College)以数学和物理学双学位毕业,后在耶鲁大学取得数学硕士和博士学位(1934 年),是 20 世纪初极少数获得数学博士的女性之一。

1930 年她嫁给文学教授文森特·霍普(Vincent Hopper),1945 年离婚,但此后一直使用霍普这个姓名。

1943 年,第二次世界大战进行中,霍普在 34 岁时申请加入美国海军女兵队(WAVES),因年龄超过规定、体重不符合标准,最初被拒绝——但最终获得豁免,以海军中尉身份加入,被派往哈佛大学 Computation Laboratory,在 Howard Aiken 手下工作,编程操作 Mark I 计算机。

核心一:第一个编译器(A-0 系统,1952)

在与 Mark I、Mark II 打交道的过程中,霍普敏锐地意识到:每次写程序都要从头用机器语言写,是极大的浪费。程序员需要一种工具,能把人类可读的符号指令自动翻译成机器代码。

1952 年,她在雷明顿兰德公司(Remington Rand)开发了 A-0 系统,这是有据可查的第一个编译器(compiler)——一个能将用英文关键词描述的数学运算翻译为机器代码的程序。

当时的反应令人沮丧:大多数工程师和管理者不相信计算机能"自己写程序",认为这个概念本身就不对。霍普后来在许多演讲中提到这段经历,用它说明保守主义在技术领域造成的实际损失。

她的工作推进了 B-0(FLOW-MATIC,1955–1956)——第一个面向英文的数据处理语言,直接奠定了 COBOL 的语言设计基础。

核心二:COBOL 与商业计算的民主化

1959 年,美国国防部召集了一个委员会,目标是设计一种通用的商业计算机语言,以取代各厂商各自为政的语言,降低程序员在不同机器之间迁移的成本。

霍普是这个项目最重要的推动者。她的核心主张是:编程语言应该尽可能接近英语,而不是数学符号或机器语法——这样才能让商业人员(而非只有数学家)能够阅读和验证程序。

COBOL(Common Business-Oriented Language)1959 年完成设计,1960 年代广泛部署。它今天仍在运行:据估计,全球金融系统中每天仍有数百亿笔交易经过 COBOL 代码处理(准确数字难以核实,不同来源差异较大)。COBOL 的继续运行,既是成功的证明,也是技术债务的标本。

核心三:纳秒的物理表演

霍普以一种极具教学效果的方式向非技术人员解释计算机速度:她随身携带一根约 30 厘米的铜线——光在一纳秒内走过的距离。

"将军,在上将等你电话的一分钟里,你损失了多少纳秒?"

这根"纳秒"(nanosecond wire)成为她演讲的标志性道具,也是她向高级军官和政客推动计算机标准化时最有力的说服工具之一。

海军生涯与晚年荣誉

霍普在海军工作了四十年,数度退役又被召回。1983 年 12 月,她以 77 岁高龄被晋升为海军准将(Commodore),1985 年 11 月该军衔改称海军少将(Rear Admiral,下半级),1986 年 8 月最终退役时是海军少将,退役时 79 岁,是当时美国海军服役年龄最大的现役军官。

1992 年 1 月 1 日,她在睡眠中安然去世,享年 85 岁。

她获得的荣誉包括:总统自由勋章(2016 年,奥巴马政府颁发,身后追授)、美国计算机协会 Grace Murray Hopper Award(以她命名的年度大奖,颁给 35 岁以下杰出计算机科学家)。

代价与争议

霍普面对的最大阻力,是她所在时代对"计算机能做什么"的想象力局限。她在 1952 年遭遇的"计算机不能自己写程序"的怀疑,在她整个职业生涯中一再重演。

批评者也指出,COBOL 语言冗长、难以维护,在设计上过于依赖英文散文风格,导致现代大型 COBOL 代码库的维护成为严峻的工程挑战。但这些批评的对象更多是 COBOL 委员会集体决策的结果,而非霍普个人的失误。

编译器背后的哲学争论

霍普推动编译器的过程,揭示了 1950 年代计算机界的一个深层认知偏差:"计算机只能做数学"

当时的主流观点认为,计算机是数值计算工具,处理商业数据(工资单、库存、账务)不是计算机的"本职工作",至多是附带用途。把英语单词用于指令,更是被许多工程师视为对计算机"尊严"的侮辱。

霍普的回击是实用主义的:她做出来,展示它能工作,然后让结果说话。这种务实态度,与迪克斯特拉那一代更偏数学的计算机科学家形成了有趣的对比——两种思维方式共同塑造了这个领域。

COBOL 的现实:70 岁的代码在运行

COBOL 今天的处境是一个独特的技术史现象。这门语言诞生于 1959 年,比 C 语言还早十几年,却仍在世界金融基础设施的核心部位运行。

美国社会保障局(Social Security Administration)、大型商业银行的核心系统、很多政府税务平台,都运行着用 COBOL 写就的代码。这些系统的维护者正在老龄化,而学习 COBOL 的年轻程序员极少——这形成了一种技术债务与专业人才双重危机。

COVID-19 疫情期间(2020 年),美国多个州政府紧急招募退休 COBOL 程序员来处理激增的失业申请,因为现役技术人员无法维护这些系统。COBOL 的寿命已经超过了几代程序员。

这种现象的深层原因值得思考:一个"成功"的技术会因为深度嵌入基础设施而变得几乎无法替换——这是技术演化中普遍的"锁定"(lock-in)机制。

军衔与影响力:制度内的改革者

霍普之所以能推动 COBOL 这样的标准化工程,与她的军事身份密不可分。在 1950–60 年代,美国国防部是计算机采购和技术标准的最大买家,军事需求能直接影响整个行业的方向。

一位持有上校乃至准将军衔的女性,在那个时代出现在计算机技术的最前沿,本身就是一个反常的现象——既是她能获得资源和影响力的来源,也是她持续面对怀疑和阻碍的原因。

她后来成为美国海军服役年龄最大的现役官员,多次在理应退役时被再度召回,原因始终是:没有人能替代她在技术与制度之间建立的那种桥梁。

跨域连接

  • 国家能力:把语言支持写进国防部采购条件,等于用买方规模制造了一个所有厂商都必须满足的标准。这比标准组织发文有效,因为不合规的后果是直接失去订单,而不是被指出不合规。推论也划出了边界:这条杠杆只在买方份额足够大时生效,市场一旦分散,同一份文件就退回成建议。
  • 语言、身份与权力:把关键词换成英文单词并不降低语义难度,它改变的是"谁有资格检查这段代码"——商业人员能读,就能参与验证与追责。这是权力的再分配,不只是易用性改进。代价同样真实:英文由此成为事实门槛,非英语使用者要多学一层,可读性的收益按母语分配不均。
  • 老龄化社会:一门语言的维护危机是两条曲线交叉的结果——系统的关键性随嵌入程度上升,掌握它的人力供给随退休单调下降,而学它的私人回报又低,因为技能难以迁移。疫情期间各州紧急征召退休程序员,说明存量人力已是唯一缓冲。技术锁定最终以人口结构的形式来收账。
  • 临床诊断:她把注意力引向一个当时不受欢迎的事实——机器会出错,排错是工作的固有部分,需要成体系的方法。这与临床把误诊当作常态、并将其制度化为鉴别诊断与复核,是同一种态度:用可重复的程序替代个人谨慎。可检验的推论是,差错率的下降主要来自流程而非个体训练。
  • 编译器:A-0 的要害不在翻译本身,而在把"程序也是数据"这件事真正用在生产上:一个程序读入文本,产出另一段可执行的文本。这一步之后,语言才能脱离具体机器独立演化,而当时最普遍的质疑——计算机不可能自己写程序——恰恰只能靠做出来才被推翻。

生平年表

年份事件
190612 月 9 日生于纽约市
1928瓦萨学院数学和物理学双学士
1934耶鲁大学数学博士
1930嫁给文森特·霍普(1945 年离婚,保留姓霍普)
1941开始在瓦萨学院任教
1943加入美国海军女兵队(WAVES),被派往哈佛计算实验室
1944编程 Harvard Mark I 计算机
1947在 Mark II 日志中记录了那只飞蛾——"first actual case of bug being found"
1952在雷明顿兰德公司开发 A-0 编译器(第一个编译器)
1957开发 FLOW-MATIC,第一个面向英文的数据处理语言
1959主导 COBOL 语言设计
1966第一次"退役",但随即被海军召回继续服务
1983晋升海军准将
1986以海军少将军衔最终退役,79 岁,是海军服役年龄最大的现役官员
19921 月 1 日在睡眠中去世,享年 85 岁
2016奥巴马政府追授总统自由勋章

军事计算机标准化:霍普的政策影响

霍普在技术和政策两个层面都有重要影响。1959 年她推动的 COBOL 标准化,最终通过 CODASYL(数据系统语言委员会)被纳入美国国防部采购标准——这意味着所有与国防部做生意的计算机厂商,都必须在其机器上支持 COBOL。

这是美国政府第一次以采购力量强制推行计算机语言标准化,效果立竿见影:各大机器制造商(IBM、Burroughs、Remington Rand 等)迅速开发了 COBOL 编译器。这打破了此前各厂商各自为政、程序无法跨机器迁移的局面,降低了政府锁定于单一供应商的风险。

霍普将这套"标准化-采购捆绑"的策略,作为推动技术进步的政策工具,至今仍是政府 IT 采购的基本逻辑之一。她在证明技术决策可以通过政策杠杆大规模推广方面,留下了不亚于她技术发明本身的遗产。

流水线思维:从计算机到组织管理

霍普在推动 COBOL 标准化的过程中展现了一种在技术人员中罕见的组织才能:她能在官僚机构中工作,把技术愿景转化为可以被委员会接受的提案,把复杂的技术争论转化为管理层可以理解的权衡取舍。

她的"纳秒铜线"演示,是这种能力的缩影:她把一个抽象的计算速度概念,转化成了一个可以被将军和政客触摸和理解的物理对象。这种把技术翻译成非技术语言的能力,在推动计算机从学术工具变成商业和军事基础设施的过程中,发挥了不亚于技术本身的作用。

从霍普到开源:英语化编程的后继

霍普对"让编程语言接近英语"的坚持,在之后数十年以不同的面貌持续出现:

BASIC(1964):由约翰·凯梅尼(John Kemeny)和托马斯·卡兹(Thomas Kurtz)在达特茅斯学院为非科学专业学生设计,直接继承了"让非专业人士能编程"的霍普式理念。

SQL(1970s):关系型数据库查询语言,几乎是在用自然英语写数据库操作(SELECT name FROM users WHERE age > 30),让业务分析师无需深度技术背景就能查询数据。

Python(1991):以可读性为核心设计目标,其"禅道"(The Zen of Python)的第一条原则是"可读性很重要"——这与 1950 年代争论中霍普坚持的方向一脉相承。

大型语言模型时代(2020s):自然语言接口让用户直接用人类语言"编程"(prompt engineering),是霍普方向的极端延伸。从 1952 年的"A-0 编译器把英文关键词翻译成机器码",到 2020 年代的"用中文句子让 AI 生成代码",沿着同一条思路走了七十年。

参考文献

  • Hopper, G. M. The Education of a Computer. Proceedings of the 1952 ACM National Meeting. (编译器概念原始论文)
  • Beyer, K. W. Grace Hopper and the Invention of the Information Age. MIT Press (2009). (权威学术传记)
  • Sammet, J. E. Programming Languages: History and Fundamentals. Prentice-Hall (1969). (含 COBOL 历史详述)

延伸阅读

  • Williams, K. A. Improbable Warriors: Women Scientists and the U.S. Navy in World War II. Naval Institute Press (2001).