李淑琴 ,丁 濛 ,孟 坤
(1.北京信息科技大學 計算機學院,北京100101;2.感知與計算智能聯(lián)合實驗室,北京 100101)
程序設(shè)計能力是當代大學生計算機方面的基礎(chǔ)和核心能力,更是計算機專業(yè)學生最重要的職業(yè)能力[1]。如何提高計算機專業(yè)學生的程序設(shè)計能力,一直是各高校研究的熱點。如果只是對計算機程序設(shè)計的知識理論進行了解以及掌握是遠遠不夠的,只有不斷地對其進行實踐,強化其應(yīng)用的體驗過程,注重理論和實踐的結(jié)合,學生才能得到更加全面的發(fā)展[2]。
高校程序設(shè)計課程集中在一至二年級的4個學期,主要包括程序設(shè)計基礎(chǔ)(C語言)、面向?qū)ο蠹夹g(shù)、數(shù)據(jù)結(jié)構(gòu)等,這些課程一般由基礎(chǔ)教學和綜合實踐教學組成?;A(chǔ)教學注重課程知識的講解,并配有課內(nèi)實踐;綜合實踐教學被定位為課程知識的運用,一般由課堂教學案例和綜合實踐兩部分構(gòu)成。
雖然學校和學生都很重視這些課程,但是學生學習完這些課程后,甚至已到做畢業(yè)設(shè)計還是不會調(diào)試和編程序,拿到題目沒有頭緒,感到無從下手,編程錯誤百出,更有甚者還產(chǎn)生編程恐懼或厭倦情緒。分析其原因主要有以下幾點。
雖然教學計劃中程序設(shè)計課程群的設(shè)置是分層次、遞進式教學體系,但是綜合實踐教學存在一定的孤立性,各門課程之間知識點聯(lián)結(jié)程度較低,特別是不同課程綜合實踐教學案例的設(shè)計沒有任何的聯(lián)系,缺乏一定的整體感和連續(xù)性,這種隱形的切割導致學生對所學知識融會貫通性差,使得其思路無法進行拓寬。
綜合實驗基本上是圍繞教學內(nèi)容展開的,實驗的內(nèi)容多是為了驗證語法或課堂講的知識,使得編程變得枯燥乏味,提不起學生學習的興趣,學生為完成作業(yè)而上機,長此以往,就會對編程失去興趣。
編程是一個枯燥的過程,目前我國計算機程序設(shè)計課堂中缺乏一定的應(yīng)用體驗,使得學生無法感受到自身所學的知識在生活以及工作中應(yīng)用的重要性,直接降低了學生學習相關(guān)知識內(nèi)容的積極性,從而降低了整體的學習質(zhì)量以及效果。
程序設(shè)計能力的培養(yǎng)是計算機教學的核心所在。在培養(yǎng)學生能力的過程中,課程改革勢在必行。要樹立以學生為主體、教師為主導的教學模式,讓學生成為學習活動中的主體,激發(fā)學生的自主學習能力和創(chuàng)造力。課程組、課程群要真正發(fā)揮“群”的作用,在制度上保障教學師資、教學內(nèi)容等資源的整合,實現(xiàn)教學方式的多樣化。
對學生,在入學教育上就強調(diào)程序設(shè)計能力對他們的重要性,讓學生盡早能夠從整體上了解培養(yǎng)計劃中離散數(shù)學、程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)等系列課程在整個培養(yǎng)體系中所處的位置,這些課程構(gòu)成了一個有機的體系,使其懂得計算機編程能力并不是學習一門或幾門課程能夠培養(yǎng)出來的。在學習過程中,需要學生具有一定的邏輯思維能力,勤于動手。能力的培養(yǎng)需要循序漸進,要做好長期作戰(zhàn)的思想準備。
程序設(shè)計系列課程的目的除了教給學生基本的程序設(shè)計理論外,更重要的是培養(yǎng)學生的程序設(shè)計開發(fā)能力、邏輯推理能力,使學生最終應(yīng)用所學知識構(gòu)建出各種層次的計算環(huán)境,并在這些計算環(huán)境下解決實際問題?;谶@個目標,筆者認為整個綜合實驗教學應(yīng)該站在頂層系統(tǒng)設(shè)計,宏觀把握,從課程到課堂、到內(nèi)容再到評價,環(huán)環(huán)相扣。覆蓋程序設(shè)計類課程的綜合大題目應(yīng)該具有如下特征。
(1)知識點覆蓋面廣。設(shè)計的題目盡量能覆蓋到程序設(shè)計系列課程中的知識點,設(shè)計自上而下,實施自下而上。
(2)趣味性強。設(shè)計的題目既容易激發(fā)學生的學習興趣,又要使學生感到實現(xiàn)有一定的壓力和挑戰(zhàn)性,有利于學生個性化的發(fā)揮。
(3)內(nèi)容有層次。綜合實驗課程內(nèi)容的設(shè)置上,應(yīng)該盡可能地分層次、分階段,培養(yǎng)學生的能力,突出重難點,關(guān)注每門課程的核心內(nèi)容。
(4)評判標準明確。系列化課程中的每門課程都有其核心知識、能力目標的要求。課程考核中就重點考核學生能力目標所要求的能力達成度是否在程序中有所體現(xiàn)。在課程的評價方面,可以運用質(zhì)性評價和量性評價的綜合評價標準。
在確定總目標的前提下,將總目標分解到各個課程的實踐任務(wù)中,采用任務(wù)驅(qū)動的方法實施。學生在課程的學習中,通過層次、遞進式地完成具體任務(wù),認識不同課程的性質(zhì),不斷體會各個課程之間的不同,并隨著所編程序質(zhì)量的提升,喜歡上編程,達到培養(yǎng)編程能力的目的。學生在教師幫助下,圍繞一個共同的任務(wù)活動中心完成既定任務(wù)的同時,在問題的驅(qū)動下進行自主探索和互動協(xié)作的學習,使其價值、潛能、個性得到充分發(fā)揮。
為了整體構(gòu)想的實現(xiàn),特別是為了能采用任務(wù)驅(qū)動的方式進行實踐教學,筆者所在學校選擇了計算機棋類博弈作為一個具體的、現(xiàn)實的,且能夠貫穿于本科一二年級程序設(shè)計類基礎(chǔ)課的主題。首先,下棋是大家喜聞樂見的娛樂活動,趣味性強,學生不會覺得陌生。其次,棋類博弈算法原理簡單、內(nèi)涵豐富,是變化無窮的思維邏輯的研究載體[3]。計算機博弈在國際上作為一個學科領(lǐng)域,已經(jīng)開展了半個多世紀的研究與競賽活動。第三,棋類博弈一直是人工智能領(lǐng)域理論和技術(shù)突破的展示平臺,如1997年的深藍和2016年的AlphaGo,可以讓學生近距離感受最前沿的技術(shù)成果。最后,棋類博弈完美地將各門基礎(chǔ)課程有機地結(jié)合在一起。一個完整的機器博弈系統(tǒng)主要包括棋局表示、走法生成、局面評估以及搜索引擎。棋局表示是對比賽過程中形成的棋局的描述,內(nèi)容包括棋子、障礙、空格、走棋的表示,用到學習過的數(shù)據(jù)結(jié)構(gòu);走法生成器是在已形成的棋局下生成可行的走法,涉及對下棋規(guī)則的描述并根據(jù)規(guī)則生成所有可行走法,是搜索對象的產(chǎn)生器;評估函數(shù)是用來對棋局進行評估的,是搜索算法的前提;搜索引擎是如何找到最優(yōu)走法,這是計算機博弈的核心部分,是對人類思維模擬的最佳體現(xiàn)[4-5]??梢?,一個人機對戰(zhàn)博弈程序的實現(xiàn),涉及數(shù)據(jù)結(jié)構(gòu)、算法、編程能力等綜合知識。
綜上是將計算機棋類博弈作為整體程序設(shè)計綜合實踐課程的一個重要主題。具體操作如下:在第一次上程序設(shè)計類課程程序設(shè)計基礎(chǔ)時就告知學生,第4學期前實現(xiàn)一個人機對戰(zhàn)的AI智能計算機博弈系統(tǒng),作為提升編程能力的總目標。在第一門綜合實踐課上,可以讓學生根據(jù)自己的興趣和能力選取中國計算機博弈大賽中的任何一個棋種作為綜合實驗題目,并告知學生這個任務(wù)貫穿面向程序設(shè)計語言、數(shù)據(jù)結(jié)構(gòu)、算法設(shè)計與分析等專業(yè)課實踐教學,每學完一門課有不同的課程驗收標準,最終的驗收標準是獨立實現(xiàn)一個人機對戰(zhàn)博弈系統(tǒng),并參加每年學校組織的計算機博弈比賽。比賽成績作為課程成績的一部分,優(yōu)異者被選拔出參加全國計算機博弈大賽,獲得全國獎項還可以算作學校創(chuàng)新實踐課學分。
目標分解針對C++、Java編程基礎(chǔ)類實踐課程,設(shè)計有開發(fā)游戲界面等題目。對于數(shù)據(jù)結(jié)構(gòu)和算法設(shè)計與分析專業(yè)課實踐模塊,學生在實現(xiàn)游戲界面的基礎(chǔ)上,繼續(xù)開發(fā)能實現(xiàn)人人或人機對戰(zhàn)的小程序。針對科研項目類開發(fā)實踐課,學生在實現(xiàn)人機對戰(zhàn)程序的基礎(chǔ)上,繼續(xù)進行AI算法研究,最終實現(xiàn)具有AI智能的計算機博弈程序。具體教學方案見表1。
表1 基于計算機博弈程序設(shè)計的整體綜合實踐教學方案
將能力的培育融入課程變革中,以程序設(shè)計能力培養(yǎng)為導向的實踐教學改革方案應(yīng)自上而下,整體、系統(tǒng)地設(shè)計綜合實踐教學方案,利用任務(wù)驅(qū)動實踐法,層次、遞進式地完成具體任務(wù),自下而上將總目標分解到各個課程的實踐任務(wù)中,以提高學生編程能力,從而達到培養(yǎng)學習者計算思維和程序設(shè)計能力的目的。將學生喜聞樂見的、高對抗性的棋牌游戲作為綜合實踐教育載體案例,可以將枯燥乏味的語法規(guī)則利用電腦游戲的形式展現(xiàn)在學生面前,將游戲娛樂融合進程序設(shè)計類實驗課程的教學實踐中,在激發(fā)學生學習興趣和學習動機的同時,使其形成自主學習的習慣,主動進入知識學習的情境中,取得較好的效果。