陳染


計(jì)算思維是2006年卡內(nèi)基梅隆大學(xué)周以真教授提出的概念。計(jì)算思維指的是一種運(yùn)用計(jì)算機(jī)科學(xué)基本概念求解問(wèn)題、設(shè)計(jì)系統(tǒng)和理解人類行為的方式,它涵蓋了計(jì)算機(jī)科學(xué)領(lǐng)域廣度的一系列思維工具。學(xué)習(xí)計(jì)算思維不僅有助于我們理解計(jì)算機(jī)科學(xué)的概念和思想,更可以將它廣泛應(yīng)用于工作、學(xué)習(xí)、生活中,為我們提供不一樣的組織和分析問(wèn)題的視角。
在小學(xué)和中學(xué)階段,信息技術(shù)課程的學(xué)習(xí)是培養(yǎng)計(jì)算思維的一個(gè)重要途徑,以至于有些學(xué)生和教師會(huì)把計(jì)算思維誤解為編程的思維方法。其實(shí),自2006年周以真教授提出計(jì)算思維的理念時(shí),她就已經(jīng)明確指出了計(jì)算思維是人的思維,不是計(jì)算機(jī)的思維,計(jì)算思維面向所有人、所有地方,而不僅僅是編程中使用的思維方式。舉一個(gè)小例子,想一想日常生活中我們做一頓飯的程序是怎么樣的:先把米放進(jìn)電飯鍋,讓電飯鍋開(kāi)始煮飯,趁著電飯鍋煮飯的時(shí)間再處理其他食材。為什么我們不先做好菜再開(kāi)始煮飯呢?這是因?yàn)槲覀儾捎眠@種程序的時(shí)候剛好能在菜做完之后,飯也剛好熟了,這就是計(jì)算思維中的流程優(yōu)化。只要多觀察,我們會(huì)發(fā)現(xiàn)計(jì)算思維在生活中無(wú)處不在。
除了計(jì)算機(jī)課程外,我們可以將計(jì)算思維融入學(xué)科學(xué)習(xí)、創(chuàng)客教育、社會(huì)實(shí)踐活動(dòng)等方面。計(jì)算思維的培養(yǎng)方式很多,構(gòu)建模型就是其中一種方式。運(yùn)用計(jì)算思維構(gòu)建模型的4個(gè)主要步驟是分解、模式識(shí)別、抽象和算法。面對(duì)一個(gè)大的問(wèn)題,我們將問(wèn)題分解為若干方便我們解決的小部分,識(shí)別出每個(gè)部分的模式,化繁為簡(jiǎn),將現(xiàn)實(shí)的事物抽象為計(jì)算機(jī)能夠理解、能夠識(shí)別的東西,再通過(guò)構(gòu)建算法,通過(guò)算法建立起我們所需的模型。
實(shí)用的模型學(xué)習(xí)軟件NetLogo
2020年3月, “科技學(xué)堂”組織了4期STEM云教研活動(dòng),和數(shù)百位教師在線探討如何通過(guò)構(gòu)建模型的方法將計(jì)算思維運(yùn)用于科技教育課堂中。在這幾期STEM云教研中,我們選擇了多主體建模軟件NetLogo作為構(gòu)建模型的工具,以幫助學(xué)生運(yùn)用計(jì)算思維探究學(xué)科和項(xiàng)目式學(xué)習(xí)中遇到的問(wèn)題。從功能層面上看,NetLogo并不是一個(gè)強(qiáng)大的編程工具,不適合開(kāi)發(fā)復(fù)雜的計(jì)算機(jī)程序。但NetLogo的優(yōu)勢(shì)在于它的語(yǔ)法足夠簡(jiǎn)單,學(xué)習(xí)成本很低,并且還配備了完善的模型庫(kù)可供使用。即使學(xué)生沒(méi)有經(jīng)過(guò)NetLogo的編程語(yǔ)法的學(xué)習(xí),我們也可以直接運(yùn)用模型探究現(xiàn)實(shí)問(wèn)題,我們還可以通過(guò)修改代碼,對(duì)模型進(jìn)行進(jìn)一步拓展,以滿足我們實(shí)際研究需求。NetLogo的特點(diǎn)意味著它很適合開(kāi)發(fā)簡(jiǎn)易的模型,也很適合成為培養(yǎng)學(xué)生計(jì)算思維的工具。
NetLogo是美國(guó)西北大學(xué)連接學(xué)習(xí)與計(jì)算機(jī)建模中心教授尤里·韋倫斯基(UriWilensky)于1999年開(kāi)發(fā)的一款開(kāi)源編程語(yǔ)言。從名字可以看出,NetLogo基于Logo語(yǔ)言設(shè)計(jì)而成。Logo語(yǔ)言是第一門專門面向于教育的編程語(yǔ)言,它的出現(xiàn)對(duì)編程教育和計(jì)算機(jī)語(yǔ)言產(chǎn)生了深遠(yuǎn)的影響,目前流行的編程教育工具Scratch便直接從Logo語(yǔ)言發(fā)展而來(lái),而目前最流行的編程語(yǔ)言Python也深受Logo語(yǔ)言的影響,Python的編程教育工具Turtle類庫(kù)更是向Logo語(yǔ)言致敬(圖1)。經(jīng)過(guò)了50多年的發(fā)展,Logo語(yǔ)言枝繁葉茂,而NetLogo便是這棵大樹(shù)低調(diào)而美麗的花朵。
NetLogo適用于計(jì)算思維教學(xué)的一個(gè)優(yōu)勢(shì)在于它自帶的模型庫(kù),模型庫(kù)中擁有數(shù)百個(gè)模型,所涉及的學(xué)科包括藝術(shù)、生物、物理、化學(xué)、計(jì)算機(jī)科學(xué)、地球科學(xué)、數(shù)學(xué)、網(wǎng)絡(luò)、哲學(xué)、心理學(xué)、社會(huì)科學(xué)等。這些模型的源代碼都是開(kāi)源的,我們可以在NetLogo的代碼頁(yè)面修改相應(yīng)的代碼,以拓展模型的應(yīng)用空間。大部分模型還配備了教學(xué)建議,在模型的“信息”頁(yè)面我們可以看到這個(gè)模型是什么,它是怎樣運(yùn)行的,我們?cè)鯓舆\(yùn)用模型,使用的注意事項(xiàng),如何引導(dǎo)學(xué)生探索,怎樣拓展模型,以及有哪些了解更多的閱讀材料。
NetLogo是一種建立多主體系統(tǒng)(multiagent system)的工具,所謂多主體,即通過(guò)計(jì)算機(jī)生成一個(gè)個(gè)主體,每個(gè)主體遵循一定的規(guī)則活動(dòng)。通過(guò)主體的行為和相互作用觀察對(duì)世界的宏觀影響。NetLogo的世界中包括4種類型的主體:海龜、瓦片、鏈和觀察者。
·海龜(turtle):海龜指的是可以在模型中自由移動(dòng)的主體,大多數(shù)模型都會(huì)出現(xiàn)海龜角色。海龜?shù)哪J(rèn)形狀是箭頭,我們也可以把它修改成其他形狀。海龜?shù)母拍罾^承自Logo語(yǔ)言,Python Turtle等類庫(kù)也運(yùn)用了海龜?shù)母拍睢?/p>
·瓦片(patch):瓦片指的是在模型中靜止的主體,我們也可以稱之為網(wǎng)格。NetLogo模型的場(chǎng)景中每一個(gè)坐標(biāo)格就是一個(gè)瓦片。瓦片可以和海龜交互,也可以與其他瓦片交互。大多數(shù)模型會(huì)用到瓦片的角色。
·鏈(link):鏈指的是連接在海龜與海龜之間的線,相連的每一個(gè)海龜稱之為節(jié)點(diǎn)(node)。鏈在研究社群網(wǎng)絡(luò)關(guān)系中有著重要的作用。
·觀察者(observer):觀察者指的是不參與到模型運(yùn)行中的角色,它包括控制模型運(yùn)行的按鈕、調(diào)整模型參數(shù)的滑桿、控制運(yùn)營(yíng)模式的開(kāi)關(guān)、觀察模型數(shù)據(jù)的圖表和監(jiān)視器等。這些角色雖然不直接參與模型的運(yùn)行,但它對(duì)于我們觀察模型的變化,得出模型的結(jié)論至關(guān)重要。因此,幾乎所有的模型都會(huì)出現(xiàn)觀察者的主體。
我們可以通過(guò)NetLogo自帶的模型庫(kù)認(rèn)識(shí)各種主體的作用。以“狼 羊捕獵”模型(WolfSheep Predation)為例,這個(gè)模型模擬的是一個(gè)由狼、羊和草組成的簡(jiǎn)易生態(tài)系統(tǒng)。這個(gè)模型有3條簡(jiǎn)單的運(yùn)行規(guī)則:
。狼會(huì)吃羊,羊會(huì)吃草;
。每隔一段時(shí)間,空地會(huì)長(zhǎng)出新的草;
。羊和狼通過(guò)捕食會(huì)增加能量,能量會(huì)隨著時(shí)間逐漸消失,當(dāng)能量到達(dá)一定數(shù)值就會(huì)生出新的狼和羊,當(dāng)能量消失為0的時(shí)候狼或者羊就會(huì)死去。
通過(guò)這3條簡(jiǎn)單的規(guī)則,我們就能夠探索在這個(gè)生態(tài)系統(tǒng)中狼、羊和草的變化規(guī)律。運(yùn)行模型時(shí),我們會(huì)看到這樣的畫(huà)面(圖2)。
在畫(huà)面左側(cè),我們看到有很多滑桿、按鈕、開(kāi)關(guān)、圖表、數(shù)字窗口等。它們都屬于“觀察者”,這些主體不直接參與模型的運(yùn)行,但它們的作用也是非常重要的。我們可以通過(guò)畫(huà)面左上角的滑桿調(diào)整模型參數(shù),如狼和羊的初始數(shù)量、草的生長(zhǎng)數(shù)量,狼和羊的繁殖所需的能量等,從而了解不同因素對(duì)狼 羊 草生態(tài)系統(tǒng)的影響。畫(huà)面左下角的表格和監(jiān)視窗可以讓我們直觀地了解到當(dāng)前狼、羊、草的數(shù)量和它們的變化情況。
畫(huà)面右側(cè)為場(chǎng)景區(qū),我們可以看到場(chǎng)景區(qū)上有白色的羊、黑色的狼、綠色的草和褐色的空土地。在這個(gè)區(qū)域,羊和狼可以在畫(huà)面中隨機(jī)行走,因此,都屬于“海龜”主體,盡管它們并不是海龜?shù)男螤?地面的草是不可以移動(dòng)的,因此,屬于“瓦片”主體,當(dāng)羊從綠色的瓦片經(jīng)過(guò)的時(shí)候,瓦片就從綠色轉(zhuǎn)為褐色,表示草被羊吃掉了,這意味著“海龜”主體能夠和“瓦片”主體進(jìn)行交互。
這個(gè)模型并沒(méi)有用到“鏈”,我們換個(gè)模型認(rèn)識(shí)一下。圖3是“病毒傳播網(wǎng)絡(luò)” (Viruson Network)模型,我們可以用它研究病毒在人群中傳播的規(guī)律。
這個(gè)模型左側(cè)同樣是屬于“觀察者”的按鈕、滑桿和圖表;在右側(cè)我們可以看到一個(gè)個(gè)圓形的點(diǎn),點(diǎn)和點(diǎn)之間連接著一根根線。這些線就是所謂“鏈”,而鏈上的圓點(diǎn)我們稱之為節(jié)點(diǎn)。節(jié)點(diǎn)屬于一種比較特殊的“海龜”。紅色的節(jié)點(diǎn)表示感染者,藍(lán)色的節(jié)點(diǎn)表示易感者,灰色的節(jié)點(diǎn)表示免疫者,而連接著節(jié)點(diǎn)與節(jié)點(diǎn)的鏈表示人與人的社會(huì)關(guān)系。當(dāng)一個(gè)節(jié)點(diǎn)感染了病毒之后,它會(huì)有一定概率經(jīng)過(guò)鏈將病毒傳播到與之相鄰的易感者上,使之成為新的感染者。而感染者也有可能在一段時(shí)間后成為免疫者,免疫者不會(huì)傳播病毒。通過(guò)這個(gè)模型我們就能研究病毒在社群中傳播的路徑,并作出相應(yīng)的預(yù)防措施。這個(gè)模型很適合與當(dāng)下的疫情情況結(jié)合起來(lái),通過(guò)計(jì)算思維的方法讓學(xué)生認(rèn)識(shí)采用什么方法能夠防范病毒在社會(huì)中擴(kuò)散。
@NetLogo的使用和學(xué)習(xí)
NetLogo是一款免費(fèi)的建模軟件,在NetLogo的官方網(wǎng)站(http://ccl.northwestem. edu/netlogo/index. shtml) 即可以選擇合適的版本下載。如果教師只是想在學(xué)科課程中偶爾展現(xiàn)模型,或想簡(jiǎn)單體驗(yàn)?zāi)P停琋etLogo官方網(wǎng)站也提供了在線版本,在這個(gè)版本中你可以體驗(yàn)到NetLogo自帶的所有模型,但在線版本不能制作和保存新的模型,功能也不如桌面版的完善。
NetLogo安裝包包括NetLogo、NetLogo3D、HubNet Chent和Behaviors Earth,我們主要使用的軟件是NetLogo。點(diǎn)擊NetLogo的“文件”
“模型庫(kù)”,即可獲得數(shù)百個(gè)完善的模型。打開(kāi)模型后,頁(yè)面上方出現(xiàn)“界面”“信息”和“代碼”3個(gè)標(biāo)簽頁(yè),在信息頁(yè)面中我們可以了解模型的具體信息和操作指南,在代碼頁(yè)面中我們可以閱讀模型是如何建構(gòu)的,我們可以修改代碼以拓展模型。
如果保愿意更加深入地學(xué)習(xí)NetLogo,制作自己的模型。你可以在NetLogo的官方網(wǎng)頁(yè)獲取中文版用戶手冊(cè),它可以幫助我們初步掌握NetLogo的程序編寫(xiě)。如果在編寫(xiě)程序中遇到困難,我們還可以在幫助頁(yè)面查閱NetLogo詞典。這些都很方便我們構(gòu)建自己的程序。
參考文獻(xiàn)
[1] Google面向教育者的計(jì)算思維課程.https://edu.google. com/resources/programs/exploringcomputationalthinking/
[2] NetLog0 4.0.2用戶手冊(cè)(中文版)http://ccl.northwestern. edu/netlogo/4.0. 4/docs/NetLogo_manualchinese.pdf