傅澤祿 方美玉 吳志慶 許玉球 佘協(xié)元
摘?要:本文摘用廣東科學(xué)中心科普教育活動(dòng)中的案例,探索計(jì)算思維的培養(yǎng)方法。案例中結(jié)合計(jì)算思維六要素展開(kāi)探討,展示了計(jì)算思維的形成和活動(dòng)過(guò)程,為科普工作者進(jìn)行計(jì)算思維培養(yǎng)提供有益的參考。
關(guān)鍵詞:計(jì)算思維;科普教育活動(dòng);算法
自計(jì)算思維概念被提出后,相關(guān)理論引起了我國(guó)教育界的高度重視。2022年,教育部印發(fā)了新修訂的《義務(wù)教育課程方案和課程標(biāo)準(zhǔn)(2022年版)》,其中《信息科技課程標(biāo)準(zhǔn)》明確將計(jì)算思維列為學(xué)生必備的四種基本素養(yǎng)之一,鮮明地指出:“信息科技課程要培養(yǎng)的核心素養(yǎng),主要包括信息意識(shí)、計(jì)算思維、數(shù)字化學(xué)習(xí)與創(chuàng)新、信息社會(huì)責(zé)任。這四個(gè)方面互相支持、相互滲透、共同促進(jìn)學(xué)生數(shù)字素養(yǎng)與技能的提升?!?/p>
然而,近十年來(lái)有關(guān)計(jì)算思維培養(yǎng)的研究,研究者主要來(lái)自高等教育領(lǐng)域的專家學(xué)者、研究生與博士生,雖然也有一線教師注意到了計(jì)算思維的培養(yǎng),但是一線教師研究者的數(shù)量并不多[1]。作為實(shí)施科教興國(guó)戰(zhàn)略和可持續(xù)發(fā)展戰(zhàn)略重要一環(huán)的科普教育領(lǐng)域,有關(guān)計(jì)算思維培養(yǎng)的研究則更為鮮見(jiàn)。
廣東科學(xué)中心是廣東省實(shí)施科教興粵戰(zhàn)略和人才強(qiáng)省戰(zhàn)略,提高全民科學(xué)文化素養(yǎng)的大型綜合性科普?qǐng)鲳^,積極響應(yīng)新課標(biāo)的號(hào)召,探索了在科普教育活動(dòng)中培養(yǎng)學(xué)生計(jì)算思維的方法。本文以廣東科學(xué)中心科普教育活動(dòng)案例為例,為扎根科普一線的科普工作者或教師提供有益的實(shí)踐參考。
1?計(jì)算思維及其培養(yǎng)
計(jì)算思維的概念由美國(guó)卡內(nèi)基·梅隆大學(xué)計(jì)算機(jī)科學(xué)系主任周以真教授所提出,在該概念被提出之后,世界各國(guó)的專家學(xué)者陸續(xù)跟進(jìn)研究,從不同角度出發(fā)對(duì)計(jì)算思維的相關(guān)概念進(jìn)行了多樣化探討。與許多新概念一樣,計(jì)算思維的概念在學(xué)術(shù)界存在共識(shí),但也有爭(zhēng)議。在有關(guān)計(jì)算思維培養(yǎng)的研究中,郁曉華等對(duì)計(jì)算思維的培養(yǎng)進(jìn)行了明確的概念界定,認(rèn)為計(jì)算思維的培養(yǎng)是將計(jì)算機(jī)科學(xué)解決問(wèn)題的方法和過(guò)程擴(kuò)展到其他學(xué)科,進(jìn)而形成計(jì)算化和自動(dòng)化的解決方案,其核心業(yè)務(wù)是培養(yǎng)學(xué)生如何構(gòu)建目標(biāo)問(wèn)題域和分解任務(wù)邏輯,抽象為系統(tǒng)方法并由計(jì)算機(jī)實(shí)現(xiàn)[2]。王飛躍認(rèn)為,廣義的計(jì)算思維是一種基于可計(jì)算手段并以定量方式進(jìn)行的思維過(guò)程;狹義的計(jì)算思維是一種數(shù)據(jù)驅(qū)動(dòng)的思維過(guò)程[3]。
作為共識(shí)層面,普遍認(rèn)可計(jì)算思維是一種思維過(guò)程,是人的思維,是未來(lái)世界認(rèn)知、思考的常態(tài)思維方式,它教會(huì)孩子理解并駕馭未來(lái)世界。當(dāng)前,計(jì)算思維已被認(rèn)為是邏輯思維、實(shí)證思維后的第三種科學(xué)研究的思維方式。一個(gè)更具體化的概念是指以計(jì)算機(jī)軟件和硬件設(shè)備為工具,通過(guò)抽象思維、模型建構(gòu)、算法組織、自動(dòng)化管理等操作思維方式,即運(yùn)用計(jì)算機(jī)技術(shù)來(lái)解決問(wèn)題的思維方式。同時(shí),社會(huì)各領(lǐng)域?qū)τ谟?jì)算思維的核心要素也有不同的理解,本文傾向于認(rèn)同多數(shù)研究者認(rèn)可的六大核心要素(如圖1所示),即:迭代、泛化、分解、抽象、算法、調(diào)試。
一般地,人們普遍認(rèn)為科普教育活動(dòng)中的計(jì)算思維培養(yǎng)是指在科普教育活動(dòng)中,通過(guò)計(jì)算機(jī)軟件、程序、編程等方式培養(yǎng)學(xué)生的計(jì)算思維能力。計(jì)算思維培養(yǎng)的方法主要包括編程教育、機(jī)器人教育、游戲設(shè)計(jì)、基于設(shè)計(jì)的學(xué)習(xí)活動(dòng)等。其中,計(jì)算機(jī)程序設(shè)計(jì)的過(guò)程恰好是解決問(wèn)題的完整思維過(guò)程,因此編程教育被公認(rèn)為是實(shí)施計(jì)算思維培養(yǎng)的強(qiáng)有力工具,是表達(dá)計(jì)算思維的最合適方式。然而,傳統(tǒng)的計(jì)算機(jī)程序設(shè)計(jì)往往偏重于編程語(yǔ)言和編程技巧和教學(xué),師生們的關(guān)注點(diǎn)是掌握一門(mén)編程語(yǔ)言和編程方法,并不是以計(jì)算思維培養(yǎng)作為課程主要目標(biāo),因此如何更有效地培養(yǎng)學(xué)生的計(jì)算思維,還需要廣大教育工作者的不斷探索。
2?計(jì)算思維培養(yǎng)案例探索
科普教育活動(dòng)不必拘泥于傳統(tǒng)教育的形式,在培養(yǎng)和引導(dǎo)學(xué)生計(jì)算思維能力方面,可以發(fā)揮其手段多樣、方法靈活的特點(diǎn)。比如,一方面可以讓學(xué)生通過(guò)模型構(gòu)建、實(shí)驗(yàn)設(shè)計(jì)、程序攻關(guān)、計(jì)算機(jī)應(yīng)用等活動(dòng),熟練掌握計(jì)算機(jī)語(yǔ)言、掌握計(jì)算機(jī)基礎(chǔ)知識(shí)和技能,形成較強(qiáng)的計(jì)算思維能力;另一方面,可以引導(dǎo)學(xué)生思考計(jì)算機(jī)解決問(wèn)題的步驟和過(guò)程,學(xué)習(xí)通過(guò)程序和算法解決實(shí)際問(wèn)題,熟悉相關(guān)解決問(wèn)題的思想和方法,養(yǎng)成解決問(wèn)題的獨(dú)立思考能力和動(dòng)手能力。
我們?cè)诰幊探虒W(xué)活動(dòng)中嘗試以尋求“算法”作為活動(dòng)主要目的,通過(guò)復(fù)雜度逐步遞進(jìn)多個(gè)案例,使學(xué)生在實(shí)踐過(guò)程中體驗(yàn)計(jì)算思維六要素的內(nèi)在關(guān)系和解題路徑,取得了良好效果。
計(jì)算思維的培養(yǎng)不局限于任何編程語(yǔ)言,學(xué)生在活動(dòng)中可以采用自己熟悉的任何編程語(yǔ)言來(lái)實(shí)現(xiàn)算法調(diào)試。為了便于展示結(jié)果,本文重點(diǎn)探索活動(dòng)中的一個(gè)案例,并以python語(yǔ)言進(jìn)行算法調(diào)試。
首先預(yù)設(shè)生活場(chǎng)景,假設(shè)有大小兩種重量的水果各100個(gè)?,F(xiàn)需分配給3個(gè)小朋友,在不允許切開(kāi)水果的前提下,要求每個(gè)小朋友拿到的水果重量盡可能地相等。
本問(wèn)題的關(guān)鍵是水果“重量”盡可能地相等,學(xué)生的習(xí)慣性思維是稱重取平均,但由于水果不可以切分,該方法難以保證結(jié)果恰好是最優(yōu)解。教師在活動(dòng)中適時(shí)地引入計(jì)算思維,引導(dǎo)學(xué)生利用計(jì)算思維解決問(wèn)題,活動(dòng)過(guò)程包括泛化、抽象、分解、迭代、調(diào)試等多個(gè)環(huán)節(jié)。例如,將水果問(wèn)題問(wèn)題概括并泛化為“任務(wù)均分問(wèn)題”、將問(wèn)題抽象為“數(shù)字分配”問(wèn)題、將問(wèn)題分解為多個(gè)子問(wèn)題(如何分配才能保證所得結(jié)果是最優(yōu)解?如何提高分配效率?可以批量分發(fā)的充要條件是什么),由子算法綜合得到算法,最后進(jìn)行結(jié)果顯示和遷移等。任務(wù)均分問(wèn)題計(jì)算思維流程如圖2所示。
考慮到一般性,均分任務(wù)算法中的定值、定值個(gè)數(shù)、盒子個(gè)數(shù)均為隨機(jī)整數(shù),其python代碼如下。
import?random
import?time
boxNum=random.randint(3,11)#盒子個(gè)數(shù)
ABCnum=random.randint(5,10)#定值個(gè)數(shù)
abcRange=random.randint(1,101)#每個(gè)定值的個(gè)數(shù)
ABCrange=random.randint(7,31)#定值的大小范圍
gg=[(random.randint(1,abcRange),random.randint?(1,ABCrange))for?i?in?range(ABCnum)]#生成ABCnum個(gè)隨機(jī)數(shù)組
print(f"現(xiàn)有{','.join([f'({xx[0]}個(gè){xx[1]})'?for?xx?in?gg])},需放進(jìn){boxNum}個(gè)盒子里。")
Box=[(0,0)for?i?in?range(boxNum)]#Box集合
boxStr=[(0,'')for?i?in?range(boxNum)]#記錄并保存分配情況
def?LoopsAll(a,A):#循環(huán)迭代,傳遞參數(shù):a個(gè)A
total=0
for?xx?in?Box:
total=total+xx[0]?#已分配的數(shù)值之和
gaps=max(Box)[0]*boxNumtotal?#盒子中數(shù)值總差距
batch=int((a*Agaps)/(boxNum*A))#根據(jù)充要條件計(jì)算批發(fā)量
if?batch<=0:
batch=0
else:
print("有",a,"個(gè)定值",A,",可批量分發(fā),每個(gè)盒子分得",batch,"個(gè)。")
for?i?in?range(boxNum):
Box[i]=(Box[i][0]+batch*A,batch)
for?i?in?range(1,a+1batch*boxNum):
ind=Box.index(min(Box))
Box[ind]=(Box[ind][0]+A,Box[ind][1]+1)#逐一分配剩余量
#記錄分配情況,將抽象結(jié)果顯示為具體形式
temStr=''
for?i?in?range(boxNum):
if?Box[i][1]==1:
temStr=boxStr[i][1]+'+'+str(A)
else:
if?Box[i][1]>0:
temStr=boxStr[i][1]+'+'+str(A)+'*'+str(Box[i][1])
else:
temStr=boxStr[i][1]
boxStr[i]=(Box[i][0],temStr.lstrip('+'))
ss=time.time()#統(tǒng)計(jì)時(shí)間
gg.sort(key=lambda?x:x[1],reverse=True)#按定值的大小進(jìn)行排序
for?i?in?range(len(gg)):
LoopsAll(gg[i][0],gg[i][1])
print('耗時(shí)=',time.time()ss)
boxStr.sort()
print('任務(wù)均分結(jié)果=')
for?i?in?boxStr:
print(i)
程序運(yùn)行后,某次隨機(jī)參數(shù)所對(duì)應(yīng)的結(jié)果如下:
現(xiàn)有(10個(gè)14),(33個(gè)26),(9個(gè)7),(43個(gè)16),(44個(gè)25),(12個(gè)1),需放進(jìn)6個(gè)盒子里。
有?33?個(gè)定值?26,可批量分發(fā),每個(gè)盒子分得?5?個(gè)。
有?44?個(gè)定值?25,可批量分發(fā),每個(gè)盒子分得?6?個(gè)。
有?43?個(gè)定值?16,可批量分發(fā),每個(gè)盒子分得?6?個(gè)。
有?10?個(gè)定值?14,可批量分發(fā),每個(gè)盒子分得?1?個(gè)。
耗時(shí)=0.034515380859375
任務(wù)均分結(jié)果=
(476,'26*6+25*7+16*7+14+7*2+1*5')
(477,'26*5+25*8+16*7+14*2+7')
(477,'26*5+25*8+16*7+14*2+7')
(477,'26*5+25*8+16*7+14*2+7')
(477,'26*6+25*6+16*8+14*2+7*2+1')
(477,'26*6+25*7+16*7+14+7*2+1*6')
從程序運(yùn)行結(jié)果看,所得結(jié)果為最優(yōu)均分結(jié)果之一,此算法具有優(yōu)秀的運(yùn)行效率和良好的均分效果。其中,44個(gè)定值,批發(fā)量為6個(gè),并非7個(gè),這正是最優(yōu)均分充要條件所決定的。
此案例表明,計(jì)算思維六要素是一個(gè)相輔相成的整體,各要素之間并無(wú)嚴(yán)格的執(zhí)行次序。計(jì)算思維有一定的思維路徑,但絕不是單一方向的執(zhí)行步驟或操作方法,視具體問(wèn)題的需要,將可能進(jìn)行多次問(wèn)題分解,而每次分解均有可能進(jìn)行再抽象、再調(diào)試、再分解。每一個(gè)環(huán)節(jié)都有可能涉及六大要素并且形成該環(huán)節(jié)的結(jié)論,每個(gè)結(jié)論還可以進(jìn)一步遷移和泛化。如圖2所示,算法是整個(gè)流程的核心環(huán)節(jié),而尋求算法的過(guò)程能天然地結(jié)合計(jì)算機(jī)科學(xué)基本思想和基本方法。運(yùn)用計(jì)算思維進(jìn)行問(wèn)題求解的過(guò)程中,人與計(jì)算機(jī)各有所側(cè)重,可以粗略地歸納為如下四步路徑,其中前三步依賴于人的計(jì)算思維,而第四步主要由計(jì)算機(jī)執(zhí)行。
路徑1:把實(shí)際問(wèn)題泛化并抽象為數(shù)學(xué)問(wèn)題,即用數(shù)學(xué)語(yǔ)言描述問(wèn)題。
路徑2:把數(shù)學(xué)模型中的變量和條件用特定的符號(hào)代替,并形成可計(jì)算的規(guī)則。
路徑3:將問(wèn)題分解為多個(gè)子問(wèn)題,并通過(guò)編程把解決問(wèn)題的過(guò)程寫(xiě)成算法。
路徑4:由計(jì)算機(jī)執(zhí)行迭代并進(jìn)行算法調(diào)試并顯示結(jié)果(人們?cè)賹?duì)結(jié)果進(jìn)行遷移)。
結(jié)語(yǔ)
本文探討了廣東科學(xué)中心科普教育活動(dòng)中的實(shí)踐案例,展現(xiàn)了計(jì)算思維的形成和活動(dòng)過(guò)程,歸納了運(yùn)用計(jì)算思維進(jìn)行問(wèn)題求解的若干路徑。文中案例天然地融入了計(jì)算思維六要素,直觀地展示了各個(gè)要素相輔相成的關(guān)系,讓學(xué)生在實(shí)踐活動(dòng)中有路徑可循,有方法可以模仿。從活動(dòng)的效果來(lái)看,啟發(fā)了學(xué)生意識(shí),開(kāi)始主動(dòng)地利用計(jì)算思維去解決問(wèn)題,其計(jì)算思維能力有了明顯提高。
誠(chéng)然,由于計(jì)算思維的內(nèi)涵比較抽象且有較高的理論性,任何培養(yǎng)方法都具有一定的局限性,無(wú)疑對(duì)教師和學(xué)生都提出了更高的要求。如何更有效地培養(yǎng)學(xué)生的計(jì)算思維,還需要廣大教育工作者的不斷探索。
參考文獻(xiàn):
[1]常詠梅,李怡灼.計(jì)算思維培養(yǎng)的研究綜述[J].甘肅科技,2022,38(12):4550+58.
[2]郁曉華,肖敏,王美玲.計(jì)算思維培養(yǎng)進(jìn)行時(shí):在K12階段的實(shí)踐方法與評(píng)價(jià)[J].遠(yuǎn)程教育雜,2018,36(2):1828.
[3]王飛躍.面向計(jì)算社會(huì)的計(jì)算素質(zhì)培養(yǎng):計(jì)算思維與計(jì)算文化[J].工業(yè)和信息化教育,2013(6):48.
基金項(xiàng)目:廣東省科技計(jì)劃項(xiàng)目(科技創(chuàng)新普及領(lǐng)域)2020—2022年廣東省創(chuàng)意機(jī)器人科普教育創(chuàng)新實(shí)踐平臺(tái)建設(shè)(項(xiàng)目編號(hào):2021B1414150001)
作者簡(jiǎn)介:傅澤祿(1976—?),男,漢族,廣西岑溪人,碩士,講師,研究方向:科學(xué)普及、科技情報(bào)等;方美玉(1983—?),女,漢族,廣東揭陽(yáng)人,本科,經(jīng)濟(jì)師,研究方向:科普教育;吳志慶(1983—?),男,漢族,廣東順德人,本科,助理研究員,研究方向:科普推廣及科普活動(dòng);許玉球(1990—?),男,漢族,廣東茂名人,本科,工程師,研究方向:科普教育;佘協(xié)元(1974—?),男,漢族,湖南桃源人,碩士,研究方向:科學(xué)普及、科技情報(bào)、科普標(biāo)準(zhǔn)等。