今天給大家介紹兩個軟件,一個體現了人類在軟件開發流程上的極致,另外一個則體現了程序員個體能力的巔峰。
0 1
航天飛機飛控軟件
先來說第一個,航天飛機飛行控制軟件,就是下圖這個大家伙。
航天飛機重達120噸,還攜帶著2000噸的燃料。
它有四臺硬件相同,軟件也相同的計算機對發射過程進行精準控制,從幾千個傳感器中提取信息,每秒做出幾百個決定,并且對每個決定進行投票。
第五臺計算機,則運行著不同的軟件,隨時待命,準備替換其他發生故障的計算機。
這些計算機要確定什么時候對主發動機點火,什么時候下令固體火箭助推器點火,火箭姿態控制....
每次發射,軟件都控制著價值40億美元的設備,六名航天員的生命,以及國家的夢想。
這個軟件不能崩潰,不能重啟,最小的誤差都不允許:一個三分之二秒的計時錯誤就會使航天飛機偏離航線近5公里。
洛克希德馬丁公司的航天飛機小組實現了目標:軟件幾乎沒有錯誤,接近完美。
軟件的最后三個版本,每個版本(42萬行代碼)只有一個Bug。
最后的11個版本一共有17個錯誤,同等復雜度的商業程序有5000個。
這樣的軟件是如何煉成的呢?
答案是極為苛刻軟件流程。
洛克希德馬丁公司的航天飛機軟件小組有260名員工,這些人創造了一種完全不同的開發文化。
沒有超級明星程序員,開發軟件的整個流程都是有意設計的,不依賴任何特定的人。
這個流程使得他們過上正常的生活,滿足最后期限,交付完全符合其承諾的軟件。
這個流程包含幾個要點:
1. 軟件的質量取決于軟件的計劃
在航天飛機軟件開發小組,軟件開發周期中有三分之一的時間不寫代碼,而是和NASA一起用來討論需求:軟件應該做什么事情。
即使是最微小的細節也要達成一致。不是口頭達成一致,而是寫下來,文檔化,形成規范,非常專業和精確。
未經雙方的同意,規范中的任何內容都不會更改。
沒有良好定義的規范,程序員不會改任何一行代碼。
例如讓航天飛機使用GPS導航,這一變化僅涉及6366行代碼,占程序總量的1.5%, 但是相關的文檔長達2500頁,涵蓋了各種各樣的條件,分支,幾乎就是偽代碼了。
而航天飛機系統的軟件,總文檔足足有30卷,40000頁!
2. 兩個百科全書式的數據庫
一個是代碼歷史的數據庫,每一行代碼都有注釋,顯示每次的更改時間,更改原因,更改目的,有哪些文檔詳細說明了更改。
對于代碼發生的一切都記錄在這里,每一行代碼的“祖譜”都可以立刻提供給每個人。
第二個是錯誤數據庫,記錄了軟件在編寫和運行時發生的每一個錯誤,可以追溯到近20年前。
每個錯誤都會記錄下它被發現的時間,是誰發現了它,當時正在發生什么活動(測試,訓練,飛行),錯誤是如何引入的,為什么逃過了設計階段,開發階段,測試階段的嚴格審查.....
由于積累了如此多的數據,以至于他們開發了一個代碼模型,能預測某個版本中可能有多少錯誤。
如果開發人員和測試人員發現的Bug太少,大家會重復流程,努力使得現實和預測相匹配。
3.不止要修復錯誤,要修復任何引入錯誤的東西
如果軟件存在缺陷,那么編寫它的方式一定存在問題。
在計劃階段沒有發現的Bug,是如何逃過檢查的?檢查流程是否出了問題,是不是要在checklist上增加一項檢查?
重要的是,不要將錯誤歸咎于個人。流程要承擔責任---啟動一個分析的流程來發現Bug的原因。
航天飛機軟件開發小組的流程是如此強大,不僅僅通過了SEI CMM5的認證,而且SEI的不少標準就來自于這個小組的各種實踐。
洛克希德馬丁開發了近乎完美的軟件,大家肯定會想到一個問題:這種開發方式會不會扼殺創造力?
他們的回答是:會,因為大家必須按照手冊上規定的流程去做,并且時時刻刻都有人在背后監督。
人們必須將創造力用于改變流程,而不是改變軟件。
0 2
排版軟件TEX
經典巨著《計算機程序設計的藝術》在程序員界可謂是無人不知,無人不曉了。
1973年,這部剛出到第三卷的書(計劃寫七卷)已被計算機界視為“神作”, 1974年美國計算機學會就“迫不及待”的把計算機界的最高獎圖靈獎授予高德納。
此時高德納僅僅36歲 !只靠一套還沒有完成的書就獲得ACM圖靈獎,不但是前無古人,估計也后無來者了。
然而令人大跌眼鏡的是, 拿到圖靈獎以后, 高德納宣布暫停寫作, 理由竟然是現有的計算機排版系統太差,破壞了書的美感 !然后單槍匹馬開發出了革命性的排版系統TEX , TEX至今仍是全球學術排版的不二之選。
TEX功能強大,幾乎無懈可擊,其版本號也很有意思,不是數字(3.0, 3.1, 3.2....) 也不是年份(Windows 95, 98, 2000...),而是不斷逼近的圓周率 (3.1415926...) ,這從側面反映了軟件幾近完美,不需要做改進了。
高德納曾表示“最后一次升級是(于我過世后)將版本數改為 π,那時任何余下的漏洞將被看作程序的功能!
有趣的是高納德為此還設置了獎金,誰能從TEX 發現第一個Bug ,獎勵2.56美元,然后每年翻一倍,5.12,10.24......
作為算法的大師,不可能不知道指數增長的可怕性,但高德納對自己的代碼質量非常有信心,事實上,當獎金達到327.68美元以后,基本上就沒什么Bug報出來了。
那些找到Bug 的人收到高德納簽名的支票以后也不去兌換, 而是作為珍品收藏了 :-)
高德納編程能力之強可以說是碾壓硅谷的所有程序員,面向對象的發明人Alan Kay(2003年圖靈獎)這么說過:
60年代末,當我在斯坦福從事AI項目時,每個感恩節我們都會和硅谷的編程高手們舉行編程競賽,McCarthy(人工智能之父,1971年獲圖靈獎)出題, 獎品是好像是一只火雞。
高德納參與的那一年,把我們都給虐了, 他的代碼無論是程序執行和算法執行都是最快的,并且他用的是一臺最慢的批處理機器!
我們問高德納:“你是怎么做到的?”
他說:“當我學習編程時,如果每天有五分鐘的時間使用機器,就高興得不得了, 所以必須要讓程序一次運行成功,沒有錯誤,算法設計達到最佳。”
全文完,覺得不錯的話點個贊或者在看吧!
近期爆文:
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.