资源描述:
《她只是一个女程序员》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、她只是一个女程序员,凭什么获得奥巴马授予的自由奖章?今天z奥巴马颁发了他任内最后一批美国自由奖章(美国授予公民的最高奖)。在迈克尔.乔丹、比尔•盖茨等人之中,有位特别的获奖者,她叫做玛格丽特.汉密尔顿。她是一个女程序员,一个曾经挽救了阿波罗登月计划的程序员。文/李子虽然现在程序员看似是个男女数量极其不平均的岗位,但就在不远的过去,在计算机拓荒的年代,却是有不少女性程序员为此贡献了智慧与青春。玛格丽特•希菲尔德•汉密尔顿(MargaretHeafieldHamilton)就是其中一个。—边看孩子一边写程序玛格丽特本姓希菲尔德。她1936年生于美国一个普通家庭,普通地读完了高中和大学,主修数学。
2、在读书的时候,她嫁给了詹姆斯•汉密尔顿(JamesCoxHamilton),成了汉密尔顿太太。她毕业之后找了一份教师的工作,教数学和法语。那时候”她的丈夫还在哈佛法学院读书,她勇敢地承担起了家庭的责任。不过,她读书深造的愿望并没有因此灭。待丈夫安定下来,两人一起搬去了波士顿,玛格丽特准备去再读一个抽象数学的学位。然而,两人的小日子还是太紧张了。此时一个工作机会摆在了她面前。当时计算机科学的先锋MIT里一个实验室在招临时编码工。玛格丽特抱着试试看的态度,就这样踏进了程序员的殿堂。TT始,她为天体学系写天气预报系统的代码。因为工作出色,转为正式工,后来又去了大名鼎鼎的林肯实验室,为美国军方SAG
3、E项目写代码——在冷战之弦拉得最紧的I960年代,用电脑程序帮助侦查危险的〃不友好的飞行物〃o那时候还没有〃软件工程〃这个学科,更没有〃软件工程师〃这种高洋上的名头z没人像今天的〃计算概论〃一样教,辛苦在计算机硬件上直接编写程序的程序员们,就像从前的手工业工人一样,靠的大多是一点点摸索岀来的经验。而一张白纸的玛格丽特,面前的都是前人扔给她的棘手程序。这些毫无头绪的程序有多难处理呢?前人不得不用希腊语和拉丁语写评论来取乐。而玛格丽特是全实验室第一个解决问题的人,还把调试方法翻译成希腊语和拉丁语,漂漂亮亮地回敬了一发。玛格丽特的女儿劳伦(Lauren),也在这时候出生了。繁忙的妈妈玛格丽特不得不
4、将小劳伦带去工作,让她睡在查尔斯河畔实验室的地板上,醒来的时候兀自玩耍。当时的人们对于这样一个〃工作狂妈妈〃十分不理解。"你怎么这么不顾你的小孩?"玛格丽特并不在意。她热爱着她这份虽然不时枯燥,但却充满挑战和〃神秘感〃的工作。她也喜欢着实验室,喜欢每个人开的极客冷笑话,工作结束之后和每个人去喝酒。〃就跟实验室里其他男孩子一模一样。〃而勤奋的玛格丽特,还会在喝完酒之后,忽然想起程序里的一个小错误,连夜飞奔回实验室修改。〃不重要“的程序救了阿波罗一命由于出色的表现,玛格丽特获得了另外一个机会:加入MIT的CharlesStarkDraper实验室,带领一个小团队,为NASA的阿波罗计划写软件。在
5、阿波罗的最初的预算报告中,根本就没有"软件"二字。不过后来,NASA意识到了软件的重要,逐渐把软件相关的团队扩大到了400多人但玛格丽特依然是一个无名小卒。她负责的,大概是整个计划当中最不受重视的部分:“万任务失败之后的后备方案。但所有人都不重视,觉得这不可能发生。连这个部分的名字,都被称作"Forgetit"。〃我想为整个系统中加入一旦人工岀错之后的备用纠错方案,〃玛格丽特说,〃但是他们不同意。他们说,宇航员们都经过了严格的、完美的训练,’绝对不可能出错'。“也的确,那时候计算机的存储空间和计算能力都十分有限,决策者不希望有任何〃累赘〃的部分。玛格丽特无奈,只好在操作系统里做了一个备注,"
6、不要在飞行的时候选择P01模式"。但是,坏事儿还是发生了。阿波罗8号环绕月球的任务中,宇航员罗威尔(JimLovell)—时疏忽,按下了P01模式,所有的巡航数据都被清空了,飞船分分钟迷路。接到休斯顿紧急打来的电话之后,玛格丽特领着一群程序员,连夜奋战了9个小时■过了每一行代码■修复了这个问题■数据被重新上传上去。阿波罗8号得以翊返航。而真正的考验还在后面。随着登月计划紧锣密鼓的进行,美国政府和NASA都绷紧了弦,苏联就在背后,一刻也不能停止。玛格丽特加班工作的时候也越来越多了。而成就总是伴随着错误和风险就在阿波罗11号历史性着陆月面的3分钟之前,忽然警报大作,轨交雷达发来了大量的数据涌入电
7、脑存储区,快把电脑弄崩溃了。若是系统崩溃,飞船将毫无悬念地坠毁在月面,〃人类的一小步〃可能是一个大坑和两条生命。但是,玛格丽特设计的系统顶住了这个压力。在大量的数据涌入电脑的时候,最宝贵的计算资源,被用于最关键的部分,比如安全登陆本身,而处理不重要的雷达交互数据的任务被砍掉,让程序可以随时中止低优先级任务,专注于高优先级任务。这次的事件,也让她提出了后来的"异步程序"的概念。即程序可以不用等待当前任务响应,先