賈金元 武小龍
摘? 要 闡述計算思維的內(nèi)涵,對面向計算思維的高中編程培養(yǎng)教學(xué)模式及教學(xué)案例進行分析,給出面向計算思維的高中編程培養(yǎng)路徑;通過讓學(xué)生了解和掌握編程知識和基本的C++語言算法,提高學(xué)生的信息素養(yǎng),有效培養(yǎng)學(xué)生的計算思維。
關(guān)鍵詞 計算思維;C++;編程教學(xué);信息技術(shù);校本課程;任務(wù)驅(qū)動
中圖分類號:G632? ? 文獻標識碼:B
文章編號:1671-489X(2020)03-0106-03
1 前言
隨著大數(shù)據(jù)時代的到來,計算思維作為一種解決問題、設(shè)計系統(tǒng)、理解人類行為的綜合思維模式,受到社會各界的關(guān)注,對計算思維的培養(yǎng)和探索也成為當前基礎(chǔ)教育關(guān)注的熱點。教育部發(fā)布的《關(guān)于全面深化課程改革 落實立德樹人根本任務(wù)的意見》指出,信息網(wǎng)絡(luò)技術(shù)突飛猛進,時代和社會發(fā)展需要進一步提高國民的綜合素質(zhì),培養(yǎng)創(chuàng)新人才[1]。從教育部在2018年頒布的信息技術(shù)新課程標準中可以看到,信息技術(shù)課程從內(nèi)容上已大幅減少基本軟件的教授,而是緊跟信息技術(shù)的發(fā)展,提出要培養(yǎng)學(xué)生的信息意識、計算思維、數(shù)字化學(xué)習(xí)與創(chuàng)新及信息社會責(zé)任,同時開設(shè)人工智能、開源硬件、3D打印等選修課程。
在高中階段開展編程教育,培養(yǎng)計算思維,在各大重點高中相對比較受重視,這從每年參加NOIP的人數(shù)和進入國家集訓(xùn)隊的數(shù)量上就可以看出來。高中階段學(xué)習(xí)C++語言,基本是以校本課程的形式存在,學(xué)生大部分是準備去參加信息學(xué)競賽。目前市面上的教材可大體分為兩類:一類是專門供程序員學(xué)習(xí)的語法參考書,教授程序設(shè)計思想;另一類是側(cè)重于信息學(xué)競賽的教材。大部分所選編程實例用于語法規(guī)則的驗證和偏重于數(shù)學(xué)知識方面,兩者之間沒有很好地銜接。高中生由于數(shù)學(xué)基礎(chǔ)較薄弱,往往吃不透、用不活,知道語法規(guī)則但是無法解決問題,究其原因是教學(xué)過程中不關(guān)注計算思維的培養(yǎng)。
基于此,筆者提出在高中開設(shè)編程課程,一方面可以教給學(xué)生基礎(chǔ)程序設(shè)計語言的語法知識,另一方面可幫助學(xué)生提高算法設(shè)計能力。
2 相關(guān)概念
計算思維? 2006年,美國卡內(nèi)基·梅隆大學(xué)的周以真教授在Communications of the ACM雜志上首次提出計算思維的概念。他認為計算思維是運用計算機科學(xué)的基礎(chǔ)概念,求解問題、設(shè)計系統(tǒng)和理解人類行為的一系列思維活動,其本質(zhì)是抽象和自動化[2]。2012年,美國麻省理工學(xué)院媒體實驗室提出計算思維的三維框架,包括計算概念、計算實踐和計算觀念三個維度,引發(fā)了計算思維實踐層面的研究和評價[3]。因此,高中階段對學(xué)有余力的學(xué)生進行C++編程教學(xué),具體要從培養(yǎng)學(xué)生問題求解思路、創(chuàng)新思維和對問題的形式化描述上入手。
編程教學(xué)? 為什么要選擇C++作為編程教學(xué)的語言?因為C++語言更接近于底層,語法雖然比較復(fù)雜,但對于已初步具備高階思維的高中生而言,C++學(xué)習(xí)可以為將來以后的語言(Python、Java等)學(xué)習(xí)打下良好的基礎(chǔ);通過編程教學(xué),逐步領(lǐng)會算法在程序設(shè)計中的重要作用。培養(yǎng)學(xué)生計算思維的目的是讓學(xué)生養(yǎng)成以計算思維的角度來思考并解決問題,可以采用多種方式培養(yǎng)學(xué)生的計算思維能力。
在傳統(tǒng)的教學(xué)模式中,教師會先講授基本語法,然后讓學(xué)生通過上機進行相關(guān)知識點的練習(xí);學(xué)生往往感到學(xué)習(xí)難度較大,難以入門,甚至導(dǎo)致喪失學(xué)習(xí)的積極性,不利于培養(yǎng)自主學(xué)習(xí)和自主思維能力。用計算思維的理念重新審視編程教學(xué),利用現(xiàn)有的課程,讓學(xué)生掌握程序設(shè)計背后蘊含的計算思維。編程教學(xué)的最終目的是讓學(xué)生掌握解決現(xiàn)實生活中真實問題的方法,編程能力則是計算思維和能力運用的綜合體現(xiàn)。
3 面向計算思維的高中編程教學(xué)模式及教學(xué)案例分析
計算思維教學(xué)模式流程圖如圖1所示。面向計算思維的高中編程教學(xué)模式的教學(xué)流程及任務(wù)設(shè)計主要包括課堂教學(xué)環(huán)節(jié)及各環(huán)節(jié)教學(xué)任務(wù)設(shè)計兩部分。高中階段開設(shè)C++校本課程,對訓(xùn)練學(xué)生計算思維很有幫助。在教學(xué)過程中,通過設(shè)計案例,采用任務(wù)驅(qū)動式教學(xué)方法,讓學(xué)生發(fā)現(xiàn)問
題;在講授的時候把算法與計算思維緊密結(jié)合起來,給學(xué)生講清楚實際問題中蘊含的計算思維及算法。比如利用棧的數(shù)據(jù)結(jié)構(gòu)來處理車廂調(diào)度問題,利用弗洛伊德算法解決最短路徑問題等,把計算思維融入解決實際生活問題的過程中,讓學(xué)生不再是從理論上學(xué)習(xí),而是更多地將注意力集中在分解問題和解決問題的過程中,并結(jié)合數(shù)學(xué)學(xué)科知識如數(shù)論、圖論等進行學(xué)習(xí)。
教學(xué)內(nèi)容? C++程序中的for語句和while語句。
教學(xué)目標? 了解循環(huán)的概念,理解為什么循環(huán)是編程中的一種重要控制結(jié)構(gòu);學(xué)習(xí)如何使用C++中的for和while語句來編寫循環(huán),以及每一個語句類型的使用時機,掌握常用的循環(huán)模式;找出循環(huán)規(guī)律并設(shè)計算法,利用循環(huán)語句解決實際程序問題,進一步訓(xùn)練邏輯思維、計算思維能力。
教學(xué)設(shè)計
1)課程導(dǎo)入。帶領(lǐng)學(xué)生回顧上一節(jié)課學(xué)習(xí)的選擇結(jié)構(gòu)程序設(shè)計,在猜商品價格的游戲案例中,利用if語句實現(xiàn)判斷猜測數(shù)字是大了、小了還是對了,和學(xué)生一起,邊講邊寫出利用if語句的猜數(shù)字程序。但是程序只能猜一次就結(jié)束,如果想重復(fù)猜測該數(shù)字,直到猜對價格為止,用程序如何實現(xiàn)呢?
2)介紹循環(huán)的概念,循環(huán)其實就是需要有限次重復(fù)執(zhí)行的程序段,如日夜更迭、四季交替等大自然中的循環(huán)。以操場上一圈一圈跑步為例,引導(dǎo)學(xué)生寫出程序(略)。
3)分步點評學(xué)生寫出的程序,分析for語句循環(huán)示例,找出循環(huán)的規(guī)律和要素。
4)重點講解while語句的語法結(jié)構(gòu),讓學(xué)生明白,編寫循環(huán)語句,類似做填空題,要把循環(huán)要素填到相應(yīng)的位置。在程序演示環(huán)境下,逐步找出循環(huán)體,結(jié)合while語句語法,寫出下面程序,設(shè)置while的循環(huán)條件為空,讓學(xué)生來填:
#include
using namespace std;
int main()
{
int truePrice,caiPrice=0,i=0;
cout<<”請輸入一個數(shù),這個數(shù)字是商品的真實價格”< cin>>truePrice; cout<<”請輸入你猜的數(shù)”< while(讓學(xué)生來填) { i++; cout<<”參與者”; cin>>caiPrice; if(caiPrice>truePrice) { cout<<”大了”< } else if(caiPrice { cout<<”小了”< } else { cout<<”恭喜你,猜對了,共猜了”< endl; } } return 0; } 通過猜商品價格,可以激發(fā)學(xué)生的學(xué)習(xí)興趣,讓他們有種躍躍欲試的感覺,最終得出答案,循環(huán)條件是:truePrice!=caiPrice。 5)引導(dǎo)反思:如果每人最多可以猜7次,超過就算輸,如何修改程序? 4 面向計算思維的高中編程培養(yǎng)路徑 創(chuàng)設(shè)情境,分層教學(xué)? 在教學(xué)過程中,針對有些比較難掌握的概念,教師可以創(chuàng)設(shè)情境、分層教學(xué)。比如有個關(guān)于循環(huán)語句的訓(xùn)練題:假設(shè)所有的燈都是關(guān)著的,編號為1的人走過來,把是1的倍數(shù)的燈全部打開;編號為2的人把是2的倍數(shù)的燈全部關(guān)上;編號為3的人又把是3的倍數(shù)的燈開的關(guān)上,關(guān)的開起來……直到第N個人為止?,F(xiàn)在問:如果給定一個數(shù)N,那么在N輪之后,還有哪些燈是開著的? 這樣的題目讓很多學(xué)生感到無從下手,因為如果N是個位數(shù),還可以手動算,教師可以讓10個學(xué)生手拉手排成一排,模擬這個算法的運行。編號為i的燈只會被它的約數(shù)所操作,而它最后是開著的,所以說一定被操作了奇數(shù)次。只有一個數(shù)是完全平方數(shù),其約數(shù)才是奇數(shù),所以只要輸出i到N中的完全平方數(shù)就可以。通過這樣的教學(xué),部分學(xué)習(xí)程度較好的學(xué)生已經(jīng)可以寫出來,然后讓這幾個學(xué)生講解一下算法,全班進行點評。 加大對實驗程序調(diào)試的指導(dǎo)力度? 編程教學(xué)最重要的是能夠上機并調(diào)試出正確的程序。因此,要指導(dǎo)學(xué)生切勿眼高手低,在剛開始學(xué)習(xí)的時候一定要多上機,只有通過上機,才能發(fā)現(xiàn)問題。比如對于小數(shù)點位數(shù)的輸出,C和C++輸出語句不同,都可能導(dǎo)致程序調(diào)試不通過。因此,對實驗內(nèi)容進行分組,設(shè)立基本組、提高組,利用一些在線OJ網(wǎng)站,讓學(xué)生多做題。一方面,教師可以實時觀察到學(xué)生的進度;另一方面,這些網(wǎng)站上有相應(yīng)的題解,學(xué)生可以實時進行對比和分析。 思維風(fēng)暴,多種解題方法匯聚? 問題的解決方法有多種,筆者在教學(xué)中發(fā)現(xiàn),對于同一個題目,往往有很多種算法可以實現(xiàn)。比如“最大公約數(shù)”的問題,就有枚舉法、輾轉(zhuǎn)相除法、輾轉(zhuǎn)相減法等多種解法。通過一題多解,可以開拓學(xué)生思路,引導(dǎo)學(xué)生積極進行算法求解,使學(xué)生印象深刻,豁然開朗。 創(chuàng)新課堂教學(xué)? 每個學(xué)生都是學(xué)習(xí)的主人。筆者所在的班級每周都有一個學(xué)生課堂,就是學(xué)生選擇一個自己學(xué)習(xí)過的最拿手的算法進行講解。這樣既促進了學(xué)生對算法的理解,也加深了其他學(xué)生的認識,在講授的過程中還可以發(fā)現(xiàn)問題。比如遞歸算法的基本思想是什么?實際上就是把規(guī)模大的、難解決的問題變成規(guī)模小的、容易解決的同一問題,規(guī)模較小的問題又變成規(guī)模更小的問題,當問題小到一定程度時,可以直接得出它的解,從而得到原來問題的解。 5 結(jié)語 “人工智能+教育”時代背景下,計算思維的重要性日益凸顯。如何在信息技術(shù)教學(xué)中培養(yǎng)學(xué)生的計算思維,使學(xué)生具備數(shù)字化時代的創(chuàng)新素養(yǎng),是信息技術(shù)教師面臨的重大課題。本文就在高中開設(shè)C++編程教學(xué)的特點和目前普遍存在的問題展開論述,提出把計算思維融入整個教學(xué)環(huán)節(jié),通過實際教學(xué),效果良好。在高中開展面向計算思維的編程教學(xué),可以為高中生提供一個與大學(xué)課程銜接的機會,也可以進一步推動信息技術(shù)與課程教學(xué)的深度融合。因此,在高中階段推廣編程教學(xué)、研究編程教育意義重大。 參考文獻 [1]教育部關(guān)于全面深化課程改革 落實立德樹人根本任務(wù)的意見[EB/OL].http://old.moe.gov.cn/publicfiles/business/htmlfiles/moe/s7054/201404/167226.html. [2]Wing J M. Computational Thinking[J].Communicationsof the ACM,2006(3):33-35. [3]Brennan K, Resnick M. New frameworks for studying and assessing the development of computational thin-king[M]//Vancouver, Canada: Proceedings of the 2012 Annual Meeting of the American Educational Research Association.2012:1-25.