我在肯尼迪航天中心研究太空机器人:揭秘NASA的编程观

大数据文摘作品,转载要求见文末

作者 | Abner Coimbre

编译 | keiko,大力,ether

根据早先在肯尼迪航天中心的工作经历,我整理出了这篇文章,里面汇总了一些编程工作中常见且重要的问题,和应对经验和办法。当然啦,这些都是我的个人经验谈,不代表NASA官方喔。

众说纷纭,该听谁的?

关于“升级”的讨论

在编程界,大家讨论的主题总是集中在“升级”上——有没有“更好的方法”,“更先进的软件”,等等。大家总能不断发现“最新的”“更好的”,这时候,如何甄别真正有用的信息,就变成了绕不开的重要话题。

NASA更需要慧眼明辨

事关人身安全,软件开发更需谨慎

(图片来自于David McNew/ Getty Images)

身处信息爆炸时代,很多新手程序员都会问:“到底哪些值得我们关注呢?”这也是其职业发展中最重要的问题,而且很多问题真心不容易笼统回答,比如“面向对象的程序设计是未来的主流吗?”又或者“Rust语言是最有前途的,快上车!”“Go语言的设计目标是最好的吗?”

NASA也同样考虑过这些问题。

我们都知道,但凡程序上出现一丁点的错误,都有可能给太空项目造成严重后果。为此,NASA对程序编写的采取高度严肃和谨慎的态度。接下来我会介绍一些相关内容,希望能够对大家有帮助。

我认为NASA编程有四个基本原则,这些让我和我的同事们受益无穷,也因此,NASA能开发出世界上最可靠的一些软件。

NASA的四个基本原则

每个人都有一位导师

“谁是你的导师?”这个问题,是勤劳又害羞的NASA程序员之间谈话常用的破冰语。NASA规定每位程序员都配有一位导师,导师可能是来自商业部,比如OSBP ( Office of Small Business Program: 小型商业企划部门),内部的NEXT项目部,或是PAXC(Pathways Agency Cross-Center Connection:跨机构联络中心)。而且NASA会在你入职之初给你安排好。其实这样做很好理解,太空项目的编程,如果没有资深人士来督导新手程序员,那会是很可怕的。

我们相信每个人的潜力

早在加入NASA之前,每个人都通过了严苛的联邦背景调查,我们相信每个人都能做出有价值的贡献,都具有潜力。你只要尽力地发挥和展现自己就好,别被职位头衔这些东西束缚住。有许多实习生在重大的软件开发项目中做出贡献。

不懂的请大胆问

“这个我不懂。”

这句话我们在工作的时候经常可以听到。你会看到资深程序员问实习生“我不太懂这部分代码库,是不是有某些语言特性我不了解?”或者管理层问工程师“我不是很懂你今天在做的东西,我们一起过一遍?”

互相请教不懂的问题,是大家日常工作中重要的一部分。没有谁高一级或者低一级,只有知道和不知道。

透彻理解计算机系统运行

NASA很重视从根本上去思考和理解计算机系统,通过检视系统中的基础限制何在,可以预防产生不佳决策,这是很有价值的。

Gene Amdahl 就是这方面的一位先驱,他提出了一个有趣的问题:系统中一部分的效率提升,对总体的影响是多少?比方说整个系统的一半,其运行效率提升了四倍(哇!),我们想知道总的运行时间会节省多少。也就是说,某程序原本需要T1时间完成,其中一定比例(f)的部分,变快了k倍,那么现在的完成时间T2会是多少?这个数学推导过程挺简单的,我就直接给出公式了,可以用T1,f,k计算出总体效率提升为几倍:

Fig. 1 — Amdahl’s Law (Amdahl计算定律)

用这个公式来计算上面的例子:

Fig. 2 — Applying Amdahl’s Law

(应用Amdahl定律)

得到的结果是1.6。 所以即使你把系统中五成部分的效率提升四倍,系统总体的效率只是原来的1.6倍而已。再来看一个更令人惊讶的结论,如果系统中某部分的运行时间变成0(k趋近于无限大),也就是Amdahl定律的特殊形式:

FIg. 3 — Special Case of Amdahl’s Law

(Amdahl定律的特殊情况)

假设系统中六成部分,运行时间降为零,总体效率将是原来的2.5倍,也就是改进六成部分的情况下能到达的理论最大值。Amdahl定律告诉我们,若要显著提高总体效率,我们必须改进其中非常大比例的一部分才行。这是一个很简单的道理,但是经常被遗忘。这个定律常应用于多核处理器并行计算中的效率预估,用Julian Browne的话说:“Amdahl定律显示,虽然并行计算可以把程序拆分为多块同时运行,但整体运行时间仍受限于其中耗时长的部分。”

了解完这些基本原则和态度,下面我分享一些个人的感想和收获:

  • 练就“慧眼”剔除不靠谱信息

其实编程学科还处于发展阶段,个中观点和信息确实芜杂。许多人可能都没有意识到,一些惯用信息渠道的内容也许没那么可靠。据此,NASA总结了防范机制:

  • 避免“我相信”的心态

这儿的“我相信”并不是指期望,而是我们想要相信什么事情,即使它的理由并不充分。

这儿有个例子——

领导:“我很喜欢我们app的新功能,你说你下载了一个新的库来编写这个?”

员工:“是的。目前用得挺好的。”

领导:“它是开源的,还是供应商提供的?够靠谱吗?你在我们的参数空间里面测试过它的鲁棒性吗?”

员工:“没有,但是我这段时间一直在用,到现在也没有出过什么问题。”

求此时领导内心阴影面积……

像这样下载了代码就直接拿来用,或是有时候程序跑不通又突然好了,你就觉得没问题了,都是“我相信”的心态。这种心态也许不容易察觉,但时间一长,原本你认为挺好的软件会暴露出问题,比如运行慢,bug多等等。

  • 避免笃信权威或主流

不要因为某权威人物断定某个事情一定是正确的,或者因为某些观点一直被认为是正确的,就马上接受它们。笃信权威或主流观点,可能是由于人们想找寻一种认同感。比如有些人激烈争论“哪种文本编辑器最好”,或是“怎样才算合格的程序员”等话题,都是源自对团体认同的需求。

  • 避免被个人魅力左右

会议气氛很棒,理论框架很赞,演讲者很热情,声音超动听,连ppt都那么完美,他所说的最新编程实践方法看起来也无懈可击——让你变成超级大牛程序员的那种(这次是真的!)。有些演讲者很擅长与观众互动和制造气氛,加上演讲这样的正式场合,人们很容易就买单了他说的观点,还买了他的书(哦,重点在这…)。

  • 避免“看上去很美”

可能这句话听着有些怪。如果一个idea很有吸引力和令人振奋,那它不仅是看起来很美,而且几乎一定是正确的了。不要被轻易迷惑。

当然,要避免的情况还有很多,但更重要的是我们用科学方法推动技术进步,来杜绝它们。

  • 夯实基础认知,提高专业水平

不论什么领域,只有知识和能力达到了一定水平,相互之间沟通才会是高效的。比如说讨论宇宙本质这样的话题,必须是受过良好的科学教育的人。当我们谈论编程时,也应该是大家都具备了较高的电脑水平,这样的交流才更有益。

计算机领域里各种理论和观点层出不穷,我们作为专业人士,应该更重视夯实根本,关注基础概念的认知。这不仅是我们的责任所在,也可以帮我们杜绝不靠谱的情况,比如前面说的轻信盲信和被迷惑的例子。NASA非常在乎这一点,所以为大家提供了很好的氛围和环境,确保每个人的专业能力大幅提升。

推荐

上面说的这些,和你有共鸣吗?你想要提升自己的专业水平吗?我可以给程序员们一些个人建议:

《程序员视角看计算机系统》

Codenamed CS:APP

《程序员视角看计算机系统》是我最喜欢的编程书,对我的职业生涯也有很大影响。里面涵盖的知识,是我认为每个人都该了解的。至少,认真看完前三章(分级存储器体系、系统输入输出),你就会学到很多了。如果你的工作和互联网相关,网络编程一章也可以好好学下。

寻找志同道合者

有个小型社区Handmade Network,这是一个超棒的团队(剧透:我也是一分子)。在这个空间里,大家可以不用讨论那些“最新的”“更好的”(如开头提到),而是讨论更为重要的东西,像我在文章里写的这些。像其他社区一样,我们也曾走过教条主义的阶段,但将来会更注意不再陷入。

我们也曾访问过一些知名的程序员,他们也发表过他们的一些观点,可以看这里——

相关媒体

  • Reddit (2017)

https://www.reddit.com/r/programming/comments/66vdor/handmade_software_manifesto/

  • KillScreen Op-ed (2016)

https://killscreen.com/articles/people-trying-save-programming/

  • Hacker News (2015)

https://news.ycombinator.com/item?id=10095104

  • Reddit (2015)

https://www.reddit.com/r/programming/comments/3hufkw/the_handmade_manifesto/

  • JAXenter (German) (2015)

https://twitter.com/JAXenter/status/635755784916234241

关于作者

Abner Coimbre,25

我在肯尼迪航天中心工作了三年,负责编写和维护发射控制系统软件。2015年我被评为杰出实习生,并进入了NASA的Pathways项目。这个项目里,我的任务是研究如何简化太空飞行机器人的程序调试。这项成果使我登上了肯尼迪中心2016年度十大创新人物的榜单——虽然差一点没上。

我的大部分工作属于敏感但非机密性质的(SBU, sensitive but unclassified),不方便在网上透露太多,比较遗憾。虽然我可以有技巧地告诉你……但是据说联邦监狱里没有巧克力和红酒,所以我还是算了。

原文连接:https://mystudentvoices.com/a-look-into-nasas-coding-philosophy-b747957c7f8a

2017年7月《顶级数据团队建设全景报告》下载

关于转载如需转载,请在开篇显著位置注明作者和出处(转自:大数据文摘 | bigdatadigest),并在文章结尾放置大数据文摘醒目二维码。无原创标识文章请按照转载要求编辑,可直接转载,转载后请将转载链接发送给我们;有原创标识文章,请发送【文章名称-待授权公众号名称及ID】给我们申请白名单授权。未经许可的转载以及改编者,我们将依法追究其法律责任。联系邮箱:zz@bigdatadigest.cn。

原文发布于微信公众号 - 大数据文摘(BigDataDigest)

原文发表时间:2017-08-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

【谷歌硬件发布会全回顾】9大新品重磅发布,DeepMind强力助攻硬件AI化

【新智元导读】 谷歌昨天夜间进行了本年度规模最大的一场硬件发布会,一口气发布了多款新品,包括拍照完爆iphone 8 Plus的手机、笔记本电脑、能实时翻译的耳...

3358
来自专栏小詹同学

人人都能看懂的云计算知识科普 !

双十一期间,我想很多小伙伴都被阿里云的促销活动刷屏了,大家组队组团,可以得到较为便宜的阿里云服务器。另外,Docker 也红得发紫,与之对应的 DevOps 和...

4112
来自专栏章鱼的慢慢技术路

飞鱼48小时游戏创作嘉年华_厦门Pitch Time总结与收获

明确美术队友和程序队友的水平,提需求的过程中尝试做减法,在保留核心玩法的基础上,看队友水平和时间判断是否添加需求。

741
来自专栏VRPinea

电子阅读out,VR/AR带你走进阅读3.0时代

3679
来自专栏ATYUN订阅号

NASA宣布设计机器人众包竞赛的第一批获胜者

NASA(美国国家航空航天局)将设计机器人部分众包。今天,它宣布了哪些团队提交的方案可以采纳。

1001
来自专栏PPV课数据科学社区

面向程序员的数据挖掘指南(一)

? 作者:Ron Zacharski 第一章:简介 内容: 寻找事物 本书结构 阅读完本书后你可以做些什么? 为什么数据挖掘很重要?哪些内容可以为我所用? ...

3537
来自专栏工科狗和生物喵

计算机(处理器)发展史 (PS:课程论文)

正文之前 写死写活的一篇课程论文,让我去探讨了下计算机的发展历史。很有趣,写了我好几天呢!! 正文 【摘要】 计算机的发展史,很大一部分是计算机处理器的发展史。...

4129
来自专栏量子位

谷歌AI相机Clips今发售,“贴身摄影师”抓拍每一刻欢乐

Root 编译整理 量子位 出品 | 公众号 QbitAI 不管是一家人出游玩耍,还是朋友聚会轰趴,总错过很多来不及掏手机而转瞬即逝的欢乐。 今天终于开售的谷歌...

3446
来自专栏镁客网

SegmentFault D-Day 2015 南京开源站:让技术飞一会儿

1913
来自专栏姬小光

初创公司如何在 BAT 的夹缝中寻找机会

创业的思路有很多种,若你不乏奇思妙想,点子源源不断,那么本文可能并不适合你。本文想讨论的,是围绕大公司的产品生态,或各个产品之间的夹缝地带催生的一些机会。长期关...

882

扫码关注云+社区

领取腾讯云代金券