你不知道的女人故事!葛瑞丝.霍普发明编译器,让繁复的电脑语言在世界传递,带来经济与知识的新革命。

一、零、零、零、一、零、一、一、零、一、一⋯⋯那是电脑的语言。

你的电脑所做的每件聪明事,包括打电话、搜寻资料库、玩游戏⋯⋯,归结到底,不外乎零与一。嗯,这么说其实不太真确,应该说,归结到底是半导体晶片上微小的电晶体里是否存在着电流。零或一只不过代表断电或通电。

幸好我们不必用零和一来设计电脑程式。想像一下那会有多么困难。举例来说,微软 Windows 作业系统占用硬碟二十个十亿位元组的空间,等于一千七百亿个零与一。将它们列印在 A4 大的纸上,堆叠起来会有四千公尺高。现在你必须透过这些纸张来工作,以手动的方式设定每个电晶体。姑且不论这会有多么繁琐,因为电晶体的大小只有十亿分之一公尺。如果拨动每个开关需要一秒钟,那么安装 Windows,将花费五千年的时间。

早期电脑真的必须使用相当类似的方法写程式。就拿后来称作“哈佛一型”(Harvard Mark 1)的自动循序控制计算机来说,它长十五公尺,高二点五公尺,布满轮子、转轴、齿轮和开关,内含五百三十英里长的电线。从成卷的打孔纸带接收到指令后便飕飕运转,像一台自动演奏的钢琴。如果你想让它解决一个新的方程式,你得先想清楚哪些开关应该开或关,哪些电线应该接到哪里。然后,你必须打开所有这些开关,插上所有电线,并且在纸带上打出所有的孔。替它写程式是让数学天才绞尽脑汁的挑战,也是一件乏味、重覆、容易出错的手工劳作。(推荐阅读:没有研究经费、结婚立刻解雇:女科学家改变世界之路

哈佛一型问世四十年后, 比较小巧而且对使用者相对友善的机器, 例如 Commodore 64,进入了校园。如果你和我年纪相仿,你可能还记得小时候打出下列字行的兴奋:

10 print‘ hello world’;
20 goto 10

接着你瞧,粗短、低解析度的“hello world”两字便填满了萤幕。你使用直觉、可辨识的人类语言给电脑下达命令,而电脑也能瞭解,这似乎是件小小的奇迹。如果你问为何自从哈佛一型之后,电脑会有如此大的进展,其中一个原因肯定是越来越小巧的零组件。但倘若程式设计师无法用近似人类的语言,撰写像Windows 这样的软体,将它转译成最终执行工作的一与零,我们也无法想像电脑现在所能办到的事。

让这件事开始成真的东西,称作“编译器”。而编译器的故事,得从一名叫葛瑞丝.霍普的女子说起。

时下有许多人讨论如何让更多女性进入科技产业。葛瑞丝出生于一九○六年,当时没有太多人关心就业市场的性别平等问题。幸好葛瑞丝那身为寿险主管的父亲很在意,他看不出女儿有什么理由得比儿子少受教育。因此,葛瑞丝就读好学校,证明她具备数学头脑。由于她的父亲是退役海军少将,她从小就梦想加入海军,当时女人不准当兵,所以她只好勉强接受成为教授。到了一九四一年,珍珠港遭袭事件将美国卷入第二次世界大战。男性人才被国家征调,海军才开始接受女性人才,葛瑞丝立刻报名。

如果你纳闷海军要数学家何用,想想飞弹的瞄准就知道了。你该从什么角度和方向发射飞弹?答案取决于许多条件:目标距离、温度和湿度,以及速度和风向。这些计算并不复杂,但以人脑运算是耗时的,或许有更快的方式。当霍普中尉于一九四四年从海军后备军官学校毕业时,美国海军对哈佛教授霍华德.艾肯(Howard Aiken)近日发明的一个笨拙玩意儿感兴趣。那玩意儿正是“哈佛一型”,海军于是派霍普协助艾肯去弄清楚它能做些什么。

艾肯对于有女性加入团队原本兴趣缺缺,但霍普很快令他刮目相看,她被要求撰写操作手册,其实光是要想出该写些什么,就涉及了大量的错误尝试。一型机经常在开始运作不久后戛然而止,而且不会发出对使用者友善的错误讯息。某次因为一只蛾飞进机器里,让我们从此有了“除错”(除虫)(debugging)这个现代用语。这虫是比喻的说法,更可能发生的是扳错开关、纸带打错孔,而侦错的工作单调乏味、旷日废时。


图片|来源

霍普和同僚开始在笔记本上写满经过测试、可重复使用的编码。到了一九五一年,电脑已经进步到可以在自身记忆体系统中贮存这些称作“副程式”的区块。霍普后来替一家名为雷明顿兰德(Remington Rand)的公司工作,她设法说服雇主让程式设计师用熟悉的语句呼叫副程式—“像从薪俸中抽取所得税那样描述任务”,按霍普的话说,而非“设法用八进制编码或各种符号撰写过程”。

霍普后来宣称,“先前没有人想到要这么做,因为他们不像我这么懒。”这当然是开玩笑的自谦之词,事实上,霍普以努力工作而闻名。但这个声明道出一个核心事实:霍普称之为“编译器”的想法,涉及了某种权衡。编译器让写程式变得快速,但完成后的程式却跑得比较慢,这正是雷明顿兰德对它不感兴趣的原因。每位顾客对于闪亮的新计算机有自己预设的需求,雷明顿兰德有理由认为,公司里的专家应该尽可能有效率地写程式。

即使不被支持,霍普并不气馁,她用自己的空闲时间写出最早的编译器。这个编译器至少帮助了公司同仁能够更清楚地思考。其中一位印象深刻的顾客是工程师卡尔.汉默(Carl Hammer),他用编译器处理同僚们接连几个月辛苦应付的一个方程式—他写了二十行程序码,一天之内便解决问题。全美志趣相投的程式设计师开始将新的程式区块寄给霍普,她将它们加入函式库,以供下一次的发表。事实上,她正在独力开创开源软体。(推荐阅读:西元三百年,史上第一个女数学家诞生:海佩蒂亚

霍普的编译器最后演进成最早的程式语言 COBOL,更重要的是,它为我们现在熟知的硬体与软体的分界铺路。像哈佛一型这样独一无二的机器,软体本身就是硬体:它的开关模式无法在另一部机器上运作,因为另一部机器拥有截然不同的配线方式。但如果某部电脑能执行编译器,那么它也能执行任何使用这部电脑的程式。

此后,层次越来越多的抽象概念,逐渐将具有人类性格的程式设计师与实体晶片的本质区隔开来,彼此朝着霍普认为合理的方向迈出深化的一步,也就是解放程式设计师的脑力,使之聚焦于思考概念和演算法,而非开关和电线。

霍普对于同僚一开始为何抗拒编译器自有看法,那并非因为他们在乎让程式执行得更快。不,是因为他们乐于享受身为唯一人选的威望,只有他们能代表那些只能购买电脑的凡人,跟天神般的电脑进行沟通;霍普称他们为“大祭司”。霍普认为每个人都应该要能写程式,如今人人皆会,电脑也因此更加有了用处。