追求神乎其技的程式設計之道(二)
(本來沒有想寫這麼長的,哪知道一下手後欲罷不能…。看來這系列文章會變成長連載了。)
資訊奧林匹亞與程式競賽
在升上高中前,我因緣際會透過一個國中的同班同學認識了他的哥哥YJL。YJL比我大三年,我要進中一中時他剛好畢業,很巧的是他很會寫程式,一直都是中一中的資訊能力競賽代表隊成員。剛認識他時,他就demo給我看他用QBASIC自己寫的橫向捲軸射擊遊戲,當時看得我目瞪口呆,我完全沒法想像QBASIC竟然能寫出這麼順暢且華麗的遊戲。這個demo如果不說,我一定會以為這是市面上在賣的商業遊戲(我那時還以為一定要學C才能寫出這種遊戲)。
透過YJL我也得知原來高中還有資訊能力競賽和奧林匹亞這種比賽,聽他述說跟全國的高手一起比賽寫程式時,讓我不知不覺也熱血沸騰起來。我把他高中時留下的各種參考資料全帶回家,並透過他認識了更多還在中一中的強者學長們,就這樣在踏進高中校門的同時也決定了我這三年的方向。
這裡我先介紹一下對於高中生最重要的資訊比賽。高中的學科能力競賽是教育部主辦的比賽,包括數學、物理、化學、生物、地球科學、資訊,每間高中通常會先辦個校內初賽來選出代表選手,再由這些選手參加各區域的能力競賽,最後各區的前N名(每科的人數不同)才能參加全國競賽。以資訊科來說,我記得是校內取6名,中區再取6名進全國決賽。到了全國決賽能拿到前10名,還能直接保送進資訊奧林匹亞的培訓營,不用再另外參加培訓營的入營考。至於資訊奧林匹亞(International Olympiad in Informatics, IOI)則是國際性的資訊比賽,參加的人是從每個國家挑選出來的頂尖高中生,每年輪流由一個參賽國舉辦,選手要進行兩天每次連續五個小時的頭腦比賽,其中只有一半的人可以得到獎牌。
這些比賽和一般的程式比賽其實很不一樣。這種比賽比的是解決問題的能力,不是比賽軟體實做的能力。題目比較像數學問題,只是除了紙筆外,還得用某種程式語言實做出能解出正確答案的程式,也就是說參賽者必須想出問題的解法(演算法),再透過自己擅長的程式語言寫進電腦,讓電腦執行後輸出問題的答案。這種解題比賽主要考驗的是運用資料結構和演算法以有效率的方法解決問題,並寫出正確程式的能力。大學有個類似的比賽是ACM ICPC,問題類型和IOI很類似,但比賽的模式和方法則有很大差異,有興趣的人可以自行尋找相關資料。雖然IOI是給高中生參加的比賽,但IOI題目的水準其實非常高,如果你能輕易解出IOI的問題,那… 我跟你打賭去Google面試也有99%的機率會通過。順便一提,Google Code Jam就是一個開放給所有人參加的解題比賽,題目類型就跟IOI和ACM ICPC差不多,前一百名就有獎金,還能免費去Google Mountain View總部玩一玩喔。
參加比賽是一個評估自己實力的好方法,沒在比賽會場上較勁過,真的很難體會解題與寫程式能力的差距可以有多麼巨大。一個頂尖的程式設計師和一個普通的程式設計師,其生產力是很輕易的能有十倍甚至百倍以上的差距,而寫出來的程式碼品質及效率也是同樣會有如此巨大的落差。
透過良性的競爭,高中這段時間也成了我進步最快的一個時期…..
(待續)
追求神乎其技的程式設計之道 全系列
Email訂閱
RSS訂閱




July 8th, 2008 at 1:22 am
“原來我就是差在比較晚接觸程式設計…” 很多人會這樣想,
我想說的是, 學程設與解題永遠不嫌晚.
像我大一才學程設, 計概差點被當;
大三比賽就能拿第一, 所以有心學程設的朋友, 千萬別灰心.
(即便如此, 還是被台灣最大間的IC設計公司羞辱了一頓)
- 回覆留言(Reply)
qianqian Reply:
August 12th, 2009 at 10:08 am
我大學前兩年都在遊蕩啦,現在要申請美國讀博士生才想起發奮用功……還有一年的時間可以努力,我知足了,盡自己最大的努力,做到怎樣變怎樣!總好過渾渾噩噩的狀態!
- 回覆留言(Reply)
July 8th, 2008 at 8:59 am
Michael:
我同意你說的,不管學什麼永遠都不嫌晚
只要有強烈的動機和熱情支持著,並且用了正確的方法
不管什麼時候學都是能有一番成果的
(事實上,高中全心投入這個領域也讓我犧牲了很多東西….)
- 回覆留言(Reply)
July 9th, 2008 at 2:13 pm
vgod 大大
請問讀”introduction to algorithms”和”Fundamentals of Data Strucures in C”
兩本書需要具備哪些數學知識?
- 回覆留言(Reply)
July 9th, 2008 at 8:20 pm
geekzyc:
這兩本書不太需要什麼特別的數學知識,有國中程度的數學就很足夠了。
(因為我高一看的也是這兩本,記得沒有遇到什麼超出國中程度的數學)
- 回覆留言(Reply)
bboy Reply:
December 27th, 2009 at 12:39 pm
天啊,高一就在看這兩本。話說我這兩本現在都還沒讀透。
- 回覆留言(Reply)
July 9th, 2008 at 8:24 pm
謝謝您!那我可要好好讀這兩本書了,我只會C語言,應該可以讀下去吧!
- 回覆留言(Reply)
July 9th, 2008 at 8:27 pm
大大,請問你覺得除了”Fundamentals of Data Strucures in C”之外,
還有其他資料結構好書嗎?
- 回覆留言(Reply)
July 10th, 2008 at 8:31 am
geekzyc:
Fundamentals of Data Strucures in C是資料結構的聖經級參考書,一本抵十本。如果能把這本全部讀通,其實也非常足夠了。
- 回覆留言(Reply)
December 26th, 2008 at 9:30 am
[...] 二 三 四 五 [...]
December 26th, 2008 at 9:43 am
[...] 二 三 四 [...]
April 26th, 2009 at 11:00 pm
[...] 二 三 四 五 六 [...]
July 16th, 2009 at 2:36 pm
[...] 追求神乎其技的程式設計之道(二) [...]
August 13th, 2009 at 10:22 am
[...] 二 三 四 五 六 七 [...]
May 26th, 2010 at 12:47 pm
我們是同道中人,也是從高中開始參加信息學奧林匹克(資訊奧林匹亞與程式競賽),進入了國家集訓隊(全國前20名),只是被淘汰,無緣IOI了。真的很崇拜您。
- 回覆留言(Reply)
vgod Reply:
May 26th, 2010 at 10:34 pm
很高興認識你, 你blog上的經歷也蠻有趣的
- 回覆留言(Reply)
August 25th, 2010 at 8:53 am
高中…
高中…
February 1st, 2011 at 1:47 am
[...] 一 二 三 四 五 六 七 八 九 [...]
April 9th, 2011 at 9:34 pm
我是在大陆的一个游客,是通过Goole搜索到你的博客,我是因为在找一款图形化的编程语言而找到你的,一口气读完你在中一到大学的经历,你对电脑的痴迷还比我疯狂得多,说起你的图形化编程语言,因为我是在工厂的自动化设备的编程工作,用的是PLC(可编程控制器),现在也在使用图形化的编程软件,只是这套软件只能够是专用的,不能编写电脑的执行代码,查找了很久,也没有一款好用的、规范的用于电脑程式的编程软件,我在我工作用于编写PLC程式的软件,里面所涉及的编程理念或者对于你有所帮助,他是符合IEC6113-3的编程语言(PLC编程语言的国际标准),他可以支持中文变量,使用图形的连接来编写数据执行的流程,支持函数、FB 、数组等,虽然我有一定的工业编程的基础,也不用2天就可以使用他来编写我的程式,比我以前的程式直观、方便、易于模块化编程。若有兴趣的可以到此软件的网站下载使用,相信以你的知识,也很快上手。网址
http://www.mitsubishielectric-automation.cn/download/dwn_idx_softwareDetail.asp?sid=18
软件的序列号:570-986818410
- 回覆留言(Reply)
November 18th, 2011 at 10:11 pm
[...] 追求神乎其技的程式設計之道(二) [...]