戚 爽
(長春金融高等??茖W(xué)校 計算機系,吉林 長春 130028)
ACM/ICPC是國際計算機協(xié)會組織的國際大學(xué)生程序設(shè)計競賽的英文簡稱。這項每年一屆的計算機學(xué)科競賽始于1976年,是目前規(guī)模最大且最具影響力的全球性高校之間的賽事。[1]ACM/ICPC競賽具有獨特的競賽規(guī)則:以團隊的形式代表各學(xué)校參賽,每隊3名隊員,比賽期間每隊使用1臺電腦,在5個小時內(nèi)編寫程序解決6~12個問題。[2]編程語言可以使用C、C++、Pascal或Java中的任意一種,比賽勝負的評判以答對題目數(shù)量多者占優(yōu),在解題數(shù)量相同的情況下,總用時最少者占優(yōu)。[3]由此可見,ACM/ICPC競技可以系統(tǒng)檢驗大學(xué)生的創(chuàng)新能力、團隊合作精神和在壓力下編寫程序、分析和解決問題的能力。
ACM/ICPC競賽題目沒有固定的范圍,涉及數(shù)論、圖論、離散數(shù)學(xué)等多學(xué)科知識,并且要求學(xué)生在程序設(shè)計方面擁有扎實的基本功。就高職高專計算機專業(yè)開設(shè)的課程而言,ACM/ICPC競賽與《C/C++程序設(shè)計》、《數(shù)據(jù)結(jié)構(gòu)》、《Java程序設(shè)計》等課程有著緊密的關(guān)聯(lián)。如何以ACM-ICPC競賽為契機,推動與促進計算機程序設(shè)計類課程的教學(xué)改革,提高高職高專計算機專業(yè)學(xué)生的職業(yè)能力和職業(yè)素養(yǎng),已成為近年來各高校教師積極探討的熱點問題。
目前,現(xiàn)有的程序設(shè)計類課程教學(xué)仍然存在著很多尚未解決的問題,大體表現(xiàn)在以下幾個方面。
目前,程序設(shè)計類課程大多仍然沿用“教師講授,學(xué)生被動接受”的灌輸方式進行教學(xué)。程序設(shè)計課程內(nèi)容比較抽象,而且層層加深,前后銜接較為緊密。這種傳統(tǒng)的人才培養(yǎng)模式限制了課堂中教師與學(xué)生的互動,很難激發(fā)學(xué)生的學(xué)習熱情,學(xué)生易產(chǎn)生畏難情緒,同時,也扼殺了學(xué)生的想像力與創(chuàng)造力,削減了學(xué)生自主學(xué)習的意識。
一方面,在實踐教學(xué)環(huán)節(jié)中,程序設(shè)計類課程對學(xué)生的實際編程訓(xùn)練要求較低,僅要求學(xué)生使用教材中的程序例題進行驗證性操作,即按照書本機械性地輸入源代碼,然后進行源程序編譯,修改錯誤,連接后執(zhí)行程序等。這樣就使學(xué)生變成了打字員、機器人,在實驗課中一直進行簡單且重復(fù)的模仿,甚至對自己輸入的程序缺乏深入的理解和研究,導(dǎo)致學(xué)生失去學(xué)習興趣與熱情,誤解了程序設(shè)計類課程的初衷,錯失了提高編程能力的大好時機。另一方面,上機實踐課程的教學(xué)進度必須遵照課堂教學(xué)的講授順序進行安排,這就導(dǎo)致上機實踐內(nèi)容的設(shè)計與制定為每一章節(jié)的重點和難點內(nèi)容,或是對單獨幾個知識點的訓(xùn)練與考查。例如,在《數(shù)據(jù)結(jié)構(gòu)》上機實踐課程中,傳統(tǒng)上會按照程序設(shè)計中非數(shù)值數(shù)據(jù)之間不同的邏輯結(jié)構(gòu)來劃分和設(shè)計實驗內(nèi)容,每一次實踐課練習一種數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)以及相關(guān)操作。這樣做會誤導(dǎo)學(xué)生將注意力只集中在對于每種數(shù)據(jù)結(jié)構(gòu)的算法上,而忽略了對課程概念的整體性把握,忽略了在解決較大規(guī)模問題時對于數(shù)據(jù)結(jié)構(gòu)的選擇、算法的選擇等綜合運用能力的培養(yǎng)。
目前的大型軟件均是通過團隊協(xié)同合作獲得的集體智慧的結(jié)晶,即使是非常優(yōu)秀的軟件編程人員,也無法熟悉和掌握所有的專業(yè)知識與技能,無法獨立完成軟件開發(fā)與設(shè)計過程中的全部工作。但在程序設(shè)計類課程的教學(xué)過程中,教師往往忽略了對學(xué)生團隊意識的培養(yǎng),缺少團隊協(xié)作學(xué)習環(huán)節(jié)的教學(xué)設(shè)計。以往雖然在教學(xué)過程中鼓勵學(xué)生采用分組方式進行討論與實驗,但由于學(xué)生的知識水平參差不齊,每組可能是由1~2名學(xué)生包攬了所有實質(zhì)性的工作,而其他學(xué)生只是濫竽充數(shù),沒有真正做到團隊協(xié)作式的學(xué)習。那么,學(xué)生參加工作后就會缺失團隊意識這一基本的職業(yè)素養(yǎng),給未來的工作造成影響。
目前大多數(shù)程序設(shè)計類的課程考核內(nèi)容局限性較大,多以考查教材中的基礎(chǔ)知識與基本理論為主,且考核形式單一,一般只采用筆試或者上機操作,其中上機操作考試題型多以客觀題、程序改錯、程序填空和簡單編程題為主,而且期末考試成績占課程總成績比重過大。在課程考核評價環(huán)節(jié),由于考試方式和考試題型的局限,無法通過考核體現(xiàn)出學(xué)生掌握編程技巧和程序設(shè)計能力的真實狀況,也無法突出程序設(shè)計類課程重視實踐環(huán)節(jié)的特點,反而形成了學(xué)生死記硬背的現(xiàn)象,制約了學(xué)生動手實踐能力等職業(yè)技能的培養(yǎng)。
根據(jù)以上對程序設(shè)計類課程存在的問題和對我校學(xué)生的學(xué)情分析,參考ACM/ICPC競賽模式及題目特點,程序設(shè)計類課程的教學(xué)改革應(yīng)從以下幾個方面入手。
在理論教學(xué)過程中,嘗試將ACM/ICPC程序設(shè)計大賽的試題穿插到程序設(shè)計類課程的基礎(chǔ)知識和語法講解中,由于ACM/ICPC競賽試題新穎、有趣且極富挑戰(zhàn)性,可以給學(xué)生不一樣的感官刺激,使學(xué)生不斷獲得解題的喜悅感與成就感。但是由于學(xué)生的知識水平參差不齊,如果直接將ACM/ICPC試題庫中的完整題目呈現(xiàn)給學(xué)生,會使學(xué)生產(chǎn)生畏難情緒,喪失學(xué)習的信心。因此,必須將與本節(jié)重點知識相關(guān)的內(nèi)容提取出來單獨編成題目。例如《C/C++程序設(shè)計》課程,在介紹選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)時,可以以ACM/ICPC競賽試題中常規(guī)的幾種輸入、輸出要求為例,演示講解如何使用循環(huán)語句完成多個實例的按格式輸入;在輸出若干數(shù)據(jù)時如何使用選擇語句控制前后空格數(shù)及何時輸出換行符等。當然,對于ACM/ICPC題目的選擇和改編是一項循序漸進的工作,在一個教學(xué)周期內(nèi)不可能完成全部題目的整理,可能需要幾輪的積累。
在課堂教學(xué)中還應(yīng)注意運用多樣化的教學(xué)法,如任務(wù)貫穿分解法,以任務(wù)驅(qū)動的方式將重點和難點知識化解于無形;課堂現(xiàn)場編程陷阱法,在演示編寫程序過程中教師故意犯錯,以吸引學(xué)生注意力,促使學(xué)生幫助教師查找錯誤,加深對該類型錯誤的認識;Flash動畫演示法,例如在《數(shù)據(jù)結(jié)構(gòu)》課程講授棧的出棧與入棧操作時,通過動畫演示的方式,幫助學(xué)生對抽象的概念有更加清晰的理解。多種教學(xué)法的穿插運用,可充分激發(fā)學(xué)生的學(xué)習熱情,活躍課堂氣氛,同時也能提高學(xué)生閱讀程序的能力,拓寬學(xué)生的思維廣度和深度,幫助學(xué)生樹立良好的編程風格。
根據(jù)高職高專職業(yè)技能培養(yǎng)目標要求,可將上機實踐形式分為驗證性實驗、設(shè)計實驗和綜合實驗。其中驗證性實驗是通過上機操作的方式將理論課中所學(xué)到的具有代表性的程序和算法進行實現(xiàn)。在驗證實驗的基礎(chǔ)上,進行設(shè)計實驗。教師可以挑選程序設(shè)計類課程中經(jīng)典的例題和算法,或者在ACM/ICPC題庫中精心挑選適合的題目并進行適當簡化。
綜合實驗屬于階段性總結(jié)實驗,一門程序設(shè)計類課程可按照課程內(nèi)容的實際需求安排3~4次的綜合實驗。首先教師在Online Judge系統(tǒng)(簡稱OJ)上挑選涉及到本階段學(xué)習知識的競賽練習題目,并發(fā)布到競賽平臺。然后對學(xué)生進行分組,3~5人為一組進行聯(lián)機程序設(shè)計練習。在使用競賽平臺答題的過程中,組內(nèi)學(xué)生可以對題目進行分析與討論,然后制定出解題思路,并完成程序代碼的編寫,最后將結(jié)果代碼提交到競賽平臺,由平臺自動給出判定結(jié)果。將ACM競賽平臺引入到實踐教學(xué)中,一方面,教師可以通過競賽平臺為學(xué)生訂制各階段的綜合上機實踐項目,并通過提交情況掌握學(xué)生近期的學(xué)習情況,從而適當調(diào)整教學(xué)進度。另一方面,ACM試題都是非常貼近生活的實際問題,可以給學(xué)生身臨其中的真實感。學(xué)生可通過競賽平臺答題,接觸到更廣、更深入的知識范疇,綜合運用書本上的知識解決實際問題,同時,根據(jù)競賽平臺的判定結(jié)果查找自身的問題,促使學(xué)生不斷進行代碼查錯和知識鞏固。各組之間也可以隨時了解各自的代碼提交情況,從而形成一種互相競爭的狀態(tài),提高學(xué)生學(xué)習的主觀能動性,形成良好的學(xué)習氛圍。
對于高職高專計算機專業(yè)的學(xué)生來說,未來的就業(yè)崗位包括ASP.NET開發(fā)工程師、NET Windows開發(fā)工程師、網(wǎng)頁設(shè)計師、需求分析工程師、系統(tǒng)架構(gòu)設(shè)計師和數(shù)據(jù)庫工程師等。這些崗位都要求其具備一定的算法設(shè)計和實現(xiàn)的能力,以及能夠熟練使用計算機語言解決實際問題的能力??梢?,學(xué)生實際動手編程能力是程序設(shè)計類課程的一項重要的職業(yè)能力培養(yǎng)目標。ACM平臺采用計算機自動判斷程序的正誤,所以學(xué)生提交的程序既不能有任何語法錯誤,也不能有任何邏輯錯誤。在總體考核中增加ACM競賽平臺考核機制,可大膽進行嘗試將期末上機考試成績由原本占總成績的70%降低到50%,學(xué)生多次綜合實驗中的平均成績占總成績的40%,另外10%為平時考勤成績。
計算機技術(shù)發(fā)展日新月異,學(xué)生的素質(zhì)參差不齊,為了適應(yīng)社會和教育發(fā)展的需求,教育工作者應(yīng)對現(xiàn)有的教學(xué)理念、教學(xué)方法、教學(xué)模式等方面進行不斷的探索、創(chuàng)新。相信將ACM/ICPC競賽的先進理念融入到高職高專計算機專業(yè)的日常教學(xué)中,能夠為程序設(shè)計類課程的建設(shè)與改革提供新思路,從而進一步提升大專學(xué)生的職業(yè)素質(zhì)與專業(yè)技能。
:
[1]吳文虎,王建德.世界大學(xué)生程序設(shè)計競賽(ACM/ICPC)高級教程(第一冊)程序設(shè)計中常用的計算思維模式[M].北京:中國鐵道出版社,2009,(7).
[2]張熠.以ACM為導(dǎo)向構(gòu)建C語言實驗教學(xué)新平臺的研究與實踐[J].臺州學(xué)院學(xué)報,2009,(6):70-74.
[3]周蘇.感受數(shù)學(xué)思維與算法藝術(shù)之美——推薦《程序設(shè)計中常用的計算思維方式》[J].計算機教育,2010,(3).