项目管理 在他转型为一位经理的过程中,Rose逐渐学会了考虑和他以往做的事情不同的问题。他指出《程序员应该知道的97件事》中的“把看不见的东西变得更可见”主题是灵感来源之一。对于硬件来说,其集成状态是显而易见的,因为你可以直接去看它,但对于软件就不是这么回事了。“软件开发是没有进度条的”,这个事实促使他的团队尝试不同的方法来进行项目计划。 各种各样现成的项目管理方法论和估算项目需要的时间的方法都不适用于他的团队。Rose说,重要的是设定一些对你的团队成员和任务行之有效的东西。他们尝试了各种估算时间需求的技术,从 wideband delphi 到循证进度法(evidence-based scheduling),发现这些技术本身都不适合他们的小组。因为他们是软件工程师,“我们就编写了自己的工具”,他咯咯笑着说,这个工具混合了多个不同的技术。进度管理没有“万灵丹”,而且“你不太可能拿一套方法直接用”到你所在的领域。他领会到的一个深刻教训就是一旦你用某个进度管理方法获得了一定成功,你就“需要做一些推销工作”去向工程师们展示它如何有效。那样下一次这个方法会取得更大的成功,因为工程师们会更接受它。 一些技术细节 Linux用在SpaceX的所有地方。Falcon 火箭、Dragon 飞船和Grasshopper 运载工具使用它进行飞行控制,地面站和开发人员的桌面也都是Linux。他说,SpaceX就是“Linux, Linux, Linux”。 Rose继续简单描述了Dragon飞行控制系统,尽管他说他不能提供太多的细节。为了符合NASA对于接近国际空间站ISS的要求,这是一个容错系统。NASA的要求里有一些关于获准接近国际空间站的飞船需要能够承受的错误数量的规则。它采用了三倍冗余的计算机来达到所需的容错级别,采用拜占庭将军算法处理计算机之间不一致的状态,比如当太空中的辐射改变了内存或寄存器中的值的情况。 关于导航系统,Dragon采用从国际空间站收到的位置信息,结合自己计算的GPS数据。当它接近空间站的时候,它使用空间站的图片对比空间站的相对大小来计算和空间站之间的距离。因为空间站很可能处于黑暗之中,Dragon利用了热成像技术,因为空间站的温度略高于背景环境。 他的团队也不使用“现成发行版的内核”,相反,他们花费了很多时间来评估他们所需的内核。他们关注的领域之一是调度性能。他说,他们倒没有太严格的实时要求,但是很关心唤醒延迟。他们采用了一些测试来量化在不同场景下调度的性能,例如对网络进行压力测试。一旦选定了内核,“我们就尽量不换了。” Rose说,他们使用的开发工具“简单得囧囧有神”。他们使用GCC和gdb,而每个人都对自己的编辑器和开发环境“自说自话”。开发总是面向Linux,但开发人员使用的桌面系统并不一定都是它,所以他们也开发了很多他们自己的基于POSIX的工具。转到Linux桌面的主要原因是上面有一些现成的开发工具,例如ftrace, gdb(可以直接放到生产环境做调试), netfilter, 和 iptables。 Rose对于在大型的复杂嵌入式Linux环境进行软件开发工作提供了有趣的视角。并且,他的访谈比我们以前进行过的SpaceX访谈更为开放,这是一个好现象。该公司采用的很多技术对大部分程序员来说都比较熟悉,这表明,为太空船开发程序代码的过程并不是传说中的尖端科技。 英文原文:LWN |