劉偉 黃辛迪
摘要:學科競賽是培養(yǎng)和提升計算機專業(yè)學生實踐編程能力和創(chuàng)新能力的重要途徑之一。結合相關學科競賽,構建計算機相關專業(yè)程序設計類課程群,分析知識的關聯(lián)性和層次性,優(yōu)化課程群的整體結構,搭建在線訓練平臺,并合理引入一些競賽題作為教學實例和課后習題,提高學生的學習興趣,取得了良好的教學效果。
關鍵詞:學科競賽;程序設計;課程群;教學改革;課程體系
中圖分類號:G642? ? ? ? 文獻標識碼:A? ? ? ? 文章編號:1009-3044(2018)31-0180-02
1 引言
學科競賽是培養(yǎng)和提升大學生綜合能力的重要手段之一,也是促進教育教學改革的重要途徑[1]。對于計算機等工科專業(yè)而言,參與學科競賽有助于提高學生的工程實踐能力和創(chuàng)新創(chuàng)業(yè)能力,對學生深造和就業(yè)具有積極的作用,為此,學科競賽也越來越受到高校師生的關注和重視,學科競賽的參與面及參賽成績也成為評估高校本科教學水平和質量的一個重要指標[2]。學科競賽對于促進教學改革和專業(yè)建設也具有重要意義,將學科競賽與課程建設相結合,優(yōu)化和完善現(xiàn)有課程體系,有助于提升人才培養(yǎng)質量。
2 結合學科競賽的課程群建設
課程群是由多門彼此獨立但又關系密切的課程所組成的一個集合,是為實現(xiàn)某一培養(yǎng)目標由多門性質和內(nèi)容相關或相近的子課程構成的一個課程體系[3]。結合學科競賽,對計算機等相關專業(yè)的程序設計類課程進行合理的優(yōu)化和改革,分析知識點的關聯(lián)性和層次性,構建程序設計類課程群,推動教育教學改革[4]。
湖南中醫(yī)藥大學目前有三個計算機信息類專業(yè),分別是計算機科學與技術、信息管理與信息系統(tǒng)、醫(yī)學信息工程,基于這三個專業(yè)的培養(yǎng)方案,選取部分核心課程,構建“程序設計類課程群”,核心課程包括《C語言程序設計》《面向對象技術(Java)》《數(shù)據(jù)結構》和《算法分析與設計》,我們主要參加的程序設計類相關學科競賽包括中國高校計算機大賽-團體程序設計天梯賽、藍橋杯全國軟件和信息技術專業(yè)人才大賽、CCPC中國大學生程序設計競賽、ACM-ICPC國際大學生程序設計競賽亞洲區(qū)域賽、全國中醫(yī)藥院校大學生程序設計競賽、湖南省大學生計算機程序設計競賽(程序設計類)等[5]。
程序設計類學科競賽涉及多門程序設計類課程所教授的內(nèi)容,例如編程語言基礎知識、字符串的輸入和處理、常用數(shù)據(jù)結構、經(jīng)典算法、數(shù)論、圖論等知識,很多知識都融合在《C語言程序設計》《面向對象技術(Java)》《數(shù)據(jù)結構》和《算法分析與設計》等課程中。通過構建程序設計類課程群,對每門課程中每個教學單元的教學內(nèi)容和教學目標進行剖析,從課程群的角度出發(fā),分析知識的關聯(lián)性和層次性,避免部分內(nèi)容在多門課程中重復講授,注意課程內(nèi)容的銜接和難度的遞進關系?!禖語言程序設計》和《面向對象技術(Java)》要求學生打好編程基礎、復習一些簡單的數(shù)學知識、訓練邏輯思維能力,《數(shù)據(jù)結構》要求學生掌握常用的數(shù)據(jù)結構和相關算法并利用這些數(shù)據(jù)結構解決實際問題,《算法分析與設計》要求學生掌握分治算法、貪心算法、動態(tài)規(guī)劃、回溯法和分支限界法等常用算法并學會靈活使用這些算法解決實際問題。這些課程的教學內(nèi)容全部是目前程序設計類學科競賽的核心命題范圍,大部分的賽題均圍繞這些知識點來命題。當然,也有部分賽題涉及《高等數(shù)學》《數(shù)值分析》《組合數(shù)學》《數(shù)論》《計算幾何》等課程的內(nèi)容。因此,結合相關程序設計類學科競賽來促進和檢驗教學效果,以學促賽,以賽助學,專業(yè)課程學習和學科競賽相輔相成,相得益彰。
為了更好地結合學科競賽開展課程教學工作和課程群建設,我們參照目前ACM大學生程序設計競賽的訓練和比賽模式,參考學科競賽模式和兄弟院校的成功經(jīng)驗,搭建了湖南中醫(yī)藥大學OJ(Online Judge,在線判題平臺),申請了校級二級域名http://acm.hnucm.edu.cn/,學生可以在學校機房或其他地點利用該平臺做編程實驗和練習。目前該平臺已有《C語言程序設計》練習題200多道,這些題目也可以作為《面向對象技術(Java)》的練習題。此外,目前平臺還有《數(shù)據(jù)結構》練習題近100道,《算法分析與設計》練習題50多道,練習題庫還在不斷建設和完善中。通過引入OJ系統(tǒng),該系統(tǒng)自動對學生提交的代碼進行在線判斷,自動提示所寫程序是否正確。學生在該系統(tǒng)上以學號和真實姓名注冊,任課教師可以隨時跟蹤和了解學生的做題情況。由于OJ平臺自帶自動判題功能,無需人工批改,可極大降低教師的工作量,而且教師可以通過查重功能了解學生的代碼重復率,了解學生是否存在抄襲作業(yè)的現(xiàn)象。在后續(xù)我們還將對已有OJ系統(tǒng)進行進一步完善和擴展,可以分析學生對各個知識點的掌握情況并提供智能推薦功能,為學生自動推薦練習題,完善學生的知識結構體系。除了使用我們自己搭建的OJ系統(tǒng)外,在《數(shù)據(jù)結構》課程教學中還使用了南陽理工學院的OJ(http://acm.nyist.edu.cn/JudgeOnline),在《算法分析與設計》課程教學中還使用了國內(nèi)知名度最大的兩個OJ系統(tǒng),分別是北京大學的POJ(http://poj.org/)和杭州電子科技大學HDU(http://acm.hdu.edu.cn/)[6]。目前很多企業(yè)的招聘筆試和高校的研究生復試也采用類似OJ系統(tǒng)在線做題和判題,因此,在OJ系統(tǒng)上做題可以讓學生提前為后續(xù)求職和深造的在線筆試熱身。
此外,我們結合課程知識點選取部分賽題作為課程練習題和考試題。通過分析歷屆湖南省大學生計算機程序設計競賽(程序設計類)、全國中醫(yī)藥院校大學生程序設計競賽、藍橋杯全國軟件和信息技術專業(yè)人才大賽等競賽的真題,選取一部分難度合適的題目作為日常教學的案例或者練習題。以湖南省大學生計算機程序設計競賽為例,在講授《C語言程序設計》的“C語言表達式和控制流程”時要求學生完成第六屆競賽A題“汽水瓶”和B題“弟弟的作業(yè)”、第七屆競賽B題“報數(shù)游戲”、第八屆競賽A題“三家人”、第九屆競賽J題“搞笑版費馬大定理”、第十一屆競賽B題“大還是小?”和J題“又一道簡單題”等賽題,這些題目難度較小,在程序設計競賽中屬于簡答題,部分賽題既考查了學生的編程基礎又考查了學生的思維能力,是非常好的編程基礎訓練題;在講授“字符和字符串處理”時要求學生完成第六屆競賽C題“數(shù)字整除”、第七屆競賽A題“一二三”、第八屆競賽B題“機器人的指令”、第十屆競賽C題“酷酷的單詞”和第十一屆競賽H題“聊天止于呵呵”等賽題;在講授“數(shù)組”時要求學生完成第九屆競賽C題“字符識別?”。在《數(shù)據(jù)結構》課程中講授最短路徑Floyd算法時引入第六屆競賽的G題“Repairing a Road”,講授最短路徑Dijkstra算法時,引入第十一屆競賽的E題“簡單的圖論問題?”詳細講解Dijkstra算法的應用,結合第八屆競賽 F題“Kingdoms”講解最小生成樹算法。程序設計競賽中其中一個重要的命題領域是計算機算法的掌握與運用,因此,在《算法分析與設計》課程中可以將歷屆競賽中部分相關賽題作為課堂講解實例或課后練習題,例如結合第七屆競賽F題“打怪升級”和第八屆競賽J題“病毒”等賽題講解動態(tài)規(guī)劃算法,結合第八屆競賽H題“Tin Cutter II”和第十屆競賽K題“Kick the ball!”等講解搜索算法中的回溯法,結合第十屆競賽I題“殘缺的棋盤”等講解搜索算法中的分支限界法。大部分賽題都基于一些具體問題命制,題目質量較高,是非常好的教學實例和課后習題。在程序設計類課程的教學過程中引入這些競賽真題,讓學生了解競賽的形式和命題風格,有助于競賽的準備,同時也可以更好地為教師的教學工作服務。
課程群的建設和優(yōu)化還有助于更好地組建學科競賽指導教師團隊,相關課程的任課教師可以從不同角度對參賽學生及團隊進行指導。在程序設計類學科競賽的賽題中,既包含一些簡單的字符串處理和基礎數(shù)學題,也會有一些考查棧、隊列、二叉樹、圖等的數(shù)據(jù)結構題,還會有一些考查分治算法、動態(tài)規(guī)劃、貪心算法、回溯法和分支限界法等經(jīng)典算法的賽題。因此,對于程序設計類競賽而言,在平時的集訓和賽前輔導中,承擔《C語言程序設計》《數(shù)據(jù)結構》《算法分析與設計》等課程教學任務的教師可以各自負責部分所擅長內(nèi)容的競賽輔導工作,充分利用當前已有的OJ系統(tǒng),指導學生參加學科競賽并取得好成績,實現(xiàn)以競賽促進教學,通過教學反哺競賽的目的。
3 實施效果
通過學科競賽促進計算機專業(yè)程序設計類課程建設取得了一系列成果,《C語言程序設計》《面向對象技術(Java)》、《數(shù)據(jù)結構》和《算法分析與設計》等課程教學質量和學生整體成績有所提升,學生的教學評價滿意度同時也得到提升。
近三年來,湖南中醫(yī)藥大學學生參加中國高校計算機大賽-團體程序設計天梯賽、藍橋杯全國軟件和信息技術專業(yè)人才大賽、CCPC中國大學生程序設計競賽、ACM-ICPC國際大學生程序設計競賽亞洲區(qū)域賽、全國中醫(yī)藥院校大學生程序設計競賽、湖南省大學生計算機程序設計競賽(程序設計類)等學科競賽取得了一系列突破,多次獲得省部級及國家級獎項。例如,湖南中醫(yī)藥大學代表隊在2018年“中國高校計算機大賽-團體程序設計天梯賽”全國總決賽中獲得三等獎和湖南省二等獎;2018年獲中國大學生程序設計競賽女生專場銀獎一項和中國大學生程序設計競賽全國邀請賽(湖南)銅獎兩項;近三年來有40多人次獲得藍橋杯全國軟件和信息技術專業(yè)人才大賽湖南賽區(qū)C++和Java軟件開發(fā)大學組三等獎及以上,多名同學獲得湖南賽區(qū)一等獎并晉級全國總決賽,在全國總決賽中獲得二等獎和三等獎多項;近三年在湖南省大學生計算機程序設計競賽中獲得三等獎及以上10多項,獲得全國中醫(yī)藥院校大學生程序設計競賽一等獎和二等獎共7項。
學生的編程能力和動手實踐能力有明顯增強,在參賽學生中,多名學生保送或者考取哈爾濱工業(yè)大學、中南大學、湖南大學等知名高校碩士研究生,部分學生就職于百度、騰訊等知名企業(yè),人才培養(yǎng)質量得以顯著提升。
4 結語
以學科競賽促進課程群建設,以課程群促進學科競賽的開展,相輔相成,相互促進,取得了良好的效果。通過學科競賽,對《C語言程序設計》《面向對象技術(Java)》《數(shù)據(jù)結構》和《算法分析與設計》等課程的教學目標、教學內(nèi)容、重難點等進行重新梳理,構建更為科學合理的程序設計類課程群,并在課程教學過程中引入競賽所采用的OJ在線判題平臺,提高學生的學習興趣,教師可以更好地跟蹤和監(jiān)控學生的學習和練習情況。在教學過程中結合歷屆相關賽事的真題作為講解實例和課后練習,讓學生可以了解競賽的形式和內(nèi)容。結合學科競賽推進計算機專業(yè)程序設計類課程群建設,可以更好地優(yōu)化現(xiàn)有課程體系,增強學生的動手實踐能力和問題解決能力,有助于提升教學效果和人才培養(yǎng)質量。
在今后的工作中,將進一步完善現(xiàn)有的賽題庫和練習題庫,優(yōu)化和完善現(xiàn)有OJ在線判題平臺的功能,增加習題推薦和學生知識結構分析評估等模塊,完善現(xiàn)有的教學大綱和培養(yǎng)方案,更好地發(fā)揮學科競賽在人才培養(yǎng)中的作用,促進新工科建設。
參考文獻:
[1] 王曉勇, 俞松坤. 以學科競賽引領創(chuàng)新人才培養(yǎng)[J]. 中國大學教學, 2007(12): 59-60.
[2] 趙春魚, 吳英策, 魏志淵, 等. 高校學科競賽: 現(xiàn)狀、問題與治理優(yōu)化——基于2012-2016年本科院校學科競賽評估的數(shù)據(jù)分析[J]. 中國高教研究, 2018(2): 69-74.
[3] 龍春陽. 課程群建設:高校課程教學改革的路徑選擇[J]. 現(xiàn)代教育科學, 2010(3):139-141.
[4] 韓郁蔥, 宗瑜, 陳家俊. 應用型本科計算機專業(yè)課程群建設研究[J]. 合肥學院學報(綜合版), 2012, 22(4):57-59.
[5] 劉偉, 丁長松, 黃辛迪. 基于學科競賽的計算機類課程實踐教學改革探索與研究[J]. 時代教育, 2017,(4): 63-65.
[6] 劉偉, 丁長松. “算法分析與設計”課程教學改革與實踐[J]. 工業(yè)和信息化教育, 2017(3):62-65.