37 岁学编程,发现第一个 Bug,创造商业编程语言

简介:   人类往往对“改变”过敏,并倾向于说:“我们一直是这样做的。”我试图与这一观点抗争,所以我在墙上挂了一个逆时针旋转的钟表。  ——Grace Hopper  在计算机史上,葛丽丝·霍普(Grace Hopper)是一个传奇般的存在。  她是唯一一位被艾伦·麦席森·图灵(Alan Mathison Turing)、史蒂夫·乔布斯(Steve Jobs)、比尔·盖茨(Bill Gates)一同称为“IT界十大最有远见的人才”的女性,发现了计算机程序中第一个“Bug”,创造了商业编程语言COBOL,直到今天,全球60%的商业数据都要用它处理[1]。

  人类往往对“改变”过敏,并倾向于说:“我们一直是这样做的。”我试图与这一观点抗争,所以我在墙上挂了一个逆时针旋转的钟表。

  ——Grace Hopper

  在计算机史上,葛丽丝·霍普(Grace Hopper)是一个传奇般的存在。

  她是唯一一位被艾伦·麦席森·图灵(Alan Mathison Turing)、史蒂夫·乔布斯(Steve Jobs)、比尔·盖茨(Bill Gates)一同称为“IT界十大最有远见的人才”的女性,发现了计算机程序中第一个“Bug”,创造了商业编程语言COBOL,直到今天,全球60%的商业数据都要用它处理[1]。

  她不是你印象里的Nerd。她挂过科,爱Party,拒绝传统的人生轨迹,37岁时抛开一切去参军,美国国会甚至为了她改变法律。充满自信、幽默感和叛逆精神的她,被许许多人喜爱和尊敬。

  今天,不妨让我们来看看这位被称为“Amazing Grace”的超酷老奶奶:Grace Hopper的一生。

  会拆家,也会思考

  1906年,在纽约出生,Grace是个小淘气鬼。最喜欢的课是几何,因为在课上,调皮的她可以拿出所有彩色铅笔来用。

  一个问题总困惑她:“为什么钟表只朝一个方向转?”

  渐渐的,妈妈发现家里少了点什么,原来是Grace拆了家里大大小小7台钟表。不过,妈妈没有责备她,而是留了一台让她研究。家人的支持,让Grace爱上了钻研。

  16岁时,Grace申请瓦萨学院(当时全美顶尖的精英女校),却因拉丁文考试挂科,被学校无情拒绝。她Gap了一年,重新申请瓦萨学院,随后如愿以偿入学,并取得数学物理学士学位。

  Grace的母亲是一位颇有造诣的数学家,父亲是保险界的翘楚,祖父曾是美国最大保险公司的总裁 。就像今天的中国,在那个时代,家境殷实的年轻美国女性的人生轨迹相对固定:完成学业、工作几年、结婚成家。

  但Grace与生俱来的反叛精神,加上她在瓦萨学院取得学术成就的兴奋,促使她继续前往耶鲁大学深造,成为第一位从耶鲁大学获得数学学位的女性。

  从此,Grace的人生一路开挂。

  最受学生喜爱的明星教授

  毕业之际,能力超群的她,破例被瓦萨学院聘任称为副教授。

  作为新教授,Grace回忆道:“刚开始的时候,我教的都是大家不乐意教的课程。除了基本的三角函数和微积分,她还教授了机械和建筑制图课程,以及透视学和投影学的实验课程。”

  Grace深知象牙塔外严峻的经济环境,因此,即使面对每学期5到6门课程的教学负担,她也没有任何抱怨。恰恰相反,她将“负担”转化为自己的“优势”。Grace回忆:“我引进了非欧几里得几何,让学生们理解空间的新概念。一切都是全新的,有趣的,令人兴奋的。”

  讲课时,Grace将晦涩的数学原理,融入现实生活不同领域的应用,这种富贵创新的教学方法对学院产生了巨大的影响,来自不同专业的学生纷纷涌入她的课堂。Grace跨学科的教学方法,源于她广泛的学术兴趣。作为瓦萨学院的教授,她可以旁听任何课程,好奇的Grace旁听了天文学、物理学、化学、地质学、生物学、动物学、经济学、建筑学、哲学、历史学。博文广志的知识积淀,为之后的科技创新起到了推波助澜的巨大作用。

  “我和大多数的数学家不一样,他们不了解舍入误差(Round-off errors)和截断误差(Truncation),而我知道,因为我旁听过化学课。”几年后,解决了工作中重大技术危机的Grace回忆道。

  到这个阶段为止,年近不惑的Grace和计算机还算毫无干系。

  二战之际,37岁决定入伍

  1939年,二战爆发。

  “我还记得12月7日”, Grace回忆起那决定性的一天时说,“我和丈夫都在书房里。听见楼下的收音机广播:珍珠港事件。”

  那个周日上午发生的事件深刻地改变了美国,也成为Grace人生的历史支点。在之后的几个月里,她毅然辞去瓦萨学院安稳的终身教授的职位,在37岁时加入了美国海军。

  “我们全家都参军了,我的丈夫、兄弟、朋友,除了我妹妹,她还要抚养幼儿,军队不接受。” 她说: “那时候,举国上下,所有人都为了一件事并肩奋斗:打赢战争。”

  矮小瘦弱的她,年龄身高体重都不合格。然而,凭借杰出的数学家背景,Grace进入了马塞诸塞州北安普顿的海军学校 。

  对于大多年轻新兵,这是一个痛苦的经历。“我们刚到的时候,不得不把所有衣服打包寄回家。我们不能穿丝绸,要穿制服剪头发,还要穿那些不好看的长袜。”Grace回忆道。“在学校里,要学习大量新知识:军事礼节、称呼头衔、武器战术、航海技术等。”

  尽管经历了种种磨难,Grace仍觉得这段经历是愉快的:“突然间,我再也不用为鸡毛蒜皮的小事操心。我不用费心思考早上穿什么,晚餐做什么。我拥有了最彻底的自由,好像一下子躺在了羽毛床上,等着长膘,享受完美的生活。”

  在海军学校,Grace被任命为营长(学校最高职位),并以考核第一名的成绩毕业。

  阴差阳错,成为世界第三位“程序员”

  毕业时,Grace兴奋地认为她会被分配到海军通讯机构,那里由一批秘密的数学家组成,负责破译敌方密码,简直最适合她不过了。出乎她意料的是,她被分配到了哈佛大学。当时的Grace尚不知道,她将从事一份比破译密码更具挑战性,甚至改变时代的工作 。

  “自动程序控制计算器Mark-1”,是哈佛大学Howard Aiken博士的发明。战前,Aiken是哈佛大学物理学研究生,他在写博士论文时,发现其数据的复杂性必须花费数年才能人工计算出来。Aiken务实的性格使他考虑自动化计算过程的可能性,七年之后,他终于完成了这台8英尺高、3英尺宽、51英尺长、4吨重、有530英里电路的巨型机器,其功能包括加减乘除,对数指数、三角函数的计算,这些问题在今天,不到100克的手持计算器就能轻松解决。

  Grace是Aiken博士的得力助手,在她之前,有两个男码农在Mark-1上写了程序。其中一个叫Bloch,当时只有23岁,之前也只有3个月的“编程”经验。大学刚毕业的Bloch在三天内,辅导将近40岁的教授Grace写出了她的第一个程序。于是,Grace是世界上第三个在计算机上写程序的人 。

  Aiken博士是个强势,甚至有点大男子主义的人。据Grace回忆道:“他一开始并不想要一个女助手,我发誓他绝不会后悔,因为我不是一般的女助手。”多年并肩工作后,Aiken每想起他身边的“女助手”,都会感慨:“Grace was a good man!”

  术语“Bug”的发明者

  “1949 年 9 月 9 日,我们晚上调试机器的时候,开着的窗户没有纱窗,机器闪烁的亮光几乎吸引来了世界上所有的虫子。果然机器故障了,我们发现了一个被继电器拍死的大蛾子,翅膀大约4英寸,我用透明胶带把它粘在日志里。”

  Grace曾花了两个月,向被大家称作 “Mr.Fixit”的电工Bob,日夜潜心学习机器构造的。因此,她首先找到了问题所在,用发夹取出飞蛾,贴在记录手册里,标注:“First actual case of bug being found.”(找到了第一个Bug)

  就像一个医生,Grace用大量精力研究如何调试机器:识别症状、做出诊断、开出处方。有时症状很明显,机器忽然停下来,“那零件撞击的声音听起来像一架飞机撞进了大楼。”

  有时硬件中有问题,就要检查数千个继电器和计数器,而Grace化妆包里的小镜子,竟成了检查这台75万美元机器的首选工具。“机器如果出现故障,零件摆动会产生火花。这个时候我们会关掉所有的灯,然后用我的小镜子反射火花。”她回忆道。

  “From then on, when anything went wrong with a computer, we said it had bugs in it.” (从那以后, 当我们被质问工作进度为何缓慢时,都说里面有“Bug”。)

  这件计算机史上的奇闻轶事,使“Bug”和“Debug”,作为计算机领域的专用词汇,一直沿用至今。

  她教会电脑“说英语”

  很久很久以前,还没有Java、C++、Python的时候,人机之间的交流仅限于“01010111”,程序员只能在纸上打孔,再送入机器读取。不仅费时费脑,而且容易出错。Grace致力于拯救广大程序员的秃顶危机,她发明了以英文为基础的编程语言,通过编译器将其转化为机器能读懂的指令。

  万事开头难,当Grace开始实践想法时,领导无法理解,认为她异想天开。她到处游说,一点点众筹到资金。

  1952年,她研制出世界上第一个编译程序A-0,将英语符号代码,转换成机器指令。为了向金主证明机器能理解人类,她设计了英语、德语、法语三个版本。

  1959年,在五角大楼的支持下,她研制出COBOL(Common Business Oriented Language),语法与英语十分接近,即使不懂电脑的人,也能看懂程序。

  60岁是海军中校的法定退休年龄,对于Grace而言,退休那天是她人生中最悲伤的一天。所有人都告诉她:“你太老了!”

  不过很快,海军使用COBOL时遇到重重困难,有一个程序重写了八百多次还是不能运行。海军没办法,把才退休半年的Grace又请了回来老古董,一请就是二十年。由于超过法定退休年龄,国会甚至还修改了相应的法律,让Grace的服役合法化。

  1985年,她达成女性极为罕见的成就:海军少将。

  80岁时,Grace的退休Party来了两千多人,她感慨地说:“我在40岁时,别人都说我太老了,不适合部队工作。而我穿着制服又干了40年。”

  与“千年虫危机”的渊源

  在参加完新年派对之后,Grace Hopper于1992年元旦与世长辞。

  据说,她生前最后的心愿是活到1999年12月31日晚上,因为她很想参加跨千年的Party。

  过世后8年,Grace永远不知道,她年轻时一个小小举动,竟引发了举世闻名的“千年虫危机”(Y2K)。

  上世纪50年代,内存十分昂贵。为了节省内存,Grace用6位数表示日期, dd/mm/yy,比如:11/05/89。到了千禧年,计算机无法辨认是1900还是2000。计算机的时间乱作一团,对世界产生了巨大的影响。

  即使引发了世界上最著名的Bug之一,Grace对后辈的积极影响也极为深远。

  1947年开始,Grace先后被40多个大学授予荣誉博士学位。

  为纪念她对海军的贡献,驱逐舰以她命名:USS Hopper (DDG-70),加利福尼亚海军数据处理中心也改称“Hopper服务中心”。

  1971年,美国计算机学会设立了“Grace Hopper 奖学金”,颁发给最优秀的30岁以下的青年计算机工作者。

  2017年,耶鲁大学为纪念Grace,修改了有近百年历史的Calhoun学院的名称为:Grace Hopper College。

  全球最大的女性技术大会:Grace Hopper Celebration,每年都激励许多的女性勇于追求自己的技术梦想。

  改变世界的女性力量

  如今,在比尔盖茨、乔布斯主导着的计算机行业,人们很容易忽视Grace Hopper这样的先驱女性在开创信息时代中所做出的贡献。与同时代的职业女性一样,Grace必须面对现实,置身于男性主导的环境中,而她将阻碍变成了自我激励,突破了种种性别偏见,并将自己的职业生涯提升到前所未有的高度。

  Grace的领导力和幽默感,使她赢得了最广泛的尊重。更重要的是,她激励了更多未来年轻、有抱负的女性科学家,在新时代延续她的愿望。

  永远好奇,勇于挑战,这就是足以改变世界的女性力量。

  最后,就以Grace的一句话结尾吧:

  “A ship in port is safe,but that is not what ships are built for.”

  (船停在港口就是安全的,但它不是为停在港口而造的。)

目录
相关文章
|
7月前
|
程序员 数据安全/隐私保护
编程之外,生活的美好航程
编程之外,生活的美好航程
|
安全 编译器 Linux
全面解析C++11新特性:现代编程的新起点(下)
全面解析C++11新特性:现代编程的新起点
|
程序员
程序员的奇怪规范:编程界的特殊文化
在程序员的世界里,有一些奇怪但又约定俗成的规范,这些规范看似荒谬,却成了编程行为的一部分,让人啼笑皆非。
|
2月前
|
开发者
探索未知,拥抱变化——我的技术之旅与哲学思考###
在技术的浩瀚星海里,每一个代码片段都是探索未知的航标。本文不仅是一次技术的回顾,更是一场关于成长、挑战与自我超越的深刻对话。通过分享个人的技术学习历程,我希望能激发每位读者心中对未知的好奇与渴望,共同踏上这场充满奇迹与挑战的旅程。 ###
|
4月前
|
SQL IDE JavaScript
"揭秘高效代码Review秘籍:如何像侦探一样挖掘隐藏错误,提升团队编程实力,你不可错过的实战指南!"
【8月更文挑战第20天】代码Review是软件开发中提升代码质量与团队协作的关键环节。本文详细介绍高效代码Review流程:从明确范围与标准开始,到逐行审查与工具辅助,再到积极沟通与闭环管理,辅以示例确保清晰易懂。通过实践这些步骤,不仅能减少错误,还能促进知识共享,为构建高质量软件打下坚实基础。
75 2
|
4月前
|
算法 测试技术 持续交付
技术感悟:代码之外的智慧
【8月更文挑战第14天】在技术的海洋中,我们常常沉浸于代码的编写和调试,追求着更高效的算法和更优雅的解决方案。然而,技术的世界远不止于此。它还包括了对问题的理解、对工具的运用、以及与他人的协作等多个方面。这些看似与代码无关的技能,实际上对我们的技术成长有着深远的影响。本文将分享一些在代码之外的技术感悟,希望能够为大家提供一些新的视角和思考。
|
4月前
|
开发者 Ruby
神秘编程魔法惊现!Ruby 元编程究竟隐藏着怎样的力量?竟能让代码自我进化!
【8月更文挑战第31天】《Ruby元编程:让代码自我进化》介绍了Ruby元编程的魅力,通过动态修改代码结构和行为,实现代码自我进化。文章通过实例展示了如何使用`class_eval`动态添加属性和方法,以及通过别名修改现有方法。此外,还介绍了利用模块实现代码复用和扩展。元编程为开发者提供了极大的灵活性和创造力,使代码更加动态高效。
32 0
|
4月前
|
开发者 Python
Python 模块化方式编程:在编程热潮中找到归属感,让代码更具魅力与活力
【8月更文挑战第22天】Python 以其简洁强大备受青睐。模块化编程将大型程序拆分成独立模块,每个负责特定功能,简化代码结构,提升可读性和维护性。通过创建如“math_utils.py”这样的文件来定义数学运算函数,可在其他文件中轻松导入使用。这种方式提高了代码的可重用性,便于管理和更新。在项目开发中按功能划分模块,如用户、商品和订单管理等,有助于保持清晰的代码结构和减少依赖复杂度。遵循良好的命名规范,可以使模块更易理解与使用。
50 0
|
安全 编译器 程序员
全面解析C++11新特性:现代编程的新起点(上)
全面解析C++11新特性:现代编程的新起点
全面解析C++11新特性:现代编程的新起点(上)
|
7月前
|
C语言 开发者 Python
编程语言之问:何时该借用,何时该创造?
编程语言之问:何时该借用,何时该创造?
62 1