前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我在肯尼迪航天中心研究太空机器人:揭秘NASA的编程观

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

作者头像
大数据文摘
发布2018-05-25 10:49:47
6090
发布2018-05-25 10:49:47
举报
文章被收录于专栏:大数据文摘大数据文摘

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

作者 | 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。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据文摘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档