當前位置:
首頁 > 知識 > 看NASA的編碼哲學

看NASA的編碼哲學

看NASA的編碼哲學

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

看NASA的編碼哲學

為肯尼迪工作過並不意味著我為NASA代言。 這個寫作是以個人身份進行的,來自於我在Twitch上的現場演講 。

誰在我們中說出真相?

現代軟體世界

在編程社區中有一個反覆出現的話題,與尋找「更好的方式」來編寫「現代軟體」有關。無論術語「現代」是否真的有用 - 計算機編程存在的時間本來就不長,人們卻總是對這個話題說「新」或者「更好」,這著實令我印象深刻。 並且如果我們關注當今軟體開發領域的話題,我們會很快意識到明辨是非的重要性:一定要區分清楚什麼是有用的,什麼不是。

NASA必須砍掉廢話

看NASA的編碼哲學

鑒於所有關於現代軟體的評論,我看到初學者程序員問我他們職業生涯中最重要的問題:「我們應該注意哪些事情?」,而且老實說,如果接下來我就給他們講解下面這些問題那就太說不過去了:

? OOP是編程的未來嗎?

? 快點加入Rust Evangelism Strikeforce LUL

? Go語言是否完全比<為其他目標設計的語言>更好?

至少,如果讓NASA回答,NASA肯定不會這樣回答。眾所周知的,NASA中如果其軟體中的任何一個軟體不正確,那麼空間程序可能會遭受不可逆轉的後果,其中包括死亡。 這種現實的震撼使他們能夠更嚴謹的編程,因此看看他們的價值觀可能是有啟發性的。

在那裡工作多年,我希望提供一個關於航天局生產世界上最可靠的軟體的哲學的第一手資料,我將用一套四個假設來描述他們對編程的態度。

NASA的四個假設

你可以問導師

「誰是你的導師?」在NASA如果兩個靦腆的程序員不知道如何開始對話,那麼這個問題往往可以很好地打破尷尬。這是由於該機構的承諾,確保每個程序員都有一個導師。 導師可能在業務層面,OSBP的Mentor-Protégé程序,內部NEXT項目,或與路徑機構跨中心連接(PAXC)方面進行指導。 更贊的是,你不需要想盡辦法去找一個導師,因為我們從一開始就都被每人分配了一個導師。 程序員缺乏經驗的想法對於太空計劃來說是可怕的。

我們相信彼此的潛力

由於進入機構之前每個人都接受過聯邦的背景調查,所以我們有理由相信彼此。 同時,我們也有理由認為每個人都是有才能的,我們相信個人的潛力是不可忽視的, 實習生對高級的NASA軟體項目做出貢獻並不罕見。

你會說「我不明白」

這句話在機構中隨處可見, 你會見到知識淵博的高級開發人員問實習生「我不明白這部分代碼庫。 這是一個我不了解的語言功能嗎?「或管理層問工程師」我不知道你今天工作的影響是什麼。 我們可以再多看幾遍,直到我把握了,好嗎?「這些問題是日常工作的核心。

我們深入了解計算機系統如何運作

NASA深度地需要研究關於計算機如何工作的知識,他們發現了發現基本系統限制的價值,以防止支持壞的軟體開發決策。

想想Gene Amdahl,他是一個早期的計算機先驅,他做過一個有趣的調查:改進系統的一個組件會帶來多大的效用? 就是說你的程序運行時間的百分之五十提高了四倍,現在我們想知道整個應用程序的速度提高情況。 換句話說,某個程序需要時間T1運行到完成,現在其中的一部分(從T1中獲取一個分數f )改進為了原先的k倍快。 儘管很簡單,我還是會用數學的方式分析它,使用T1 , f , k定義新的時間T2 ,並且以T1和T2的比率表示相對的性能提升。 你會得到以下公式:

看NASA的編碼哲學

套入Amdahl的公式,與前面的例子一起,要知道你的應用程序只需應用公式:

看NASA的編碼哲學

最終得出1.6 ,雖然你將整個程序的一半速度提高了四倍,但整個系統的速度只提高了1.6倍。 讓我們進一步來看下, 假設你又採取了一切其他的優化手段,運行它所需的時間現在為零( k趨於無窮大)。 你得到一個特殊情況即Amdahl"s定律:

看NASA的編碼哲學

假設組件占程序運行時間的60%,現在無需運行它, 理論上的最大加速是2.5 ... Amdahl定律告訴我們,為了顯著提高系統的速度,我們必須提高其很大一部分的性能。 這個定律經常用於並行計算,以預測使用多核處理器的加速,而Julian Browne在這種情況下對其進行了重新設計:「本質上,雖然過程可以分解成並行運行的步驟, 但整個過程將受到保持序列化部分的嚴重限制。

在腦子中記住這些假設,本文的其餘部分將談談一些更加個人化的觀點:從這些假設中我們可以學到什麼?

避免不可靠的知識來源

我的一些朋友認為編程行業還沒有成熟,因為它處於一個前科學的階段。 我聲稱我們許多人潛意識地認同已經被證明是不可靠的傳統知識來源,據我所知,美國航空航天局已經做好了對下面這些知識來源的防範:

信仰

我不是指那種類似希望那樣的信仰。 當我們想相信一些沒有理由相信的東西時,也會使用信仰:

領導: 「我喜歡我們應用程序中為客戶寫的新功能,你說你下載了一個庫來寫?

小輩: 「是啊 到目前為止,它工作正常。

領導: 「是開源嗎? 否則誰是供應商,他們在支持上有多好? 你有沒有證明它是穩健的,並在我們的參數空間進行測試?

小輩: 「不,我已經用它一段時間,沒有造成任何問題。」

領導:* PLONK *

這不僅發生在隨機下載軟體的情況中,還有的時候你的代碼一直調試不好,但是某個語句神奇地解決了問題,雖然你不知道為什麼,但是接下來一天你就在各個位置到處使用這個語句。事實上很難發現一個人多大程度上是依據信仰判斷一個軟體好壞的,但是如果任由這種信仰支撐的代碼存在足夠長的時間的話,將會導致軟體到處都是奇怪的錯誤。

啟發

有些事情你覺得是正確的,甚至覺得是對自己的啟發,僅僅是因為一個牛逼的人說過它是正確的,或者以前人們一直覺得它是正確的。你相信它,並不是你自己思考的結果。仔細想想那些社區的熱門討論,比如什麼編輯器是至高無上的,或者使用哪一門語言使你成為更優秀的程序員之類,這些問題本質上不過是程序員門在為自己在編程社區的某個子集中找到認同罷了。

魅力

會議充滿了欣欣向榮的氣氛; 為下一個框架的到來而興奮。 一個充滿激情的作家以歌唱的聲音來到舞台上,會議和幻燈片討論了承諾防彈編程實踐的最新原則 - 將使您成為10x程序員(就是現在!)。在熱情的人群中,以及作者談話的官方環境中,很難認識到作者的說法是否是真的,當然最重要的是買書。

光輝

我意識到這是一個奇怪的詞語,但是當一個想法令人信服和令人興奮的時候,它似乎會發出一定的「光輝」。它是有光澤的,因此必須是真實的。

我們可以繼續下去,但是從上面這些情緒中脫離出來,是對我們的技術進步有科學意義的。

擴展你的計算機素養

當談到科學素養時,關於宇宙本質的談話通常更有用。 同樣,當每個人在計算機素養方面達到一定的門檻後,關於編程的討論才能帶來更多益處。 的確,有一些持久的想法給計算機系統帶來生命,程序員應該重視它們。 如果我們稱自己是專業人士,我們有責任了解計算機背後的基本概念。 它可以避免不可靠的知識來源,並向我們展示我們應該注意的事情。 美國宇航局意識到這一點,並且確保了組織的文化能夠讓每個人的讀寫能力得到飛漲。

建議

以上的內容是否有共鳴? 您是否希望提高計算機素養? 如果是,我有幾個個人建議。

計算機系統:程序員的視角

看NASA的編碼哲學

<計算機系統:程序員的觀點>在我的職業生涯中非常重要,是我最喜歡的編程書。 這裡涵蓋的主題是我認為每個人都應該擁有的基礎。 至少,對1-3章,內存層次和系統I / O的深入研究是有益的。 如果你正在開展任何與網路有關的任務,那麼網路編程一章是值得注意的。

尋找志同道合的人

有一個叫做Handmake Network的小社區,一個令人難以置信的團隊 (我是團隊的一部分),因為我們試圖建立一個我們可以擺脫現代軟體對話的地方,而是談論我所鋪的東西。 我們與其他社區一樣脆弱,但我們試圖認識到這一點。

社區還與知名程序員討論事態的狀況,不管他們是否同意我們的結論。

關於作者

看NASA的編碼哲學

2017年在肯尼迪航天中心工作三年,編寫和維護髮射控制系統軟體。 我在2015年之前被授予了肯尼迪的年度實習生,導致我到美國航空航天局的「Pathways」計劃,在那裡我負責研究如何簡化飛行空間機器人的調試(等待)。 這項工作的成果讓我登上了肯尼迪2016年「十佳創新者」 榜單 - 儘管只是勉強!

我的大部分工作是SBU,所以它可能不會在線披露,但是在技術上卻是可以的 。 你可以通過Twitter , Twitch或者電子郵件找到我。

英文原文:https://ogmcsrgk5.qnssl.com/vcdn/1/優質文章長圖/a-look-into-nasas-coding-philosophy-b747957c7f8a.png
譯者:天高

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

每月好書:Python與機器學習實戰
Python到底怎麼讀?
一個Python包,學會所有基礎演算法
回顧python中的單元測試和模擬
README(自述文件)驅動軟體開發

TAG:Python部落 |

您可能感興趣

非編碼RNA之lncRNA最新研究進展
XML 的編碼
賽靈思收購雲編解碼器創企NGCodec,提高FPGA編碼技術
【視頻編碼】Content Aware ABR技術
更流暢、更精美、更清晰!NVIDIA Turing NVENC編碼解析及設置教程
長鏈非編碼RNA的研究進展
URL編碼與解碼
中國最需要的國產IC推介——VC0718P:集成國標SVAC2.0編碼與NPU(神經網路處理器)的機器視覺SOC
漫畫:什麼是字符集和編碼?ASCII、UTF-8、UTF-16又是什麼?
DNA編碼熒光實現細胞內RNA高通量成像
便攜與聽感的良好融合,支持SBC、AAC和aptx編碼的高端耳機藍牙線
Nature子刊:非編碼RNA癌症藥物基因組圖譜新突破
Base64編碼與解碼快捷指令下載 iOS一鍵Base64編碼與解碼教程
PEP8中文版:Python編碼風格指南
零基礎學習 Python 之字元編碼
GTX 1650顯卡又被NVIDIA割了一小刀:NVENC編碼器非圖靈版
長鏈非編碼RNA研究進展周刊
基於貪婪搜索的RC-LDPC編碼序列打孔演算法研究
漫畫:什麼是字符集和編碼?ASCII、UTF-8、UTF-16、UTF-32 又是什麼?
淺談Python之PEP8編碼風格