摘要:編程類課程普遍具有理論抽象、實踐性強等特性,是計算機專業(yè)教學的一大難點;三年制高職編程類課程更面臨著課時緊、前導理論不足、學生動手能力差以及實踐經(jīng)驗缺乏等諸多現(xiàn)實問題。本文提出了一種在項目化教學基礎上,以學生“喜聞樂見”的小游戲作為案例項目,精心設置知識結(jié)構(gòu)和一例串聯(lián)編程類課程的核心基礎知識,并采用“全程手把手式的游戲?qū)嵕伴_發(fā)方式展開教學”的思路,以激發(fā)學生興趣,提高其編程素養(yǎng)和實戰(zhàn)經(jīng)驗。筆者經(jīng)過三輪課堂實踐后,取得了較好的教學效果。
關鍵詞:高職編程類課程實施;項目化教學;小游戲開發(fā);沉浸式編碼
中圖分類號:G434 文獻標識碼:A 論文編號:1674-2117(2016)12-0094-04
● 引言
程序設計是綜合運用計算機知識來分析和解決實際問題的強有力工具,極大地體現(xiàn)了計算機科學的魅力,它是計算機科班學生必須掌握的一項專業(yè)技能。由于程序設計涉及軟硬件知識的融合,加之對學生的理論知識和動手能力都要求較高,所以它也是計算機教學中的難點。高職生源主要來自普通高校統(tǒng)招中的“專科一批”“??贫币约啊叭I钡膯慰?、單招,這在很大程度上決定了學生的基本學情;而三年學制直接決定了如“數(shù)據(jù)結(jié)構(gòu)”“操作系統(tǒng)”“編譯原理”等諸多核心性、基礎性、前導性的理論課程被移出教學計劃,學生對程序和編程的理解往往只停留在語法這個層面,很難有一個微觀和本質(zhì)的認知。另外,由于高職人才著重技能的培養(yǎng),對學生的動手能力又有新的要求,考慮到高職教育的特殊性,高職的編程類課程的實施可以說是“難上加難”。
面對高職計算機專業(yè)編程類課程的開展中存在的諸多現(xiàn)實問題,筆者從理論門檻的降低與動手能力的提升、教法改進、編程興趣的培養(yǎng)和編程素養(yǎng)的提升三個方面入手,摸索出了一套較為科學的模式,希望對學生學習和教師教學水平的提升有一定的現(xiàn)實意義。
● 高職編程類課程的現(xiàn)狀和存在的問題
1.高職編程類課程現(xiàn)狀
從技術路線來看,高職編程類課程多數(shù)以主流的JAVA和.NET這兩條線路為主。從課程設置和銜接看,亦遵循從面向過程的C語言過渡到面向?qū)ο蟮腏AVA或C#語言。在項目架構(gòu)上也附帶將BS和CS兩大結(jié)構(gòu)穿插其中。但由于學制和學情等諸多因素的限制,以“軟件生存周期”為主線的“企業(yè)級”開發(fā)往往接觸得不夠深入或者基本不涉及,這直接導致了學生對編程類課程的誤解:不能學以致用,不能跨過“飯碗”這個門檻。IT企業(yè)需要的往往是上崗類人才,而我們培養(yǎng)的畢業(yè)生距離企業(yè)的要求還有一定的差距,這也是近年來我省畢業(yè)生就業(yè)質(zhì)量跟蹤調(diào)查中計算機專業(yè)??粕蜆I(yè)忠誠度不高(學生畢業(yè)后往往不愿或者不能從事過多與本專業(yè)相關的職業(yè))的一大原因,勢必也對下屆學生造成一定的心理壓力。
從課程設置角度來看,由于??坪捅究迫瞬排囵B(yǎng)的模式和要求有很大的不同,加之三年學制,勢必要砍掉一些理論高、難度大的課程,才能保證學生完成定量的理論課程。眾所周知,編程類課程的實施需要依賴許多“現(xiàn)代性”的理論課程。例如,學生如果沒有學過操作系統(tǒng),那么多線程和線程的同步、互斥等話題基本是不能過多、過深地涉及;學生若沒學過數(shù)據(jù)結(jié)構(gòu),那么類似JAVA和C#中的集合編程,學生的理解也不會太透徹;更不用說對程序執(zhí)行過程的原理理解和程序跨平臺本質(zhì)的領悟。整體看來,拋開系統(tǒng)分析和架構(gòu),單從開發(fā)類知識來看,學生所學的也不會太“?!?。
從課時安排角度來看,由于課程設置還要兼顧硬件、網(wǎng)絡、公選、思修等課程,所以編程類的課程無論是學期間的跨度還是學期內(nèi)的跨度都不能一直貫穿學生的學習生涯。最明顯的就是教師感覺時間太緊,學生感覺只學了點皮毛。
2.高職編程類課程存在的問題
通過對已畢業(yè)和在讀的多屆高職學生的走訪、調(diào)查,筆者發(fā)現(xiàn)學生對“編程類”課程的反饋主要集中在如下幾點:①理論過于抽象,知其然而不知其所以然。教材上的知識點往往沒有落實到生活中的具體實例,不接地氣。②內(nèi)容枯燥,基本沒有興趣。單一的語法和外文單詞使學生普遍覺得門檻過高、無味。③實訓案例過于復雜,學生望而卻步。許多教材上的案例不能考慮到學生的具體學情,功能繁復,架構(gòu)冗余,諸如幾十個窗體或者幾十張Web頁面的例子比比皆是。④教學形式單一。許多編程課往往是教師準備好PPT或者代碼截圖,學生敲、教師講這種模式,沒有過多的師生互動和教師輔導,學生往往機械地敲了代碼后卻不知如何下手。學生的存在感和教師的陪同度不夠。⑤課時過緊,教材內(nèi)容不剪裁,基本重難點都是泛泛而過,不能深究。以上種種問題,造成了教師難教、學生難學的局面。
● 教學方案設計概述
如何解決以上問題,讓編程類課程門檻更低、趣味性更強、學生參與度更高,是每一位編程類課程授課教師都必須面對和思考的問題。近年來,筆者所在學院試點了項目化教學,并取得了一定成效,學生對這種“學以致用”的授課方式認同度較高。教師若能在項目化教學的基礎上,進一步“雕琢”教學案例,或許會有新的突破。筆者出于此考慮,采用有廣泛“群眾”基礎、學生“喜聞樂見”的小游戲作為項目化教學的課堂案例,在筆者所在學院成教專升本、高職編程類課程中做了有意義的嘗試和應用。
1.小游戲案例的選取
小游戲玩法簡單、趣味性足、用戶黏度高,幾乎占領了用戶PC端和智能手機端用戶的大部分碎片時間。就業(yè)務而言,游戲初級玩家就基本掌握了90%的業(yè)務;從興趣上來說,游戲基本上能激發(fā)90%以上學生的興趣。小游戲種類繁多,因此,在項目選材上筆者主要考慮了游戲面廣、以棋牌類游戲為主(不用過多的動畫技術)兩點,這樣學生才能將主要精力放在語法實現(xiàn)和開發(fā)流程上。
2.授課方法的語言、平臺無關性
縱觀整個在校期間的課程安排,不管是入門級的C語言,還是進階階段的C#、Java等語言,在整個授課內(nèi)容和結(jié)構(gòu)上都有共通性。例如,程序的三種結(jié)構(gòu)是所有語言所共有的,細化到面向?qū)ο蟮腃#和JAVA,窗體和事件交互也是共有的。如果上升到小游戲項目開發(fā)層面,那么游戲的GUI(界面交互)、排行榜與游戲狀態(tài)存取(數(shù)據(jù)儲存)、棋盤表示(數(shù)組結(jié)構(gòu))、鼠標鍵盤操作(事件交互)、地圖棋子繪制(貼圖繪制或圖片控件)使用等都是和具體的語言、游戲無關的。所以這種教學設計模式教師可以選取學生感興趣的小游戲作為項目案例,而且?guī)缀跛械木幊填愓Z言都可以使用,有較為廣泛的實用性。
以筆者曾經(jīng)教授過的VB.NET、C#、JAVA三門語言為例。三門語言分別選取了掃雷、風靡一時的2048、傳統(tǒng)的五子棋三個小游戲案例。拋開具體開發(fā)語言,教師應提煉出編程類課程共有的核心基礎知識點,結(jié)合小游戲開發(fā)技術共性,合理編排知識點,剪裁出科學實效的有機課程體系(如下頁圖1)。
3.編程類課程設計框架
教師在選定好一款小游戲和一門編程語言后,即可根據(jù)圖1所示的“自下而上”再到“自上而下”兩個步驟,完成教學任務和教學內(nèi)容的設計。
先自下而上根據(jù)游戲的規(guī)則和玩法對“業(yè)務”做適當?shù)募舨?。例如,掃雷游戲,作為教學演示的案例,學生大可不必考慮鼠標左右鍵同時按下的操作,點開的空白區(qū)域的雷的個數(shù)也可以用數(shù)字代替圖片,甚至可以根據(jù)學時和學情決定雷的繪制是采用貼圖繪制還是按鈕對象。
自下而上剪裁好業(yè)務后,根據(jù)所教授的語言來決定要串講的知識點。筆者在課程開發(fā)中采用的是VB.NET,這里為了凸顯語言的無關性,假定教授的是C#語言。那么自上而下分析,窗體和菜單是必不可少的,所以可以在課程早期讓學生做一個雛形。雷區(qū)的難度設置可以用Combo Box控件來實現(xiàn),如果考慮到記事本的讀寫比較有用,則可以將難度的設定穿插在記事本的存儲中(不用記事本,可考慮靜態(tài)變量)。數(shù)據(jù)庫的讀取是開發(fā)必不可少的一大技術,考慮到掃雷的排行榜、時間、難度和等級等,教師可以讓學生設計一張表以體現(xiàn)不同等級的難度,分別記錄前10名。那么教師在講述ADO.NET這一章時,學生就可以提前完成這個排行榜的任務。至于游戲的核心邏輯——掃雷的實現(xiàn),完全可以在數(shù)組一章“大做文章”。筆者考慮到學生的理解力,在命令行模式下完成掃雷的過程一般為首選,而且即時打印出數(shù)組的狀態(tài),讓學生理解其實雷區(qū)的繪制無非就是將數(shù)組對應的數(shù)字轉(zhuǎn)換成圖片而已。為了照顧到大多數(shù)學生,教師還可以將繪制雷區(qū)的代碼先寫好,學生操作數(shù)組,教師代碼幫忙繪制即可(如圖2、圖3)。經(jīng)過理論學習和項目教學的穿插學習,課程結(jié)束時,學生除了圖片的繪制,C#語言基本常用的開發(fā)技巧大多都能掌握。在實際教學中,基礎好的學生、肯于動腦的學生往往都能很輕松地掌握貼圖繪制。
● 教學方案的可行性論證
首先,編程類課程的“實踐天然性”決定了項目化教學法的優(yōu)勢和必要性。近幾個學期,筆者所在學院部分班級展開了“項目化教學”的試點工作,即在實踐教師的帶領下,集中一個時間段、在一個固定教室完成一個完整的項目開發(fā)。通過調(diào)查反饋,筆者發(fā)現(xiàn)項目化教學對學生專業(yè)信心的樹立、動手能力的提升、知識體系的構(gòu)建以及綜合應用能力的提升都有顯著的效果。這也是筆者選擇“項目化教學”作為基本教法的主要原因。
其次,興趣是最好的老師。拋開成教學生的基本學情,絕大多數(shù)學生之所以感覺編程比較枯燥,最直接的原因是沒有從中獲得樂趣,而不是“門檻”的問題。學生的學習一直是考試、畢業(yè)等魔棒逼著學、壓著學,而不是我想學、我要學、我樂學。學習外語較為成功的方式便是“沉浸式”學習,即讓學生在一個相對封閉幾乎全英文的環(huán)境中學習。本文教學方法的“沉浸式”不是生搬硬套外語的“沉浸式”,而是讓學生感受到游戲的樂趣,感受到自己開發(fā)游戲的樂趣。很多學生在機房或教室上課時,掉隊了,乏味了,便索性玩起了手機和計算機自帶的小游戲。為什么教師不能將這些小游戲的開發(fā)引入課堂,作為實際案例來剖析給學生看呢?可以說,了解了游戲的制作原理和知識后,學生會更多“下意識”地去探索游戲背后的“計算機”編程知識。
“麻雀雖小,五臟俱全”,小游戲的開發(fā)不管是項目的需求分析、業(yè)務實現(xiàn)、美工設計,還是開發(fā)中的算法設計、編碼、測試等,都涵蓋了主流的編程技術和核心基礎知識。一個小游戲項目就能將核心編程知識剪裁、串聯(lián)形成有機體,步步推進。所以筆者考慮到成教課時的緊湊和集中,較之其他大型開發(fā)項目,這點更適合教學。再者,小游戲的趣味性在很大程度上提高了學生的學習興趣和信心,也讓編程這類枯燥的課程更接地氣。
最后,以項目為驅(qū)動,在實踐編程中學習和消化理論,都離不開教師的點撥和輔導。學生對編程的恐懼,導致大多數(shù)學生邁不開步伐。本項目重點強調(diào)了教師全程手把手編碼輔導的重要性,只有教師全程手把手編碼輔導,學生在編程的路上才能突破心理防線,得到“安全感”,而且教師的現(xiàn)場手工演示和輔導答疑,無疑就是一臺可以無限重復回放和點播的教學視頻機器,這對學生來說,也是一個知識不斷咀嚼和再消化的過程。
● 總結(jié)
筆者通過實踐,摸索出的針對編程類課程的教學模式是:抓住編程類課程的“實踐天然性”,采用項目化教學為基本教學法;以小游戲作為教學案例,降低業(yè)務門檻,提高學生興趣;精心設置知識結(jié)構(gòu),一例串聯(lián)編程類課程的核心基礎知識,剪裁不必要的課堂內(nèi)容;針對學生動手能力低的問題,采用全程手把手式的游戲?qū)嵕伴_發(fā)方式展開教學,從而激發(fā)學生的學習興趣,提高其編程素養(yǎng)和實際項目的開發(fā)能力。在不限編程語言的前提下,形成一套可行的課程方法能快速將日常小游戲與教學大綱結(jié)合,通過適當?shù)闹R提煉、剪裁后作為項目化教學的案例,并成功運用到高職編程類課程中去,這對四年制高職的編程類課程改革也提供了思考和參照。
參考文獻:
[1]Karl M.Kapp.游戲,讓學習成癮[M].北京:機械工業(yè)出版社,2015.
[2]陳文青.游戲算法融合情景模擬在高職C語言教學中的應用[J].紹興文理學院學報,2014,34(8):87-92.
[3]李茜.游戲化教學法在高職程序設計課程中的應用研究[J].廣西經(jīng)濟管理干部學院學報,2013,25(2):97-101.
[4]劉君.高職編程類課程實踐教學模式研究[J].職業(yè)教育研究,2013.
[5]蘭麗,賀桂英.高職計算機編程語言課程教學方法研究[J].計算機教育,2010,10(25):73-76.
[6]David M.Bourg,Glenn Seemann.Ai for game developers [M].Originally published Cambridge O'Reilly,2004.
作者簡介:鄒會來(1986.8—),講師,工學碩士,研究方向為智能化軟件開發(fā)、人機博弈、游戲AI。