前一年暑假,我從香港帶回一台計算機,正是這台個人計算機使我為之著迷。
那時,個人計算機和互聯網是個新鮮事物,自己的學校作為重點高中,亦是領先其它高中,首先組織了一些學習好的又有了計算機的學生成立計算機課外小組。因我剛離開奧數競賽興趣小組,對計算機有了興趣,求著老師進入了這個興趣小組中,學習計算機的使用和計算機語言編程。老師說:“既然你不願按部就班地準備高考,學學新潮的計算機,作為替代吧。”
這正合吾意!前一個學期在興趣小組學習、掌握計算機的使用,將我引領入計算機科學門中。
我的計算機教師對計算機這個高科技產品認識很深,在給我們上課時將“比喻”妙用,她“危言聳聽”地說:“計算機,別看現在的用途還不是那麽多,但你們一定要看發展,將來可是社會、經濟、科技發展不可缺少的工具,如果不懂得計算機將是當今社會出現的新型‘文盲’”。
“‘文盲’?那文盲不是太多了!就在我們學校有幾個會用計算機的老師?”有同學當堂說出自己的意見。
“哈哈,不會用計算機的那該怎麽稱呼?所以,中學生,尤其是高中生,學習計算機就顯得更為重要了。你們很快就會到大學,那時你們知道會計算機將是怎樣的優勢。”
哪會是怎樣的優勢呢?我們想象不到,也不用去想,先把眼前像是電視機的家夥玩轉了再說。老師先講的是計算機原理及結構,最喜歡將計算機及系統比喻成一個“人”,人的手腳等器官相當於計算機的輸入設備,輸入信息到CPU,相當於人的大腦,經過處理後,由輸出設備,嘴巴等輸出來。另外,當講到“路徑”這個術語時,她打了個比喻“寄信”。寄信要在信封上寫明收信人所在省、城市、街道、樓號和收信人的姓名,路徑的概念就類似收信人地址的概念,雖然是用計算機語言表達。通過形象的比喻,我們很快就理解了所學的內容,這樣的基礎性教學,對我們高中生來說並不難理解。
那時個人計算機,是386的時代,用的是dos系統,所謂學計算機,主要就是學dos系統的操作,然後是數據庫的語言。在學會dos操作系統後,才是真正學的計算機程序語言:C語言、BASIC語言、Pascal語言。很多人推薦學習C語言,因為C語言編程較自由,函數的開發也使得程序設計變得更加容易。剛學編程時,每天得敲兩三個小時輸代碼,輸的多了,我手打鍵盤的速度特別快,看著字母就打,根本不過腦子。
最開始我用C語言做了個小遊戲“雷電”,屏幕底下設立一個發射器,左右可以移動,同時操作鍵盤向上發射閃電,來打飛過去的小飛機,同時加上類似雷聲的配音。僅僅是初級的,還沒做到能過關升級。
我有些得意,這可是自己編制出的計算機遊戲啊!有些顯擺地拿給妹妹看,在計算機上一玩,妹妹一臉的看不上,說:“這麽簡單的東西,有啥好玩的?哥哥,你還挺熱衷的,瞎耽誤工夫,抓緊時間複習功課,考個好大學吧。”
妹妹擠兌我,勸我複習功課,好好準備高考。我不以為然地說:“簡單?你做個試試。”
“哥,你讓我做給小孩子玩的東西,是你弱智,還是我弱智?有時間我拉會兒大提琴不好嘛!”
唉,妹妹把用計算機語言做出的遊戲與給小孩子玩的東西兩個概念混淆了,讓她明了這裡面的區別,楞沒給說通!
妹妹根本不了解計算機語言編程是怎麽回事,給她普及計算機知識是件撓頭的事啊!
到了最後一個學期,我仍沒有放棄,仍在孜孜以求地鑽研著計算機的編程。我不是愛玩的那種男生,卻是能夠沉浸到一個陌生領域坐得下的學生。
畢業年級的考核特別多,成績登錄,成績排行,量特別大,也繁瑣。開學伊始,我萌生了為老師做個登錄成績的軟件,應該說不難,就是個數據庫,不過在設計上設有老師端,完整的和最高權限的數據庫;學生端,子數據庫,只有調取部分數據(自己的)的權限,隻可查詢,不可修改。每次老師判完小測驗的成績就把全班的卷子交給我,由我往老師端上輸入,然後老師可以進行統計,對每個同學做出評判;同學呢,可以登錄自己的成績庫,查自己各科測驗和考試的成績,及在班裡的排序。但不能查別人的成績和位置,這就很好地保護了學生的隱私。同學們都很認可這個東西,老師把我誇了幾句,還向年級組作了匯報和推廣。
我覺得搞計算機應用,只需一台電腦,就可以坐下來創造一些新的軟件,用在文案工作上。然而,哪是這般容易呢?我曾做了一個非常簡單的計算器,其中一個微小的變量未初始化,成了個bug,花費我一個晚上去尋找。所以編程對我的邏輯思維的發展非常有益,在這個過程中要想到它的各種可能性,有許多bug都是在因設計時定義不準才發生的,所以必須全方位去考慮解決一個問題,做到完善,做到極致。當然,在高中時我還做不到這點。
編程,很多知識和技巧,是不能自學的,需要聽老師講解。興趣班的老師水平也是有限,便鼓勵我們去附近的大學旁聽編程課。我們興趣班的幾個男女同學一起結幫去上課,好在人家是大課,在階梯教室上理論課,顯不出我們。
在大學蹭課,有機會見識到那些計算機玩得厲害或是軟件編程上鑽得很深很透的大學生,往往這些大拿在教室中常顯擺自己的獨到之處,引得我們這些計算機菜鳥羨慕不已。我則湊過去有意結識,掏一掏他們的技術。
我結識了一位稱他C哥的大三學生,跟他學過很多次。他是上海人,父親是個中老板,工作很忙,不大管他,而他很聰明,專業之外就浸潤在計算機上,玩計算機遊戲和編程。
他玩一個打飛機的遊戲,似乎叫“F-19”,絕對是從美國空軍模擬訓練軟件改成的,遊戲中有空軍基地、作戰飛機、機載武器和航圖,記得一種中程空空導彈——AIM120就是從這個遊戲中知道的,而且在“空戰”中常用。那玩意打得遠,對於我這種初玩的新手,很難與對方飛機打近戰,它就是攻敵飛機的有效武器了。
從這個遊戲中,我窺視了空戰的全貌,從制定作戰計劃、飛行計劃、空戰戰術,到操控飛機起飛、飛行、進入空戰,雖然很是粗鄙,但畢竟是在軍用軟件上弱化出來的,那也是真正作戰研究搞出的東西,程序上錯不了。C哥告訴我很多技巧,比如通過己方基地與對方基地的距離,己方飛機和對方飛機的航速,計算出自己的飛機起飛後,大概多少時間遇到對方的飛機,自己的飛機應該爬升到哪個高度伏擊對方的飛機;怎樣雷達搜索,怎樣導彈瞄準,怎樣操縱飛機空戰,很是複雜,是個大系統啊!
這是我最初接觸作戰指揮這樣的事,雖然是遊戲上的活動,但讓我從中了解到空戰的種種具體的步驟和過程,絕對是一種軍事基礎教育。
跟C哥最得意的一次實踐,是跟著他為他父親公司的業務做軟件,那時都到了93年的四月了,所以在壓力特別大的時候搞這個,記憶格外地深。
C哥的父親業務做大了,一次在飯桌上感歎工作不易,那麽大歲數還要算來算去,弄得頭疼。C哥就問了下,問題是每當分配貨物時,需要將手裡的貨分配給若乾個代理商,而每個代理商都提出有自己的需求,比如貨物種類、型號和需要量,然而因為貨源有限,公司給每個代理商設置了一個分配上限。代理商大概有幾十家,貨物按品種、型號、色彩也能分出十幾種,總庫存上千。每次他得跟負責分配貨物的業務人員手動計算,分配、調整出貨計劃,有時甚至需要數個小時才弄明白,十分無奈。
C哥聽了老父親說的事,馬上埋怨地說:“這解決起來不難,早說啊。阿拉玩這個小事。”他討到這個實際工作,知道怎麽乾,但具體的操作像代碼輸入他就不願幹了,便找我和他一起乾,高中生承擔這樣的工作有熱情啊,而他看上的是我輸入特別快的能力。
C哥對我說:“就是最大流的問題,不難。”可什麽是“最大流”問題呢?我個高中生可不懂。他手上畫了個二部圖,一側表示貨物,另一側表示代理商,給我講著:“存貨量通過源點到型號的邊控制,代理商上限則通過代理商到匯點的邊控制,代理商的需求用型號和代理商間的連邊控制,不就可以了嗎?”他給我說清楚具體原理,還把具體框架幫我弄好,就讓我往裡輸編碼,看看我能應付,便讓我一個晚上搞出來,第二天copy給他。
我摸索著做,“吭哧”了一夜,才弄完,第二天利用中午趕快拿給他。C哥拿到就去了他父親的公司,用公司以前的一個任務來測試,不到一秒就跑出結果了。C父高興極了,“兒子管用啊!”但是,看了結果,問題又來了,就是不同代理商的優先級是不一樣的,配額高的代理商,應該優先分配。那個學生大能說:“這難不到阿拉,妥妥的最小費用最大流啊!”他給每個流,賦一個權重,流向不同的代理商有不同的權重,我邊聽著他說,邊按他說的就把這些參數改到了軟件中。
改完我們把實例又測了一回,這次的結果好看了許多,但仍然有一個問題:這樣分配出來,一個代理商往往會得到特別多的某種貨物,而其余種類則往往什麽都得不到,這個在現實中不合理。他說:“這回復雜了,讓阿拉先想著,儂回去吧。 ”當我剛走出樓門,就聽見他喊我回去,“唔,這次要求流向統一代理商的不同貨物盡量均勻,有些麻煩啊,還是一起乾吧,阿拉能集中精力思考和計算,效率高些。”
而他這次想出的解決方案算起來比較複雜,最後跑出來的結果合理多啦!不過在計算機上軟件運行大概得跑半分鍾才能得出分配的結果。可以看得出來,軟件一步步複雜,一步步擴大,指令到最後得好幾百條。
即便如此,從此以後,這家公司每次分配貨物時,盡管要微調一下,包括數據錄入之類的工作,卻可以在半個小時內解決問題,遠比人工手算心算有效率多了。老板誇獎了自己這個大學生兒子,而C哥卻把從老板父親那得到的獎勵也分給了我些,讓我小有得意。“這是正道上來的錢啊!”
這事從頭到尾,我都是看,看那個C哥算啊,算啊,改進著軟件,那些算法我根本不懂,所以讓我明了學編程,還要學算法,這樣才能真正搞出有用的東西!同時,一旦在編程中有了駕馭實際問題的技能,它還可以給人以愉悅之享受。
這次做軟件的過程,是一次技術驚豔的體驗,在我的心裡投下了一顆種子。
計算機對城市的大部分人是不陌生的,而我一開始到上海的時候對計算機雖有所聞,卻知之不多。當自己有了計算機後,學會用它為自己做些軟件時,感覺這東西好啊!完全顛覆了自己對機器的認識,所以非常渴望了解它、會用它。
寫小說,這話說得好無聊吧!可質樸的道理不吐不快啊,就讓我畫蛇添足一次嘍。