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