陳英 江智康 章文貴 裴威鳳
摘? 要:針對目前算法設計與分析課程教學中存在的不足,文章采用以賽勵教的教學模式對該門課程的課堂進行改革,參加各類程序設計類競賽達到激活課堂的目的,同時促進和加強學生算法設計、程序編寫、教育的實踐性和創(chuàng)新性。
關鍵詞:算法設計與分析;以賽勵教;教學模式
中圖分類號:G642 文獻標志碼:A 文章編號:2096-000X(2020)06-0077-03
Abstract: Aiming at the shortcomings in the current algorithm design and analysis course teaching, this article adopts the teaching model of competition teaching to reform the course, participate in various programming competitions to achieve the purpose of activating the classroom, and at the same time promote and strengthen the student algorithm design, programming, practicality and innovation of the education.
Keywords: algorithm design and programming; promote teaching through competition; teaching mode
一、概述
算法設計與分析是四年制計算機科學與技術、軟件工程、物聯(lián)網(wǎng)工程等相關專業(yè)的核心課程。這門課程的主要目的不僅是講授計算領域中不同問題的標準算法,更重要的是分析其算法復雜度,并且在諸多可行算法中選擇一種時間或者空間效率最高的方法。David Harel在“Algorithmics:the Spirit of Computing”中這樣描述算法:算法是計算機科學研究的重要分支,更是支撐計算機科學大廈的核心和基石。算法不僅在計算機領域,而且在其它理工及社會科學領域都有極其廣泛的應用,任何問題的求解,都離不開算法設計。
二、目前課堂中存在的不足
在當前的教學過程中,仍然存在一些不足:(1)在課堂的教學組織上,多年來一直沿用傳統(tǒng)的教學模式,教學內(nèi)容選擇和組織不合理,理論內(nèi)容偏多,過少甚至缺失算法編程實踐。(2)學生對算法地位認識不清,學生學習的目的不明晰,興趣也不是很強,很多學生剛學過數(shù)據(jù)結(jié)構(gòu),翻開算法教材,有似曾相識的感覺。教材中確實有部分章節(jié)如數(shù)據(jù)結(jié)構(gòu),排序算法,圖的遍歷等取材于數(shù)據(jù)結(jié)構(gòu)課程。因此會有些學生學習熱情不高,認為是在學習重復的課程。(3)學生雖然在理論學習過程中掌握了一系列算法的基本設計思想,但是學生很難理解各種方法的具體應用,這就造成了學生難以“學以致用”的現(xiàn)象,且算法實踐缺乏方法論的指導。(4)本門課程的考試形式也比較單一,偏重于結(jié)果考核而缺乏對算法學習過程的評價,主要采用“平時成績+考試成績”相結(jié)合的考核方式。從整體看來,在這種學習模式下,能夠主動學習且真正理解算法設計思想的學生較少。(5)現(xiàn)有的算法設計與分析的教學模式無助于提高學生的團隊合作能力。
已有高校將競賽模式引入程序設計類課程的教學中,并取得不錯的效果。何克晶等[1]基于翻轉(zhuǎn)課堂的研討式教學結(jié)合的理論教學、ACM-ICPC競賽和在線測評系統(tǒng)結(jié)合的實驗教學對算法設計與分析課程進行改革探索。李華等[2]提出基于ACM-ICPC的算法設計與分析課程改革,并建立適應長春理工大學學生的測評系統(tǒng)和習題庫。劉曉璐[3]提出將ACM-ICPC競賽模式引入算法設計與分析課程的實踐教學中。李勇[4]將實踐性教學方法應用于算法設計與分析課程。王偉嘉等[5]結(jié)合競賽歷年和資源去豐富課堂內(nèi)容、提高教學效率、提升學生知識運用能力。
因此,以比賽帶動激勵算法設計與分析課程的教學改革將會取得不錯的效果。
三、改革的措施
(一)理論教學的改革
1. 突出該門課程學習的重要性:通過預先為學生分析本科畢業(yè)后的兩種主流去向(考研和工作)來突出該課程學習的必要性,讓學生知道,不管將來是考研或者是工作,具備良好的算法設計與分析能力有助于其得到更好的發(fā)展。
2. 優(yōu)化教學內(nèi)容:教學內(nèi)容以教材為基礎,以具體的問題和應用為驅(qū)動,引導學生深入分析問題,并設計優(yōu)秀的算法,培養(yǎng)學生的創(chuàng)新能力。
3. 改革課堂教學模式:采用課堂講授與研討式課堂討論結(jié)合的理論教學形式,除課堂講授外,部分學時基于翻轉(zhuǎn)課堂的模式進行研討式教學。給學生提供主題、視頻、在線課程及相關資料,讓學生組成小組,根據(jù)具體的問題進行調(diào)研和討論,教師進行啟發(fā)式引導。通過讓學生進行研討匯報,實踐能力得到提升,表達能力得到鍛煉,思維更加縝密,同時團隊協(xié)作精神得到加強。通過在理論教學中推動學生課后的實踐活動,可以與傳統(tǒng)的講授型教學模式進行良好互補。
(二)實踐教學的改革
要真正培養(yǎng)學生的算法設計、分析和創(chuàng)新能力,只依靠課內(nèi)學時是遠遠不夠的,還要將實驗環(huán)節(jié)與各種程序設計大賽相結(jié)合,鼓勵學生積極參與相關比賽的訓練或?qū)嵺`班。實踐班將堅持以下幾個原則:(1)“以老帶新”的梯隊建設原則;(2)“以賽代練” 的常態(tài)化訓練原則;(3)“線上OJ測試,線下講題消化”的雙驅(qū)動原則;(4)“以點帶面”的知識點講解原則;(5)“基于統(tǒng)計數(shù)據(jù)分析”的客觀選拔原則;(6)“以書面規(guī)則明確比賽紀律”的約束原則;(7)“以ACM-ICPC為核心,其它比賽多路突進”的百花齊放的競賽原則。具體的說明如下:
(1)“以老帶新”的梯隊建設原則:團隊的建設應該是形成紡錘形,即“中間大、兩頭小”,以大二的學生為主,大三和大一的學生為輔,每一年完成正常的新老交替,完成團隊的梯隊建設,在補充新生力量的同時,歡送老隊員的離隊。從歷年的情況分析:三個年級學生的狀態(tài)分別為:a.經(jīng)過一年多的訓練,大二的學生知識儲備處于較高的水平,個人對競賽的認識和參加競賽的意愿也處于較好的程度;b.大三同學雖然水平相對最高,由于其面臨考研、工作實習的選擇,心思已經(jīng)不完全放在競賽上,但是其知識水平和比賽經(jīng)驗可以給低年級的同學帶來比較大的幫助;c.大一的同學競賽熱情高,但是由于其知識儲備較弱,并不具備獨立參加比賽的能力,可以由高年級的學生帶著一起參加比賽。
(2)“以賽代練”的常態(tài)化訓練原則:目前,由于各個省、各個高校都非常重視程序設計類的比賽,所以各種類型的區(qū)域賽、省賽、校賽比較多,比賽主辦方一般會同步開放網(wǎng)絡賽,或者事后掛在各個OJ(Online Judge)平臺上作為重現(xiàn)賽,對于這些比賽,要求隊員都積極參加,并且嚴格以正式比賽的形式進行,讓各位同學在平時的訓練中感受正式比賽的壓力,以在正式的比賽中取得好的成績。
(3)“線上OJ測試,線下講題消化”的雙驅(qū)動原則:充分利用已有的Online Judge平臺,例如杭州電子科技大學的OJ(http://acm.hdu.edu.cn/)、牛客網(wǎng)(https://www.nowcoder.com/)等平臺所提供的高質(zhì)量的題目和自動判題功能,讓學生能夠通過隨時隨地做題、訓練。對于在做題中出現(xiàn)的共性問題,實踐班將采用面對面的方式進行溝通交流和講解。
(4)“以點帶面”的知識點講解原則:程序設計類比賽所涉及的知識廣且深,如果面面俱到,一則時間不允許,二則學生會有坐等靠的消極思想,對整個比賽產(chǎn)生不利的影響。實踐班將采取講透一個知識點,帶通系列知識面的做法,以讓學生養(yǎng)成自主思考的習慣,這樣也切合比賽的特點。
(5)“基于統(tǒng)計數(shù)據(jù)分析”的客觀選拔原則:實踐班將對每個學生每一次訓練、每一次比賽的原始數(shù)據(jù)進行統(tǒng)計,在此基礎上進一步進行數(shù)據(jù)的挖掘和分析,以盡可能客觀地評估每一位學生的加權(quán)成績,并以此成績作為其能否參加正式比賽的依據(jù)。
(6)“以書面規(guī)則明確比賽紀律”的約束原則:程序設計類比賽的一個亮點是“公平性”,而賽后進行代碼查重是一個必經(jīng)的環(huán)節(jié),如果某兩個學生的代碼出現(xiàn)雷同的情況,則該學生所在學校的所有學生都將取消比賽成績。為了避免出現(xiàn)這種情況,實踐班將把比賽規(guī)則形成書面的文件,發(fā)布在群文件中,并且一次次要求學生嚴格遵守,以做到零查重的情況。
(7)“以ACM-ICPC為核心,其它比賽多路突進”的百花齊放的競賽原則:堅持以參與學校/學生最多、含金量最高、獲獎難度最大的ACM-ICPC以核心抓手,CCPC、CCCC-GPLT、藍橋杯大賽、CCF-CCSP、江西省大學生信息技術知識大賽等為輔助,形成有所側(cè)重,但相互互補的局面。
四、改革效果的分析
1. 通過教學環(huán)節(jié)的改革,使得學生能夠充分的參與到課堂教學過程中,能夠從本質(zhì)上活躍課堂的教學氛圍。同時,教學過程中引入數(shù)學邏輯思維能力訓練,就能夠?qū)⑾鄬α闵⒌闹R點通過邏輯思維將其串起來,讓學生充分的融入課堂,深入理解算法思想和整體的學習脈絡,也鍛煉了學生的表達溝通能力。
2. 通過實踐環(huán)節(jié)的改革,學生能夠切實體會到算法如何應用到實際問題中去,不僅能夠培養(yǎng)學生的實際動手能力,還能增強學生解決問題的實戰(zhàn)能力。
3. 通過考核環(huán)節(jié)的改革,使得學生不再是按照以往的依賴老師在考前劃重點以及講解往年試卷的形式進行備考,而是摒棄了這種學習方式,改“背得越多分越高”的模式為“做得越多越好分越高”的考核模式,從而使得學生的學習目的性更強,也能夠使得學生更好的掌握數(shù)據(jù)結(jié)構(gòu)的相關理論和方法。2017-2018學年和2018-2019學年的“算法設計與分析”這門課程的考試試卷均為實際問題的算法設計主觀題,沒有選擇、填空等客觀題。兩學年作者所授課班級學生人數(shù)分別為95人和103人,在綜合考慮并持平難度的情況下,考試成績結(jié)果分析的對比如圖1所示,從該圖中可以看出,不管是平均分還是平均方差,2018-2019學年的結(jié)果均要優(yōu)于2017-2018學年的結(jié)果。
4. 通過比賽的激勵,使得更多的學生參與比賽,獲得與其它學校優(yōu)秀學生同臺競技的機會,通過參賽學生的示范作用,有效地帶動了學院、學校的學風建設。同時,學生在比賽過程中所取得的成績,將有效地增強學生的自信心。分別以2018年和2019年這兩年的1-9月份作為對比的時間節(jié)點,圖2是我院學生在這期間參加國際大學生程序設計大賽、中國大學生程序設計大賽、大學生程序設計天梯賽、藍橋杯等程序設計類比賽所獲獎的對比圖。從該圖中可以看出,不管是獲獎的數(shù)量,還是在獲獎的質(zhì)量上,2019年的優(yōu)勢都是非常明顯的。同時,圖3是這兩個期間參與競賽的學生人次對比圖,從該圖中可以看出,2019年參與競賽的學生人數(shù)明顯均多于2018年同期。
5. 有利于培養(yǎng)學生的團隊精神:如今的IT行業(yè),無論是軟件開發(fā)還是軟件測試領域,其運作過程都是采用團隊合作的方式,而學生在高校學習過程中,往往得不到團隊合作的鍛煉,即使有的課程進行了分組實驗的方式,也經(jīng)常會出現(xiàn)一組同學少數(shù)人做事,而多數(shù)人觀望甚至置之不理的情況,基于此,算法設計與分析課程教學采用分組、團隊競賽等手段保證每一名同學都能夠切實參與到學習、競賽過程中,并在團隊中找到自己的位置、認清自己的角色,從而,以切實可行的方式培養(yǎng)學生團隊合作的意識和能力。
五、結(jié)束語
通過以賽激勵的教學模式,學生可以掌握算法設計與分析的本質(zhì),并運用到實際問題的解決中去。同時,根據(jù)不同程序設計類競賽類競賽的特點,使學生在課外競賽上找準目標,更好地增強學生所學知識的廣度和深度,切實培養(yǎng)學生的創(chuàng)造力、團隊合作精神以及在軟件程序開發(fā)過程中的創(chuàng)新意識,有效地提高算法設計與分析課程的教學效果。
參考文獻:
[1]何克晶,張星明,鄭運平.算法設計與分析課程全方位實踐教學改革探索[J].計算機教育,2017(2):45-49
[2]李華,趙建平,李奇,等.基于ACM-ICPC的算法設計與分析課程改革[J].計算機教育,2013(7):88-91.
[3]劉曉璐.基于ACM-ICPC模式的算法分析與設計課程的建設與實踐[J].中國教育信息化,2015(5):65-67.
[4]李勇.基于實踐性教學的《算法設計與分析》教學研究[J].曲靖師范學院學報.2015,34(6):52-54.
[5]王偉嘉,張洪萍,寧亞輝,等.關于《數(shù)據(jù)結(jié)構(gòu)》課程與ACM-ICPC競賽結(jié)合的探討[J].計算機工程與科學,2014,36(A1):257-259.