張慶豐
【摘要】中學編程教育不同于大學編程教育,必需要另辟蹊徑,探索適合中學生的編程教學模式。本文闡述作者通過實踐,逐步摸索出一套基于訓練模型的編程教學模式,以適應中學生的教學需求。
【關鍵詞】編程教育;訓練模型;在線測評
一、國家大力推動中小學編程教育
2017年7月20日,國務院印發(fā)《新一代人工智能發(fā)展規(guī)劃》,規(guī)劃中提出分三步走的戰(zhàn)略目標,到2020年人工智能總體技術和應用與世界先進水平同步,到2025年人工智能基礎理論實現重大突破,到2030年人工智能理論、技術與應用總體達到世界領先水平,將人工智能上升到國家戰(zhàn)略。規(guī)劃中同時指出:實施全民智能教育項目,在中小學階段設置人工智能相關課程,逐步推廣編程教育。
程序設計是計算機科學的基石,它使得人們在計算機上得以實現各種想法;算法是計算機科學的靈魂,它使用巧妙的方法將程序的效率不斷得到提高,這兩者緊密合作推動計算機科學幾十年來的高速發(fā)展,將現代社會帶入人類文明的高光時刻。
人工智能是計算機科學一個重要的分支,近年來發(fā)展迅猛,在各個領域都得到了廣泛的應用。但是,人工智能的根基仍然離不開計算機科學的基礎——程序設計和算法。因此,要發(fā)展人工智能歸根結底還是要大力發(fā)展計算機科學,大力推動編程教育。
二、中小學開展編程教育所面臨的挑戰(zhàn)
中小學信息技術學科在大多數地區(qū)都是不參與考試的邊緣學科,無論是從學校的教學安排還是從家長的角度,都沒有得到足夠的重視。編程課程在高中屬于信息技術科目的選修內容,更是被視為大學計算機相關專業(yè)才應該學習的技能。這使得在大多數中小學開展編程教育非常困難。
筆者從事信息技術學科教學12年有余,高中和初中的任教經歷各占一半。除了常規(guī)信息技術課程之外,還曾開展以下編程教育課程:
1.信息學競賽:斷斷續(xù)續(xù)地帶過四屆學生——最多一屆31人,最少一屆僅有1人;2.少兒編程:Scratch校本課程和線上課程;3.創(chuàng)客教育:蘿卜圈虛擬機器人。
大多數學生都是抱著“玩一玩”的心態(tài)來參加活動,一旦遇到困難就容易退縮,造成在整個教學過程中學生人數波動很大,甚至出現期末學生人數不足開班時的十分之一的情況。問題的根源在哪里呢?有以下幾點原因:
1.唯分數論的思想導致很多優(yōu)秀的學生不敢參與進來;2.信息技術老師不愿意參與如此辛苦又難出成效的工作;3.大多數學校在編程教育方面的師資投入不足,編程教學不是學校常規(guī)教學任務,老師僅靠情懷不足以支撐長期枯燥且高難度的工作熱情;外出培訓交流的機會不多,專業(yè)能力提升太慢難以適應競賽要求;4.家長和學生普通沒有認識到學習編程的優(yōu)點,參與到編程學習的熱情不高,即使參與編程學習也常?!爸y而退”。
三、尋找問題根源,直面挑戰(zhàn)
目前,市面上有關編程教育(主要是少兒編程)的項目非常多,主要可以分為三大類:圖形化編程、機器人、信息學競賽。根據不同學段的學生的知識結構和學習特點,結合我縣的具體情況,筆者認為我縣可開展的編程教育項目可按圖1所示:
本文主要討論高中信息學競賽課程的開展,以及探索編程教學中的訓練模型,以適應高中階段的教學需求。由于大多數參加培訓班的學生在高中之前并未接觸過編程,屬于零基礎教學,因此在高中開展信息學競賽培訓會有以下幾方面的問題:
1.消除學生對編程的恐懼心理。對于高中生來說,編程學習不同于其他學科的學習之處在于:編程并不像語數英等學科一樣經過多年的學習,有了深厚的基礎,就如語數英的學習是高屋建瓴,而編程則是平地起高樓,學習難度自然不言而喻。所以,大多數學生在學習編程之前就心生恐懼,這種心理不利于學習的開展,所以消除這種恐懼心理是開展好編程教學的基礎。
2.中學編程教育不同于大學編程教育。大學里計算專業(yè)的編程課一般是在大二才開展簡單的語言學習,到大二下學期開展數據結構和算法學習,而這些科目是建立在《計算機操作系統》《高等數學》《線性代數》《離散數學》等先修課程的基礎之上。高中生不具備計算機專業(yè)相應的各種學科知識,如果按照大學里教編程語言的方法來開展編程教學的話,花費大量的時間和精力自不必說,也很難達到預期的效果。
3.可供練習的資源較少。傳統的編程練習方式是根據教材課后習題自己編寫程序,由于經驗的局限性導致測試數據往往不能較為全面地覆蓋所有的條件,導致程序的健壯性不高,經常只能得到部分分數。
4.消除學生賽前緊張情緒。由于不熟悉比賽環(huán)境和要求,學生在比賽前會有不同程度的緊張情緒,這往往導致學生在賽場出現不必要的失誤。
四、探索適合的訓練模型
大學計算機專業(yè)編程課程的教學模式并不適用于中學的編程教學,中學編程教學應該有自己的一套模式。針對以上所述問題,結合其他信息學競賽名校的經驗,筆者認為可以從下面幾個方面進行探索,并結合實踐加以完善:
1.日常教學
中小學生對枯燥的編程理論的重要性缺乏相應的認知,如果以理論作為切入點往往導致學生望而生畏,用不了幾節(jié)課學生就會打退堂鼓。筆者認為可以效仿少兒編程,把課堂學習變成有趣的探索,讓學生在不知不覺中學到知識。以故事或者學生較有認知共性的事情為外表來構建題目,學生在熟悉的背景中學習新的知識,降低了理解新知識的難度。
例1:在講授遞歸算法的時候,以學生耳熟能詳的“山上有座廟,廟里有個老和尚,老和尚在和小和尚講故事:山上有座廟,廟里有個老和尚,老和尚在和小和尚講故事……”——《山上有座廟》為背景來闡述遞歸算法“自己調用自己”的層層嵌套關系,進而引出如何終止遞歸——設定“遞歸邊界”;
例2:在講一維數組的時候,以《熊出沒》的人物來設置題目:又到過年了,狗熊嶺的動物們都忙碌起來,張燈結彩準備過年。李老板卻要光頭強砍一些百年美人松回去。美人松都是很高的,它們的高度不超過長整型?,F在光頭強看到叢林里有N棵美人松,當然每棵松的高度是已知的,李老板要問光頭強:高度為K的美人松有多少棵?
2.課堂與課后練習
所有說“21天學好一門編程語言”的書都是在耍流氓。編程語言的學習來自于不斷地練習和經驗總結,沒有足夠的代碼量是絕對不可能學得好的。編程學習不同于其他學科的“紙上談兵”,程序寫得好不好,拿到計算機上跑一跑就知道。因此,編程練習在整個教學活動中是非常重要的,針對不同的學習階段可以做如下安排:
a)C++語法學習階段——教材《信息學奧賽一本通》例題、一本通OJ、自建OJ;
b)基礎算法學習階段——一本通OJ、洛谷OJ、自建OJ;
c)數據結構學習階段——一本通OJ、洛谷OJ、自建OJ;
d)進階算法學習階段——LOJ、UOJ
e)賽前一個月——舉辦模擬賽
3.模擬賽
OJ(在線測評系統)雖然可以為學生提供練習和反饋,但是和真正的比賽環(huán)境還存在一定的差別。因此,需要使用單機測評軟件模擬真實比賽,讓學生熟悉比賽機制,減少參加比賽時因不熟悉環(huán)境所產生的緊張和失誤。
學生通過各種在線OJ進行練習,可以及時得到反饋,進而調試代碼改正錯誤;通過自建OJ完成作業(yè),老師可以掌握學生的學習情況,進而有針對性地調整教學方案。綜合以上所述,形成圖2所示的“編程教學訓練模型”。這個模型形成編程學習的閉環(huán),學生能夠逐漸養(yǎng)成有效的自學行為,不斷提高自身的編程能力和解題技巧。