孔維廣,魏媛媛,李 帆,鄧在輝,陳常念
(武漢紡織大學 數學與計算機學院,湖北 武漢 430074)
普通高校計算機專業的學生必須打下堅實的計算機程序設計基礎,C語言是許多高校的第一門計算機程序設計課程。由于C語言本身的特點以及課時的限制,許多學生尤其是地方高校的學生在學習的過程中遇到較多的問題,學習效果不理想[1]。如何利用有限的資源因材施教,積極探索先進的教學方法來提高教學質量將是研究的重點。國內外產生了大量的研究成果,這些工作可分為政策型研究和教學型研究兩種,其中教學型研究主要是從具體的計算機教學過程入手進行教學方案的創新[2]。文獻[3]在C語言程序設計教學過程中對計算思維進行新的解構,以適用于目標教學;文獻[4]將計算思維融入教學案例設計和啟發式C語言語法教學;文獻[5]主要研究CDIO模式在C語言教學模式上的應用,這些研究都要求堅實的程序設計基礎知識。本文研究的重點是如何改進教學過程,讓地方院校的學生高效地獲得扎實的基礎知識。
地方院校的部分學生高中階段的數學物理基礎參差不齊,邏輯和抽象思維能力不足,缺乏良好的學習習慣,但C語言程序設計教學組織未按零起點來安排,加上課時數有限,導致教學效果不理想。
從學生的角度來看,C語言程序設計學習過程中存在的主要問題有知識點理解和記憶困難,有限的課時內學習效率偏低,課后練習困難大,綜合練習困難更大,同時日均代碼量和最大程序代碼行數均不足。導致出現這些問題的一部分原因是學生的自主學習能力不足,主要原因是教學方法未達到因材施教的效果。
DEIPE 是 演 示(demonstration)、 講 解(explanation)、 模 仿(imitation)、 獨 立 實 踐(practice)和強化(enhancement)這幾個單詞的縮寫,將教學過程分成5個串行環節,如圖1所示。

圖1 DEIPE示意圖
演示環節主要任務是讓學生快速明白本次教學要研究的問題、問題解決方案和解決方案的效果。在C語言程序設計課程中,對研究問題的選擇實際上就是案例的選擇,而本次教學任務所要教授的主要知識點均蘊藏在此案例的解決方案中,因此該環節的要點是精選合適的案例。
在案例演示結束之后,學生應該已經明白本次學習要解決的問題以及問題解決方案所得到的正確結果,然后進入講解環節,此環節包含本次課程要傳遞給學生的所有知識點以及分析在案例的解決方案中如何對知識點進行組合運用。
前兩個環節以教師為主導,由教師控制案例的選擇、知識點的講解和分析,學生以接受和理解為主。模仿環節則將教學主角讓給學生,讓學生動手,完成案例的解決方案。C語言程序設計非常適合這種情景,在學生聽懂解決某個問題的程序后,讓其動手完成這個程序往往存在各種各樣的障礙,模仿環節則是消除這種障礙的主戰場。教師在模仿環節的角色轉化為檢查和監督,可以對整體教學效果和個體學習效果進行階段性檢查,并進行反饋,如可以發現和解決個體所遇到的個性化障礙,也可以發現和解決整體性的困難和障礙。模仿環節是本教學方法中最為關鍵的環節。
模仿環節成功結束表示學生已經基本掌握本次教學知識點,緊接而來的是獨立實踐環節,也就是給學生一個類似的任務,由學生當場獨立解決。學生在前一環節模仿的基礎上,加以變通即可獨立完成新的任務,學生成為學習的主角,遇到問題既可以自行返回到上一環節尋求幫助,又可以找教師尋求幫助;教師在此環節的任務是指導,即在學生遇到變通運用障礙的關鍵點上指導其變通運用,若發現整體性的問題可返回到相應環節進行補充講解。獨立實踐環節的要點是選擇合適的任務并合理安排任務數量。
獨立實踐環節的成功結束可以判定學生已掌握此次教學知識點。前4個環節在時間上應相對緊湊,以對抗人類的遺忘曲線。對于獨立知識點的教學而言,一般應以前4個環節能夠在一個課堂教學單位中完成作為教學安排的原則。
強化環節是獨立實踐環節的延伸,一般體現為課后作業,此環節在時間上覆蓋兩次教學活動的時間間隔,其難度與前面環節相比可以略有梯度,讓學生在強化的過程中感受到自己的進步,從而最大程度地激發學習興趣。
DEIPE教學方案的5個環節具有嚴格的前后邏輯關系,在后繼環節遇到障礙可以回溯前導環節,這種回溯既可以在教師的指導下完成,又可以由學生自主完成。模仿、獨立實踐和強化3個環節中學生的參與程度逐漸提高,啟發和研討活動則在獨立實踐和強化兩個環節中廣泛存在。一個完整流程完成之后,學生往往能達到對當次知識點的充分掌握。
武漢紡織大學將C語言程序設計分為I、II兩個階段,在第一學期開設48課時的C語言程序設計(Ⅰ),重點教授獨立的知識點;在第二學期開設32課時的C語言程序設計(Ⅱ),重點通過案例教學提升綜合編程能力。配套的支撐措施包括采取小班實驗室教學的形式組織課堂教學;平時作業采用可重復刷分的在線練習系統;考試方式采取機考方式。
以while循環為例說明獨立知識點的教學情況,教案設計流程如下。
1)演示。
問題選擇為“使用格雷戈里公式求π的近似值”,演示while循環實現程序,并觀察不同精度的計算結果。這一環節告訴學生今天要解決的問題是什么,因為學生很容易理解求π的近似值這個問題,但對計算機解決此問題的方法還一無所知,所以均表現得興趣盎然。
2)講解。
此環節要講解主要的知識點,如循環的意義、循環流程圖的表示方法以及while語句表示循環的技巧與語法,配合1~2個畫流程圖和寫語句的練習來理解;然后進入演示程序,講解演示程序的流程圖和語句表示,讓學生能讀懂演示程序。
3)模仿。
此環節要求學生當場在限定的時間內完成演示程序的流程圖和代碼并運行出結果。此環節會遇到各種問題,因此也是排除問題的主戰場,教師的重點是盡可能發現問題并當場解決問題,提前完成的學生還可以進行調整精度的試驗。
4)獨立實踐。
此環節要求學生當場完成求階乘程序和統計整數位數程序。此階段學生會有主動思考,教師的主要任務是幫助學生跨越障礙。
5)強化。
此環節要求學生課后作業完成判斷素數程序和多次猜數游戲程序,還有一些選做題。此階段學生會有主動探究,教師的主要任務是檢查作業情況,解決發現的問題并交流有創意的解決方案。檢查作業的工作可以交給在線練習系統,通過系統對學生作業給出評分,作為平時成績的依據。由于練習可以反復刷新,并且期末考試的編程題就是機考模式,能極大地提高學生練習的積極性。
在綜合編程能力教學階段,采用基于鏈表的綜合應用案例,如基于鏈表的學生信息管理系統,涵蓋讀寫文件、記錄的增刪改查等功能,代碼總量一般在300行以上,完善的代碼可達到1 000行以上。案例被分解成5個模塊,分別是增加記錄、讀寫文件、刪除記錄、修改記錄和查詢記錄,每個模塊在一次教學單元中完成演示、講解和模仿3個環節,完成以后再進行整個案例的獨立實踐,也就是完成一個新的基于鏈表的信息管理系統,并要求學生在課后自行進行反復練習與改進。第2學期的期末考試設置為在3小時內當場完成一個基于鏈表的信息管理系統。經過這個案例教學過程,學生的單個程序代碼量迅速上升,多數學生的程序代碼能達到500行以上,設計中大型程序的畏難心理消除,編程能力得到極大提升。
根據學習金字塔理論不同方式的學習效果[6],DEIPE教學方案在演示和講解環節采用的基本屬于被動學習方法,模仿環節屬于金字塔的“實踐”方式,獨立實踐環節和強化環節屬于金字塔的“應用”學習方式,在學習金字塔中均屬于兩周后學習內容平均保存率比較高的方式,見表1。

表1 DEIPE教學環節與學習金字塔理論對照
DEIPE教學方案支持“做中學”和“實際演練”,符合流行的CDIO理念,并且能很好地支持項目驅動式教學[7]。
武漢紡織大學數計學院C語言程序設計課程組由5名教師組成,教師團隊由課程組教師以及另外的10名教師組成,所有教師至少具備5年以上C語言教學經驗,部分教師具備15年的C語言程序設計教學經驗。從2015年至今,3年完整的以DEIPE教學方案為主要內容的教學改革取得了良好效果。通過廣泛調查,師生的主觀感受發生巨大的變化,主要變化見表2。

表2 DEIPE教學方案推行前后師生的主觀感受對照
在考試成績方面,以武漢紡織大學數計學院2014級全體學生(368人,課程教學改革前)和2017級全體學生(384人,課程教學改革第3年)的第一學期期末考試卷面分分布比例數據作一個對比,試卷題型和分值相同,都是選擇20分,填空10分,判斷10分,程序填空20分(2題),程序設計40分(4題),試卷難度相當。卷面得分分布比較情況見表3,可以看出,高分區人數比例增多,低分區人數比例減少。

表3 教學改革前后第一學期期末考試卷面分分布比例抽樣對照
C語言程序設計課程實踐性強,通過DEIPE教學方案能夠顯著提高學習效果以及學生的年度總代碼量和最大單個程序代碼量,有利于計算思維培養和創新能力培養,符合教學方法的發展趨勢,符合新時期培養目標的要求[8],對類似院校的C語言程序設計課程教學具有較好的參考意義。