2012年11月9日 星期五

計算機程式設計二三事

int main(){
    printf("Fuck the World\n");
    return;
}
------------------------------------------------------------------------------------------------------------

「所以啊,妳這行break不能放這裡,不然這個 for loop 永遠不會跑...」劉逼一邊看著小予傳過來的程式碼一邊快速用Facebook傳訊息告訴她這段程式碼哪裡有問題。

一段時間後小予又傳了一個新版本的程式碼附帶著訊息「那這樣呢?對了嗎?」,經過一次又一次類似的問答對話後,小予終於成功寫出這次程式設計的作業。

「耶!寫出來了!真是太感謝你了!資工系的真的都好強!到底要怎麼寫好程式啊?」

「沒有啦,熟能生巧,多加練習,妳也可以。」劉逼知道自己講了一句廢話,但你問十個程式設計師有十一個會這樣回答。小予和劉逼並不是系上同學,而是在上個學期某一門課認識處得也挺好,這學期小予修了自己系上程式設計的課程,正所謂「術業有專攻」,找機械系的人修腳踏車,向外文系的人請益英文都是很常見的事,於是劉逼就成了小予的程設小家教,一問一答、一來一往中劉逼逐漸想起自己一開始接觸程式設計時的種種...

猶記得在上大學念資訊工程以前,學校鮮少有真正的資訊課程,國小電腦課打「小朋友齊打交」,上了國中改打CS,高中時只有高一有電腦課但只要第二節課一到,老師講完開放自由操作,同學就開始連線打魔獸,大家廝殺得不亦樂乎,雖然平時在家偶爾也有想自學的念頭,但爸媽那輩的人總認為「小孩在電腦前,就是在打電動」,一看到小孩在電腦前時間過久,就開始碎碎念、唸到後來變成大聲咆哮「快給我去唸書!」於是資訊系的學生除了保送進來或大學以前加入資訊研習社的人之外,絕大多數剛進來時常常有撞牆期,有的跟不上進度後就逐漸對coding失去興趣,大多數撐過去的人回想起都會說:「這些都是過程。」

真的是必經過程嗎?

劉逼常常在夜深人靜盯著螢幕上一行行的程式碼時想起這個問題。回想大一剛進來時第一個學期最重的課程就是程式設計了,第一堂課教授便請了約莫五、六位穿了相同T-shirt的同學一字排開站在台前。

「這些同學是經過開學前我的考試通過,他們將在這學期幫助同學解決課業上的問題,大家對課程、作業有甚麼問題可以直接問他們,但是不能叫他們幫你寫,清楚嗎?」

「喔~原來這就是傳說中的強者,幾乎都是保送的欸,不用考期中考。」旁邊某A說。

「廢話,他們考的那個試鐵定比我們考的難很多倍。」某B說出了正解。

在教授邊介紹課程討論系統、以及批改系統的同時,劉逼仔細端詳強者們身上的衣服,那是一件黑色棉衫背面印了某個不知道名字的動漫人物、而前面則印了「程式補完計畫」。

本著大一剛進來出生之犢不畏虎奮發向上的精神、還有看到教室最後一排重修的學長姐落寞的眼神,劉逼知道這門課肯定翹不得,而且早聽說這門課對大一新生來說很重,每週都有作業外加四次大考和不定期小考的份量,搞得人心惶惶深怕自己明年還得來報到。

沒想到第一次的突襲小考很快就到來了,剛上完的內容馬上上機考試限時15分鐘,那種感覺好比你第一次學某個外文,老師給你看了一些例句後,馬上考你作文一樣。批改系統一開放的那瞬間,鍵盤敲擊聲便此起彼落,這些聲音聽在寫不出來的人耳中只有更加令人煩躁,雖然那些題目現在回頭看已經變得很容易,但是對於當時毫無底子的劉逼來說根本是天書,看了看左邊的同學,撐著下巴無奈地對他搖搖頭;再看看右邊的同學竟然已經趴倒在桌上。

「靠,這麼衰,連想偷問都無法。」劉逼心裡暗罵,於是十五分鐘就在跟臨座的人大眼瞪小眼的僵局下耗掉了,這中間有些許人已經完成大搖大擺地走出教室,多數人則是愁眉苦臉地留在位子上等待批改系統關閉後螢幕上顯示大家剛剛的成績一目了然。

「怎麼會這麼多人零分(註1)?大家之後回去要多多預習再來上課。」教授用一貫冷冷地口吻說。

走出教室後大夥兒聚在一起哀號遍野,有的人討論剛剛的題目,有的人罵幹,大家已經意識到---這堂課鐵定不好混。

這些都只是開始,之後這門課對劉逼來說越來越難熬,上課時教授用含糊不清的語調偶爾穿插一些動漫梗的冷笑話讓他感到疲累不堪,奇怪的是這類的笑話以往在高中老師一說出口,台下肯定群起噓之的,上了大學大家都捧場地笑了。

劉逼唯一一次發噱是某次教授講解陣列的記憶體分布時,教室一片死氣沉沉,教授一再問:「懂了嘛?懂了我們就繼續,這沒有很難...」,某個草根性很強的台南人突然用台語大喊:「聽無啦!」,不知道是那句話的腔調好笑,還是發自自嘲式的幽默,劉逼笑完後有了精神,但隨後又陷入神遊狀態。

學壞總是比學好容易,後來劉逼作業幾乎都用抄的再改改變數,禮拜一晚上成了他最難熬的時段,因為得熬夜看懂同學的程式碼,等自己的搞定後再傳給另一名同學K哥。

「他上課速度實在太快了,毫無基礎根本跟不上啊,我們又不是只有這科要念。」K哥抱怨。

「對啊,幹...而且我覺得公開每個人的成績真的很靠杯,每次考完看到總成績忽而升高一點忽而降低嚇都快嚇死了,給別人看到自己的分數也很令人不爽」因為這兩個人最後這科到最後成績都是六十幾分過關,所以討論起來特別有共鳴,但隱藏在心中誰也沒說的卻是另一份恐懼,就是能進到台大的過去往往在課業上都是佼佼者,如今卻是第一次學得這麼吃力、第一次有這麼大的挫敗感,而且這還可能是將來的生存技能,實著讓人感到擔憂。

有幾次和強者討論作業時,劉逼問強者就像小予現在問劉逼一樣,請教如何寫好程式。

「多練習」強者說。

「那你是甚麼時候開始寫程式的?」

「國小」

劉逼開始懷疑自己是不是念錯系了,或許這東西是講究天份的,雖然在往後隨著越來越大量的練習他也發現寫程式靠的真的是多寫多練,而靠天分的則是演算法與資料結構。

課程逐漸進入指標和資料結構後,有部分人已經開始完全聽不懂了,劉逼也是其中一個,只好靠著期中考時跟作業相似度很高的考題拿基本分,而突襲小考大家偷傳USB互相照應,最後一次期末考,經過前一天配分計算,這次即使拿零分也會過關,劉逼根本無暇準備而忙著搶救另外一科---微積分。

最後他真的拿零分,卻有鬆了一口氣的解脫感,有的人滿分上前領獎品---"程式補完計畫的"T-shirt,有的人一臉茫然等著明年再來的無奈表情。「被當掉並不可怕,可怕的是人生中第一次挫敗吧」他心想。

經過這個「入門課程」的摧殘其實劉逼學到的並不多,之後的功力都是靠其他科目和專案養成出來的,如今劉逼想起當年那位教授老愛說:「合理的考試是訓練,不合理的考試是磨練。」如果把這句話納入課程網頁的介紹,想必會嚇退一些外系的人。清大、交大的資工系程式設計的課程開一學年,而台大則只有一學期,或許教授也是不得以逼迫學生的學習進度。劉逼心想如果當初在入門階段時,也有人陪他完成每次的作業,教他如何寫、如何debug,或許會走得更順吧。


註1:程式設計的計分方式一題是以十分為滿分,系統丟進10個測資,一個測資正確拿一分。