摘 要:針對程序設(shè)計類課程教學(xué)中存在的問題及原因,在分析ACM平臺特點的基礎(chǔ)上,給出了基于ACM平臺的程序設(shè)計課程理論和實踐教學(xué)方法,提出了具體措施,實踐中收到了較好的效果。
關(guān) 鍵 詞:ACM;教學(xué)改革;程序設(shè)計課程
0引言
高等院校計算機相關(guān)專業(yè)的課程中程序設(shè)計類課程占了較大的比重,程序設(shè)計類課程的實踐性很強,課程教學(xué)的最終目標是要求學(xué)生具有一定的程序設(shè)計能力。以往教學(xué)過程中主要強調(diào)程序設(shè)計語言的語法、實驗內(nèi)容也相應(yīng)分成不同的模塊,導(dǎo)致在教學(xué)過程中教師往往將重點偏向理論,忽視了理論和實際程序設(shè)計之間的聯(lián)系,降低了實際程序設(shè)計能力的訓(xùn)練和考察,不能有效地培養(yǎng)也不能提高學(xué)生的程序設(shè)計水平。國際大學(xué)生程序設(shè)計競賽(簡稱ACM) 是由美國計算機學(xué)會主辦的,公認的規(guī)模最大、水平最高的程序設(shè)計競賽。競賽對程序設(shè)計語言和算法的學(xué)習(xí)使用作為整體來進行考察,將ACM 競賽的平臺與程序設(shè)計類課程的教學(xué)結(jié)合起來,提高學(xué)生的程序設(shè)計能力,是一個十分有意義的問題。
1傳統(tǒng)程序設(shè)計類課程教學(xué)中的問題
1.1理論教學(xué)中的問題
高級語言程序設(shè)計(C、C++)一直以來都是計算機相關(guān)專業(yè)的基礎(chǔ)課程,也是公共計算機教學(xué)的主要課程。高級語言程序設(shè)計及其后續(xù)課程(數(shù)據(jù)結(jié)構(gòu),算法分析和設(shè)計)同屬工科課程,實踐性很強,對實踐的要求很高。但是,傳統(tǒng)的課程安排基本上都是以理論教學(xué)為主,只安排了較少的實踐內(nèi)容。以沈陽師范大學(xué)為例,實踐教學(xué)的比例一般為三分之一左右。理論教學(xué)以語法為主線,主要強調(diào)學(xué)生對語法和典型例題的掌握。實踐教學(xué)環(huán)節(jié)主要是模塊化的內(nèi)容,學(xué)生只要掌握一兩個知識點即可完成實驗。最后的考核以筆試為主,實踐所占的比例很小。學(xué)生不需要調(diào)試程序,很多學(xué)生通過死記硬背也能得到比較高的分數(shù)。這種教學(xué)模式無法很好地考察實踐能力,對程序設(shè)計能力的訓(xùn)練和提升也沒有實質(zhì)的幫助,不能激發(fā)學(xué)生的學(xué)習(xí)興趣。
上述情況造成了計算機學(xué)科教學(xué)中的“學(xué)與用”的矛盾。一方面,基礎(chǔ)的程序設(shè)計類課程距離實踐運用相差甚遠,學(xué)生學(xué)了很多基礎(chǔ)語法和典型的數(shù)據(jù)結(jié)構(gòu)及算法,卻不能使用所學(xué)內(nèi)容去解決實際問題,以至于很多學(xué)生學(xué)過了所有課程,考試得了很高的分數(shù),卻不會編寫程序,學(xué)生因此覺得課程沒有用處,不愿意去學(xué)習(xí);另一方面,學(xué)生過分強調(diào)實踐,關(guān)注和學(xué)習(xí)最新的計算機技術(shù)。雖然開始的時候能夠?qū)W到一定的技術(shù),但是隨著學(xué)習(xí)和應(yīng)用的深入,由于缺少基礎(chǔ)課程的支撐,限制了學(xué)生水平的進一步提升。
1.2 實踐教學(xué)中的問題
相比傳統(tǒng)教學(xué),程序設(shè)計類課程的實踐教學(xué)得到了一定重視,但是無論是教學(xué)計劃制訂者,還是教師和學(xué)生,都將實踐環(huán)節(jié)看作是理論教學(xué)的輔助手段。這可以從學(xué)時分配、課程內(nèi)容的順序,以及考核所占的比重中體現(xiàn)出來。
以往的實驗基本是按照章節(jié)組織內(nèi)容,主要考察單個的算法。 學(xué)生一般只關(guān)注對單個算法的理解和使用,對于從整體上掌握概念和應(yīng)用多個算法解決相對復(fù)雜的問題關(guān)注的很少。驗證性實驗占實驗內(nèi)容的很大部分,對于軟件開發(fā)過程中的分析、設(shè)計、實現(xiàn),調(diào)試、測試等環(huán)節(jié)很少涉及。學(xué)生對實驗內(nèi)容沒有整體的把握,綜合設(shè)計能力不能有效地提高[1]。
傳統(tǒng)實踐教學(xué)對學(xué)生實驗課內(nèi)容的檢查存在不足。學(xué)生的程序是否正確,只是學(xué)生使用自己想到的和實驗指導(dǎo)書上提供的數(shù)據(jù)進行測試。實驗指導(dǎo)書不可能提供嚴格的測試數(shù)據(jù)集,學(xué)生自己也往往不能夠全面地考慮問題。并且現(xiàn)在的教學(xué)班人數(shù)普遍較多,教師不可能一一檢查,傳統(tǒng)方式根本無法發(fā)現(xiàn)程序中疏漏的情況和不易察覺的錯誤。由于精力有限,檢查實驗報告時教師很難區(qū)分是學(xué)生抄寫過程中的錯誤,還是程序?qū)崿F(xiàn)過程中的代碼錯誤。另外,由于知識面限制和慣性思維的作用,教師有可能誤判學(xué)生的不同于參考答案的算法。綜上所述,傳統(tǒng)的檢查方式不能有效地發(fā)現(xiàn)程序中的非語法問題。同時,針對少數(shù)知識掌握比較好,實踐能力較強的學(xué)生開發(fā)的不同于參考答案的程序,也不能提供較好的檢查,而且不能對這部分學(xué)生的進一步提升提供幫助[2]。
受困于實踐教學(xué)學(xué)時的限制,實踐教學(xué)過程中很難安排具有難度和綜合性的題目。為了解決這個問題,很多院校設(shè)置了課程設(shè)計環(huán)節(jié)。學(xué)生以分組的形式在要求的時間內(nèi)完成指定的實驗。課程設(shè)計的目的在于綜合所學(xué)知識,提高學(xué)生的分析能力、設(shè)計能力和解決問題的能力,以及培養(yǎng)學(xué)生的團隊精神和相互協(xié)作能力。但是實踐過程中,由于教師精力和學(xué)術(shù)水平的限制,所選的題目與實際聯(lián)系不夠緊密、考核的方式以小組報告和小組答辯為主,不能夠體現(xiàn)團隊分工,常導(dǎo)致學(xué)生對課程設(shè)計缺乏興趣,收效甚微。
2 ACM的特點
ACM是由美國計算機學(xué)會主辦,其宗旨是考察大學(xué)生使用程序設(shè)計語言和算法分析和解決問題的能力。ACM的模式對培養(yǎng)程序設(shè)計能力、團隊精神和創(chuàng)新意識都具有積極的作用。ACM 具有以下特點:
2.1 題目涉及面廣,要求高
ACM題目涉及相當(dāng)廣泛的知識,包括程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、算法、人工智能、離散數(shù)學(xué)等程序設(shè)計類課程的理論和方法。同時,為了提高參賽選手的興趣,與實踐相結(jié)合,ACM的題目注意生活化和趣味化,對數(shù)學(xué)建模、概率論、計算幾何、組合數(shù)學(xué)等一般計算機專業(yè)沒有開設(shè)的課程也有要求。參賽學(xué)生為了在比賽中取得好的成績,需要學(xué)習(xí)和應(yīng)用很多上述課程的知識,使學(xué)生將做題和學(xué)習(xí)結(jié)合在一起,提高了學(xué)生的學(xué)習(xí)興趣,調(diào)動了學(xué)生的積極性。
2.2 對選手的團隊配合能力有很高的要求
ACM競賽中每支參賽隊伍由不超過3名隊員組成,每支隊伍只會分配一臺計算機。這就要求隊員明確每個人的特長,合理地根據(jù)問題進行分工,提高解題的效率。對于沒有明確解題算法的題目,要求隊員討論時有較高的對算法思路的描述能力以及對所提解決方案的合理論證能力。所有這些都要求隊員具有較高的協(xié)作能力。
2.3 要求學(xué)生具有較高的抗壓能力,能夠快速地理解和解決問題
ACM采用5個小時的全封閉現(xiàn)場比賽,根據(jù)每支隊伍解題的多少和總用時的長短排名?,F(xiàn)場比賽要求隊員盡量避免受到其他隊伍的影響,在有限時間內(nèi)盡可能多地解決問題,盡可能快地理解和解決問題。
2.4 采用在線評測系統(tǒng),體現(xiàn)公平公正,要求高質(zhì)量程序
ACM采用在線評測系統(tǒng)對參賽隊伍提交的程序進行評測,由于使用相同配置的服務(wù)器和評測軟件,避免了人工評測可能造成的誤差和不公正。自動評測系統(tǒng)不僅要求選手提交程序的正確性,對程序的運行時間、占用內(nèi)存空間以及輸入輸出格式都有嚴格的限制。這就要求參賽選手既要選對算法,同時要有比較好的程序?qū)崿F(xiàn),既考察了算法分析能力又考察了代碼編寫能力。
3 基于ACM平臺的程序設(shè)計類課程教學(xué)
本文作者2008年開始作為領(lǐng)隊和教練帶領(lǐng)沈陽師范大學(xué)的學(xué)生參加遼寧省和東北地區(qū)的ACM比賽,其間一直在思考如何能夠讓ACM比賽更好地服務(wù)于教學(xué),2009年開始從C和C++語言課程入手,嘗試基于ACM平臺對程序設(shè)計課程的理論與實踐教學(xué)進行教學(xué)改革。
3.1 使用任務(wù)驅(qū)動的教學(xué)方式
改變傳統(tǒng)的以知識點為中心的教學(xué)方式,讓學(xué)生圍繞著一個共同的任務(wù)活動中心,在問題的驅(qū)動下,積極應(yīng)用學(xué)習(xí)資源、自主探索、協(xié)作學(xué)習(xí),在完成任務(wù)的同時,引導(dǎo)學(xué)生進行實踐活動。
算法設(shè)計是計算機解題的核心,要求學(xué)生有較好的數(shù)學(xué)修養(yǎng)和熟練的程序編寫能力。使用數(shù)學(xué)的抽象思維方法進行建模是一個突出問題主要因素的抽象過程。抽象和形式化處理要運用計算思維方式,包括:整體與部分的關(guān)系的認識和處理;分類與分治;目標轉(zhuǎn)化思想;逆向思維;構(gòu)造性思維;猜想與試驗等[3]。上述教學(xué)思想對程序設(shè)計類課程的教學(xué)具有很強的指導(dǎo)作用。
在C++程序設(shè)計課程中,我們改變以往的教學(xué)方式,使用了基于案例的教學(xué)方法。教材中以一個案例為全書的主線,在相關(guān)的語法知識教學(xué)中,我們在每一章都通過案例的一個實現(xiàn)部分和典型的例題引入程序設(shè)計思想和常用程序設(shè)計方法,并給學(xué)生安排了相應(yīng)的任務(wù)[4]。這種新的教學(xué)方式讓學(xué)生從課程的開始就帶著任務(wù)在學(xué)習(xí),嘗試著模仿案例,修改案例,最終對案例提出自己的實現(xiàn)方法。在學(xué)習(xí)程序設(shè)計的過程中,學(xué)生需要大量的程序設(shè)計訓(xùn)練。通過程序設(shè)計訓(xùn)練,學(xué)生掌握了枯燥的語法知識,提高程序設(shè)計的基本能力,理解和掌握了程序設(shè)計的思想和方法。上述的訓(xùn)練會讓學(xué)生獲得解決問題的成就感,激發(fā)學(xué)生的求知欲,培養(yǎng)學(xué)生的自學(xué)能力。
3.2 基于ACM平臺的實踐教學(xué)
基于ACM平臺教學(xué)可以改變傳統(tǒng)的基于模塊的實驗內(nèi)容。傳統(tǒng)的實驗課程按照知識點安排實驗題目,每個知識點的題目對所有學(xué)生都是相同的,很難滿足所有學(xué)生,基礎(chǔ)好的學(xué)生覺得沒有提高,基礎(chǔ)差的學(xué)生又不能按時完成。使用ACM平臺,可以在同一個知識點下設(shè)置多個題目,不同的題目具有不同的難度級別,學(xué)生可以根據(jù)自身的水平選擇合適難度的題目求解。對于部分學(xué)有余力的,基礎(chǔ)較好的同學(xué)可以安排一部分結(jié)合實際的應(yīng)用型題目和解決較大規(guī)模問題的綜合型題目,這樣就可以滿足不同水平學(xué)生的學(xué)習(xí)要求。考核時要求學(xué)生完成一定分數(shù),按照難度級別設(shè)置題目對應(yīng)的分數(shù),可以使每個學(xué)生的訓(xùn)練量接近平均,不會差別太大。
傳統(tǒng)的實驗題目多是語法描述為主,學(xué)生感到枯燥,沒有學(xué)習(xí)興趣。而ACM的題目大多數(shù)都有一個背景描述,題目所有要求的算法隱藏在背景描述中,這就使得題目非常趣味化。學(xué)生要有較好的抽象和分析能力才能夠?qū)⒚枋龅念}目轉(zhuǎn)換成算法,并最終使用程序?qū)崿F(xiàn)。由于題目具有一定的生活背景或歷史背景,提高了學(xué)生的積極性和主動性,可以更好地完成實踐教學(xué)要求。
ACM的在線測評系統(tǒng)使得考核方式更加嚴謹合理。ACM平臺使用的在線測評系統(tǒng),使用黑盒測試的方式對學(xué)生提交的程序進行測試。在線測評系統(tǒng)使用預(yù)先設(shè)置的多組數(shù)據(jù)進行測試,這就避免了前述的學(xué)生自行測試的弊端,可以保證學(xué)生的程序不會遺漏題目中需要特殊處理的情況。同時大幅度地降低了教師檢查的工作量,使教師可以將主要精力放在學(xué)生程序編寫和程序調(diào)試的指導(dǎo)上。傳統(tǒng)實驗課程往往教師都有參考答案,教師根據(jù)參考答案和自己對問題的理解評判學(xué)生程序,給出分數(shù)。程序設(shè)計方法千差萬別,教師不可能掌握所有的風(fēng)格和方法,所以有可能造成誤判。使用黑盒測試可以避免誤判的發(fā)生,保證了評判的客觀性和公正性,鼓勵學(xué)生寫出自己風(fēng)格的程序,開發(fā)出不同的方法解決同一個問題,有利于創(chuàng)造性思維的培養(yǎng)。
ACM平臺延長了實驗時間。傳統(tǒng)的課程安排,實驗課時的設(shè)置普遍偏少,學(xué)生缺少上機編寫代碼的機會。實驗課程之外,學(xué)生編寫程序又不能得到很好的指導(dǎo)和測試。使用ACM平臺,學(xué)生可以在任何時間在線做題、提交程序,測評系統(tǒng)驗證程序的正確性,并返回給用戶程序的運行時間和內(nèi)存占用情況。學(xué)生可查看其他人提交的該題目代碼的運行情況,比較自己代碼的運行情況和其他人提交程序的不同。系統(tǒng)還提供了做題數(shù)量的排名情況。以上兩點有助于激發(fā)學(xué)生的編碼熱情。在線測評系統(tǒng)除了具有上述功能外,還具有在線討論功能,學(xué)生可以針對某一個題目進行討論,也可以針對某一個算法進行討論。學(xué)生通過相互間的討論,可以學(xué)習(xí)算法、編程技巧,同時也鍛煉了學(xué)生的表達和溝通能力,使學(xué)生的學(xué)習(xí)時間延長到了課外。
ACM平臺可以提高學(xué)生的協(xié)作能力,提高團隊精神。實驗課程要求的是學(xué)生個人編寫代碼的能力,不能提高學(xué)生的溝通和協(xié)作能力。在課程設(shè)計環(huán)節(jié),可以由教師根據(jù)學(xué)生的水平及特長分組,根據(jù)隊伍情況安排題目,要求明確分工,分工到每個人。每個學(xué)生按要求完成自己的內(nèi)容,并且要集體討論,交流每個人所學(xué)的知識,共同完成小組任務(wù)。課程設(shè)計要求每個組員提交自己的報告,小組提交總體的報告。這種相互合作、共同負責(zé)、共同承擔(dān)的團隊精神和相互協(xié)作能力對學(xué)生從事研究和開發(fā)工作都會大有益處。
4 結(jié)束語
本文作者通過將ACM平臺和程序設(shè)計課程的理論教學(xué)與實踐教學(xué)相結(jié)合實施教學(xué)改革,顯著地提高了學(xué)生的程序設(shè)計能力和解題能力,提升了學(xué)生的學(xué)習(xí)熱情,取得了一定的效果。一部分學(xué)習(xí)優(yōu)秀的同學(xué)代表沈陽師范大學(xué)參加了多次ACM比賽,取得了非常好的成績。但是,以上的探索還有待進一步的深入,程序設(shè)計類課程需要進一步同實踐相結(jié)合,才能為國家和社會培養(yǎng)出高水平和高素質(zhì)的計算機人才。
參考文獻
[1] 張潤杰,劉維民,郭錦平.基于“案例”的探究式實驗教學(xué)[J].實驗技術(shù)與管理,2006,23(6):96-98.
[2] 郭嵩山,王磊,張子臻.ACM/ICPC 與創(chuàng)新型IT 人才的培養(yǎng)[J].實驗室研究與探索,2007,26(12):181-186.
[3] 吳文虎,王建德.程序設(shè)計中常用的計算思維方式[M].北京: 中國鐵道出版.2009.
[4] 王學(xué)穎,李航,張燕麗.C++程序設(shè)計案例教程[M].北京:北京科學(xué)出版社.2010.
Reform of Programming Course Teaching Based on ACM Platform
Mu Baoliang,Li Jin,Han Xuefeng
(College of Software Shenyang Normal University,Shenyang Liaoning 110034)
Abstract:After analyzing problem and its reason which exist in teaching of programming courses, we discuss the characteristics of ACM platform, then propose several theoretical and experimental teaching methods based on ACM platform, which makes some effects in practice.
Key Words:ACM;Teaching reform;Programming course