謝春麗,高宇翔,吳昊聰,趙向軍
(江蘇師范大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 徐州 221116)
程序設(shè)計課程不僅是計算機(jī)類各專業(yè)的重要基礎(chǔ)課程,同時也是理工類各專業(yè)大學(xué)生的核心素養(yǎng)課程,在學(xué)科課程體系中具有奠基作用,會直接影響后續(xù)課程的學(xué)習(xí)和掌握,但計算機(jī)程序語法規(guī)則嚴(yán)格、語句邏輯嚴(yán)密、代碼高度程式化,與人類固有思維模式差異明顯。面對復(fù)雜問題既需要有靈活應(yīng)變、不拘常規(guī)地解決問題的創(chuàng)新思路和高屋建瓴的宏觀思維,又需要具備庖丁解牛般、以無縫入有間的精細(xì)技巧,還需要將匠心機(jī)巧的問題解決方法轉(zhuǎn)換為依序執(zhí)行、細(xì)致入微、近乎僵化的機(jī)械步驟。掌握這些差異性極大的思維模式對大部分學(xué)生來說是個嚴(yán)峻挑戰(zhàn)。因此,該課程學(xué)習(xí)起步困難、提升緩慢,常常成為計算機(jī)類大學(xué)生入學(xué)以來經(jīng)受的最為嚴(yán)峻的考驗。
計算思維與程序設(shè)計是軟件能力的關(guān)鍵核心,它與宏觀大軟件的分析結(jié)構(gòu)相結(jié)合,衍生出軟件架構(gòu)設(shè)計能力,這些能力與工程化軟件開發(fā)能力一起,從屬計算機(jī)軟件開發(fā)能力的主要構(gòu)成。在寬進(jìn)嚴(yán)出的學(xué)業(yè)管理機(jī)制未能完全形成的情況下,很多學(xué)生在程序設(shè)計課程學(xué)習(xí)中出現(xiàn)了嚴(yán)重不適應(yīng),并且這種不適應(yīng)貫穿整個大學(xué)生涯。這些問題嚴(yán)重影響了大學(xué)畢業(yè)生的質(zhì)量,也制約了國家信息產(chǎn)業(yè)的發(fā)展。
綜上所述可知,一方面國家信息化發(fā)展戰(zhàn)略在向縱深推進(jìn),互聯(lián)網(wǎng)與各行各業(yè)的深度融合催生了對信息技術(shù)人才的巨大需求;另一方面,計算思維和程序設(shè)計的欠缺導(dǎo)致繁榮專業(yè)發(fā)展的背后,是人才的嚴(yán)重不足。在師資儲備不夠充足、學(xué)生主動性不夠強(qiáng)的情況下,謀求程序設(shè)計課程教學(xué)模式之變迫在眉睫。
CDIO工程教育模式以項目驅(qū)動為教學(xué)方法[1],對學(xué)生的學(xué)習(xí)進(jìn)行興趣引領(lǐng),借助簡單易用的圖形化實訓(xùn)教學(xué)平臺進(jìn)行輔助建構(gòu),并對課程知識點進(jìn)行精細(xì)管理,同時根據(jù)學(xué)生的學(xué)習(xí)記錄推薦學(xué)習(xí)資源,如圖1所示。這5個方面的緊密結(jié)合不僅能促進(jìn)學(xué)生學(xué)習(xí)知識,同時也能引導(dǎo)學(xué)生將知識轉(zhuǎn)變?yōu)閼?yīng)用,拉近教育教學(xué)和社會需求的間隙,這對改善課程教學(xué)質(zhì)量、提高應(yīng)用型創(chuàng)新人才培養(yǎng)質(zhì)量具有重要意義。
圖1 課程教學(xué)整體設(shè)計
項目驅(qū)動化課程教學(xué)以完整的項目為教學(xué)案例,選擇合適的項目組織相關(guān)教學(xué)內(nèi)容[2-3]。和傳統(tǒng)的課程教學(xué)相比有明顯的優(yōu)勢。首先,項目任務(wù)明確,在項目構(gòu)思和設(shè)計過程中,需要用專業(yè)理論知識去指導(dǎo)項目、解決問題,學(xué)生可以在完成項目的過程中,深入學(xué)習(xí)并掌握具體理論知識,將理論和實踐緊密結(jié)合,從而完善所學(xué)專業(yè)知識,提高解決實際問題的應(yīng)用能力。其次,CDIO工程教育模式強(qiáng)調(diào)學(xué)生的主體地位,教師引導(dǎo)學(xué)生進(jìn)行自主探究、合作學(xué)習(xí),形成正確的情感、態(tài)度與價值觀[4]。該理念所倡導(dǎo)的教學(xué)更注重培養(yǎng)學(xué)生在教學(xué)活動中掌握提出問題、分析問題和解決問題的能力。而將學(xué)科知識融合到游戲中,為學(xué)生提供問題化學(xué)習(xí)情境平臺的游戲化學(xué)習(xí)模式正好適應(yīng)CDIO的教學(xué)理念。它作為一種新型的學(xué)習(xí)方式已經(jīng)得到了廣大教育工作者的認(rèn)可和支持,滿足了個體獨(dú)特的學(xué)習(xí)興趣和需求,讓學(xué)生在不同的復(fù)雜程度下學(xué)習(xí),將知識轉(zhuǎn)化為解決現(xiàn)實問題的技術(shù)和能力,把書本學(xué)習(xí)的經(jīng)驗用于實踐活動中,使學(xué)生學(xué)有所成,學(xué)有所用。最后,項目完成需要學(xué)生之間相互合作,既能取優(yōu)補(bǔ)短,又能相互學(xué)習(xí),既鍛煉了個人能力,也提高了成員的團(tuán)隊意識和溝通能力。
大量研究表明,興趣是推動人們求知的一種內(nèi)在力量[5]。烏申斯基曾指出:“沒有絲毫興趣的強(qiáng)制性學(xué)習(xí),將會扼殺學(xué)生探求真理的欲望?!睋?jù)此,“游戲化教學(xué)”強(qiáng)調(diào)將教學(xué)目標(biāo)隱藏于課堂游戲環(huán)節(jié)中,通過豐富多樣的游戲活動激發(fā)學(xué)生的學(xué)習(xí)興趣,調(diào)動自主學(xué)習(xí)的積極性。面對程序設(shè)計里嚴(yán)格的語法規(guī)范,枯燥的算法邏輯,保持高度的興趣才有可能繼續(xù)深度挖掘知識。如果只是一味嚴(yán)謹(jǐn)、枯燥地進(jìn)行語法教學(xué)和程序講解,學(xué)生很難長期保持高度的興趣。根據(jù)布盧姆的教育目標(biāo)分類,情感領(lǐng)域的教學(xué)目標(biāo)、認(rèn)知領(lǐng)域的教學(xué)目標(biāo)和技能領(lǐng)域的教學(xué)目標(biāo)并列為高校三大教學(xué)目標(biāo)[6]。隨著程序設(shè)計的難度增加,為避免學(xué)生對枯燥的程序設(shè)計產(chǎn)生厭倦情緒,教學(xué)過程必須采用獨(dú)特的教學(xué)方案,融入良好的情感教育,吸引學(xué)生的注意力,使學(xué)生對所學(xué)知識產(chǎn)生濃厚的興趣,并帶動學(xué)生參加游戲類項目,對所學(xué)的知識具有事實性了解,通過有趣的游戲化項目開發(fā)提高學(xué)生的技術(shù)水平,調(diào)動學(xué)生的積極性,開發(fā)學(xué)生的想象力。
程序設(shè)計類課程不僅是學(xué)生后續(xù)專業(yè)學(xué)習(xí)的引領(lǐng),同時也是激發(fā)學(xué)習(xí)興趣的關(guān)鍵,而低年級學(xué)生需要快速對本專業(yè)的應(yīng)用場景、市場前景有直觀、具體的認(rèn)識。在不借助任何教學(xué)平臺的條件下,C、C++課程教學(xué)一直以來都很難突破界面設(shè)計,學(xué)生只能開發(fā)一些小型的控制臺應(yīng)用程序,例如工資管理系統(tǒng)、學(xué)生管理系統(tǒng),這種類似MS-DOS的命令型操作界面很難讓學(xué)生有成就感和專業(yè)認(rèn)知感。為了激發(fā)學(xué)生的學(xué)習(xí)興趣,程序設(shè)計教學(xué)融入游戲化元素,以輕松、直觀、富有樂趣的方式激勵學(xué)生將理論知識應(yīng)用到項目開發(fā)過程中,做到“玩中學(xué)”,以玩的動力驅(qū)動知識學(xué)習(xí)。目前市場存在的程序設(shè)計教學(xué)軟件和實訓(xùn)平臺,例如Scratch、Unity3D、Funcode等,崇尚以游戲化的方式進(jìn)行實驗教學(xué)。他們將任務(wù)處理流程和圖形化界面設(shè)計的Windows API函數(shù)進(jìn)行封裝,提供了一個開發(fā)Windows應(yīng)用程序的整體邏輯框架。學(xué)生無需進(jìn)行繁瑣、復(fù)雜的底層細(xì)節(jié)設(shè)計,只需要關(guān)注功能設(shè)計,大大簡化了應(yīng)用程序的開發(fā),尤其對低年級的學(xué)生更加適用,擺脫了以往“黑底白字”的運(yùn)行界面,在生動有趣的游戲設(shè)計中學(xué)習(xí)程序設(shè)計知識,將枯燥繁瑣的程序代碼和生動的程序運(yùn)行效果結(jié)合起來,激發(fā)學(xué)生為了得到更好的效果進(jìn)而精益求精,研究代碼、改進(jìn)代碼的目的。
按照系統(tǒng)論的觀點,對課程教學(xué)全面采用精細(xì)化管理,對課程內(nèi)容設(shè)計和訓(xùn)練實施全過程、無縫隙的管理,形成一環(huán)扣一環(huán)的知識點劃分,項目的選擇要對知識點全面覆蓋。針對CDIO不同能力培養(yǎng)的要求,我們將課程內(nèi)容進(jìn)行精細(xì)化設(shè)計和提取,按照由淺入深、由簡單到復(fù)雜細(xì)分為一系列知識點,根據(jù)類型、難度,把課程教學(xué)分成三個階段,包括基礎(chǔ)知識、綜合程序?qū)嵺`和實訓(xùn)項目實踐,旨在從基礎(chǔ)知識的掌握、個人能力的培養(yǎng)、團(tuán)隊能力的建設(shè)和工程應(yīng)用能力的強(qiáng)化4方面逐步將CDIO 的教育理念貫穿至整個教學(xué)過程,見表1。對基礎(chǔ)知識主要以簡單有趣的實驗為主,如電燈開關(guān)游戲,紙牌排序游戲,重在激發(fā)學(xué)習(xí)興趣;綜合性項目旨在培養(yǎng)學(xué)生的團(tuán)隊協(xié)作能力、系統(tǒng)實現(xiàn)和維護(hù)能力,例如海底世界、貪吃魚、黃金礦工等項目;實訓(xùn)項目重在培養(yǎng)學(xué)生從系統(tǒng)構(gòu)思到系統(tǒng)運(yùn)行維護(hù)的能力。綜合項目和實訓(xùn)項目需要多人合作,在項目開發(fā)過程中同時培養(yǎng)了學(xué)生的溝通能力,自我管理能力等基本素養(yǎng)。
表1 C語言目標(biāo)實施矩陣
程序設(shè)計類課程的知識點異常豐富、程序語法規(guī)則嚴(yán)格、語句邏輯嚴(yán)密,要想真正熟練地掌握程序設(shè)計,僅僅依賴項目還是不夠的,同時還需要對基礎(chǔ)知識點的掌握。本項目擬根據(jù)每個學(xué)生學(xué)習(xí)的過程數(shù)據(jù)、考核數(shù)據(jù),將未熟練掌握的知識點推薦給每個學(xué)生,提高學(xué)習(xí)者獲得課程教學(xué)資源的效率以實現(xiàn)精準(zhǔn)化教學(xué)。利用詞袋模型對教學(xué)資源文檔進(jìn)行表示,有效利用文本內(nèi)部的情境信息,構(gòu)造CNN(卷積神經(jīng)網(wǎng)絡(luò))的多層卷積操作,抓住文本中詞語之間的相互關(guān)聯(lián),幫助學(xué)習(xí)用戶和資源的隱表示。首先對文檔中的每個詞做嵌入式表示,然后將所有嵌入式向量拼接成一個矩陣,每個資源文檔都可用一個二維矩陣表示,然后在這個二維矩陣上進(jìn)行卷積、池化以及映射,從而獲取學(xué)習(xí)資源的隱向量,并根據(jù)隱向量進(jìn)行資源推薦。
按照CDIO工程教育的理念,程序設(shè)計教學(xué)內(nèi)容要保證理論知識和實踐應(yīng)用并駕齊驅(qū),以層層遞進(jìn)的方式逐步加大、加深知識點的學(xué)習(xí)。教師作為教學(xué)活動的組織者和引領(lǐng)者,全面掌控教學(xué)過程。把理論學(xué)習(xí)融入到實踐教學(xué)中,符合學(xué)生的認(rèn)知規(guī)律,提高學(xué)生學(xué)習(xí)該課程的興趣[7-8]。教學(xué)實施過程如圖2所示。該圖主要包括兩個組成部分:①借助OJ平臺,進(jìn)行基礎(chǔ)知識的規(guī)范化編程;②借助Funcode平臺完成實訓(xùn)項目的設(shè)計與開發(fā)。
程序設(shè)計的編寫有非常嚴(yán)格的語法規(guī)范,良好的編程習(xí)慣和風(fēng)格是程序設(shè)計的基礎(chǔ),它的形成不是一朝一夕,而需要長期堅持不懈的練習(xí)。Online Judge系統(tǒng)(簡稱OJ)是一個在線的判題系統(tǒng),可以協(xié)助學(xué)生程序編寫練習(xí)。用戶可以在線提交程序多種程序(如C、C++)源代碼,系統(tǒng)對源代碼進(jìn)行編譯和執(zhí)行,并通過預(yù)先設(shè)計的測試數(shù)據(jù)來檢驗程序源代碼的正確性。一個用戶提交的程序在Online Judge系統(tǒng)執(zhí)行時將受到比較嚴(yán)格的限制,包括運(yùn)行時間限制,內(nèi)存使用限制和安全限制等。用戶程序執(zhí)行的結(jié)果將被Online Judge系統(tǒng)捕捉并保存,然后再轉(zhuǎn)交給一個裁判程序。該裁判程序或者比較用戶程序的輸出數(shù)據(jù)和標(biāo)準(zhǔn)輸出樣例的差別,或者檢驗用戶程序的輸出數(shù)據(jù)是否滿足一定的邏輯條件。教師也可以查看學(xué)生提交的代碼以及代碼錯誤記錄。根據(jù)錯誤記錄,及時補(bǔ)充、指正學(xué)生代碼中出現(xiàn)的問題。
Funcode平臺是一款游戲化的實驗教學(xué)平臺,支持C、C++和Java語言的開發(fā)和設(shè)計,封裝了處理流程和圖形化界面設(shè)計的Windows API函數(shù),提供了一個開發(fā)Windows應(yīng)用程序的整體邏輯框架[9-10]。圖3給出了Funcode平臺的框架,基于Funcode開發(fā)項目有兩大優(yōu)勢。
圖2 教學(xué)實施過程
圖3 Funcode 實訓(xùn)平臺框架
(1)界面設(shè)計簡單、直觀。Funcode包含界面設(shè)計和項目開發(fā)兩大模塊。學(xué)生在編輯器中通過拖拉資源、設(shè)置資源屬性等方式可以輕松設(shè)計游戲界面、特效、各種精靈(動態(tài)精靈和靜態(tài)精靈)。
(2)處理流程清晰。完成界面設(shè)計之后,可以用 VC++,CodeBlocks或其他IDE環(huán)境編寫代碼,完成各種定制功能。Funcode平臺對涉及處理流程的細(xì)節(jié)進(jìn)行了封裝,將游戲運(yùn)行過程劃分為游戲初始化、游戲運(yùn)行和游戲結(jié)束3個函數(shù)。用戶無需了解圖形化窗口操作的具體細(xì)節(jié),只要關(guān)注項目的具體功能和對應(yīng)的實現(xiàn)函數(shù),重載并實現(xiàn)Funcode類庫中具有相應(yīng)功能的接口函數(shù),大大簡化了用戶的使用。
為了讓學(xué)生理解分支程序設(shè)計,傳統(tǒng)的實驗教學(xué)往往用文字?jǐn)⑹鋈蝿?wù),用文字輸出結(jié)果,用DOS界面輸出電燈開關(guān)信息,代碼如下:
借助Funcode平臺就可以設(shè)計類似電燈開關(guān)的小游戲,Funcode對這個游戲提供了程序框架,學(xué)生只需要在Play(int i)函數(shù)中填寫代碼。其中,i=0時,表示關(guān)閉電燈開關(guān);i=1時,表示打開電燈開關(guān); 然后調(diào)用函數(shù)TurnOn(),TurnOff()可將電燈點亮和熄滅,程序運(yùn)行可觀察到電燈點亮和熄滅。
在CDIO工程教育理念的指導(dǎo)下,以項目化的方法、游戲化的界面設(shè)計為興趣點,借助輔助平臺的便捷,外加精細(xì)化的知識點管理,讓程序設(shè)計教學(xué)過程變得趣味橫生,學(xué)生在游戲中除了掌握知識點之外,對實際環(huán)境下的使用多了一份體會和認(rèn)識。對培養(yǎng)學(xué)生的程序設(shè)計能力起到巨大的促進(jìn)作用,是培養(yǎng)學(xué)生的工程應(yīng)用能力的良好開端。