张磊
创造了程序语言的女学霸,生前定义程序bug,死后引发千年虫危机 精选
2017-9-28 09:18
阅读:63891


提到“bug”,人们第一时间想到的便是程序员们深恶痛绝的系统漏洞。


然而在英语中,bug原意指的却是小虫、臭虫。


不过现在IT行业所指的bug,还真的和当初那只小臭虫有关。


计算机刚出现的1947年,一位女程序员所用的电脑发生了故障。


经排查后发现,原来是某个继电器内飞进了一只蛾子,导致了整个计算机无法运作。


眼疾手快的她便用镊子小心地将飞蛾夹出,并把它贴在记录本中标上“First actual case of bug being found”。

对,就是这只小虫


而她对bug的诡异称呼,后来竟变成了计算机行业的专业术语。


而除虫“debug”也成了排除程序故障的代名词。


这位发明世界上第一个“bug”的女程序员,其实就是IT界的祖师娘格蕾丝·赫柏。


她是耶鲁大学第一位数学女博士,世界上第三位程序员,与图灵乔布盖茨等一同被评为“IT界十大最有远见的人才”


在那个全靠机器语言和打孔条撑起计算机的年代,她开发了第一套编译程序


自那以后,代码才从“0101110...”变成了现在简单易懂的模样,广大码农减轻了不少负担。


谷歌涂鸦纪念格蕾丝


目前世界上的60%的商业数据,都还是要用到她发明的Cobol语言来处理。


因为实在太能干,美国军方为了留住她,甚至不惜去司法部将她的法定退休年龄延长5岁。


格蕾丝·赫柏从小就是个不折不扣的假小子,经常带着弟弟妹妹上蹦下窜,爬树、游泳、划船。


除了热衷体育运动外,她还是个好奇心十足的技术宅。


7岁时为了搞懂闹钟的工作原理,她就偷偷把家里闹钟拆开研究。

拆一个搞不懂,她后面还陆续拆了共七个闹钟才收手。


因为没有办法把闹钟恢复原样,那时的格蕾丝可没少挨母亲的批评。

年轻的格蕾丝


不过也多亏了母亲的正确教导,格蕾丝才把自己的好奇心使对了地方。

母亲虽是家庭主妇,但是却对数学特别感兴趣,是位业余数学家。


所以在母亲的指导下,格蕾丝的数学和物理等工科成绩都异常出色。

考进大学后,她便一路开挂地同时获得数学、物理双学位和国优等生的荣誉。


当时才本科毕业的格蕾丝,就已被母校留任聘为教师。


不过格蕾丝可没那么容易满足,利用奖学金她再次考进耶鲁大学。

1934年,她也成了耶鲁大学历史上第一位数学女博士


据统计,1862年到1934年间,全美总共才发出了1279个数学博士学位,平均每年不到18个。


而且在那个年代的大环境下,以女性身份获得耶鲁数学博士学位的格蕾丝完全可以用不可思议来形容。

之后,她也将生活重心转向教学。



到这个阶段为止,差不多40岁的格蕾丝都还未曾与计算机有过联系。

不过二战的打响,也成了格蕾丝人生最重要的转折


珍珠港事件后,她就铁了心要加入美国海军为国家出力。

然而参军是要经过严格考察的,无论是年龄、身高还是体重,她都没有一项是及格的。


不过有一颗聪明的大脑比什么都顶用,在她的软磨硬泡下教官竟同意让她参加培训计划。


在最后的考试中,她更是以第一名的成绩完虐跟她同批的学员,让所有人都刮目相看。


霍华德·艾肯与他的第一台计算机


考虑到她的数学背景,格蕾丝之后也被派到了哈佛大学,有幸成为霍华德·艾肯教授(Howard Aiken)的助手。


霍华德·艾肯是世界上第一台数字计算机Mark-Ⅰ的总设计师及制造者。

这个重达4吨的庞然大物也被誉为“现代电脑时代的开端”


格蕾丝坐在艾肯教授(前排中间)旁边,后面是Mark计算机


在这之前,已有两位男性在Mark-Ⅰ上写过程序。


所以格蕾丝也成了世界上第一台计算机上的第三位程序员(虽然程序员这个称呼是在多年以后才出现)。



不过一开始,这台MARK-Ⅰ可没少把格蕾丝搞疯。


当时这个大家伙虽然能被用于计算火箭弹道、低空爆炸信管和地雷等的破解方法,以及解决一系列工程的数学问题。


但是其本身却远没有现代的计算机那么“智能”,都需要格蕾丝手把手教(编程)它才会计算。


如果说艾肯赋予了MARK-Ⅰ生命,那么格蕾丝的程序则像给机器带来思维一样,让它能真正地“动起来”。



然而刚接触计算机的格蕾丝也几乎等同一张白纸。


所以她需要沿着艾肯制造MARK-Ⅰ的思路,首先将计算机中每一个复杂而精细的硬件了解个透彻,才能运用自己的数学才能编写程序。


这几乎等同于先学会造电脑,才有机会学编程。

所以在刚到哈佛的那段时间,格蕾丝每天都会抓住电机维修工程师好“偷师学艺”。


重达4吨的Mark-


就是因为对机器十分熟悉,才使她能在故障的电脑中很快地找到那只“bug”(小飞蛾)。


当时MARK可是包含3500个继电器、2300个存储计数器和成千上万条后面布线的继电器终端。

Mark-Ⅰ背后复杂的布线


不过bug的发明只能算是个小小插曲,毕竟格蕾丝之后的贡献可比这响亮得多。


二战结束后,格蕾丝也带着厚厚一叠荣誉勋章,加入到第一台电子计算机ENIAC发明人莫契利和埃克特创办的公司。


在那里,她也产生了一个将来会改变所有程序员生活的新想法。


在计算机诞生伊始,所有的程序员编程都只能用机器语言,没有任何组合语言及程序语言的存在。


所谓机器语言,简单来说就是机器硬件本身能够识别的语言,只有0和1。


所以那时的程序员都要以“0111001011”的机器码形式,先在纸上打孔,再送到机器里读取。


老式的打孔纸带


除了编写的过程复杂外,这密密麻麻的0和1检查起来更是让人想自挖双目。


而且虽说所有的机器语言都为二进制,但不同的型号的计算机也有着不同的基本指令。


所以这也意味着只要换一台电脑,就相当于要重新记一遍新的指令,烦不胜烦。



在帮Mark系列计算机编程时,格蕾丝就已经感受到被机器语言支配的恐惧。


所以她才想设计一种程序,能让大家直接用人类看得懂的语言编程,然后这个程序便能把语言翻译成机器码,交给电脑执行。


这就是我们现在说的编译器(Compiler)的原理。


只是在那个年代,大家都对她的这个“想法”表示怀疑。

因为在所有人眼里计算机就像计算器一样,只能处理数字,是看不懂人类语言的。

即使得不到认可,格蕾丝还是头脑清晰地决定将想法变成行动,到处演讲筹集资金。


因为她认为,编程就应该是高水平的脑力劳动,只有不断地将繁杂的工作交给电脑完成,才能提高人类脑力的应用。


1952年,她就率先设计出了世界上第一个编译程序A-0


为了向大家证明计算机也能看得懂人类的语言。

格蕾丝还特意开发了三个版本,包括英文、德文、法文语版,甩当初不看好自己的人一脸。


之后她再用了5年时间,从这第一个编译器发展到一整套完整的程序语言FLOW-MATIC。

这也是世界上第一个运用词语的计算机语言。


从那以后,编程工作才确定了往化繁为简的方向进发。

如果没有格蕾丝,对着满屏的0和1,程序员的秃头率或许还要更高。


从FLOW语言中看到了未来,美国政府立马就给了格蕾丝一个新的任务。


就在FLOW语言面世后的第二年,格蕾丝带领着团队又成功地研制出了第一个商用编程语言COBOL。


它被公认的优点便是是语法和英语十分接近,可以让不懂电脑的人也能看懂程序。


格蕾丝也被称为COBOL之母


即使是2000年出现了史上最大的bug“千年虫”*,也未能撼动COBOL的地位。

*注:“千年虫”,是因为50年代计算机存储空间非常有限,为了节省内存格蕾丝只采用了6位数来表示日期,如DD/MM/YY表示日、月、年。但是从20世纪进入21世纪的2000年,系统就无法识别YY(00)表示的是1900还是2000,所以计算机里的时间全乱了套,对世界的影响巨大,也称千年虫问题,缩写“Y2K”。

到现在COBOL已走过了近60个年头,虽然古老但在商业领域仍占有重要的地位。


据计算机世界(Computerworld)统计,“千年虫事件”后的2006年到2012年仍有超过60%的企业用COBOL处理数据。



甚至还有人预测说,即使到了下个世纪,COBOL仍有可能在老骥伏枥。


所以在IT界也有个笑话,一个COBOL程序员因解决了千年虫问题挣了大钱,以至于他可以用钱将自己冷冻起来。


未来的一天他突然被人复活,睁开眼一瞬间他就被告知:“现在是9999年,而你懂COBOL语言”。



到了1966年,格蕾丝也到了60岁该退休了。


但是自她走后,海军还是有大量无法处理的工程管理程序亟待解决。


于是格蕾丝才刚休息了半年,就又被紧急地召回,负责海军系统高级语言的标准化和普及工作。

为了使格蕾丝能名正言顺地回来,军方还特意修改了原来的规章,将退休年龄延长至65岁。


2016年格蕾丝被追授总统自由勋章


而原本只打算留5年的格蕾丝,也因工程需要在岗位上一待就是20年


这期间她的军衔也一路被提升,1985年她也达到了女性罕见的成就,成为海军少将


格蕾丝号


为了表彰她这么多年来的贡献,美国海军将一艘驱逐舰命名为“格蕾丝号”和将加利福尼亚海军数据处理中心改名为“赫柏服务中心”。

到了1986年,格蕾丝才以80岁高龄从海军中光荣退休。



在欢送会上,格蕾丝非常自豪地说。

“当初我40岁时就被告诉你太老了不能参军,但是身上这套制服我一穿上就又是一个40年”。



转载本文请联系原作者获取授权,同时请注明本文来自张磊科学网博客。

链接地址:https://wap.sciencenet.cn/blog-2966991-1078107.html?mobile=1

收藏

分享到:

当前推荐数:27
推荐到博客首页
网友评论7 条评论
确定删除指定的回复吗?
确定删除本博文吗?