编译器与Debug的传奇:女牛人Grace Murray Hopper小传

标签: 编译器 debug 传奇 | 发表时间:2010-12-29 20:27 | 作者:(author unknown) manabomb
出处:http://www.feedzshare.com/s/t/3

来自: 统计学之路 - FeedzShare  
发布时间:2010年04月01日,  已有 11 人推荐


这两天读《UNIX痛恨者手册》时看到一句被引用的牛人体语录:“标准的伟大之处在于它可以有很多。—— Grace Murray Hopper.”Google之,意外挖出了一位女性牛人,谨作一文以记之。以下内容系根据已有资料编辑整理而成。

GraceHopper

Grace Murray Hopper

引言

1992年1月7日,华盛顿阿灵顿国家公墓,美国海军为在元旦凌晨睡梦中安然去世的退休海军女军官格蕾丝·穆雷·赫柏 (Grace Murray Hopper) 举行了隆重的葬礼。海军仪仗队和众多肃穆的海军官兵按照海军的礼仪向这位令人尊敬的长者作最后的告别。千千万万的美国人则通过电视转播观看了葬礼的实况。四年后的1996年1月6日,美国海军在缅因州的巴斯港 (Bath, Maine) 为它新建造的一艘阿利·伯克级驱逐舰举行了隆重的命名仪式,把它命名为“赫柏号”。这是第二次世界大战以后第一次、整个美国海军历史上第二次以一位女性的名字命名一艘战舰。

启蒙

Grace Hopper (1906–1992), 本姓Murray, Hopper为夫姓。1906年12月9日生于美国纽约一个海军世家,其祖父军衔曾达少将。她的外祖父则是一名高级土木工程师,常常带着她去上班,她也十分高兴地去帮着扶红白相间的测量杆,这培养了她对于几何学和数学的兴趣。Grace的父亲因患动脉硬化导致双腿截肢,长期住院,这使得作为长女的她从小就更加懂事和勤奋。

Grace回忆她小时候最喜欢上的课是数学课,特别是几何课。因为在几何课上,她可以把铅笔盒里所有彩色的笔全部拿出来用。虽然她是个女孩子,可是各种量角器、计算尺她都喜欢拿来玩,研究它们的原理和作用。她还做过一些很像男孩子做的事情:她曾经在六、七岁的时候,把家里所有的钟都拆开,但是没有一个成功装回去,因此还受到了严厉的处罚。

教育

进入大学之前,Grace就读于私立的Wardlaw-Hartridge学校。1928年她大学毕业于瓦萨学院 (Vassar College) 并取得数学和物理的双学士学位,在校期间是美国资优学生联谊会 (Phi-Beta-Kappa Society) 成员 (PBK是一个有着两百多年历史的,很好很强大的学生社团。老布什、克林顿、厄普代克都曾是其中一员)。随后进入耶鲁大学攻读数学硕士,在 1930 年得到硕士学位。1930年6月15日她与Vincent Foster Hopper结婚 (Vincent是纽约大学英文系教授,1945年过世,他与Hopper没有生育子女)。结婚没多久,Grace就决定要攻读博士,于是她一边教书,一边在耶鲁大学进修博士学位,并在 1934 年取得学位,前后只花了四年的时间,这算是相当快的。她的博士论文题为《代数方程可约的一个新准则》 (A New Criterion for Reducibility of Algebraic Equations), 但是让许多人惊奇的是,她是用几何方法证明这个准则的。作为一个女性,获得数学博士学位是一个很大的成就,因为在数学上取得成就而获得博士学位本身就是很困难的。据统计,从1862-1934年间,全美总共授予1279个博士学位,平均每年不到18个,而女性获得数学博士学位的就更是凤毛麟角了。在求职方面,女数学家通常只能到高中教课,极难希望上大学讲台,但Grace做到了:她在硕士毕业后被母校瓦萨学院聘任,短短几年就从助教升到副教授。不过,到这个阶段为止,我们还看不出来她会跟计算机产生任何关系。

转折

1941年是Grace人生的转折点。珍珠港事件后,Grace有了从军的念头,她想加入海军。当时女性从军都是做后备军人,大部分都是护士,要不然就是做后勤。如果是受过高等教育的女性,就会被分配去做有关计算的工作。由于家庭传统,她选择了参加海军的WAVES组织 (Women Accepted for Voluntary Emergency Service)。在马萨诸塞州北安普敦 (Northampton, MA) 的海军军官学校接受培训以后,她被授予上尉军衔,考虑到她的数学背景,她被派到哈佛大学的Howard Aiken (1900-1973) 教授手下参与Mark I的研制工作。Aiken教授是1939年的哈佛物理博士,也是Mark I、II、III、IV这一系列电机计算机的设计及制造者。

题外话:Mark I原来的名字是ASCC (Automatic Sequence Controlled Calculator), 由哈佛大学与IBM合资建造,完成于1943年,重35吨,内部线路长达500英里。但是在1944年的Mark I启用典礼之后,IBM和哈佛就闹翻了,原因是哈佛认为IBM只是个出钱的财主,主要的智力贡献是哈佛人的功劳,IBM认为自己也在工程上做了许多研究和创新,而哈佛却认为那些工程上的创新都不值一提。(残念 ..) 所以IBM就从哈佛的Mark计划中退出。后来的十年间,IBM在学术界的主要合作伙伴,变成了哥伦比亚大学。(都是牛校中的牛校啊 ..)

Grace从小就喜欢各种计算尺,当她走进哈佛的计算工厂见到这台电机计算机时,她说这是她看过最有趣的计算尺。在她之前,有两个男生在Mark上写过程序,这两个男生后来帮助Grace在三天之内写出了她的第一个程序。所以算起来,Grace是世界上第三个在电机计算机上写程序的人。下面的照片就是Mark计划的工作人员。坐在中间的是Aiken教授,唯一的女性就是Grace Hopper, 背景为Mark I.

The Harvard Mark Team

荣耀

1945年9月9日,发生了一件对计算机界而言非常重要的轶事。那天的天气很热,工作人员把窗户都打开了,后来有一只蛾飞了进来,结果那只蛾死在一只继电器里面,造成电路不通,机器死机,他们没办法算出他们要的结果。经过了近一天的检查,Grace找到了那只蛾,她设法用她的发夹把那只蛾弄了出来,还把那只蛾的尸体贴在她的管理日志上,上面写道:“就是这个Bug,害我们今天的工作无法完成。”这个消息传开之后,那个实验室里的人每逢老板询问为何还没做出结果时,都把过错推给Bug. (那个实验室里的人们真是幸福啊 ..)

尔后,”bug” (小虫) 和”debug” (除虫) 这两个本来普普通通的词汇成了计算机领域中特指莫明其妙的“错误”和“排除错误”的专用词汇而流传至今。下面这张照片,就是当时的那只蛾以及Grace的记录。

grace_hopper_bug

Grace Hopper's Bug

第二次世界大战结束后,所有的后备军人应当退役,但是Grace Hopper却决定辞去瓦萨学院的教职,专心在Aiken的实验室里做个Programmer. 1949年,Grace离开哈佛来到费城,进入Eckert和Mauchley合开的计算机公司 (Eckert-Mauchley Computer Corporation) 担任资深数学家,主要工作是设计软件。这家公司设计出来的第一套电子计算机,也是全世界的第三台电子计算机,叫做UNIVAC I. 1950年公司因经营不善,被Remington Rand收购。没过多久,Remington Rand又跟几家小公司合并成立了Sperry. Grace一直在这家公司做资深数学家和程序设计人员,到1971年65岁退休,她才离开这家公司。

Grace对计算机界的贡献相当多,Bug这个名词的引用,其实只算是一个小小的插曲。她最大的贡献是发明了世界上第一个编译器 (Compiler), 名字叫做A-0. 当时是没有任何组合语言及程序语言存在的,所有的程序设计人员都要把程序翻译成机器码,即”0011000101011″这样的形式,在纸上打孔,再送到机器里去读。Grace在进入Eckert-Mauchley公司之后,便产生了一种想法,她想设计一种程序,让人可以用类似英文的语法,把想做的事写下来,然后用这个程序把英文翻译成机器的语法,交给机器去执行。这个想法就是今日的Compiler (编译器). 当初她提出这样的构想时,众人皆曰不可。所有人都告诉她计算机只能做计算,只能处理数字,计算机是不懂英文的。在50年代,大部分人都尚未意识到计算机是用来处理信息的工具,所有的人就认为计算机只是个计算器而已。Grace Hopper可能是第一个想到这个问题并且有机会做下去的人。尔后,她就到处去演讲以筹集资金来做这项计划。这段期间,有很多朋友问她:“你怎么这么勇敢呢? 万一搞砸了,你该怎么办?”Grace回答道:

“It is always easier to ask forgiveness than it is to get permission.”

(以后要道歉,比现在要拿到钱简单多了。)

这句话后来成为她一生中的至理名言之一。

当初在写世界上第一个编译器A-0时,为了向能出钱的老板炫耀,Grace还设计了三个版本:英文版、德文版、法文版,表明编译器不仅看得懂英文,也看得懂德文跟法文。但后来德文版和法文版的编译器都没再做下去。到1956年,她开发出来一套很完整的程序语言,叫做FLOW-MATIC. 海军采用了这套系统 (这时Grace还是海军的一员)。因为海军幅员广大,如果各地自行稍加将编译器修改一小部分,就会发生A地的程序在B地无法执行的问题。于是Grace写了一套程序,用来检查这些程序之间是不是采用同样的编译方式,称作Validation. 后来影响到民间,渐渐发展出一套新的语言,偏向于商业使用的语法,这套程序语言就是著名的COBOL (Common Business Oriented Language). 这也是Grace Hopper对计算机界的第二个重大贡献。其实,在那个年代总共只有三种程序语言:COBOL、ART、FORTRAN (IBM的产品). 有人把Grace叫做“COBOL之母”,这个称号虽然被学术界的某些人所反对 (因为她没有直接参COBOL语言的设计工作),但她对COBOL的形成与发展所起的重大作用却是世人一致公认的。据20世纪80年代初的统计,全美在运行中的程序有80%是用COBOL语言编写的,由此可见COBOL语言对计算机应用发展所起的作用。

下面这张,是Grace颁奖给Donald E. Knuth (神一般的存在) 的照片。前者是开创计算机程序设计语言的早期领袖之一,后者是计算机程序算法的当代领袖之一。这是一张难得的合影。(强大的气场,泪奔 ..)

Grace_Hopper_Knuth

Grace & Knuth

1966年,Grace Hopper满60岁。她当时的官阶是海军中校,而海军中校60岁就该退休了。退休的那一天,Grace说这是她一生中最悲伤的一天,因为别人已经告诉她:她太老了。但很快,海军发现离了Grace还不行——有个工资管理程序重写了823次还是不能正常运行。因此,她刚从海军退休半年就又被海军召回重新服役,负责海军系统计算机高级语言的标准化和普及工作,并且一干就是20年,直到1986年8月14日才正式最后退休。这期间她的军衔一再提升,1985年被提升为少将。由于这超过了美国法律规定的军官服役年龄,国会还通过了专门的法律使对Grace的任命合法化。在波士顿的“宪法号”战舰上向Grace授予“国防部优秀服役勋章”(Defense Distinguished Service Medal) 并为她退休举行的隆重仪式上,Grace在致词中自豪地说她是WAVES成员中最后一个离开岗位的人:她40岁时就被告知她太老了不宜继续在部队中工作,而她却仍然穿着制服又干了整整40年!

重返海军期间,她担任了好几个海军计算中心的主持者或是顾问,指挥海军的技术人员,到处去演讲,宣传她的观念。其中,有一件很有趣并且很有名的事情。她在演讲之中,总是没有办法让听众听懂什么是nanosecond (十亿分之一秒). 多长的时间是一个nanosecond? 而microsecond (百万分之一秒) 又跟nanosecond差多少? 这一点很难去解释,因为它们都是极短极短的时间,但相差了一千倍。 Grace想到了个点子,她跑到工程部切了段电线,这段电线长11.78 英寸 (约合0.3米),她就拿着这将近1英尺的电线跟听众说:“这个长度就是电波在一个nanosecond可以跑的距离。”同时,她又拿了好几捆电线放到桌上,差不多有1000英尺 (约合300米) ,然后她就说:“这个长度就是电波在一个microsecond可以跑的距离。”此时,听众就明白了。所以她说:“你们要小心,绝对不要随便浪费一个microsecond的电。”

其间,有一位参议员,他从来没见过Grace. 但是他听说了这个人以后,就私下做了些调查,然后在国会里面主动提出了关于Grace的申请案。他认为这样重要的女性不应该在海军里面只做一个校官而已,觉得她应该做将官。国会很快就通过了这个提案,然后通知了海军,海军就将Grace升职了,于是,在1985年11月,Grace成为了海军少将,她是美国第一个到达这个官阶的女性。1986年,她七十九岁,是所有在世的、最年长的、尚未退役的美军军官。此时的她,即将正式退休。

尾声

Grace退休的Party上来了2000多人,有她认识的,也有她不认识的。在正式退休之后,她又跟Digital公司签约,Digital公司聘请她代表他们演讲、推销他们公司的产品。Digital公司当时主要的产品是Minicomputer. 事实上,在1986年时PC已经出现,那时叫做Microcomputer. 在海军里,Grace Hopper是极力推行使用PC的人之一。她在这方面也有一句名言。她说,在古老的时候,人们都是用牛和马来拉东西,后来人类社会发展得越来越蓬勃,东西越来越重,但是人们并没有使用更大更壮的物种来搬运东西。事实上,人们是用更多的牛和马来做这些更加粗重的工作。她用这个比喻来说,计算机不应该越做越大,而应该用小型的、大量的计算机一起来做要做的事情。(原来Grace在20多年前就提出了并行计算?)

Grace Hopper逝世于1992年1月1日凌晨,在参加了新年Party 之后,准确时间不明。她生前的一个心愿是活到1999年12月31日的晚上,因为她说她想参加那一场Party. 显然,Grace是个很喜欢Party的人。

grace_hopper_grave

Grave of Grace

后记

Grace Hopper是个非常amazing的人 (常被称为Amazing Grace),崇拜她的人相当多。虽然她的事迹很多,但是还有很多有类似事迹的人并没有像她这样受到众人的崇拜。由其中一点我们可以看出来:从1947年开始 (二战结束后第二年),她获得了第一个荣誉博士学位 (宾州大学),从那以后,她先后被40多所大学授予荣誉博士学位,其中包括芝加哥大学、华盛顿大学、马里兰大学等知名学府。各种妇女社会团体和学术组织都曾授予Grace各种称号和奖励。1991年,布什总统在白宫授予她的“美国国家技术奖” (National Medal of Technology) 是其中的最高奖项,她也是至今惟一获此殊荣的美国女性。她的名言有很多,她自己最喜欢的,也是她最喜欢对所谓的“年轻人”说的 (在她年老时,她所谓的年轻人就是“年龄不到我的一半的人就叫做年轻人”),这句话是:

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

语录

下面Grace的语录中有几句比较有意思的话。

  • From then on, when anything went wrong with a computer, we said it had bugs in it.
  • The most dangerous phrase in the language is, “We’ve always done it this way.”
  • Humans are allergic to change. They love to say, “We’ve always done it this way.” I try to fight that. That’s why I have a clock on my wall that runs counter-clockwise.
  • Leadership is a two-way street, loyalty up and loyalty down. Respect for one’s superiors; care for one’s crew.
  • One accurate measurement is worth a thousand expert opinions.
  • Someday, on the corporate balance sheet, there will be an entry which reads, “Information”; For in most cases, the information is more valuable than the hardware which processes it.
  • We’re flooding people with information. We need to feed it through a processor. A human must turn information into intelligence or knowledge. We’ve tended to forget that no computer will ever ask a new question.
  • To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge.
  • They told me computers could only do arithmetic.
  • In pioneer days they used oxen for heavy pulling, and when one ox couldn’t budge a log, they didn’t try to grow a larger ox. We shouldn’t be trying for bigger computers, but for more systems of computers.
  • Life was simple before World War II. After that, we had systems.
  • We went overboard on management and forgot about leadership. It might help if we ran the MBAs out of Washington.
  • At any given moment, there is always a line representing what your boss will believe. If you step over it, you will not get your budget. Go as close to that line as you can.
  • I seem to do a lot of retiring.
  • I handed my passport to the immigration officer, and he looked at it and looked at me and said, “What are you?”

参考

维基百科:
http://en.wikipedia.org/wiki/Grace_Hopper

國立中央大學数学系:
http://libai.math.ncu.edu.tw/bcc16/pool/3.06.shtml

耶鲁大学计算机系:
http://cs-www.cs.yale.edu/homes/tap/Files/hopper-story.html

计算机先驱:
http://202.207.0.245:9001/jisuanjifazhanshi/xianqu/18.htm

相关 [编译器 debug 传奇] 推荐:

编译器与Debug的传奇:女牛人Grace Murray Hopper小传

- manabomb - FeedzShare 3天最热
来自: 统计学之路 - FeedzShare  . 发布时间:2010年04月01日,  已有 11 人推荐. 这两天读《UNIX痛恨者手册》时看到一句被引用的牛人体语录:“标准的伟大之处在于它可以有很多. —— Grace Murray Hopper.”Google之,意外挖出了一位女性牛人,谨作一文以记之.

eclipse 之debug的巅峰使用

- - 非技术 - ITeye博客
1,在运行中改变参数的 值 以便观察往下的执行情况. } //在下句的开头加上断点,执行到此处时. 在debug面板中的变量小面板中选中变量的值,在下//面的框子中输入新的数值,之后ctrl + s 即可改变这个name的数值 //或者右键变量,选择”改变值“之后输入新数值,点击ok即可. 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止.

eclispe中对maven工程进行本地debug

- - ITeye博客
1、在eclipse安装了m2eclipse插件,并在工程的pom.xml中配置好maven-tomcat-plugin后,单击Eclipse菜单“Run”中的“Run Configurations”. 2、在弹出的对话框中的左侧树中找“到Maven Build”,在其上点击右键并单击“New”. 3、在右侧的“Name”一栏填入自定义的名称.

Java 中的可选参数 | Java Debug 笔记

- - 掘金 后端
本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看. 如何使用 Java 中的可选参数. 一定程度上来讲, varargs (即长度可变的参数)可以做到这一点. 除此之外,必须提供方法声明中的所有变量. 如果想让变量是可选的,那么可以通过重载的方式,此时重载的方法是不带参数的.

VC++中debug跟release编译模式的区别总结 - JavaFans - ITeye技术网站

- Yi - javafans.iteye.com
Debug与Release版本的区别.     Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动. 如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来. 当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等.

Spring Security动态权限控制居然如此简单 | Java Debug 笔记

- - 掘金 后端
本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看. 之前在动态权限控制的教程中,我们通过自定义 FilterInvocationSecurityMetadataSource和 AccessDecisionManager 两个接口实现了动态权限控制. 这里需要我们做的事情比较多,有一定的学习成本.

SpringCloudGateway网关中各个过滤器的作用与介绍(附debug图片)

- - 掘金 后端
在我搭建的微服务项目中,网关是非常重要的一环,起到了请求过滤和拦截的. 我最近需要在网关实现URL请求参数加密以及数字签名检验请求参数是否被篡改等功能,所以最近着手开始研究起了网关. 首先最重要的就是先配置一个自己的过滤器,来完成验证. 然后就在设计的过程中遇到了一些问题,比如请求转发,请求request修改失败等问题.

C语言编译器 Cilk

- Le - 开源中国社区最新软件
Cilk多线程编程技术最早由MIT开 发,是一个基于Gcc编译器的开源项目. 后来开发者创建了一个创业公司,推出改进的私有版本,整合到Windows下的多种编译器中. 之后它被英特尔公司 收购,整合进英特尔的编译器中. 现在,它再次成为一个开源项目,成为Gcc 4.7下的一个分支. Cilk Plus允许C和C++程序员能高效利用多核处理器的并行处理能力.

PathScale开源EKOPath 4编译器

- Tyrant - Solidot
PathScale宣布开源其EKOPath 4编译器套件,包括文档、编译器、调试器,汇编器,运行时和标准库在内的完整开发堆栈. 源代码采用GPLv3许可证发布. EKOPath 4是目前行业性能最优秀的C、C++和Fortran编译器之一. Phoronix测试了GCC 4.5.2和EKOPath /PathScale Compiler Suite 4.0.10,在所有的基准测试项目中,EKOPath都超过GCC,并且胜出很多.

编译器的工作过程

- - 阮一峰的网络日志
源码要运行,必须先转成二进制的机器码. 比如,下面这段源码(假定文件名叫做test.c). 要先用编译器处理一下,才能运行. 对于复杂的项目,编译过程还必须分成三步. 大多数的书籍和资料,都语焉不详,只说这样就可以编译了,没有进一步的解释. 本文将介绍编译器的工作过程,也就是上面这三个命令各自的任务.