SpaceX火箭發(fā)射成功,他們也在用Python!
本文經(jīng)授權(quán)轉(zhuǎn)自:程序員的那些事(id:iProgrammer )。未經(jīng)許可,禁止二次轉(zhuǎn)載。
北京時(shí)間5月31日凌晨3點(diǎn)22分,NASA 與 SpaceX 合作,獵鷹9號(hào)火箭順利升空。這是 SpaceX 公司首次利用載人龍飛船,把兩位宇航員送入地球軌道。

(獵鷹9號(hào)火箭升空)
31日22點(diǎn)30分,載人龍飛船與國(guó)際空間站成功對(duì)接。
6月1日凌晨1點(diǎn)23分左右,搭乘龍飛船的兩位美國(guó)宇航員進(jìn)入國(guó)際空間站。

空間站上的三位宇航員與龍飛船上的兩位宇航員(右一右二)碰面
Dragon 飛船和 Falcon 9 火箭都廣泛使用定制版的 Linux 系統(tǒng),飛行軟件使用 C/C++ 編寫(xiě),飛船內(nèi)的圖形顯示應(yīng)用是基于 Chromium/JS。
可能有程序員(包括我自己)對(duì) SpaceX 工程師們用到的技術(shù)棧感興趣了。于是就搜尋相關(guān)公開(kāi)信息。
終于找到?2013 年 SpaceX 的軟件工程師在 Reddit 做過(guò)一次公開(kāi)回應(yīng),回答網(wǎng)友們的提問(wèn)。
一、SpaceX 軟件工程師團(tuán)隊(duì)在干什么
SpaceX 軟件工程師的目標(biāo)有 2 個(gè):
火箭和航天器上運(yùn)行的代碼;
火箭和航天器的設(shè)計(jì)和制造過(guò)程的代碼;
工作內(nèi)容范圍就很大了,從大型 Web 應(yīng)用到小型嵌入式計(jì)算平臺(tái)都有涉及。
SpaceX 軟件工程師的技術(shù)棧:
C#、MVC4、EF、MSSQL (REST);
Javascript、Knockout、Handlebars、LESS;
C++、Linux、C、Python、LabVIEW、MATLAB;
看到這,肯定有人冒出疑問(wèn)了,C# 和 MVC 與火箭發(fā)射沒(méi)有關(guān)聯(lián)吧?

嗯,沒(méi)關(guān)系,它們是用來(lái)開(kāi)發(fā)內(nèi)部信息系統(tǒng)的。
SpaceX 有 4 個(gè)獨(dú)立的軟件團(tuán)隊(duì)。
1、飛行軟件團(tuán)隊(duì)
大約有 35 人(這是 2013 年的人數(shù))。獵鷹9號(hào)火箭、蚱蜢火箭和龍飛船上所有的代碼,都由飛行軟件團(tuán)隊(duì)包圓了。
此外,他們還得:
編寫(xiě)仿真軟件,測(cè)試飛行代碼;
編寫(xiě)部署在地面站的通信和分析軟件;
在飛行任務(wù)控制部門(mén)工作,為現(xiàn)役任務(wù)提供支持。
2、企業(yè)信息系統(tǒng)團(tuán)隊(duì)
建立內(nèi)部軟件系統(tǒng),讓 Spacex 得以運(yùn)轉(zhuǎn)。
這個(gè)團(tuán)隊(duì)中的成員身兼多職,但他們開(kāi)發(fā)和發(fā)布的旗艦產(chǎn)品,幾乎所有 SpaceX 員工都在使用的內(nèi)部 Web 應(yīng)用程序。
包括:
創(chuàng)建采購(gòu)訂單和填寫(xiě)零件庫(kù)存的人員,
工程師創(chuàng)建設(shè)計(jì)和工作訂單,
技術(shù)人員在現(xiàn)場(chǎng)打卡并根據(jù)這些設(shè)計(jì)查看當(dāng)天的工作內(nèi)容。
(基本涉及到方方面面了。市面上有一些商業(yè)化產(chǎn)品可以滿(mǎn)足他們的需求,但 SpaceX 是自己開(kāi)發(fā)了)
SpaceX 正在從一個(gè)研究和工程公司轉(zhuǎn)型為一個(gè)制造公司,該團(tuán)隊(duì)功不可沒(méi)。他們充分利用了C#/MVC4/EF/SQL、Javascript/Knockout/Handlebars/LESS 和 REST API。
3、地面軟件團(tuán)隊(duì)
這個(gè)團(tuán)隊(duì)大約有 9 人。主要在 LabVIEW 中編碼,開(kāi)發(fā)用于任務(wù)和發(fā)射控制的 GUI,供工程師和操作人員監(jiān)控飛行器遙測(cè)和指揮火箭、航天器和平臺(tái)支持設(shè)備。
他們?cè)诟叨确植际较到y(tǒng)中推送高帶寬的數(shù)據(jù),并實(shí)現(xiàn)由嚴(yán)格要求的復(fù)雜用戶(hù)界面,以確保操作人員能夠及時(shí)控制和評(píng)估航天器。
LabVIEW 是什么?
LabVIEW(英語(yǔ):Laboratory Virtual Instrumentation Engineering Workbench)是由美國(guó)國(guó)家儀器公司所開(kāi)發(fā)的圖形化程序編譯平臺(tái),由杰夫·考度斯基(Jeff Kodosky)發(fā)明,程序最初于 1986 年在蘋(píng)果電腦上發(fā)表。
LabVIEW 早期是為了儀器自動(dòng)控制所設(shè)計(jì),至今轉(zhuǎn)變成為一種逐漸成熟的高級(jí)編程語(yǔ)言,目前廣泛的被應(yīng)用于工業(yè)自動(dòng)化之領(lǐng)域上。
圖形化程序與傳統(tǒng)編程語(yǔ)言之不同點(diǎn)在于程序流程采用"數(shù)據(jù)流"之概念打破傳統(tǒng)之思維模式,使得程序設(shè)計(jì)者在流程圖構(gòu)思完畢的同時(shí)也完成了程序的編寫(xiě)。—— 維基百科
4、航電測(cè)試團(tuán)隊(duì)
他們與航電硬件設(shè)計(jì)工程師一起合作,編寫(xiě)測(cè)試軟件,盡早發(fā)現(xiàn)硬件問(wèn)題。
該團(tuán)隊(duì)的主要任務(wù):寫(xiě)出非常全面和強(qiáng)大的軟件,以便能夠在大批量的情況下自動(dòng)發(fā)現(xiàn)硬件的問(wèn)題。
測(cè)試軟件通常是在機(jī)械環(huán)境測(cè)試的時(shí)候運(yùn)行。
【說(shuō)明】:可能有童鞋要問(wèn),前文技術(shù)棧提到了 Python,怎么沒(méi)有說(shuō)用在哪方面呢。測(cè)試團(tuán)隊(duì)做自動(dòng)化測(cè)試時(shí),肯定用了 Python。
我們來(lái)看看 SpaceX 部分涉及測(cè)試的崗位要求:



二、SpaceX 工程師答網(wǎng)友問(wèn)
問(wèn):導(dǎo)航/推進(jìn)控制系統(tǒng)用了哪種操作系統(tǒng)?
答:龍飛船和獵鷹9號(hào)用的是 Linux。

問(wèn):主力編程語(yǔ)言是哪個(gè)?
答:火箭和飛船都是 C++。

問(wèn):你們當(dāng)前最大的項(xiàng)目代碼量是多少?
答:運(yùn)載工具代碼約為幾十萬(wàn)行。
問(wèn):維護(hù)麻煩嗎?
答:不麻煩,這就是我們的工作!實(shí)際上,我們對(duì)代碼庫(kù)非常滿(mǎn)意。
問(wèn):你們最具挑戰(zhàn)性的項(xiàng)目是什么?為什么?
答:龍飛船對(duì)接國(guó)際空間站是一個(gè)重大挑戰(zhàn)。因?yàn)楸仨氁_(kāi)發(fā)許多新代碼。
(程序員的那些事 補(bǔ)充:今天成功發(fā)射的龍飛船,可以自動(dòng)與空間站完成對(duì)接。第一代龍飛船需要借助空間站上的機(jī)械臂。當(dāng)然,載人龍飛船也保留了人工對(duì)接的選項(xiàng)。SpaceX 在 2013 年的龍飛船是第幾代,我沒(méi)查。
)
問(wèn):你們覺(jué)得最有成就的是什么?
答:龍飛船對(duì)接國(guó)際空間站。

問(wèn):你們?cè)趺雌胶夤ぷ?生活?我聽(tīng)說(shuō)在 SpaceX 很容易職業(yè)倦怠。你們都在煎熬嗎?
答:SpaceX 體現(xiàn)了小型企業(yè)的心態(tài)。我們?nèi)纪顿Y于 SpaceX 及其成功。話雖如此,我們的工作時(shí)間卻更長(zhǎng)。歸根結(jié)底,還是要看你生活中最重要的是什么。我們當(dāng)然要應(yīng)對(duì)職業(yè)倦怠,那就是休假?:-)。
就我個(gè)人來(lái)說(shuō),大多數(shù)時(shí)候我甚至沒(méi)有注意到我已經(jīng)工作了12~14個(gè)小時(shí)。我看著時(shí)鐘,想著“時(shí)間真快在哪里?”。我認(rèn)為這證明了我們對(duì)項(xiàng)目感到興奮的程度。當(dāng)你真正享受自己的工作時(shí),并不會(huì)感覺(jué)像是在工作。話雖如此,我仍然會(huì)時(shí)不時(shí)地休假,借以保持理智。

(程序員的那些事 補(bǔ)充:我查看了 SpaceX 的招聘信息,很多技術(shù)崗位,基本都有一個(gè)額外要求:必要的時(shí)候,能加班。
?)

還有個(gè)當(dāng)年正在攻讀天體物理學(xué)的學(xué)位的童鞋問(wèn):
對(duì)于航天行業(yè),你們覺(jué)得最常用/最有用的編程語(yǔ)言是什么?我的編程經(jīng)驗(yàn)非常少,而且很想開(kāi)始學(xué)習(xí),因?yàn)檫@個(gè)行業(yè)的每一個(gè)方面/研究似乎都需要對(duì)編程有一定的了解。
SpaceX 工程師的回復(fù):
對(duì)于所有軟件工程師來(lái)說(shuō),C 語(yǔ)言是一門(mén)很好的入門(mén)語(yǔ)言。它迫使你學(xué)習(xí) CPU 是如何工作的,內(nèi)存是如何工作的,等等。一旦你掌握了 C 語(yǔ)言之后,再去看 C++。
我們團(tuán)隊(duì)所有人都有不同的背景,沒(méi)有什么特別的路徑,我們都是沿著一條路走到這里的。就我個(gè)人而言,我在學(xué)校里得到的最好經(jīng)驗(yàn)就是做了個(gè)人編程項(xiàng)目。這年頭在網(wǎng)上和應(yīng)用商店里有很多機(jī)會(huì),可以做一個(gè)產(chǎn)品,公開(kāi)自己的作品讓他人看到。
最后附上一個(gè)視頻:動(dòng)畫(huà)演示 SpaceX 龍飛船如何送宇航員去國(guó)際空間站
(視頻轉(zhuǎn)自騰訊太空)
好文章,我在看??
