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

表1 基于計算機博弈程序設計的整體綜合實踐教學方案
將能力的培育融入課程變革中,以程序設計能力培養為導向的實踐教學改革方案應自上而下,整體、系統地設計綜合實踐教學方案,利用任務驅動實踐法,層次、遞進式地完成具體任務,自下而上將總目標分解到各個課程的實踐任務中,以提高學生編程能力,從而達到培養學習者計算思維和程序設計能力的目的。將學生喜聞樂見的、高對抗性的棋牌游戲作為綜合實踐教育載體案例,可以將枯燥乏味的語法規則利用電腦游戲的形式展現在學生面前,將游戲娛樂融合進程序設計類實驗課程的教學實踐中,在激發學生學習興趣和學習動機的同時,使其形成自主學習的習慣,主動進入知識學習的情境中,取得較好的效果。