分享時間:100年6月13日 11:00~12:00 地點:資科研究室
回想97年與99年分別擔任全國商科技藝競賽程式設計、網頁設計指導教師,內心真有諸多感謝,能奪得最佳成績,除了選手的認真努力與好運氣,其實我想最重要、並且要感恩的是各位同仁的協助--記得97年初次指導程式設計技藝競賽時,幸有前二年的程式指導老師巫偉萍 老師、陳淑嬌 老師,留下技訓檔案,讓我不致茫然,可如獲至寶地從中挖掘出訓練教材與參考答解,遇到難題時,各位老師尤其是建良組長更情義相挺,盡心協助想出解題關鍵;而去年競賽前吳慧貞老師一番擔任網頁設計組技訓教師之心得分享,更給了我在指導網頁設計競賽時莫大的啟示與思考方向。
因此,我樂於依循賢者腳步,整理出指導技藝競賽程式設計組之經驗與大家一起分享,其實科內同仁皆是程式高手,大部份也曾指導過程式設計競賽,且獲得過極佳名次,於此,謹將相關資料收集彙整,請大家參酌並不吝指正。
階段一:如何挑選選手
1. 觀察平時課堂表現:
於二年級的程式設計課教學過程中,多觀察學生邏輯思考能力、上機實作的表現等。若此門課非自己擔任,可於校內初賽後留下前3至5名的同學,於暑假做集體培訓,一來為組隊參加「資訊月資訊應用競賽--創意軟體設計」比賽做準備,二來可熟悉學生,並觀察適合的正、副手人選。
於二年級的程式設計課教學過程中,多觀察學生邏輯思考能力、上機實作的表現等。若此門課非自己擔任,可於校內初賽後留下前3至5名的同學,於暑假做集體培訓,一來為組隊參加「資訊月資訊應用競賽--創意軟體設計」比賽做準備,二來可熟悉學生,並觀察適合的正、副手人選。
2. 參考學生之數學成績、邏輯推理能力:
除了校內程式設計競賽成績外,學生數學的學習表現也應納入挑選選手的考量因素。因為程式設計術科試題離不開數學概念與邏輯推理能力:例如排列組合、分數相加、質因數分解、聯立方程式、計算平均數、變異數、中位數、等差數列或等比數列、求餘數、排列最小值、兩直線間的關係、數獨遊戲、零錢兌換、文字依順時針蚊香方向由外向內填入、最大連續元素和等。(97年考出”圓內接正多邊形的面積”,此題僅三位參賽選手答對,而當年選手陳彥樺同學正好想到數學公式,幾行就解出題目,拿到關鍵的15分)
除了校內程式設計競賽成績外,學生數學的學習表現也應納入挑選選手的考量因素。因為程式設計術科試題離不開數學概念與邏輯推理能力:例如排列組合、分數相加、質因數分解、聯立方程式、計算平均數、變異數、中位數、等差數列或等比數列、求餘數、排列最小值、兩直線間的關係、數獨遊戲、零錢兌換、文字依順時針蚊香方向由外向內填入、最大連續元素和等。(97年考出”圓內接正多邊形的面積”,此題僅三位參賽選手答對,而當年選手陳彥樺同學正好想到數學公式,幾行就解出題目,拿到關鍵的15分)
3. 考量選手人格特質:
挑選選手時,可先了解校內競賽前幾名的學生,是否有意願參與培訓(若是極力看好的學生,可「動之以情,誘之以利」儘量鼓勵其參與培訓),也要了解家人是否支持,且其性格是否具備穩定專注、主動積極、強烈的企圖心、良好的自律能力與抗壓性。畢竟暑假七月開始至十二月競賽,為期半年密集式的訓練,如果沒有濃郁的興趣、能力與毅力做後盾,很難開花結果。而解題時可觀察其思慮是否清晰、有條理,遇到難題時是否態度誠懇,多方尋求解答,且不屈不撓。畢竟能挑選到一個聰穎慧黠、冷靜沉穩、但又樂觀積極、心無旁騖、邏輯推理強、最好不必課外補習的選手是非常重要的。
挑選選手時,可先了解校內競賽前幾名的學生,是否有意願參與培訓(若是極力看好的學生,可「動之以情,誘之以利」儘量鼓勵其參與培訓),也要了解家人是否支持,且其性格是否具備穩定專注、主動積極、強烈的企圖心、良好的自律能力與抗壓性。畢竟暑假七月開始至十二月競賽,為期半年密集式的訓練,如果沒有濃郁的興趣、能力與毅力做後盾,很難開花結果。而解題時可觀察其思慮是否清晰、有條理,遇到難題時是否態度誠懇,多方尋求解答,且不屈不撓。畢竟能挑選到一個聰穎慧黠、冷靜沉穩、但又樂觀積極、心無旁騖、邏輯推理強、最好不必課外補習的選手是非常重要的。
階段二:如何訓練選手
由歷年的程式設計競賽成績可看出影響得獎名次好壞主要在於「術科」成績,而非「學科」成績;畢竟學科成績僅佔30%,術科成績佔70%,且術科每題評分只有對(該題滿分)與錯(該題零分),題數通常不多,故每題佔分頗重,往往術科只要多對一題,最後的名次一定大洗牌,故程式設計競賽決勝負關鍵多在於術科成績,當然學科成績也不能差。(例如去年,由於術科共10小題,限於時間,前五名選手術科皆錯3題,而去年學科算是歷屆最難,因此學科考得好壞,也是影響名次的重要關鍵)。在此,分成學、術科兩部分來談如何培訓選手:
1. 學科:
競賽時以測驗題為主,佔競賽總成績30%。命題範圍:VB 程式語言為核心、95暫綱計算機概論第四單元基本視窗程式應用(不包括元件控制項部份),測驗時間:1小時。( 明年是99課剛第一年,應注意命題範圍是否改變 )
由於選手大部份是資科學生,資二每週有2節程式語言課(100年起每週3節),因此VB基本能力應沒問題,但仍應從頭將VB觀念徹底複習一遍並多做練習,像去年學科正式題考出IIF函數,很令人訝異;此外也要補充基本資料結構概念,去年學科「遍歷」(Traversal)一棵二元樹的所有節點(此題最後送分)、術科出現樹狀圖等,選手若沒學過基本資料結構,很可能當場傻眼。
學科準備時,可先找幾本不同版本「計概總複習」複習第四章程式語言觀念並請選手確實將題目做完,再來做歷屆程式設計競賽學科試題,此外,程式設計丙檢學科試題、歷屆台北市高中能力資訊競賽、台北市軟體競賽、全國高中能力資訊競賽筆試試題當然也不能放過。術科解題總會有頭腦不清、想不出如何解答之時,這時候就別勉強,拿出學科的書來看看也是一種調配與心境轉移。
2. 術科:
採上機實作,佔競賽總成績70%,命題範圍:以高級商業職業學校相關課程教材範圍為原則,並包含部分相關基礎理論題目,程式在執行時,應先關閉所有顯示介面及訊息,畫面不可有任何顯示資訊,測驗時間:3小時。吳主任於6月8日 參加100年程式設計競賽規則修訂會議,據說,今年每題加上執行時間,如此演算法的好壞需考量。
l 程式題目來源:
(1). 利用「麗山精典50題」進行入門訓練:
此部份僅有題目,測試資料要自行建立,除部份難題外,大部份難度不高,可做為基本程式邏輯能力訓練。選手感覺困難題目,可以先空著,之後再回頭做。
此部份僅有題目,測試資料要自行建立,除部份難題外,大部份難度不高,可做為基本程式邏輯能力訓練。選手感覺困難題目,可以先空著,之後再回頭做。
(2). 歷屆技藝競賽程式設計的模擬試題及正式試題:
由研究歷年的術科考題中,可發現每年試題中往往會有幾題重複先前解題觀念與技巧,溫故知新,務必要求選手將近年(最好是近十年題目)每題都做,以了解術科題型,培養解題實力。我收集的資料從88年起的程式設計試題及解題都有,可參考。(有些難題至今無解,期望各位高手解答)
由研究歷年的術科考題中,可發現每年試題中往往會有幾題重複先前解題觀念與技巧,溫故知新,務必要求選手將近年(最好是近十年題目)每題都做,以了解術科題型,培養解題實力。我收集的資料從88年起的程式設計試題及解題都有,可參考。(有些難題至今無解,期望各位高手解答)
(3). ACM題目
ACM程式題目原為英文,題目中文翻譯可參考網站:Lucky貓的ACM園地,請選手把「難度一」的題目都做完吧!「難度二、三、四」的題目就看個人造化囉!(難度一目前中文翻譯題數為43題)
另外,可參考基隆商工資處科/學生專區/校內ACM網頁,此網站內容雖有些凌亂,但江俊廷 老師羅列基隆商工歷屆校內ACM程式設計競賽資料、與校內選手選拔試題及參考解答,可列為選手的模擬試題。
ACM程式題目原為英文,題目中文翻譯可參考網站:Lucky貓的ACM園地,請選手把「難度一」的題目都做完吧!「難度二、三、四」的題目就看個人造化囉!(難度一目前中文翻譯題數為43題)
另外,可參考基隆商工資處科/學生專區/校內ACM網頁,此網站內容雖有些凌亂,但
(4). 北一女校內資訊能力競賽試題:
此網站中呈列87學年~96學年北一女校內賽試題,有筆試(附答案)及程式設計試題(有些附測試資料),很值得訓練選手邏輯思考, 此外,網站中另一網頁---校外資訊能力競賽試題,收集台北市高中能力資訊競賽、台北市軟體競賽、全國高中能力資訊競賽試題、國際資訊奧林匹亞選訓營初賽、網際網路全國大賽試題,可依選手狀況,挑選適合題目練。
此網站中呈列87學年~96學年北一女校內賽試題,有筆試(附答案)及程式設計試題(有些附測試資料),很值得訓練選手邏輯思考, 此外,網站中另一網頁---校外資訊能力競賽試題,收集台北市高中能力資訊競賽、台北市軟體競賽、全國高中能力資訊競賽試題、國際資訊奧林匹亞選訓營初賽、網際網路全國大賽試題,可依選手狀況,挑選適合題目練。
l 培訓的重心:
(1). 熟練VB語言的使用技巧、培養遞迴處理能力
程式解題著重在邏輯推理思考,遇到複雜問題,可先將概略的解題步驟寫下來,再開始撰寫程式。而如何駕輕就熟的使用VB語言實作很重要,尤其是陣列使用、輸入檔資料讀進後如何分割與處理、遞迴處理能力等。
程式解題著重在邏輯推理思考,遇到複雜問題,可先將概略的解題步驟寫下來,再開始撰寫程式。而如何駕輕就熟的使用VB語言實作很重要,尤其是陣列使用、輸入檔資料讀進後如何分割與處理、遞迴處理能力等。
選手最困難的點是” 遞迴”,剛開始集訓先不要要求” 遞迴解題”,培訓一段時間後,選手基本功紥實了,再找一些以遞迴處理的程式題,並以圖解方式逐步推演解題步驟,以慢慢培養選手遞迴處理能力。(當選手真的懂得如何將問題切割為較小的單元而使用遞迴解題,你會發現,選手如任督二脈打通,解題功力一飛衝天)
(2). 訓練偵錯能力
寫程式如何偵錯是很重要的,選手們很少會犯語法錯誤,除非是少使用的語法、函數,而不常用的語法、函數可善用MSDN輔助(比賽單位會安裝);但邏輯錯誤偵錯,就要多訓練選手圖解演算法,並學會設定中斷點偵錯,或使用逐步執行,再利用”區域變數視窗”,以逐步查看相關變數、陣列資料變化情形,而發覺錯誤所在。
寫程式如何偵錯是很重要的,選手們很少會犯語法錯誤,除非是少使用的語法、函數,而不常用的語法、函數可善用MSDN輔助(比賽單位會安裝);但邏輯錯誤偵錯,就要多訓練選手圖解演算法,並學會設定中斷點偵錯,或使用逐步執行,再利用”區域變數視窗”,以逐步查看相關變數、陣列資料變化情形,而發覺錯誤所在。
(3). 利用邊際條件測試
程式術科測驗每題評分只有對與錯兩種,對則該題給滿分,錯或違反競賽規則者則不給分(即以零分計算),競賽時每一試題會提供2組測試資料及其正確解答以供學生測試用,但此2組測試資料通常無法涵蓋所有狀況,建議選手自行以邊際條件(如最大值、最小值等)來檢測程式是否完全正確。
程式術科測驗每題評分只有對與錯兩種,對則該題給滿分,錯或違反競賽規則者則不給分(即以零分計算),競賽時每一試題會提供2組測試資料及其正確解答以供學生測試用,但此2組測試資料通常無法涵蓋所有狀況,建議選手自行以邊際條件(如最大值、最小值等)來檢測程式是否完全正確。
(4). 研究相關數學原理、資料結構、演算法
前面已提到全國商科技藝競賽程式設計術科試題,很多是數學問題,務必仔細研讀相關數學概念;其次把大學學的資料結構找出來吧,讓選手知道基本概念,例如:算術式表示法--中序式(infix)、前序式(prefix)、後序式(postfix)、如何將中序式轉前後序式、如何將中序式轉後序式、樹狀結構(根、節點、樹葉)、二元樹、圖形結構、各種排序法、搜尋法等。不必刻意講解資料結構,當遇到題目時,再補充說明及研究相關資料結構。
前面已提到全國商科技藝競賽程式設計術科試題,很多是數學問題,務必仔細研讀相關數學概念;其次把大學學的資料結構找出來吧,讓選手知道基本概念,例如:算術式表示法--中序式(infix)、前序式(prefix)、後序式(postfix)、如何將中序式轉前後序式、如何將中序式轉後序式、樹狀結構(根、節點、樹葉)、二元樹、圖形結構、各種排序法、搜尋法等。不必刻意講解資料結構,當遇到題目時,再補充說明及研究相關資料結構。
關於演算法,有一個不錯的網站- -「常見程式演算筆記」值得參考:
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/AlgorithmGossip.htm
此網站主要收集一些經典的程式問題,例如:河內塔、費氏數列、老鼠走迷宮、背包問題(最佳化的問題,可用「動態規劃Dynamic programming」解題)、中序轉換為後序(Postfix)、排列組合、排序演算法、稀疏矩陣、魔術方塊等。每題說明演算法及解法,而實作的部份是使用 C、Java等語言。
http://caterpillar.onlyfun.net/Gossip/AlgorithmGossip/AlgorithmGossip.htm
此網站主要收集一些經典的程式問題,例如:河內塔、費氏數列、老鼠走迷宮、背包問題(最佳化的問題,可用「動態規劃Dynamic programming」解題)、中序轉換為後序(Postfix)、排列組合、排序演算法、稀疏矩陣、魔術方塊等。每題說明演算法及解法,而實作的部份是使用 C、Java等語言。
(5). 最好學會C語言基本語法
其實程式題目多如牛毛解也解不完,有的難題真是絞盡腦汁、搜索枯腸也想不出解題辦法,這時可上網或找相關書籍尋求解答,但此時你會發現大部份都是以C語言實作,若選手看懂C語言基本語法,則可試著改寫為VB程式。
其實程式題目多如牛毛解也解不完,有的難題真是絞盡腦汁、搜索枯腸也想不出解題辦法,這時可上網或找相關書籍尋求解答,但此時你會發現大部份都是以C語言實作,若選手看懂C語言基本語法,則可試著改寫為VB程式。
(6). 養成隨時記錄解題狀況習慣
由於是密集培練,半年下來至少做過數百題程式,每個人狀況不同,感覺難易度也不相同,平時就要要求選手記錄每題解題狀況- - ok、難或無解,感覺難而已解出的題目是最有價值的,考前務必再回頭做一遍,無解的題目再說吧!
由於是密集培練,半年下來至少做過數百題程式,每個人狀況不同,感覺難易度也不相同,平時就要要求選手記錄每題解題狀況- - ok、難或無解,感覺難而已解出的題目是最有價值的,考前務必再回頭做一遍,無解的題目再說吧!
l 培訓時間
歷年來,科內同仁對參加技藝競賽的共識是不以培養機械式選手為主,希望學生在高一高二各方面都正常學習,待高二下學期末(6月初)再舉行初選,因此7月開始一定要很積極、很努力再努力的加強培訓,否則來不及。我是要求學生每天到校練習,假日再看學生狀況,若自己在家有進度,則假日不用到校;8月份暑輔期間則利用7、8節時間;開學後利用早自習、午休及放學後、還有每週三下午練習。比賽前一個月實習處會統一申請全天公假讓選手在技訓教室全力衝刺!
歷年來,科內同仁對參加技藝競賽的共識是不以培養機械式選手為主,希望學生在高一高二各方面都正常學習,待高二下學期末(6月初)再舉行初選,因此7月開始一定要很積極、很努力再努力的加強培訓,否則來不及。我是要求學生每天到校練習,假日再看學生狀況,若自己在家有進度,則假日不用到校;8月份暑輔期間則利用7、8節時間;開學後利用早自習、午休及放學後、還有每週三下午練習。比賽前一個月實習處會統一申請全天公假讓選手在技訓教室全力衝刺!
l 至少有一次實戰經驗
技藝競賽的初賽已經停辦很多年,而選手於正式賽前最好有實際現場參賽經驗,以感受臨場氣氛,畢竟有些選手屬”非比賽型”,平時練習狀況很好,但重要比賽就會失常,如此是不適合當正手的。
技藝競賽的初賽已經停辦很多年,而選手於正式賽前最好有實際現場參賽經驗,以感受臨場氣氛,畢竟有些選手屬”非比賽型”,平時練習狀況很好,但重要比賽就會失常,如此是不適合當正手的。
「資訊月資訊應用競賽--創意軟體設計」於每年9月報名,10月底或11月初比賽,可考慮組隊參賽。但其競賽方式不同於技藝競賽,是以介面呈現,只考術科上機實作,一次比賽就斷定區域賽、全國賽之個人成績與團體成績(3-5人)。由於科裡老師平日教學認真,我們學生資質也不差,只要有準備,通常會有不錯成績。我的做法是:7~9月先以技藝競賽解題方式訓練選手,資訊月比賽前一個月全力做物件介面練習,教材是電腦基金會編著「Visual Basic實力養成暨評量」分四大類,每類10題共40題,還有資訊月近年考題。資訊月競賽完,再回頭做無介面訓練。
階段三:驗收培訓成果、正面迎戰
此一階段大約是比賽前一個月,選手可全天公假練習。驗收方法是:模擬正式競賽時間( 術科3小時 )及方式,要求選手必須在時間限制內完成一份術科模擬試題,不只讓學生感受比賽氣氛,也能了解學生目前的實力,再進行最後的補強與衝刺。
競賽前1至2週最好停下腳步,先不要再做新的挑戰,回首整理重點:
學科部份--將VB及基本資料結構做重點整理,並複習一遍,以爭取高分。
術科部份--將特殊解法及平時標示為難的程式碼印出來或再做一遍,以加深解題印象。
學科部份--將VB及基本資料結構做重點整理,並複習一遍,以爭取高分。
術科部份--將特殊解法及平時標示為難的程式碼印出來或再做一遍,以加深解題印象。
最後,交代選手要作息正常、注意飲食(避免生冷食物)、勿熬夜,保持愉快心情,如此方能從容上戰場,爭取佳績。
心得與建議:
為人師者,最大的成就莫過於得英才而教之,能遇到彥樺這樣聰慧、靈巧的學生,是老天對我的眷顧!其實校內賽第一名的她,並非一開始就有意當選手,而我也十分猶豫是否以她為正手,雖然從平日程式課程教學的觀察,確知她是可造之材,但選學業成績名列前矛的她,又怕兩頭空(萬一競賽成績不理想,又因培訓耽誤學業),那我豈不罪過,最後是96年程式選手的一句話:「經過密集的程式技訓,我的頭腦突然變靈活了,這是最大的收獲!」,開啟我與彥樺之師徒情緣,但那一刻起我是以如臨深淵、如履薄冰的心境,來面對整個技訓過程,不知有多少次在夜深人靜的夜晚突然驚醒,或許是日有所思、夜有所夢吧,經常霍然開朗想到一個不錯的解法,就睡眼惺忪的坐到電腦前Coding。也許真的是天道酬勤,最終獲得最高榮譽。如今,看到彥樺每次回來總眉飛色舞的訴說在台科大如何快樂學習、對未來有多少夢想,真是令人欣慰!
最後,謹列出幾點建議供大家參考:
- 指導老師最好參加競賽規則修訂會議,以了解競賽規則之變化。
- 正式賽時交代選手不要太早繳卷,「術科全對」比「術科使用時間」更為重要,
畢 竟少有比較「術科使用時間」決定名次的情況發生。 - 可增購資料結構、C語言方面書籍,以方便選手參
沒有留言:
張貼留言