劉寶龍 王煒達
摘? ?要:編程教學能有效培養(yǎng)學生的邏輯思維、編程思維和計算思維。學校在開展相關(guān)教學實踐活動時,需通過分析C++編程課程的優(yōu)勢,制定合理的課程內(nèi)容及教學策略,培養(yǎng)學生的計算思維。與此同時,學校與教師要做好編程教學內(nèi)容儲備、采取靈活得當?shù)慕虒W方法,幫助學生在輕松愉悅的學習過程中理解和掌握知識。
關(guān)鍵詞:編程教學;C++語言;計算思維
中圖分類號:G622.3? ? 文獻標識碼:A? ? 文章編號:1009-010X(2022)18-0042-04
一、引言
隨著人工智能理念的滲透和運用,人類的生產(chǎn)、生活和學習都逐漸智能和便捷。編程是實現(xiàn)人工智能的核心和基礎(chǔ),人類一切構(gòu)思設(shè)想都依賴于程序代碼來實現(xiàn),同時,編程語言學習是人工智能發(fā)展過程中不可或缺的基本要素。2017年國務(wù)院印發(fā)的《新一代人工智能發(fā)展規(guī)劃》對人工智能教育的發(fā)展作出了工作要求和計劃,明確提出要讓中小學生學習人工智能課程,讓編程教育逐漸在中小學普及開來。由此可見,推廣編程教育已經(jīng)得到了國家層面的高度重視。
基于以上背景,筆者參與的相關(guān)課題項目在校內(nèi)以社團課的形式開展了為期一年的C++編程教學實踐。通過課堂實踐,探索適合小學生的C++編程學習內(nèi)容和教學方法,并嘗試從圖形化編程到使用代碼編寫程序的升級和轉(zhuǎn)變,培養(yǎng)學生的邏輯思維和計算能力。
二、學習C++編程的優(yōu)勢
目前,面向小學生的編程課程主要有兩類,一類是以培養(yǎng)興趣、鍛煉思維為主的圖形化編程,一類是針對開源硬件或機器人競賽項目的實體設(shè)備編程。此外,還有基于Python、C++等高級編程語言的計算機編程教學,但該類實踐相對較少。筆者認為,小學階段C++編程實踐教學較少的重要原因在于C++語言學習周期略長,小學生可能無法在短期內(nèi)獲得顯見的成就,而語法結(jié)構(gòu)和認知難度等因素并不是主要的阻礙因素。
(一)C++語言更適合初學者
C++語言涵蓋了幾乎所有編程語言的基礎(chǔ)概念,從數(shù)據(jù)類型到語法,從循環(huán)邏輯到面向?qū)ο?,所有概念都表達得非常清晰,這對初學者而言是非常重要的。同時,C++語言的標準庫相對較少,初學者不僅可以學習如何使用工具庫,而且可以學習編程語言的本質(zhì)內(nèi)容,雖然小學生學習起來有一定的難度,但堅持學習則有利于編程思維的快速提升。
(二) C++語言更適合競賽
C++在兼容C語言的基礎(chǔ)上增加了標準模板庫和面向?qū)ο髢纱筇匦?,標準模板庫為程序開發(fā)提供了非常好用的工具,在競賽中使用C++語言,并不需要選手完全掌握C++語言的全部知識,同時也不涉及一些較難的內(nèi)容。全國青少年信息學奧林匹克競賽(簡稱信息學奧賽)作為高中階段五大學科競賽之一,其獎項含金量和在各高校中的認可度都很高。該項競賽由中國計算機學會(CCF)主辦,并規(guī)定自2022年起將C++程序語言作為全國青少年信息學奧林匹克競賽唯一編程語言。為此,小學階段開始學習C++編程也可以幫助有意愿參加信息學奧賽的學生打牢基礎(chǔ),做好鋪墊。
三、課程內(nèi)容及教學策略
(一)C++編程課程內(nèi)容
筆者開展的C++編程教學內(nèi)容主要參考了潘洪波編著的《小學生C++趣味編程》、林從厚編著的《課課通(C++)》兩本書。其中,《小學生C++趣味編程》一書,其課程內(nèi)容設(shè)計以程序為中心、以概念理解和常見算法掌握為重點,每節(jié)課都由一個實際任務(wù)需求引出,通過該實例程序展示所教授的新的語法或算法知識點。
課程設(shè)計以“程序”為主干,語法內(nèi)容按照“用到講到”編排,即由示例程序帶出必要的概念和知識點,主動舍棄和回避超越小學生能力范圍的繁枝細葉,注重基礎(chǔ),力爭讓普通小學生都能聽懂、掌握,體驗到成功的喜悅。
(二)C++編程教學策略
1.注重提升課內(nèi)教學效果。C++編程教學不同于語數(shù)外等學科教學,是由于大部分家長不能進行課后輔導,因此,課堂學習是學生掌握知識的主要途徑。在 “雙減”政策背景下,為不加重學生學習負擔,筆者在開展C++編程教學時堅持課前充分組織教學內(nèi)容、課上精講精練、課后不布置作業(yè)及安排自學,即教學的重點在于教師的課前準備和課上的高效教學(見下圖)。
上圖中,學習任務(wù)單的作用在于幫助學生課上快速梳理概念知識和鞏固練習語法、算法,同時節(jié)省大量學生做課上筆記的時間,提高課堂教學效率。此外,每節(jié)課的學習任務(wù)單主要包括基礎(chǔ)概念填空、閱讀程序?qū)懡Y(jié)果、程序完善和自主編寫程序四項內(nèi)容,其難度適中,是最適宜的學習支架。例如,在講解選擇結(jié)構(gòu)if語句一節(jié)課時,首先教師通過“輸入一個200以內(nèi)的整數(shù)作為IQ值,判斷是不是天才”的案例程序?qū)胄抡n,引出并講解關(guān)系表達式和關(guān)系運算符的概念;其次學生填寫學習任務(wù)單,完成“像60(n>=60)、n%2==0這樣的表達式;最后教師講解if語句的基本格式和用法,進行閱讀程序?qū)懡Y(jié)果、完善程序、上機實地測試程序等練習。
2.注重結(jié)合數(shù)學學科知識。計算機編程是數(shù)學邏輯在機器上的最終實現(xiàn),人工智能是數(shù)學知識的高階運用。小學生高年級學生已經(jīng)掌握了一定的數(shù)學基礎(chǔ)知識,學習C++編程應(yīng)該盡量與這些數(shù)學問題相結(jié)合,讓學生感受到計算機程序能夠解決很多數(shù)學實際問題。例如,“閏年的判斷”是人教版小學數(shù)學三年級下冊第六單元“年月日”一課的拓展內(nèi)容。在小學三年級數(shù)學教學中,教師一般對閏年的計算方法總結(jié)為:“普通的年份要能被4整除,如果是整百的年份要能被400整除”。我們將此內(nèi)容作為if嵌套語句中的練習題,讓學生快速將數(shù)學中的判斷方法與if嵌套相結(jié)合編寫程序,理解掌握語句的使用。在講解“邏輯變量和邏輯運算符”一節(jié)課時,教師會再次將此數(shù)學問題提出,讓學生使用邏輯運算符對程序進行改寫,即x%400==0||x%4==0&&x%100!=0。對比兩個程序,學生會很容易發(fā)現(xiàn)使用邏輯運算符同時對多個條件進行判斷能夠大大簡化程序。可見,程序編寫的方法具有很強的多樣性和開放性。
3.注重激發(fā)學生學習興趣。20世紀偉大的物理學家愛因斯坦曾經(jīng)說過:“興趣是最好的老師”。在小學階段開展C++編程教學能否取得實效,興趣則起著決定性作用。在教學實踐中我們發(fā)現(xiàn),大部分C++編程社團中的活躍分子不僅癡迷于電腦游戲,而且還有很強的模仿和自主學習能力。為進一步激發(fā)學生的學習興趣和探究欲望,我們在第二單元順序結(jié)構(gòu)中多次以實現(xiàn)用戶登錄判斷為實例進行教學,從能夠判斷輸入純數(shù)字密碼到能夠判斷輸入符合網(wǎng)絡(luò)安全要求的“字母+數(shù)字+特殊符號”字符串密碼,使同學們對C++中“常變量”的概念理解更深刻、使用更熟練。
四、教學反思和啟示
通過近一年的C++編程教學實踐,我們切身感受到社團內(nèi)的大部分學生能夠在輕松愉悅的學習過程中理解和掌握C++語言的簡單語法和常用基礎(chǔ)算法,以程序為中心、以高效課內(nèi)教學為保障的教學實踐取得了很大成功。同時,課堂實踐也反饋出一些問題,比如:課程內(nèi)容還需要進一步精煉和完善,需要提供更多的課程資源;部分學生在遇到相對抽象的概念以及略為復(fù)雜的語法算法時,情緒急躁,缺少探究問題、解決問題的內(nèi)驅(qū)力和自信心;由于教師缺少小學C++編程教學經(jīng)驗,對部分知識的處理過于簡單,沒有真正落實到培養(yǎng)小學生編程思維、計算思維的目標上。因此,任何教學活動都需要在不斷實踐和反思中得到提升,小學C++編程教學實踐也給我們帶來很多啟示和思考空間。
(一)做好教學內(nèi)容儲備
目前針對小學生的C++編程教材還很少,學校開設(shè)這方面的課程需要由教師自行編排授課內(nèi)容。我們發(fā)現(xiàn),通過各種途徑收集整理后的教學內(nèi)容并不系統(tǒng)和完整,容易出現(xiàn)重要知識點遺漏、教學隨意性強等情況。筆者認為,小學C++編程教學一定要做好充分的教學內(nèi)容設(shè)計。首先應(yīng)設(shè)計單元教學實例,即通過整個單元教學初步完成一個比較完整的實例程序,體現(xiàn)程序設(shè)計的模塊化思想。其次要精選課上練習題目。雖然上機調(diào)試程序是必須要安排的環(huán)節(jié),但為了提高課上效率,可以適當在學習任務(wù)單上再多設(shè)計一些“閱讀程序?qū)懡Y(jié)果”和“完善程序”習題,其中,容易出錯的題目可以到Dev-C++軟件中進行驗證。
(二)重視學員遴選
報名參加C++編程社團的學生很多,雖然大部分學生之前都學習過類似于scratch的圖形化編程,但C++和scratch的學習難度存在一定梯次,很多學生輕視了兩者的學習差異;部分學生的邏輯思維理解力還不能滿足學習的要求;有些學生并不是真正對計算機編程感興趣,而是僅僅前來感受社團學習的氛圍。為此,若以社團形式進行C++編程教學,就一定要重視學員遴選。在開班前可以通過多種形式的測試進行選拔,除考察學員的邏輯思維能力和數(shù)學思維能力外,還要有一定的程序代碼錄入能力。
(三)以培養(yǎng)學生計算思維為最終目標
由教育部基礎(chǔ)教育課程教材專家工作委員會普通高中課程標準修訂組制定的2017版《普通高中信息技術(shù)課程標準》,提出將“計算思維”作為信息技術(shù)學科四大核心素養(yǎng)之一。計算思維的實踐可以幫助學生養(yǎng)成持續(xù)學習、嘗試多角度解決復(fù)雜問題,甚至提出新問題的能力。計算思維是個體運用計算機科學領(lǐng)域的思維方法和在形成問題解決方案的過程中產(chǎn)生的一系列思維活動。自2006年周以真教授提出計算思維的概念后,人們在教育領(lǐng)域?qū)λM行了長期探索,其中谷歌提煉出來的計算思維四個核心要素具有較強的代表性。
通過實踐我們發(fā)現(xiàn),在C++編程教學中培養(yǎng)學生計算思維是一個非常理想的途徑。例如,在講解“編寫程序計算1+2+3+4+5……+n的和”的問題時,可按照計算思維四個核心要素提供的方法引導學生進行思考。首先將問題分解為用戶輸入n的值、計算數(shù)列的和及計算輸出結(jié)果三個部分,再引導學生觀察數(shù)據(jù),從中找出相同的模式、趨勢和規(guī)律。該數(shù)列為一個等差數(shù)列,假設(shè)n為10,我們會發(fā)現(xiàn)1+10=11,2+9=11等等,這樣就可以得到5個11, 那么結(jié)果為11×5=55。1+10=11,2+9=11等就是一種模式和規(guī)律。根據(jù)上面的模式識別,我們可以發(fā)現(xiàn)此問題即求一個等差數(shù)列n項之和的問題,求和公式為或。解決此問題的程序算法有兩個,由于求和公式已知,可以使用C++中的算數(shù)表達式表示該公式進行計算,輸出計算結(jié)果。但在計算機程序中我們更習慣于使用for循環(huán)結(jié)構(gòu)來解決這個問題,循環(huán)條件為i<=n,最后輸出計算結(jié)果。顯而易見,整個問題的解決都是在計算思維框架下完成的,計算思維有助于將復(fù)雜問題模塊化,以及發(fā)現(xiàn)或者洞察出隱藏在事物背后的聯(lián)系。
五、結(jié)束語
小學生學習編程并不完全是為了將來成為程序員,而是在學習中開發(fā)智力、培養(yǎng)創(chuàng)造力,學會運用計算思維解決問題,因此,學會編程就等于擁有了一筆巨大的財富。雖然C++語言對于小學生來說其語法概念和算法邏輯有一定難度,但實踐證明只要課程內(nèi)容難度編排適度、教學方法靈活得當,學生就能夠在愉悅的氛圍中實現(xiàn)探究學習。在小學階段開設(shè)C++編程課程將是培養(yǎng)學生編程思維和計算思維的全新途徑。
參考文獻:
[1]孫媛媛.移動終端支持下的家校互動平臺設(shè)計研究[D].煙臺:魯東大學,2019.
[2]潘洪波.學會編程 開始思考世界上的一切過程——小學生《C++趣味編程》校本教材開發(fā)研究[J].中小學信息技術(shù)教育,2017,(09).