「原來北魔工並沒有計算機學院?」
辦公室里,坐在沙發上,捧著茶杯的瑪麗恍然大悟。
坐在斜對面的李力有些尷尬地撓了撓頭,「原本是沒有的,因為計算機的發展和研究一直以來都是幾個實驗室用有限的人在去做,這個學科還不太成熟,所以歸到了機械學一級學科下面。」
頓了頓李力又說道,「不過隨著計算機學科的複雜性與日俱增,我們現在也在考慮創辦計算機學院,只是這個想法還停留在構思上。」
「那您不應該對我欺騙呀」,瑪麗無奈地說,雖說是指責的語氣,不過瑪麗卻並沒有露出多少指責的表情,「我是學習計算機技術才來到遙遠的東方國度,如果您這裡沒有計算機,那麼我就一走了之。」
李力表情抽搐,腦海中努力轉義瑪麗說出來的彆扭的帝國語,看著她將茶杯輕放在茶几上,準備站起離開,他連忙上前勸解道:「稍安勿躁稍安勿躁,有句老話說得好:既來之,則安之,你說來都來了是吧,哪有空著手走的道理,況且我們沒有計算機學院,但是其他地方也沒有啊!」
坐在旁邊的樾樾滿臉不忍地看著李力,他這是留人呢還是趕人呢?
得虧瑪麗的帝國語也不怎麼樣,在歪著頭思考清楚李力的話後,她問道:「那麼我該去哪裡學習呢?」
「咳」,李力輕咳一聲,「剛才我已經說了,計算機科學現在還處於原始的階段,這個學科目前歸類到魔導機械一級學科下面,原因就在於大部分時候,我們只關心處理器以及各部件,說白了就是硬體,而將軟體作為硬體的驅動。」
瑪麗努力地消化著李力所說的話,在明白李力所說的意思後,她眼睛驀然亮了起來,「您說得正確!」
「而且我看了你的那篇論文」,李力回過頭來向樾樾,樾樾從隨身空間裡掏出瑪麗郵寄來的論文遞了過去。
瑪麗表情驚訝地接過自己的論文,奇怪地問道,「為什麼我的論文出現在您這裡?」
「大概是因為只有我能看得懂你的論文吧。」李力聳了聳肩,「打開看看。」
瑪麗低下頭,翻開自己的論文,結果剛翻開第一頁她就呆住了。
論文的空白處用紅色和黑色的筆跡寫滿了各種各樣細緻的批語和意見——用正常的字體。
論文的內容她早已爛熟於心,因為這是她反覆推敲過的內容,幾乎已經細緻入極,完善如終,但是在瀏覽了李力所寫的批語,理解了李力對所謂程式語言與面向對象概念以後,新的感悟湧上心頭,這讓她驚呼出聲。
「怎麼樣?能不能幫到你?」看到瑪麗似乎已經沉浸其中,李力露出引誘小蘿莉一般的微笑,循循善誘地說道:「留下吧,在我們實驗室你可以接觸到比這些更先進和抽象的東西,你甚至可以開創一個新的學科,將計算機科學發揚光大,成為電腦程式設計的奠基人!怎麼樣?跟我簽訂契約,成為馬猴燒酒吧。。。」
「這是您寫的?」瑪麗的眼睛瞪得滾圓,不可思議地表情略顯可愛,抬起頭來看向李力。
「是啊」,李立點點頭,「我剛才不是說了,能看懂你的論文估計也只有我一個人了,所以學校就把論文轉給我了啊。」
聽了這話,瑪麗「噔」地從椅子上彈了起來,直接對著李力彎腰九十度,大喝一聲:「師父!!!!」
「噗——」
一口水還沒喝下去的樾樾,就聽見這一聲突如其來的「師父」,直接噴了出去,好巧不巧地噴在了震驚地張大嘴的李力臉上。
滿臉水花的李力生硬地轉過脖子,瞪著樾樾。
「咳咳。。。對不起對不起。。。你們繼續。。。」樾樾不好意思對著李力說道,招了招手瞬間蒸發掉李力臉上和身上的水珠,然後努力縮在沙發里,假裝自己是個抱枕。
勉強從震驚中回復過來的李力轉回頭去,對著瑪麗委婉地說:「八戒呀,我們這裡是研究機構,不興舊社會那一套,不搞拜師的。」
瑪麗微微抬起頭來,疑惑地看向李力,「那麼。。。教練?」
「你想打籃球嗎?」李力瞪了她一眼,「叫教授!」
「哦哦,教授」,瑪麗反應過來,又重新鞠了一躬,「我想學習計算機科學跟您!」
李力身心疲憊地抹了把臉,才反應過來水珠已經蒸發了,將瑪麗扶起來以後說道:「來了實驗室的話我們就是同事關係,當然如果遇到問題,我們可以探討,共同進步,計算機的知識浩如煙海,它可以應用到人類的方方面面,從抽象到具體,從研究到應用,即便是我也僅僅有一些算不上多的靈感而已。」
「嗯嗯!」瑪麗努力地點點頭。
「就比如說你對語言的抽象化是怎麼想的?」李力伸手將論文翻到了第二章節,指了指上面的文字。
「通過設計好的指令,將機器的執行細節掩埋,這樣的話編輯者在編輯時就可以不用記憶和拆解每一個步驟將其指令,就可以開發快速。」突然談到正題讓瑪麗一下子興奮了起來,「很多步驟都可以包裹成一個命令,開發好的程序可以將命令轉化為機器執行碼。」
「但是你所說的其實已經將兩個東西混雜在了一起」,李力指出,「語言和庫。
「語言是用來進行邏輯編輯的,它通常基於某種抽象邏輯,比如數學,比如符文學,當然為了能讓處理器執行,計算機語言已經將數學語言或者符文學語言複雜化了。而另一種東西則是庫,也就是通過語言編寫和封裝的,可以被別人使用的成熟代碼段,兩者的關係就好像帝國語和詩詞的關係,當你感慨『念天地之悠悠,獨愴然而涕下』的時候,就是在調用登幽州台歌的代碼段。」
旁邊的樾樾眼前一亮,剛想說話,卻猛地捂住自己的嘴。
帝國語貧窮如瑪麗,並沒有感受到詩詞中的韻味,但前面的邏輯她懂了大概,「語言只有我們定義,庫不僅僅我們定義,也你們定義,也他們定義,和調用。」
「是的」,強忍著瑪麗用錯誤語法編寫的帝國語,李力點點頭,「當然為了保證語言使用的簡潔,編程環境一般都會自帶官方庫,我們會寫一些通用的庫內置進去方便調用,尤其是涉及外部硬體控制的指令,都會進行封裝。」
「可是,怎麼樣能保證使用者按照庫的編寫者要求調用呢?」瑪麗又問道,「我們提供庫,要使用者調用正確能使用,但是不正確不能,這樣怎麼辦?」
「哦?有一些沒法封裝的步驟,但需要使用者按正確方式調用麼?」李力抬了抬眉毛,「舉個例子。」
「材料加工程序,開始前必須檢查材料的形狀和純度,一些半永久轉換或者對稱轉換需要結束的時候轉換回來。」
聽了這個問題,李力摸了摸自己的下巴,「按照開放程度高的語言設計,這種需要前置或者後置的東西通常只是留出語法讓使用者自己調用,當然如果對方沒有調用就會出現系統級別的故障,比如內存泄露,比如錕斤拷燙燙燙什麼的。。。」
「如果限制呢?」瑪麗迫不及待地問道。
「這樣的話,就需要運行環境,而且如果你真的要限制使用者使用方式,那麼你所寫的就不是庫了。」
「那是什麼?」
「框架」,李力說道:「與庫不同的一點在於框架是控制反轉,雖然這個詞聽起來挺高大上,不過意思就是原本是由使用者調用庫來完成某些工作,但現在是框架調用使用者所寫的一些東西來完成某些工作,既然如此,使用者就必須按照框架的使用規則來寫這些東西。
「比方說如果你需要使用者在執行對稱轉換程序時必須初始化和銷毀,那麼你就必須留出初始化和銷毀的接口,讓使用者完善它,這樣程序就可以在執行主體程序之前調用初始化內容,並在結束之前調用銷毀。」
聽了李力的話,瑪麗興奮地叫了起來,「就是它就是它!我在寫轉換程序時思考過這個問題,但是在編寫c語言的時候總是無法將這個想法融入裡面,原來是我搞錯了!」
「c語言。。。」李力滿臉糾結地看著瑪麗,心想著要不要建議她換個名字,既然想做框架限制的語言類型,不如建議改叫Java?
「當然了,這只是軟體級別上的框架,如果你想要做到硬體層面上的框架,要求使用者按照你指定的規則,在你的控制下進行運行,那就是另外一種東西了。」
「什麼東西?」
「作業系統。」