楊曉波
(西藏光信息處理與可視化技術重點實驗室,西藏民族大學信息工程學院,陜西 咸陽 712082)
程序設計是數字媒體技術專業的必修課程,目標是讓學生掌握并熟練運用一門或多門程序設計語言基礎,具備一定的編程能力,為以后的項目開發打好基礎;使學生了解計算機解決問題的詳細過程,讓學生具備計算思維,提高學生分析問題和解決問題的能力,為后續專業課程的學習打下堅實的基礎。西藏民族大學數媒專業自治區內外混合班中約有一半是漢族學生,一半是藏族學生。給這樣的班級開展程序設計課程不是一件容易的事,漢藏學生思維習慣有差別、文化基礎差距較大,所以教學過程中就會出現兩極分化現象。如果放慢教學進度,漢族學生就會覺得教學內容過于簡單,不夠學;如果按正常教學進度開展教學,藏族學生就會覺得教學內容難度較大,學不會、跟不上。為了解決區內外混合班教學中這些矛盾,在教學設計中采用史密斯—雷根模型設計教學。史密斯—雷根模型(見圖1),是一種改進后的、系統全面的教學設計方法[1][2],在教學前首先進行教學分析,分析學習者特征,然后對學習任務進行分析,并對學習環境加以分析;教學策略設計如何組織教學、教學內容如何傳遞以及如何管理教學資源,在此基礎上制作教學資料;對教學進行評價,以評價所得到的反饋為依據再對教學進行修改,如此循環往復提高教學效果。

圖1 史密斯—雷根模型
大多數程序設計語言課程是先進行理論教學,再進行上機實踐,大部分課程都是從三大基本結構講起,實例內容主要以經典算法為主,學生的學習興趣難以被激發,學生也不能將所學內容舉一反三,更不能用以解決實際問題。
1.2.1 學生文化基礎相差較大,層次不一
西藏自治區內外混合班學生有來自全國各地的漢族學生和來自西藏自治區的藏族學生,總的來說漢族學生文化基礎較好,大多從小學就接觸計算機甚至接觸過編程;而藏族學生文化基礎相對薄弱,接觸計算機較晚,英語功底相對較弱,程序設計語句又都是英語單詞。所以對這種生源質量相差較大、層次不同的學生用統一的教學內容開展教學難度很大,效果也不好。
1.2.2 藏族學生的興趣沒有被調動起來
藏族學生能歌善舞,擅長形象思維,對圖像和色彩敏感,數學基礎相對薄弱,編程的邏輯思維有待提高,其中還有一批學生未做好大學的學習規劃,將時間和精力放在豐富多彩、形形色色的各種社團活動上,熱衷于學生會工作,課余時間沒有被很好地利用到學習專業課上[3]。
程序設計類課程的教學目標是培養學生的分析和解決問題的能力、設計開發軟件系統的能力、團隊協作的能力和一定的創新能力。為有效達成課程的教學目標,進行了大量的教學改革,如項目式教學、以賽促教促學[4][5],這些方法收到了一些成效,也出現一些新的問題。較少部分學生能跟上教學進度,一部分學生在項目小組中渾水摸魚,一部分學生由于跟不上對課程失去興趣。
2.1.1 選擇合適的教學語言
數字媒體技術專業是服務于社會發展與文化建設,體現科學與藝術深度融合特色的交叉學科專業[6],所以開設互動藝術編程課程,以Processing作為程序設計語言。Processing是一門藝術編程設計語言,用短短的幾行代碼創造出圖形,隨后又讓圖形開始運動,再加上一些代碼便可以讓圖形自我學習,像自然中的生命一樣生長、蔓延和改變[7]。將編程與藝術創作結合起來,學生的學習興趣大大提高。
2.1.2 提高程序代碼輸入速度
要提高學生編程能力首先要提高學生鍵盤打字速度。藏族學生普遍對英文不是很熟練,有的學生甚至26個字母認識不完全,所以打字速度很慢。在新生入學后就為學生推薦鍵盤指位圖,幫助學生盡早學會盲打,并在程序設計課程中強化代碼輸入速度,這一點在混合班中非常重要。
2.1.3 提高學生英文水平
藏族學生編程時速度慢的另一個重要原因是英語水平較差,輸入語句時不是逐個單詞輸入,而是一個字母一個字母地輸入,所以速度很難提高。解決這個問題不能僅依賴于英語課程的學習,而要采取相應的針對性措施。一是將程序設計中常用單詞列出來,指導學生用詞根記憶法、聯想記憶法等方法去記憶。二是程序開發環境和集成開發環境不用中文版而用英文版,課程開始時,教師在上課的同時對集成開發環境中菜單和界面中碰到的單詞不斷解釋其含義并強化拼寫,強化學生記憶。如此堅持三至四周,藏族學生和英文較差的漢族學生均能跟上教學節奏,不再抗拒英文編程環境。
2.1.4 教學內容設計
在專業教學中,開設的程序設計語言一般不止一種,大部分課程不管學生學的是第幾門語言課,往往都是按常量、變量、類型、順序結構、選擇結構、循環結構……的教學順序開展教學,導致學生每門程序設計語言都感覺只學習了三大基本結構。所以課程開始的設計很重要,先用processing語言實例繪制出色彩鮮艷的圖形和豐富靈動的動畫,讓學生先熱愛上這門課程。
2.1.5 教學模塊設計
剛開始學習編程時,學生對變量不能理解,可以通過大量的實例和練習讓學生學會靈活運用變量,比如圖2用變量控制兔子的身體長度和眼睛大小,學生很快就會領會變量的用法。循環也是學生學習的難點之一,講解時通過打印一個點線到打印一行點線引出一重循環,再到打印多行點線引出二重循環(見圖3),讓學生充分理解外循環走一步內循環走一圈。還可以增加幾道練習強化學生對循環的理解。

圖2 用變量控制兔子尺寸

圖3 二重循環示例
再如函數的引入,首先講解如何繪制一只貓頭鷹,待學生在屏幕上繪制出一只貓頭鷹后,讓學生思考如何繪制兩只、三只甚至多只大小不同的貓頭鷹,如此很順利地引入函數的概念,幫助學生在幾分鐘內就能學會使用函數。在此基礎上引入對象、信息隱藏、數據封裝、模塊化和多文件處理。學生通過為對象添加顏色、大小等屬性改變貓頭鷹外觀,用移動等方法做出運動動畫,如此,讓程序設計中較難理解的概念變得有趣且容易理解。
2.1.6 結幫對
編程是一項復雜的學習,考慮到藏漢學生學習能力的差異性,結幫對學習要求學生具有協作精神,將藏漢學生搭配成學習小組組織教與學[8],這在國內外都已經進行了實踐[9][10][11]。學生通過小組協作可以互相解決程序中的錯誤,不同的想法互相碰撞出火花,相互鼓勵,交流溝通能力和團隊協作能力都可以大大提高,學習興趣也更加濃厚。
2.2.1 分層教學和個性化培養
通過打字訓練和英文強化訓練后,藏族學生編程的基本困難得以解決,但由于文化基礎相對薄弱,在教學內容接受上還會有差異。針對這種情況,可以進行分層式教學,首先提出一個基本問題并加以講解,讓大部分學生都能夠理解并實現編程,對于接收快、反應快、很快就能完成任務的學生加以引導,讓其增加程序功能,比如修改顏色、讓圖形隨著鼠標動起來或增加其他交互功能;中等程度的學生可以完成基本功能并增加一兩個功能;而對于反應較慢的學生,耐心指導,讓其跟上教學進度。課堂上,學生繪制出基本形狀后,引導學生對圖形修改顏色、與鼠標和鍵盤交互(如讓圖形跟鼠標移動)、旋轉、移動等動畫,每個學生繪制的圖形都不盡相同,仿佛每人都是藝術大師,所以學生的學習興趣很高,基本上沒有掉隊的學生。通過層次化教學設計,使所有學生都能跟上課程,學生也不會因為一時跟不上而放棄課程的學習。
2.2.2 運用多種教學方法
教學過程中用到許多教學方法,如誘發法,通過一個個色彩絢麗的動畫編程演示,激發學生的求知欲;發散法,同一問題引導學生從不同的角度思考,引導學生發散思維,編程繪制出不同風格的作品。
2.2.3 多類型課堂練習和課后作業
采用多種類型練習題,如遷移型練習,在講解例題之后,對例題稍作修改讓學生練習,培養學生舉一反三的能力;誘導型練習,新知識點講解前,預測學生可能碰到的難點,設計誘導性練習,使學生通過練習得到啟示,循序漸進地理解難度較大的知識點;發散型練習,針對一個問題,從不同的角度和側面探求不同的解決辦法,從而激發學生的發散思維,展現個性。
2.2.4 教學技術的應用
教學中,除了講解PPT課件和軟件演示之外,還可以利用黑板和白板本畫圖進行講解。但課程教學一般在機房開展,加之新冠肺炎疫情防控期間學生坐得比較分散,后幾排學生看不到板書內容,可以利用電子教鞭和數位板進行圖示和過程,運用極域、云課堂屏幕播放功能等方式解決該問題。
2.2.5 編譯調試
程序運行難免出現錯誤,編譯調試對藏漢學生都是一個挑戰,是一個教學難點,教師要多次引導學生調試程序,修改錯誤。對于有明確提示的錯誤,指導學生查看、找到錯誤,并分析錯誤可能出現的原因;對于無提示信息的錯誤,通過添加注釋、打印信息和繪制簡單圖形等方法,幫助學生找到錯誤所在的位置。
2.2.6 改變教學模式
大多數高校程序語言設計課程的教學分為課堂理論教學、上機練習、課后作業、期中考試和期末考試五大模塊[12],理論教學與上機練習嚴重脫節,學生在上機練習時對課堂教學內容已遺忘得所剩無幾。可以嘗試改革教學方式,在機房邊講邊練,對實例進行驗證并對其進行創新改造,使理論與實踐相結合。教師講解之后,學生馬上練習,學習效果明顯提高,學生對課程學習興趣也大大提高。
2.3.1 教學資源組織
充分運用MOOC、雨課堂等教學平臺組織教學資源,提高教學效率和效果。將教學內容分解為相對獨立的知識點,制作課件,錄制微視頻,視頻時長控制在10分鐘以內,將教學資源上傳MOOC平臺和雨課堂,創設移動式教學環境,線下與線上共同開展教與學。學生通過MOOC平臺和雨課堂,可以通過視頻和課件自主學習,對不太理解的內容可以反復觀看學習;練習和作業任務通過雨課堂布置,學生完成后提交雨課堂平臺,這些都成為后續課程的教學資源和課程考核的憑據。
2.3.2 充分運用網絡
為防止學生過度上網玩游戲,機房授課時,大部分教師通常會關閉外網。但“堵”不是辦法,疏導才是正理。充分利用網絡,學生可上網查詢顏色的RGB值,在processing官網上查詢系統函數的用法,學生可以將程序代碼等內容上傳郵箱、雨課堂或百度網盤,作為自己的課程資源。通過這些方法,網絡才真正成為學生手中的工具。
依據課程目標,采用多元的考核評價方法,開展過程性評價與課程目標評價相結合,利用MOOC和雨課堂記錄的學生課堂學習考勤記錄、線上學習的時間、提交作業次數、彈幕總次數、投稿總次數、閱讀公告數、觀看課件頁數、課件哪些頁面瀏覽時間長、作業的編程功能是否有創新或改進,每次作業的評分和作業的總分、線上考試總用時,以及各道題得分等數據,可視化分析學生的學習行為,查看學生的學習進度、學習規律、作業成績以及編程中存在的問題。通過這些平時表現、作業成績、期末大作業作品等,加權計算學生課程成績。學生通過網上學習平臺、問卷調查等方式對教師教學、教學環境、教學內容等進行反饋和評價,提出建議和意見。
以形成性評價為依據,對整體教學進行反思,并不斷完善、改進教學設計。每堂課后,針對普遍存在的問題,在課堂上統一講解或錄制微視頻上傳雨課堂;針對個別問題可在課堂上單獨輔導或通過QQ聊天、QQ遠程桌面、微信視頻等方式指導學生。學期末對整個課程進行梳理,總結經驗,及時調整。
程序設計和軟件開發課程的學習是一個循序漸進的過程,在課程教學中以史密斯—雷根模型為教學模式,設計教學內容,學生記憶和理解課程基礎知識,模仿示范化例題,不斷強化熟練編程,將前期所學知識不斷應用到自己的練習和作業中,并在練習中創新和改進,從而提高學習效果[13]。從學生的課堂到課率,上機練習主動參與的積極性和線上作業提交率、完成度等可以看出,學生的學習效果、編程思維和學習興趣都大大提升。MOOC和雨課堂中的教學大數據不僅可以為課程教學提供數據,以便更好地改進完善教學,還為挖掘學生的學習潛力、研究學生的學習習慣和行為模式、為政策制定和教務部門決策等提供參考,在學生職業規劃和就業選擇等方面提供科學依據。