鄭 冰,寧鵬飛
(1.內蒙古建筑職業技術學院 公共課教學部,內蒙古 呼和浩特 010070;2. 內蒙古醫科大學 計算機信息學院,內蒙古 呼和浩特 010010)
在C語言教學中,學生借助計算思維可以實現從具體的自然語言表達問題到程序設計語言編程語句之間的映射,形成良好的計算思維方式對于后續計算機類課程的學習有非常大的幫助。語法規則和培養涵蓋編程思想的計算思維構成教學內容的主要組成部分。經過多年的教學實踐筆者發現,對非計算機專業初學計算機編程語言的學生來說,通過生搬硬套掌握C語言的語法規則相對容易。但對于計算思維部分,由于C語言偏向計算機底層的抽象特性,學生很難建立起從自然語言到符合計算思維的C語言程序之間的轉換。因此,C語言教學中計算思維的訓練成為教學中的重點難點。JiTT(Just-in-Time Teaching)模式是一種線上線下相結合的教學模式,是可行性和可操作性非常強的教與學策略,并采用一定的激勵方式結合課外學習與課堂教學。在C語言教學中,為了培養學生良好的計算思維方式,可以引入JiTT模式,尤其在難題探究階段通過循環反饋實現計算思維的培養。
關于計算思維,近年來,因為“互聯網+”“大數據”等熱門概念的出現,計算思維[1]的內涵與外延不斷豐富拓展,眾多學者更是將計算思維的理念應用在計算機教育實踐中,取得了豐碩的成果[2-3]。在計算機教育領域,計算思維是比編程思想更高一層的抽象,是將現實生活中使用自然語言描述具體問題分解為執行步驟的解決邏輯,再通過抽象符號化為計算機可以執行的邏輯指令的轉換過程。目前有針對自然語言思維的C語言教學的研究[4],但并沒有涉及計算思維的培養,也沒有與一種具體的教學方式相結合。這里討論的是針對計算機編程語言初學者的計算思維的培養,主要探討基本的程序設計語言表達的計算思維,實現從具體的、相對簡單的自然語言表述問題到C語言基本結構表達的編程語句(單個函數內部)之間的映射。例如,在屏幕上輸出九九乘法表,利用了C語言的循環結構,并引入計算思維方式。
C語言的教學目標可以歸結為掌握基本語法規則和培養包含編程能力在內的計算思維。為了更清楚地了解教學目標的完成情況,筆者進行了初步調研。以某高校非計算機專業四年制本科生為調查對象,該專業大部分學生為第一次學習計算機編程語言,隨機抽取2016級C語言程序設計期末考試試卷進行分析,在編程題中出現的錯誤類型主要有:①語法錯誤,如出現頻率較高的不事先定義變量而直接使用變量等,這類錯誤的原因是馬虎、基本知識掌握不牢固,所占比例相對較少;②與計算思維方式相關的錯誤,例如程序不夠精簡、冗余語句較多、前后邏輯顛倒、徹底不知道如何用C語言描述解決問題。另外,具體到C語言的教學重點——3種基本控制結構,對于順序結構絕大部分學生可以表達清楚,簡單分支結構也沒有問題,說明學生可以正確實現對簡單邏輯的轉換,但對于復雜的分支結構、循環、循環嵌套,則錯誤率較高,這類錯誤歸根結底是學生不會用機器的方式清楚表達邏輯,即計算思維的缺失。
綜上,計算思維的培養是C語言教學中的重點、難點,如何找到一種有效培養計算思維的教學方式是一個亟待解決的問題。
一般C語言教學目標包括了解、熟悉、掌握、綜合運用4個層次。其中,綜合運用層次的教學目標蘊含了計算思維的培養。計算思維是自動化解決問題,學生需要學會分析一個自然語言描述的問題,構建可以用計算機表達的模型,這個過程相對抽象,在C語言教學中不具有可操作性,因此需要明晰在C語言教學中培養計算思維的具體過程。從自然語言表述到符合計算思維的C語言實現的轉換過程描述如下:①自然語言表述,用自然語言表述的、有待計算機自動化解決的問題;②偽代碼,介于自然語言與計算機語言之間的表述方式,與具體的計算機編程語言無關;③符合語法規則的C語言實現,往往具有很多冗余的代碼,但是C語言的語法規則將偽代碼實現為可以運行的C語言程序,并未考慮運行效率和邏輯上的精簡,這是一種更適合于自然語言思維方式的結果;④符合計算思維的C語言實現,更符合計算機邏輯的C語言實現,具有相對較好的運行程序和精簡的邏輯關系。
對于以上過程,本文給出相應示例,例如在C語言學習嵌套分支時的經典實例:輸入一個學生成績,判斷優、良、及格、不及格,從自然語言表述到用符合計算思維的C語言程序表達,可以經過一系列轉換過程,見表1。顯然符合計算思維的C語言程序更加簡練,執行效率也更高,更符合計算思維方式。

表1 符合計算思維的C語言程序的轉換示例
以上符合計算思維的C語言實現過程需要結合恰當的教學模式才可以順利實施,筆者選擇可行性與可操作性較強的JiTT模式[5]。
基于JiTT模式的教學過程是一種線上與線下相結合的教學模式,國內翻譯為“適時教學模式”或“及時教學模式”。美國航空學院的Gregor Novak教授等人給出定義:JiTT是建立在“基于網絡的學習任務”和“學習者的主動學習課堂”二者交互作用基礎上的一種教與學的新型策略。JiTT模式的操作框架簡明易懂,下文結合實踐對其實施過程進行分析。
(1)課前預習階段。這是課前階段基于網絡媒介的“預熱”,教師在網絡上布置適量的預習內容,主要是基本知識點,能夠起到承接上節課內容并為本節課教學做鋪墊的作用,學生對教師布置的預習問題給出反饋。教師根據學生的反饋,了解學生對基本知識點的接受程度、已經具備的知識水平、自學能力等,并相應修改課堂教學內容。這個過程中,教師通過教學資源平臺上傳教學資源,學生通過教學資源平臺下載教學資源,實現異步交互,完成預習和反饋過程。通過前期的教學實踐表明[6],教學資源平臺可以采用基于Moodle的網絡支撐平臺[6]、基于BlackBoard的網絡平臺等,也可選擇目前國內比較流行的即時通訊工具,例如通過建立微信群和QQ群的方式實現。這些工具可以實現師生良好的線上互動,使教師及時接收學生反饋,缺點是需要教師建立線下的個人教學資源庫,并且缺少一些輔助的統計工具幫助教師客觀統計學生的預習情況。因此可以將成熟的網絡教學資源和即時通訊工具相結合作為網絡資源的支撐環境。
(2)課堂教學階段。教師除了進行面對面的授課之外,還要組織學生進行分組討論、實驗等教學活動。由于經過了預習階段,學生有備而來,參與活動積極性也會更高,學習的效果也會更好。根據教學目標和相應的預習反饋情況,建議采用以下的課堂教學流程:回顧上節課知識點—設置情景任務引入本節課內容—引導學生發現新知識—進行小組討論找出解決學習新知識過程中遇到的問題—課堂練習—布置課后難題探究相應問題。為了推動形成學生主動學習的生動課堂,還可以結合比較成熟的問題驅動法、討論法等教學方法。
(3)課后難題探究階段。這是檢驗前期教學效果以及提升學生能力的階段,在課后,教師可以根據學生的課堂表現,在網絡上設置題目以便開展“難題探究”。通過這一環節,學生可以鞏固課堂所學的知識,而教師可以根據反饋了解學生的學習情況,以便安排下一次課的內容和進程。實際上,由于計算機類課程內容更新較快,課時安排卻非常有限,課堂上一般只能完成基本內容的講授學習,很多教學內容無法在課堂完成,課后難題探究階段恰好是提升學生能力的關鍵階段。在掌握基本知識點的基礎上,學生在課后通過自主學習實現能力提升。
以上過程在下次新課又進入一個新的循環,JiTT模式通過循環反饋(feedback loop)機制實現螺旋上升式的知識積累。
針對C語言的教學內容,將JiTT模式應用于C語言教學中,具體可以分為以下幾步。
(1)課前預習階段。主要的是語法規則的引入,使學生明晰新課內容涉及的語法規則,這是C語言入門的基礎知識部分。例如對于循環語句for,事先引入語法規則,并強調循環條件中分號的作用。
(2)課堂教學階段。這一階段包括C語言語法規則的階段和教師基本編程技巧的傳授,例如先介紹for循環嵌套中語法規則及注意事項,再給出循環嵌套實現九九乘法表的程序實例,其中也包括對于學生計算思維方式的啟發。
(3)課后難題探究階段。這一階段是本文強調的計算思維提升訓練階段。例如結合C語言中的兩個經典習題——打印輸出九九乘法表和利用*打印輸出菱形,可以提出這樣的新問題,在屏幕上打印輸出菱形范圍內的九九乘法表。學生在解決問題的過程中需要利用計算思維,對問題進行拆解,將復雜問題分解為若干不那么復雜的兩個熟悉的子問題——九九乘法表和輸出菱形。然后子問題還可以再分解為更小的子問題,最后應用for循環嵌套和if else分支語句。
通過前述分析,將JiTT模式應用在C語言教學中,對學生計算思維的訓練提升具有可行性和可操作性,因此針對培養學生計算思維方式,可提出一個可操作的基于JiTT模式的C語言教學設計方案。該設計方案實現將課堂與網絡媒介相結合、學生自主學習反饋與教師響應反饋相結合,融入了C語言教學中的知識要點,并明確了整個教學過程中學生計算思維相關能力的提升過程,見圖1。
對于以上教學過程設計,我們在C語言教學中加以實踐,取得了良好的效果,但也存在一些需要反思的問題。

圖1 基于JiTT模式的C語言循環反饋教學過程
(1)課程資源的合理選擇問題。經過前期教學實踐及調研表明,一方面,雖然目前大部分高校具有成熟的課程資源支撐軟件平臺,但是后期課程資源的建設往往滯后,對于JiTT模式的實施,課程資源建設工作是一個需要長期堅持的過程,需要保持連續性。另一方面,對于C語言課前預習階段和課后難題探究階段的課程資源必須進行合理選擇,這對于計算思維的提升非常重要,尤其是難題探究階段題目篩選需要有具體的可操作的指導原則,實踐中往往需要課程組教師合力完成。
(2)JiTT模式的實施步驟雖然簡單,但是在教學過程中需要教師投入非常大的精力,包括進行教學過程的設計及實施、收集統計學生的反饋信息、與學生及時的互動等,因此對于整個課程內容完全實施JiTT模式不具有可操作性,也沒有必要。實踐中可以選擇C語言教學中的重點、難點,如前述提到的嵌套for循環部分,有選擇地實施JiTT模式,實現計算思維能力的提升。
需要強調的是,計算思維的培養是一個循序漸進的過程,這里只給出了一個具體的、有針對性的執行方案,實踐中需要教師在C語言的整個教學過程中潛移默化地影響學生,才能在學生初學編程語言的時候形成良好的思維方式。
在非計算機專業的C語言教學中,脫離了已經學習過的程序架構,學生不會靈活地綜合運用,學習效果差強人意,筆者分析認為主要由于計算思維的訓練不足。JiTT模式是一種操作性較好的基于建構主義的教學模式,可在C語言的教學中引入該教學模式。但是由于JiTT模式只給出了一個簡單的框架,并沒有涉及教學實施中的很多細節。針對C語言教學中計算思維的培養,我們給出了細化的實施方案,通過JiTT模式的循環反饋機制,使學生實現從概念語法學習上升到適合計算機編程的邏輯思維訓練。JiTT模式的實施步驟雖然簡單,但是在前期需要教師投入非常大的精力,要保證實施的連續性。一個學期的課程學習,僅僅能實現計算思維的引入,C語言的深入學習需要不斷編程實踐才能得到計算思維能力的真正提升。