Online Judge平台在去年的九月開始運作,說起來也已經一年了。
初試的感想 剛知道有這個平台時,還蠻興奮的,因為系上雖然一向有資訊和管理並重的風氣,但是自己動手寫的人並不多。在2010年時,系上也請了幾位碩士生來教我們這些學弟妹,但去的人不是很少,就是把那裏當課輔班─要助教們把上課時講過的東西重複一遍。因此有這個訓練場,也比較能和助教們討論程式邏輯的優劣處。
不過接下來我就碰到了問題。也是我對這個系統的小小抱怨。這個系統能接受的語言種類雖不少,從基礎的C、Java到沒人用過的Pascal、Perl都有,但我則是使用了大一時程式設計使用的Python。如果不計測試的學長們,我應該是最早投稿的人。
第一次嘗試就錯誤了
後來去問了一下原因,才知道是版本的問題。Python是還在成長的語言,Python 2與Python 3之間有許多的函式及語法的差異,而系統卻只吃Python 2。因此我有很長一段時間是用虛擬機器在寫程式的。
虛擬機器的裡面是Windows XP + Python 2,外面是 Windows 7 + Python 3
但是這還不是問題的全部。最大的問題是,有時候要求的輸出值要求的格式精密度會到連一個空格都不放過。
每答對一題會錯四題
使用期間 大三上時最重要的課,就是作業系統了。而陳嘉玫老師也為了鼓勵班上的同學,也提出了一些獎勵辦法。像是將題目列為作業,以及利用系統作練習能得到一些加分等等。
要用到當時正在學的執行續概念
這題要求的是矩陣運算,題目的難度並不高,用高中程度的數學就能解題。重點反而變成了「怎樣的輸出才會符合系統需求」。因為系統的小問題,所以這題的繳交期限被延後了好幾周。但是因為延後了好幾周的關係,反而出現了些不幸的小意外。
交作業時的特別警告
給學弟妹們的提醒 大家在大四的時候都要畢業專案,這時候你可以發現過去三年的友情都會因為一件事瓦解-你的程式能力。或許我說得太過分了,不過當你在晚上、半夜、凌晨,都在幫專案coding時,你的組員卻只留下一句「我不會寫程式」時,你就會了解到什麼叫「無法共事的友人」了。程式能力是自己的,別人也許能拿走你的code,但是拿不走你的能力,而增加程式能力的唯一方法就是自己寫。更不用提當我們畢業之後,資管系在大部分人的眼中跟資訊系是無異的。以下我提供幾個練習的方法:
一、選擇一個你習慣的語言 不同的程式語言所需要的習慣不同,其歧異度就如同西歐語系-中東語系-遠東語系之間的差異。如果有人跟你說「學會一個語言之後,學其他的語言會比較容易。」那只是場面話而已。選擇一個鑽研,並將其他的語言作為補助。而如果一開始就使用C、Java的話,對大四的專案也會有幫助。
網路上流傳的小漫畫
二、動手寫,要實作 寫程式沒有那麼可怕(至少在系統上面的沒有),你只要邏輯清楚就能解決很多的問題。而當你在寫一些需要用到迴圈、遞迴的程式時,在一旁準備紙筆是個好選擇。跟著你的程式一起思考,他執行到哪一行,你就算到那一行,他跑了幾次迴圈,你就重複做幾次。真的不懂沒關係,那就用笨方法學,沒有人是一生出來就會寫程式的。
三、去問,但是問的聰明 要找程式的協助,在Google上是找不完的,而重點就會在要如何過濾資訊,這是另外一個問題,暫且略過。如果你不想一直面對螢幕,在每天晚上的助教時間是你的好幫手。我相信學長們都很樂意幫助大家,除了一種情況:「這個程式要怎麼寫?」這個程式要怎麼寫?這是很有趣的問題,是我要寫還是你要寫啊?也許你可以拿走程式碼,詳細的閱讀,然後把它當成作業交出去。但是你仍然沒有學到東西。有個比較好的問法是「這個程式我認為要這樣寫,但失敗了,是我哪裡搞錯了嗎?」。助教們是來幫我們學習正確的演算法邏輯,而不是來改程式碼的。
成果與收穫 對我個人來說,程式完成時會有種成就感。那對各位呢?一件沒有慾望的事,只想憑著熱血或意志是不可能長久的。為自己找個理由吧。
獲頒學習認證
|