是时候放上我女神的照片了。
阿波罗计划的首席软件工程师玛格丽特·汉密尔顿站在阿波罗项目中导航计算机源代码旁边,正是这些代码把人送上了月球。
我们来看看为什么这些代码是神操作:
1. 火箭和飞船上的代码开发难度完爆其他人说的电脑上的代码(不管是磁心线还是打孔卡片),在计算机还没有发展完善以前,火箭代码是没法debug的喔,总不能每改一段代码就发一颗新火箭吧。打孔卡片虽然逼格高,但是总不会程序出了bug就炸飞几千万美元的设备吧。火箭和飞船的程序员们肯定通过纸笔度过了很多不眠不休的夜晚。
2. 那个时候晶体管计算机还没发展完善,很多东西没有统一,大家做一个计算机出来就自带一套汇编。而阿波罗飞船上包含着许多不同的计算机模块,避障模块是A公司产的,中央处理器是B公司产的……为了给不同的模块编程,少说得学三五套汇编语言。手下的程序员专门负责某个模块,只用学一套,但是玛格丽特自己作为项目的leader,应该得是每一套都基本可以弄懂、会写、还不搞混吧。当然,这一点相比于其他事情已经是小事了。
3. 人类实现的第一个卡尔曼滤波器(线性系统的最优估计观测器)是在阿波罗计划中实现的,作者是斯坦利施密特,不过我猜玛格丽特作为首席工程师也是参与讨论和开发的,代码一定也在这一摞厚厚的纸当中。为什么开发卡尔曼滤波器就比比尔盖茨写Basic解释器更屌呢,根据吴军老师《文明之光》第二册(哎呀妈呀这一段太屌了,每次和别人讲都觉得热血沸腾),斯坦利施密特是和卡尔曼讨论阿波罗的轨迹预测问题时发现卡尔曼滤波器的妙用的。卡尔曼滤波器是一个我觉得很高大上的东西,因为和一般的程序不同,他用到了深刻的数学和数值计算工具。轨迹预测的话,三维位置,三维速度?如果是这样的,那么他们的代码里包含对六阶矩阵的乘法、求逆矩阵(LU分解或者QR分解)。当然也许他们只预测位置,那么三维矩阵求逆就好办了一些,然而我觉得,我们可是在谈几百万美元的大飞船啊怎么可能没有带速度的运动模型,应该还是搞六维的吧。让现在任何一个工程师拿C手写矩阵分解,估计都会让他痛苦好几天的,别说上古时代只有晶体管计算机和汇编语言了。
大家应该能想想出更多艰难的事情了。。。
4. 最神操作的当然是“女神玛格丽特对自己人生的选择” =。=
大家可以自行百度她的照片,真人很漂亮,在1969年就已经引领了黑丝连衣裙的流行女神装扮,中年之后依然知性优雅。明明靠脸就能够生活得很好了,却选择了程序员的职业生涯,而且还领导了人类历史上最伟大的软件工程,这个人生真是。。。我辈只能佩服得五体投地。
所以每次我写好程序到飞行器里忐忑不安地准备测试的时候,我都会想一想我的女神,然后鼓励自己:这没什么难的,你的卡尔曼滤波器是用Eigen写的,安全的很;你的飞行器也就几万块钱,便宜得很……
====================================================
评论区起了奇怪的争论,让我觉得有必要喊轮子哥出来解释一下。
根据
Altair BASIC和
Interview with Bill Gates(两个应该都是比较可信的原始资料),并没有Bill Gates在飞机上撸出Basic解释器这个说法。史料中只是记载,当Gates和Allen完成他们第一版的BASIC解释器之后,Allen飞去位于Albuquerque的MITS公司给他们做展示,那里有一个Altair机器可以用来测试BASIC。在路上Allen想到他们忘了写bootstrap,于是在飞机上写了一个,长度为46字节。而比尔盖茨后来写了个长度为17字节的bootstrap,但是没有说写这个更短的bootstrap是在Allen去展示之前还是之后,我猜是Allen去展示之后,而且是蹲在家里写的……
另外根据比尔盖茨自己的说法“Paul was very good with the PDP-10 Assembler. I, in the meantime, laid out the design and charged off coding the BASIC. Paul later came in and helped out with that. A third person, Monte Davidoff, sat down for lunch with us and said he knew floating point packages. So, we had him write some of the math routines. And then we just kept squeezing it.”我们得知有另外一个人帮助盖茨和艾伦写了一些数学函数,而且盖茨他们用了simulator测试BASIC解释器,而且盖茨把码代码的过程叫做“squeeze”,显然回忆起了开发过程的辛苦。
所以我觉得轮子哥所说“在飞机上写个BASIC解释器不debug就直接用”非常误导人。盖茨和艾伦就是正常在开发流程中做了个正常的解释器,而且根据他们开发的年代,应该是Unstructured BASIC。Unstructured BASIC转PDP-10 Assembler应该只需要拆loop,解释条件判断等等,没有太多现代编译器理论,应该还是好写的。难度主要是工程上的,因为要把解释器塞到4K内存里。
Anyway我就陈述个事实和我自己一点点看法。还是那句话,膜拜女神最重要,其他技术问题都是小事。。。
WPS 第一版貌似是求伯君一个人用纯汇编写出来的。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有