經(jīng)過一段時(shí)間的修煉,孫一波的C語言編程能力大幅度提高,這也和他扎實(shí)的編程基礎(chǔ)息息相關(guān),就像習(xí)武之人有了底子之后,什么梅花掌、五行拳、無影腿等套路,都可以觸類旁通。
他深深地知道,編程序主要依仗強(qiáng)大的邏輯思維能力,碰到一道題,首先要把程序框架搭好,源頭是什么,目的是什么,一定要搞清楚,至于中間過程,那就是八仙過海,各顯神通了。
隨著中南區(qū)軟件設(shè)計(jì)大賽日漸臨近,比賽規(guī)則也浮出水面,即兩小時(shí)內(nèi)用擅長(zhǎng)的編程語言解出難易程度不等的三道題,評(píng)委根據(jù)選手的完成時(shí)間和完成質(zhì)量進(jìn)行打分,得分高者獲勝。
另外,大賽還規(guī)定每一名導(dǎo)師只能帶兩名學(xué)生參賽,這意味著岳書記麾下的三員大將(求勝、李佳浩和孫一波)之中,有一個(gè)人將面臨內(nèi)部淘汰。
孫一波清醒地認(rèn)識(shí)到,“最強(qiáng)大腦”求勝的編程能力在自己和李佳浩之上,而自己的強(qiáng)項(xiàng)在于計(jì)算機(jī)應(yīng)用方面的綜合能力,包括網(wǎng)絡(luò)技術(shù)的綜合運(yùn)用,這和他平時(shí)在計(jì)算機(jī)各個(gè)領(lǐng)域的廣泛涉獵是分不開的。
所以,當(dāng)遇到單一的程序題,孫一波可能不占優(yōu)勢(shì),水平和李佳浩大抵相當(dāng),略遜于求勝。
但如果碰到綜合能力題,比如需要用到網(wǎng)絡(luò)技術(shù)、計(jì)算機(jī)硬件技術(shù)和各項(xiàng)應(yīng)用軟件技術(shù),他有信心能在三人中勝出。
孫一波擅長(zhǎng)的匯編語言恰是一切計(jì)算機(jī)語言之母,其重要性不言而喻。
岳書記如同“中國(guó)好聲音”中的導(dǎo)師一樣,要在自己的學(xué)員中艱難做出抉擇,無論最終選了誰和誰,必定是對(duì)第三人殘忍的傷害。
為此,他很慎重,經(jīng)過深思熟慮,決定利用五一長(zhǎng)假的七天時(shí)間,給三人出一道考驗(yàn)計(jì)算機(jī)綜合水平的程序題,原則上要求獨(dú)立完成。
岳書記也知道,在一周時(shí)間里,答題者或多或少,會(huì)借助一些外部力量,也會(huì)通過閱讀參考書和網(wǎng)上搜索資料來輔助答題。
在布置題目的時(shí)候,岳書記并沒有明確指出該次測(cè)試結(jié)果就是三選二的唯一標(biāo)準(zhǔn),他怕給三人增添巨大壓力而影響其正常水平發(fā)揮。
但三人還是明顯感受到,完成題目的質(zhì)量高低,將決定他們能否參加中南區(qū)的程序設(shè)計(jì)大賽。
一九九九年有一款非常流行的RPG(角色扮演類)游戲,叫做《仙劍奇?zhèn)b傳》,里面的人物李逍遙、林月如和趙靈兒共同演繹了一段凄美的愛情故事,最贊的莫過于里面的背景音樂,確實(shí)是游戲中的佳品。
岳書記也知道這個(gè)游戲,他雖然年屆五十,有時(shí)候也玩玩游戲,計(jì)算機(jī)人的思維總是年輕化、超前化。
他出題目的靈感就來源于《仙劍奇?zhèn)b傳》,即模擬開發(fā)出《仙劍奇?zhèn)b傳》的核心程序。
這個(gè)課題可以說是相當(dāng)難,等同于一部幾萬壯丁共同修筑長(zhǎng)城的巨作。
游戲核心程序又叫游戲引擎,是貫穿整個(gè)游戲的靈魂,把所有的元素融合在一起,并在后臺(tái)指引各個(gè)元素同時(shí)、有序地工作,包括了劇情、關(guān)卡、美工、音樂、操作等各方面的控制。
由十?dāng)?shù)人組成的項(xiàng)目組開發(fā)這么一個(gè)游戲核心程序,尚且需要數(shù)以年計(jì)的時(shí)間,要讓三個(gè)人各自在七天時(shí)間完成如此巨大的工程,顯然是不可能完成的任務(wù)。
可這道題確實(shí)是岳書記精心策劃的一道題,為什么這么說呢?
因?yàn)樗肋@道題不可能完成,只能夠無限接近。
不能夠完成的題目就是好題目?!
也未必。就像當(dāng)下最流行的《羊了個(gè)羊》游戲,有些關(guān)卡就是無解,程序員偷懶,設(shè)置了一系列隨機(jī)數(shù),牌的放置會(huì)產(chǎn)生死結(jié),而并不是程序故意刁難你。你讓程序員去玩,他也過不了關(guān)。
同樣,微軟的程序員也會(huì)偷懶,《紙牌》游戲也有很多局無解。
言歸正傳。
但岳書記有他的判斷依據(jù),有他設(shè)置的底線,即程序執(zhí)行后,能用鼠標(biāo)和鍵盤做到輸入輸出控制,能夠在電腦顯示器上顯示出人物的行蹤。
也就是說,輸入輸出控制和顯示這兩項(xiàng)是基本評(píng)分項(xiàng),另外的元素則是錦上添花。
能順利解答出這道題的人,需要極高的計(jì)算機(jī)綜合素質(zhì),不僅具有資料查閱和消化的能力,更要有設(shè)計(jì)程序框架的大局觀和精湛的編程水平。
對(duì)三人而言,岳書記的這道程序題無疑是一塊難啃的骨頭,誰都沒預(yù)料到是一道綜合能力要求如此之高的實(shí)際應(yīng)用題。
三位計(jì)算機(jī)專業(yè)翹楚,已閉關(guān)修煉了很久,這一次終于要推開山門,面對(duì)險(xiǎn)惡的江湖,在實(shí)戰(zhàn)中決定優(yōu)勝劣汰。
孫一波樂觀地認(rèn)為是岳書記給他開了扇小窗,因?yàn)樗膮R編語言終于有了用武之地,能在實(shí)現(xiàn)軟件與硬件交互中得到良好的運(yùn)用。
求勝向來對(duì)自己編程水平充滿信心,倒也和往日一般平靜。
李佳浩有些坐立不安,他沒有碰到過這種類型的題目,無從下手,認(rèn)為同一個(gè)戰(zhàn)壕里的兩位戰(zhàn)友都不是自己的炮灰,而自己,倒可能成為陪太子讀書那人。
急于求成的李佳浩決定先使用一些旁門左道的手段,利用反編譯工具對(duì)《仙劍》的執(zhí)行程序進(jìn)行反編譯,這個(gè)工具對(duì)一些簡(jiǎn)單的執(zhí)行程序有作用,可以把執(zhí)行程序逆轉(zhuǎn)換成程序源代碼,但對(duì)于這些龐大的執(zhí)行程序,即使能逆轉(zhuǎn)換成源代碼,也是一本永遠(yuǎn)都看不懂的梵文字典。
就象操作系統(tǒng)Linux,雖然公開了源代碼,但總共有一千萬行之多,普通人根本無法進(jìn)行解讀和修改,所以,這個(gè)辦法沒有用。
一個(gè)善于編程的程序員,也很難去修改別人寫的代碼行,他更愿意中規(guī)中矩地編寫源代碼,實(shí)現(xiàn)目標(biāo)會(huì)更容易一些。
求勝的編程基本功非常扎實(shí),同樣,他的程序構(gòu)架能力也很突出。
他把主程序的各個(gè)功能分解成一個(gè)個(gè)模塊,對(duì)各個(gè)模塊進(jìn)行程序編寫并封裝,這樣就可在主程序中直接調(diào)用各個(gè)模塊。
三天下來,他已經(jīng)完成了動(dòng)畫人物的前后左右控制和存儲(chǔ)進(jìn)度等兩個(gè)單元的程序編寫,共計(jì)兩千多行源代碼。
相比其他兩位,孫一波顯得更為靈巧,他先從之前積累的源碼庫(kù)中找了一些類似游戲的源碼,選擇可讀性比較強(qiáng)的,有釋義的源碼,并在此基礎(chǔ)上進(jìn)行修改,這個(gè)過程對(duì)程序員的理解能力要求非常高。
還好,這些公開代碼者確實(shí)具有大公無私精神,源代碼段后的中文注釋非常到位。
孫一波通過對(duì)其理解,重新對(duì)資源進(jìn)行了整合,這樣一來,程序修改就方便很多。
三天下來,孫一波完成了三個(gè)模塊的編寫。
兩天后,求勝和孫一波的程序都達(dá)到或接近岳書記心理底線的預(yù)期效果。
沒有對(duì)比就沒有傷害,此時(shí)最心焦的是李佳浩,他的完成質(zhì)量明顯落后兩位師弟。
病急亂投醫(yī),他沒有去找系里的計(jì)算機(jī)高手指點(diǎn)迷津,卻想到了他的女朋友,學(xué)數(shù)學(xué)的岳融,讓其從數(shù)學(xué)建模的角度幫他優(yōu)化一些算法。
岳融欣然接受,能替男朋友分擔(dān)一些壓力,她覺得很幸福。
她也知道,從數(shù)學(xué)的角度去化解這道綜合能力要求極高的程序題,無異于蚍蜉撼樹,也許,對(duì)李佳浩而言,精神上的安慰比物質(zhì)上的幫助更重要。
五一長(zhǎng)假期間,學(xué)生情侶們紛紛外出游玩,岳融一點(diǎn)也不在乎這個(gè),她不會(huì)給李佳浩添亂,寧可犧牲休息時(shí)間,也要換取李佳浩的學(xué)業(yè)成功。
她一直認(rèn)為,陪伴在男朋友身邊是最長(zhǎng)情的告白。
求勝這個(gè)“最強(qiáng)大腦”稱號(hào)絕不是蓋的。
他能夠在關(guān)鍵時(shí)刻靜下心來,發(fā)動(dòng)所有的腦細(xì)胞專注于一樣事情,這是常人無法企及的高度。他的過人之處,不僅在于超高強(qiáng)度的腦力勞動(dòng),更在于與世隔絕、不食人間煙火的處世態(tài)度。
除了吃飯、睡覺、上廁所,他的屁股如同強(qiáng)力膠般粘在椅子上,眼簾低垂,一幅沉思羅漢的模樣,讓人懷疑其已經(jīng)睡著時(shí),他的雙手突然抬起,飛快地在鍵盤上敲擊起來,屏幕上頓現(xiàn)幾十行代碼,稱得上是沙州大學(xué)IT界大神級(jí)人物,就像閱文的白金作者。
像他這樣一位獨(dú)孤求敗、笑傲江湖的高手在解題時(shí),自然不需要幫手,只需要對(duì)手,如果沒有對(duì)手,只有靠“雙手互博”的自我進(jìn)化了。
孫一波既沒有女朋友的陪伴分憂,也不能像求勝一樣不食人間煙火。
兩三天之后,他的煩躁情緒就上來了,難以繼續(xù)高效率的腦力運(yùn)轉(zhuǎn),感到身心疲憊。
屏幕上密密麻麻的代碼行,特別是大量繁瑣的中間程序式,冗長(zhǎng)而枯燥,令人眼花。
但這些中間程序式不得不存在,他的主要作用是把游戲里的劇情代碼化,通常由假設(shè)判定組成。
比方說,計(jì)算機(jī)語言和人的語言在所處不同環(huán)境里,表達(dá)方式不盡相同,計(jì)算機(jī)語言在計(jì)算數(shù)字和循環(huán)計(jì)數(shù)方面有著得天獨(dú)厚的優(yōu)勢(shì),當(dāng)人的思維認(rèn)為是一種重復(fù)計(jì)算的時(shí)候,對(duì)計(jì)算機(jī)來說恰巧是一段簡(jiǎn)單的循環(huán)程序式。
同樣,當(dāng)人在判別簡(jiǎn)單的劇情理念時(shí),可以在瞬間作出判斷,而轉(zhuǎn)化成計(jì)算機(jī)語言,卻是一段非常冗長(zhǎng)的代碼,因?yàn)闊o論選哪個(gè),都會(huì)產(chǎn)生不同的后果,沒有對(duì)錯(cuò)之分。
而當(dāng)出現(xiàn)三選一或者四選一的時(shí)候,更是一堆數(shù)以倍計(jì)的程序代碼。
孫一波不想耗費(fèi)過多的精力去處理這些中間程序,他認(rèn)為這些選擇性代碼行比純粹打字難不了多少,此時(shí)如果有人能幫他做這些繁雜的事,他將會(huì)事半功倍。
偏偏六零二的室友們都很珍惜這個(gè)長(zhǎng)假,他們要不陪女友外出旅游,要不就回老家探親,沒人能夠幫助孫一波。班長(zhǎng)戴鳴雖身在學(xué)校,但每天外出參加社會(huì)活動(dòng)。
孫一波認(rèn)為戴鳴以后會(huì)從政,現(xiàn)在所做的一切都是為以后的政治生涯做鋪墊,加砝碼。
未來的政治家才不屑于做這些雞零狗碎的小事。