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