張立敏 吳濤 吳東
摘 要:地方高校計算機專業(yè)學生的理論基礎和專業(yè)素養(yǎng)相對薄弱,程序設計能力亟待提高。作者針對程序設計類課程教學的特點和存在的問題,基于問卷調查分析了當前學生程序設計現(xiàn)狀,通過引入競賽式教學改革教學模式、教學方法、學習方法和考核方法。實踐表明,競賽式教學的引入在教學實踐中取得了一定的成效,有利于提高學生編程能力和教學質量。
關鍵詞:地方高校;程序設計;現(xiàn)狀分析;對策研究;競賽式教學
中圖分類號:G642.3 文獻標志碼:A 文章編號:1673-8454(2018)08-0076-04
我國目前已擁有了大量的初級計算機人才資源,但重心偏低,特別是高校畢業(yè)生,缺乏創(chuàng)新能力和實踐能力,高素質軟件人才的缺乏已成為制約我國軟件產(chǎn)業(yè)發(fā)展的瓶頸[1]。當前,各大高校計算機相關專業(yè)學歷教育周期長、教學內容更新緩慢、教學方式與考核方式單一,應用實踐偏少,就業(yè)壓力相對較大,只有深入開展人才培養(yǎng)模式改革,并進行深度的專業(yè)結構調整,才能適應市場需求[2]。在本科應用型人才培養(yǎng)質量越來越受關注的今天,各高校在人才培養(yǎng)模式方面,尤其是教學模式和教學方法方面開展了大量的研究工作[3],同時更加注重學習方式和考核方式的改革與創(chuàng)新。
計算機教學改革離不開程序設計類課程的改革,程序設計不可避免的與各類競賽相關聯(lián),其中ACM-ICPC(ACM International Collegiate Programming Contest,國際大學生程序設計競賽)和全國軟件專業(yè)人才設計與創(chuàng)業(yè)大賽與課程教學的結合最為緊密。以ACM-ICPC為基礎的教學改革研究已逐步深入,主要集中在課程教學中如何引入ACM-ICPC[4-5],如何構建基于競賽的實驗教學新平臺[6],以及如何實施競教結合[7]三個方面。
程序設計競賽涉及的課程不僅僅包括C語言和數(shù)據(jù)結構,還包括JAVA程序設計、ACM程序設計、算法設計與分析等,覆蓋了計算機專業(yè)主要的必修課程,競賽式教學所體現(xiàn)的競教結合的教學思路與教育部大力推進加強實驗、實踐教學改革的思路相輔相成,程序設計競賽與課程教學的結合在培養(yǎng)學生基本素質方面具有較好的教學效果[8],能夠有效的促進信息學科創(chuàng)新型人才的培養(yǎng)[9]。
一、程序設計能力現(xiàn)狀分析
不同地域、不同類型的高校之間,學生的專業(yè)素養(yǎng)差別很大,尤其是地方高校,學生理論基礎薄弱,編程能力亟待提高。為了能夠準確地了解地方高校大學生的程序設計能力狀況,針對嶺南師范學院計算機專業(yè)3個年級共584名在校大學本科生發(fā)放《程序設計能力調查問卷》,問卷基于目的性、邏輯性、通俗性和便于處理性原則,主體設計包括是否式、選擇式和評判式三種類型,按照一般調查問卷的基本步驟和原則進行,共回收有效問卷575份,有效回收率為98.46%,符合抽樣調查對回收率的要求。
1.學生缺乏編程興趣
興趣是最好的老師,學生對程序設計的喜好程度會直接影響對相關課程的喜好程度,進而影響學習效率和學習效果。在575份有效問卷中,僅362人選擇喜歡編程,占總人數(shù)的62.96%,將近4成學生不喜歡編程,究其原因,地方性本科院校招生時的第一志愿錄取率不高是關鍵因素之一。另一方面,師范類院校男女生比例較工科性專業(yè)院校而言,女生比例相對偏高,也在很大程序上影響了整體對程序設計的興趣。在選擇喜歡編程的362人中,男生241人,女生121人,不喜歡編程的211人中,男生92人,女生119人,男女差異十分明顯,突顯了工科專業(yè)以男生為主的特點。進一步按不同專業(yè)進行對比分析,結果如表1所示。
總體上,喜歡程序設計的學生略多于不喜歡的,其中,軟件專業(yè)接近7成的學生選擇喜歡程序設計,明顯高于其他專業(yè)。
2.課堂教學引導缺失
有人說,程序設計能力的提高主要就是“編程、編程、再編程”,可見勤于練習對程序設計的學習是多么的重要。而實際情況是學生的主觀能動性和自學能力有限,課堂教學引導缺失,課后練習目的性和方向性不明,積極性不高。程序設計類課程教學的理論與實踐學時有限,教學重點集中在語法知識點的講解上,學生對課外練習環(huán)節(jié)重視不夠,自主學習意識不強,從而導致知識點的理解不夠深入。
如表2所示,學生在遇到問題時不善于找教師尋求幫助,而是自己嘗試解決,以及和同學協(xié)同解決,教師的作用在不斷弱化當中。問卷中有一項關于知識獲取途徑的問題,統(tǒng)計結果如表3所示。
我們發(fā)現(xiàn),目前學生掌握算法知識的主要途徑是自學,在網(wǎng)絡上我們可以找到大量的有關程序設計的討論貼,這些討論帖的存在說明學生自組織學習的能力在不斷強化,教師的教學功能在不斷的弱化,此時,課堂教學引導顯得尤其重要。
3.自主學習意識不強
程序設計最初階段的理論學習是必不可少的,但僅僅依靠課堂學習就希望達到掌握程序設計是不現(xiàn)實的,學生必須學會獨立思考,培養(yǎng)主動學習的意識。調查問卷中有1項關于愿意花費多少時間去學習程序設計的問題,33%的學生每天僅愿意花費不足半小時用于編程練習,僅有13%的學生每天愿意花費超過2小時用于編程。如圖1所示,大部分學生不愿意在程序設計方面投入過多的時間,主動學習意識不強。
另一方面,隨著入學時間的增加,參加程序設計競賽的動力也在慢慢發(fā)生變化。如表4所示,年級越高,興趣所占比重越來越低,被動學習的因素越來越大,學生的激情慢慢的退卻,程序設計競賽難度偏大和學習惰性是最重要的影響因素。
同樣的情況也出現(xiàn)在時間花費上,如表5所示,隨著入學時間的增加,學生愿意投入程序設計競賽的時間越來越少。
值得注意的是,三年級學生當中有超過4成的學生愿意投入一學期參加程序設計競賽,明顯高于半學期的21.77%,說明相當一部分學生認識到程序設計競賽的積極作用,愿意投入其中以取得進步,但是主動性不夠,缺少克服困難的毅力。
4.專業(yè)基礎知識薄弱
地方高校錄取分數(shù)線相對重點院校而言偏低,特別是師范類院校工科專業(yè),數(shù)學成績有相當一部分不夠理想,后續(xù)又沒有給予足夠的重視,導致數(shù)學基礎薄弱。程序設計需要較高的數(shù)學功底,特別是算法設計部分,對于缺乏數(shù)學思維的學生來說,編程學習與能力提高顯得非常困難。在問卷當中有一道多選題,讓學生勾選不超過4項自己認為在算法方面最欠缺的知識,如表6所示,僅有不到24%的學生選擇在3項以內,在針對這部分學生的訪談中發(fā)現(xiàn),他們之所以選擇3項以內并不是因為不欠缺未勾選算法,而是因為那些未勾選的算法聽都沒聽過。
學生認為最欠缺的算法知識中,排在前三位的分別是動態(tài)規(guī)劃、貪心算法、和圖論,分別占13.00%、9.17%和7.23%,而這些都需要較強的數(shù)學功底。數(shù)學基礎薄弱導致算法知識欠缺,進一步影響程序設計能力的提高,影響人才培養(yǎng)目標的實現(xiàn),最終影響學生就業(yè)。
二、對策及方法
通過引入競賽式教學改變傳統(tǒng)的教學模式和教學方法,實施新的學習方式和考核方式,從根本上提升地方高校程序設計類課程的教學質量。
1.教學模式的改變
當前,越來越多的高校計算機專業(yè)已經(jīng)借助程序設計競賽平臺開展教學改革,其中,基于ACM-OJ(ACM Online Judge,ACM在線判題系統(tǒng))的改革比較成熟。ACM-OJ中包含大量的問題(稱為Problem),這些Problem不僅包括歷年競賽試題,也包括各教學單位原創(chuàng)的問題庫。基于程序設計類課程群的問題庫被集成到ACM-OJ當中,形成優(yōu)質的數(shù)字教學資源,方便所有師生選擇并獲取。Problem通過分類使學生可以自主選擇學習最感興趣的,或者是最亟需獲取的知識進行學習,從而掌握學習的主動權。程序設計競賽平臺擴展了計算機教學的手段與范圍,推進了教學從“知識傳遞”向“能力培養(yǎng)”的轉變。
程序設計競賽平臺的建立在滿足高校計算機專業(yè)課堂教學需求的同時,也為廣大程序愛好者提供了終身學習的有效支持,在提高教育質量的同時促進了教育公平。借助程序設計競賽大范圍的影響,以及互聯(lián)網(wǎng)的深度融合,甚至于教育云與教育大數(shù)據(jù)的強大支撐,這種競賽式教學能夠開創(chuàng)一種全新的、協(xié)作的、競爭的、開放的教學模式。
2.教學方法的改變
目前,地方高校的大部分程序設計類課程均以語法講解為主,過分注重知識細節(jié)[10],割裂了程序設計的完整思路。語法是程序設計的基礎,但不是全部,只有在具體的應用中才能產(chǎn)生價值。將知識點融入到具體問題之中,培養(yǎng)程序思維能力和解決問題能力,更有利于知識的掌握。競賽式教學中,問題的設置可以針對特定的教學重點和難點,兼顧知識點之間相互聯(lián)系,將規(guī)律性的方法融入其中。競賽式教學以問題解答為主線,穿插語法講解,注重現(xiàn)場演示,課堂教學與程序設計過程深度融合,有助于構建良好的課堂生態(tài),提高教學質量。
另一方面,程序設計類課程實踐環(huán)節(jié)教學案例的數(shù)量嚴重不足、質量參差不齊,用于學生課內外程序設計綜合訓練的題目相對較少,與課堂教學無法相輔相成。課后練習大多來源于教材,局限于某個特定知識點,只有競賽性質的題目才更具備綜合性,能夠全方面地涉及整個專業(yè)知識領域,同時又與實際生活密切聯(lián)系,能夠綜合訓練學生程序設計能力。通過競教結合設計的教學案例不容易讓學生產(chǎn)生厭煩情緒,感覺為了編程而編程,而是實實在在的解決科學問題,同時領會到算法的實際用途。
3.學習方式的改變
在信息技術的持續(xù)影響下,學習方式進一步多元化、網(wǎng)絡化和個性化,競賽式教學平臺的出現(xiàn)充分體現(xiàn)了這些特點。無論是在課堂,還是在宿舍,又或者是寒暑假呆在家里,只要有網(wǎng)絡,都可以通過網(wǎng)絡平臺獲取個性化的學習資源和學習支持。與此同時,基于Problem的討論貼從學習者的提問中來,由學習者相互解答,更能融入學生所想,便于學生理解和掌握知識,通過PC、手機、平板電腦等多種終端設備隨時查閱,便于隨時、隨地、隨需地開展移動學習,這種無所不在的交流方式將徹底改變傳統(tǒng)的學習方式。
另一方面,學生可以基于自身基礎的實際情況來調整學習進度,通過網(wǎng)絡討論貼來分享學習心得和進行深入探討。競賽式教學使得學習方式更加靈活,積極性更加高漲,學生的興趣、特長和潛能得以更加充分的發(fā)揮,在提高學習效率的同時,創(chuàng)造了一個“因材施教”的過程?!盎ヂ?lián)網(wǎng)+”時代,學習方式將不再受限于特定的時間和空間,競賽式教學為終身學習、泛在學習提供了有效的支撐平臺。
4.考核方式的改變
傳統(tǒng)的程序設計類課程大多采用筆試形式,無論是開卷或閉卷,每次考試的重點都放在語法知識點上,缺乏對應用能力的考查,往往學生通過死記硬背都能通過考試。競賽式教學基于試題庫來開展教學活動,競賽試題往往區(qū)別于傳統(tǒng)的課后習題,具備更強的綜合性和應用性,更加貼近實際問題,能夠更有利于學生解決問題能力的提高。
基于競賽平臺開展的練習與測試均采用上機形式,從不同知識點的角度將同一個任務細化成多個形式的試題并建立題庫[11],學生日常通過題庫上機練習和鍛煉,可以極大的提高實際編程能力和解決問題的能力。教學團隊可以定期在平臺發(fā)布針對不同年級、不同班級的各類競賽試題,從而有針對性的開展課后學習,加深對課堂教學內容的理解和應用。競賽式上機考核方式可以極大的點燃學生的編程熱情,提高學生的主動性和編程能力,建立良好的學習氛圍。
三、教學效果的驗證
2013年至今,嶺南師范學院在C語言程序設計與數(shù)據(jù)結構課程中引入競賽式教學,通過數(shù)據(jù)對比分析發(fā)現(xiàn)教學改革取得了一定的成績。通過競賽式教學,學生對程序設計語言的語法理解更為深入透徹,大量的Problem讓學生更加明確知識點在實際問題中的應用,討論貼更是幫助學生以自己的語言和思維去討論并解決問題,并掌握其解答的思路及編程的方法。
通過統(tǒng)計2013級與2014級C語言程序設計課程的期末成績(見圖2)可以看出,2014級當中,75分至90分的人數(shù)比例高達85.26%,明顯高于2013級的51.20%,大部分同學的分數(shù)較以往有所提高,對程序設計思想的理解更加明確,也更為清晰。
數(shù)據(jù)結構與C語言程序設計密切相關,在一定程度上C語言掌握的好壞程度直接影響著數(shù)據(jù)結構的成績。進一步統(tǒng)計2013級與2014級數(shù)據(jù)結構的期末成績(見圖3)可以看出,低分區(qū)域(70分以下)2014級人數(shù)比例低于2013級,高分區(qū)域(80分以上)2014級人數(shù)比例高于2013級,經(jīng)過C語言程序設計課程的學習,以及競賽式程序設計訓練,算法的編寫能力也得到了提升。
如圖3所示,引入競賽式教學后學生的成績分布曲線的重心向右偏移,高分區(qū)域(80分以上)人數(shù)比例增加,各年級《數(shù)據(jù)結構》課程成績如表7所示,平均成績提高約2個百分點。
競賽式教學引入程序設計類課程提升了學習興趣,豐富了課后練習,強化了教學引導,學生的程序設計能力得到了大幅的提升,教學效果進一步改善。
本文在分析地方高校大學生程序設計現(xiàn)狀的基礎上,提出將競賽式教學引入教學當中,從教學模式、教學方法等4個方面探討了競賽式教學的優(yōu)點,結合教學實踐對教學效果進行了對比分析。后續(xù)工作的重點在于競賽式教學與程序設計類課程教學的深度融合,通過教學實踐探索競賽式教學在課堂生態(tài)構建中的機理和作用,以提升學生的創(chuàng)新能力與專業(yè)素質,支持高?!皯眯汀鞭D型。
參考文獻:
[1]創(chuàng)新學生培養(yǎng)模式,助力軟件產(chǎn)業(yè)發(fā)展——天津市大學軟件學院蔣秀明院長專訪[J].計算機教育, 2013(23):4-6.
[2]閻光才.畢業(yè)生就業(yè)與高等教育類型結構調整[J].北京大學教育評論,2014,12(4):89-100.
[3]鄧麗,葛衛(wèi)生.多點結合的程序設計類課程教學模式研究[J].成人教育,2019(275):82-83.
[4]趙磊,焦鉻.C語言程序設計課程教學中引入ACM/ICPC的探討[J].計算機時代,2016(1):66-70.
[5]李月軍,李娟,李英玉.融入ACM/ICPC競賽內容的數(shù)據(jù)結構教學改革與實踐探討[J].內蒙古師范大學學報,2012,25(3):137-140.
[6]張熠,陳榮欽.以ACM導向構建C語言實驗教學新平臺的研究與實踐[J].臺州學院學報,2009,31(6):70-74.
[7]王偉嘉,張洪萍,寧亞輝等.關于《數(shù)據(jù)結構》課程與ACM-ICPC競賽結合的探討[J].計算機工程與科學,2014,36(A1):257-259.
[8]陳湘驥,劉才興,徐東風.ACM/ICPC與可持續(xù)發(fā)展的IT人才培養(yǎng)方式實踐[J].計算機教育,2009(20):6-9.
[9]鄺祝芳,余紹軍,楊衛(wèi)民.ACM/ICPC對培養(yǎng)信息學科創(chuàng)新型人才的作用[J].計算機教育,2013(3):4-6.
[10]張玉,賈遂民,賈志娟.ACM競賽對學習程序設計的推進作用的研究[J].電腦編程技巧與維護,2015(5):27-37.
[11]戴大蒙.“程序設計”類課程層次型教學模式的研究與實踐[J].中國成人教育,2010(9):119-120.
(編輯:魯利瑞)