第三十七章 詩人和程序員

字數:7152   加入書籤

A+A-




    如果有人問你,詩人跟程序員有關係嗎?

    千萬不要隨便回答說沒關係,雖然這兩個職業看起來風馬牛不相及,但實際上,詩人和程序員還真有很密切的關係。

    “if should see you,after long year”

    “how should i greet,with silence and tears “,這兩句是著名的詩人拜倫的名句,

    “一別經年,若再見,問候你的,是我的沉默,還有淚水“

    你會問,詩人有了,程序員呢?

    別急,拜倫的女兒,ada lovece,是世界上第一個程序員,她的父親是偉大的詩人,母親是一位業餘數學家,她沒有繼承父親的浪漫,卻繼承了母親的數學才能。

    ada 幫助巴貝奇設計了世界上第一台計算機-巴貝奇的分析機。

    並書寫了第一個巴貝奇分析機的程序,一個解伯努利方程的程序(巧合的是,伯努利方程是流體力學的基礎,也是所有飛行器上能飛上天的理論基礎)。

    我們今天所使用的什麽 for next,什麽 do while 包括子程序的概念,全部來自 ada ,神奇不?

    ada 和他父親一樣,在最燦爛的年華就離開了,他們在世上都隻呆了短短三十六載。

    天妒英才,莫過於此啊。

    王一男唏噓了一會詩人和程序員之間的關係,把容與公司幾個程序員,還有116所的飛控程序設計員唬得一愣一愣的。

    老板就是老板啊,一個簡簡單單的開場白,硬生生被他弄出花來了。

    他在白板上寫下

    “ada”,三個字母。

    “今天,我們就來講一講ada”

    “ada是米**方使用的程序設計語言,也是華國大量軍工企業使用的程序設計語言”

    “所以說兔子是最大的美粉,這是沒問題的”,

    “當然,這樣做也沒毛病”,“ada設計出來,正是為了應對ruǎn jiàn危機的”

    “上世紀六七十年代,由於ruǎn jiàn規模的擴大,質量越來越難以保證,bug增加的速度甚至超過了ruǎn jiàn開發的速度”

    “所以有了ruǎn jiàn危機一說,什麽人月神話啊,什麽米有免費的銀彈之類的著作都是講這些的”

    “後來米國國防部就針對這些問題,專門設計了一個新的語言,就是ada”

    王一男說,”我覺得 ada 最成功的地方,就在於他回答了一個核心問題,什麽問題呢“

    ”就是在ruǎn jiàn開發中,什麽是最重要的“,

    “我覺得當年設計ada的米國國防部所分析的程序設計語言設計時候考慮的優先順序,直到今天都還是正確的”,王一男在白板上寫下三個詞,

    “穩定性“”可維護性“”表達能力“

    “穩定性毫無疑問是最重要的,如果程序不能穩定運行,任何軍用係統,都不可能將它投入實際使用。”

    “可維護性在幾十年前是被忽略的,但是今天,大家越發認識到它的重要作用了,程序的生存周期越長,可維護性的重要性越高“

    “程序寫出來容易,但是程序就像生命一樣,會跟周圍的環境發生作用,會慢慢的長大,會變化,會生長,會成熟,也會老去。”

    “很多程序的壽命要超過人的壽命,所以,不同的人會來維護他,修改他,首先要讀懂它”

    “讀都讀不懂,怎麽長大?而可讀性,正是可維護性中最重要的一部分”

    “表達能力是我給總結的,雖然從理論上來說,任何程序設計語言的表達能力跟隻有向前和向後兩個指令的圖靈機是等價的“

    “但是語言能力還是體現在無歧義啊,簡潔,清晰等等上,所以最早的設計目標,跟自然語言接近啥的,被我理解為表達能力”

    “不得不說,米國國防部還是非常強大的”

    “ada語言至少領先工業界三十年以上”

    “當工業界還在為挖掘每一個時鍾周期的性能而絞盡腦汁的時候,人家已經把可維護性放在僅次於穩定性的位置了”

    “所以116所選擇ada作為飛控係統的開發語言,那是非常有遠見的”

    李文靜在台下舉手了,“你說的很好,很正確”

    “不過我們接下來該怎麽幹呢”

    ”難道我們重新用哥德爾係統理解的語言重寫一遍飛控嗎“,李文靜的話還沒說完呢,就聽見呯呯的聲音,116所的幾個程序開發人員口吐白沫,癱倒在椅子上。

    ”還是我們寫一套編譯器,將使用ada語言書寫的飛控係統編譯成哥德爾係統能夠理解的語言“,

    呯呯的聲音又響起來了,這回是趙天成和李飛口吐白沫,癱倒在椅子上。

    ”good question“,王一男指了指李文靜,”很好的問題“,

    “要不怎麽說咱們是最佳拍檔呢”

    “這就要感謝我們偉大的開源事業了”

    “有一個開源項目,叫做llvm的,有人知道嗎”

    立刻好幾個人舉起了手,王一男指著116所的一個程序員,“你來說說吧”

    “llvm是low level virtual machine 的意思,也就是低級虛擬機,它實際上是一組規範和工具的集合,為開發現有語言的編譯器,甚至設計新的程序設計語言,tí gòng了一個非常強大的基礎“

    ”perfect“,王一男誇獎了一句。

    “dragonegg 有人知道嗎“,王一男接著問。

    這回沒人舉手了,李文靜舉手說,”龍蛋哇,這個誰不知道“

    沒等王一男罵人呢,李文靜坐了下來,“開個玩笑,活躍一下氣氛嘛”

    “這是一個gcc的後端,或者說llvm的前端,能夠將gcc和llvm連接起來”,王一男說,

    “gcc你們都知道吧”

    “廢話,別侮辱我們的智商好嗎”,“gcc是一組開源的編譯器,包括c/c,fortran ,當然也包括了ada語言的編譯器,我們116所目前使用的就是gcc”

    “好了,齊活啦”,王一男拍了拍手。他在黑板上先畫了一個圓圈,然後在裏麵寫上

    “116所飛控代碼”,

    “一共多少行代碼”,王一男問116所的攻城獅,

    “大概四百多萬吧”。

    偷偷咽了一口口水,王一男在圓圈了添上”400萬行“的字樣。

    然後在旁邊又畫了一個圓圈,在裏麵寫上“gcc”,再畫了一條帶箭頭的線,從“116所飛控代碼”指向“gcc”。

    “這樣大家能理解吧,gcc可以編譯116所的飛控代碼”,王一男說。

    “這步沒問題,我們也是用gcc來編譯成飛控計算機使用的機器代碼的”,116所的攻城獅說。

    王一男在“gcc”圓圈的邊上又畫了一個圓圈,然後在裏麵寫上“龍蛋”兩個字。

    “龍蛋就是將gcc和llvm連接起來的東西”,王一男說,

    他在“gcc”圓圈添上一條帶箭頭的線通往“龍蛋”,然後在“龍蛋”圓圈後麵又添上一條帶箭頭的線。

    在箭頭指向處,王一男打上一個大大的問號。

    “看明白了嗎”,王一男問。

    所有的人都搖了搖頭,“作者大大,臣妾真的不明白”

    王一男指了指趙天成和李飛,

    ”我們之前在研發哥德爾係統的時候,曾經使用過llvm,你們還記得嗎?“

    ”當然記得,哥德爾係統的一部分核心用的就是llvm的 ir“,

    ”等等“,”ir“(intermediate represention),就是那個通用的中間表示,能夠被llvm輸出,同時又能被哥德爾係統理解的那個東西?“

    ”賓果“,王一男打了個響指,

    在那個大大的問號那裏,他重重地寫下ir兩個大字。

    “這樣,整個流程就全通了,我們不用重寫飛控的代碼”,116所倒下的攻城獅立刻坐了起來。

    “也不用寫編譯器”,李飛和趙天成也滿血複活了。

    “利用現有的這些工具鏈,我們可以將116所的飛控代碼自動編譯成llvm的中間代碼”

    “我們現在要做的事情,隻是將這些中間代碼,跟前段時間我們建立的理論模型對應起來,添加必要的輸入輸出模塊”

    “添加實際控製麵的虛擬模型和代碼”

    “然後,就可以用成噸的數據來訓練哥德爾係統了”

    “簡單不簡單,完美不完美?”,王一男顯然又把自己嗨到了,按照他的設想,現在應該是大家高呼“完美,簡單”,

    當然如果有識相的來一句“王一男萬歲”,就更完美了。

    “幹活啦”,李文靜一巴掌打破了王一男的幻想。

    ”咱們這裏麵,寫代碼最牛是你,所以能者多勞,你就把整體框架先弄出來,我們負責補充啦“

    ”老大威武“,這回,連116所的程序員也跟在屁股後麵喊上了,”老大威武!“

    王一男想了一下,確實,整體框架這東西,人多了還真不一定有用,需要保證思路的一致性,讓其他人來弄,他還真不放心,進度也沒有保證。

    “好吧,給我三天時間,我會給世界一個奇跡“

    “讓你們看看傳說中卡馬克。王”(卡馬克是doom的開發者,以獨立開發遊戲引擎而聞名於世,他一個人寫了三代doom遊戲引擎)

    王一男把自己關在一個獨立的辦公室裏麵,禁止任何人打擾他。

    diàn huà也關機,辦公室裏麵一個冰箱是必須有的,他讓人然後扛了一xiāng zǐ雪碧和一xiāng zǐ方便麵進去,把張琪家裏的那套價值好幾十萬的音響給lè suǒ了過來,diàn huà裏他是這麽說的,“音響沒有,我就幹不了活,我幹不了活,116所的事情一定就砸了,116所的事情砸了,公司就開不下去了,你自己看著辦吧”

    之後整整三天時間,整個公司都能隱約聽到重金屬搖滾的聲音。

    三天後,門打開了,王一男胡子拉碴,神情憔悴的走了出來,對著門外的李文靜和趙天成說,

    “git 裏麵我剛提交了版本,你們看看吧,所有文檔都在/doc 目錄下”

    “所有示例代碼都在/samples 目錄下麵”

    “你們叫上116所的攻城獅一起研究吧,我去睡一覺”。

    “八個小時之後,所有人一起開工!”