陳久華 王榮良
計(jì)算思維(Computational Thinking)是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計(jì)系統(tǒng)和理解人類行為。其中,求解問題包括使用計(jì)算機(jī)技術(shù)或設(shè)備解決問題以及用計(jì)算機(jī)科學(xué)的思想解決問題;設(shè)計(jì)系統(tǒng)包括設(shè)計(jì)計(jì)算機(jī)系統(tǒng),也包括用計(jì)算機(jī)科學(xué)的思想來設(shè)計(jì)一般系統(tǒng)。由此可見,計(jì)算思維可以指導(dǎo)人們設(shè)計(jì)與使用計(jì)算機(jī),其更大的功能在于通過對計(jì)算及計(jì)算機(jī)的實(shí)現(xiàn)等機(jī)理的認(rèn)識,反映客觀規(guī)律,并用以指導(dǎo)人們的社會生活。計(jì)算思維教育,就是通過對計(jì)算原理和過程的認(rèn)識,掌握基本的計(jì)算方法,理解計(jì)算思維的本質(zhì),從而學(xué)會應(yīng)用計(jì)算思維解決實(shí)際問題。計(jì)算思維教育可以落實(shí)到數(shù)學(xué)方法和工程方法的學(xué)習(xí),如遞歸法、分治法以及形式化表達(dá)等方法,來理解計(jì)算思維的抽象、自動化等本質(zhì)屬性。
如果說,在高中或者大學(xué)階段可以通過實(shí)施計(jì)算機(jī)編程、計(jì)算機(jī)原理類的課程,來開展計(jì)算思維教育,那么,小學(xué)階段是否也能開展計(jì)算思維教育呢?小學(xué)階段的學(xué)生,尤其是低齡段的學(xué)生,主要依賴于無意注意,以具體形象思維為主,通過直觀感知事物的特征和規(guī)律。因此,在小學(xué)階段開展計(jì)算思維教育,不適合從枯燥的計(jì)算機(jī)原理性知識學(xué)習(xí)的途徑進(jìn)行,而應(yīng)該采用滲透教育的方法,讓學(xué)生在有趣的作品制作過程中體驗(yàn)和理解計(jì)算思維。第一,早期開展的中小學(xué)計(jì)算機(jī)編程等課程,盡管也涉及計(jì)算機(jī)原理部分的教學(xué),但是往往過分關(guān)注具體的編程技術(shù)以及細(xì)節(jié),而缺乏關(guān)注計(jì)算的本質(zhì)與思維。因此,在中小學(xué)開展計(jì)算思維教育,不是簡單的計(jì)算機(jī)原理或計(jì)算機(jī)編程的學(xué)習(xí),也不是各種算法的學(xué)習(xí),而是要通過適量的計(jì)算機(jī)知識與技能的學(xué)習(xí),真正理解計(jì)算思維的本質(zhì)。第二,在小學(xué)開展計(jì)算思維教育,應(yīng)該有一個(gè)適合小學(xué)生的學(xué)習(xí)平臺或環(huán)境,具有趣味性、技術(shù)門檻低等特點(diǎn),以便在教學(xué)過程中學(xué)生不必過多地關(guān)注操作性技能和規(guī)定。Kodu是一款游戲軟件開發(fā)工具,具有三維場景和模式化的編程方式,易學(xué)易用,是一個(gè)適合小學(xué)生使用的程序開發(fā)工具。第三,兒童化編程軟件融入小學(xué)信息科技的課堂,讓小學(xué)生從小接觸計(jì)算機(jī)編程,其目的不僅是讓學(xué)生學(xué)會編程,更是使其體驗(yàn)一個(gè)程序完整的開發(fā)過程,知道計(jì)算機(jī)工作和解決問題的方式,從而發(fā)展學(xué)生的計(jì)算思維。“小學(xué)生Kodu趣味程序設(shè)計(jì)”課程的開發(fā),就是將信息科技課堂實(shí)踐經(jīng)驗(yàn)和資料積累向課程、教材和教學(xué)轉(zhuǎn)化,為小學(xué)的計(jì)算思維的普及教學(xué)提供載體。
計(jì)算思維的本質(zhì)是抽象和自動化,下面是在小學(xué)開展Kodu編程教學(xué)中,滲透計(jì)算思維本質(zhì)教育的教學(xué)實(shí)踐。
在編程中體會抽象
所謂抽象,是指通過分析的途徑,運(yùn)用概念在人腦中再現(xiàn)對象本質(zhì)的方法,從眾多的事物中抽取共同的、本質(zhì)性的特征,而舍棄其非本質(zhì)的特征。在小學(xué)階段,學(xué)生可以通過數(shù)學(xué)課感受數(shù)和形的抽象概念,但是通過計(jì)算思維教育,學(xué)生可以更全面地感受抽象。在兒童化編程的教學(xué)過程中,抽象也是必不可少的。學(xué)生學(xué)會抽象可以更容易找到編程的切入點(diǎn),梳理游戲的規(guī)則,并且最終將游戲規(guī)則轉(zhuǎn)變?yōu)镵odu程序。下面通過案例《吃蘋果》來說明。
環(huán)節(jié)一:從故事抽象規(guī)則
上課伊始,教師出示游戲故事情境:我們的小伙伴Kodu擁有一個(gè)美麗的蘋果園,蘋果樹下落滿了成熟的蘋果,小伙伴Kodu要收集這些蘋果,并將蘋果搬運(yùn)到自己的小屋里。然而,我們的小伙伴并不知道,有一個(gè)特別喜歡偷吃蘋果的壞蛋已經(jīng)盯上這里了。
教師然后提出問題,讓學(xué)生互相討論:根據(jù)這個(gè)故事情境,你可以制定怎樣的游戲規(guī)則?同時(shí),教師出示相關(guān)的學(xué)習(xí)表格(如表1),輔助學(xué)生思考。
如果憑空討論,學(xué)生難免沒有頭緒,無從下手,或是異想天開,設(shè)想一些Kodu軟件無法實(shí)現(xiàn)的內(nèi)容。通過這樣的形式,教師引導(dǎo)學(xué)生有針對性地對故事情節(jié)進(jìn)行分析和梳理,抽象出自己的游戲規(guī)則,學(xué)習(xí)表格不僅提供了抽象的方法,也為之后編寫程序提供了便利。
環(huán)節(jié)二:從規(guī)則編寫語句
制定了游戲規(guī)則,可以說是完成了編程的第一步,有了編寫程序的依據(jù)。這時(shí),教師出示部分Kodu程序(如下圖)。
讓學(xué)生先讀一讀出示的程序,用“在什么情況,做什么事情”這樣的句式來翻譯這段程序,幫助學(xué)生熟悉“when-do”句式的含義。when就是條件,而do就是動作。接著提出問題,學(xué)生分析每一條游戲規(guī)則中,哪部分是條件,哪部分是動作。最后,學(xué)生理清所有的條件和動作,在Kodu中完成程序的編寫。
在制定計(jì)劃后,如果直接開始編寫程序,學(xué)生往往分不清楚條件和動作,會對教師提出諸如“when里面怎么沒有eat啊”“do里面怎么找不到bump”之類的問題。這些都反映了學(xué)生沒有搞清楚自己寫的程序,哪些是條件,哪些是動作。通過環(huán)節(jié)二,可以有效地幫助學(xué)生抽象出規(guī)則中的條件和動作,理解“when-do”句型,更加有效地完成Kodu程序的編寫。
對小學(xué)階段的學(xué)生來說,抽象概念的理解與運(yùn)用是比較困難的。在Kodu編程實(shí)踐中,采用“故事情節(jié)→游戲規(guī)則→編程語句”的實(shí)踐路徑,可以有效引導(dǎo)學(xué)生體驗(yàn)和運(yùn)用抽象。
在編程中認(rèn)識自動化
自動化是計(jì)算思維的本質(zhì)之一。所謂自動化,是指機(jī)器設(shè)備、系統(tǒng)或過程在沒有人或較少人的直接參與下,按照人的要求,經(jīng)過自動檢測,實(shí)現(xiàn)預(yù)期目標(biāo)的過程。與其他課程不同,計(jì)算機(jī)編程最大的特點(diǎn)就是自動化,利用計(jì)算機(jī)本身的功能,解決實(shí)際的問題。程序的執(zhí)行過程就是自動化的具體分析體現(xiàn)。在Kodu《捕魚達(dá)人》一課中,有Kodu、漁夫爺爺以及小魚等多個(gè)角色,程序代碼也比較復(fù)雜,教師通過教學(xué)程序調(diào)試的方法,讓學(xué)生感受計(jì)算機(jī)執(zhí)行語句和執(zhí)行結(jié)果的關(guān)系,同時(shí)促進(jìn)學(xué)生理解自動化的意義。
環(huán)節(jié)一:體驗(yàn)程序調(diào)試
在學(xué)生寫完程序之后,教師提出問題:現(xiàn)在大家的程序已經(jīng)編好,是不是可以直接提交給老師了呢?
大部分學(xué)生會不約而同地說出“不可以,還要檢查程序”。
教師繼續(xù)追問道:“那么在寫完程序之后,我們該如何檢查程序呢?”
有些學(xué)生說:“自己寫好以后把程序讀一讀,就會發(fā)現(xiàn)錯誤?!?/p>
教師提出一種調(diào)試程序的方法:運(yùn)行程序→觀察程序→分析錯誤的程序→改進(jìn)程序。讓學(xué)生按照這個(gè)方法測試,看能不能發(fā)現(xiàn)程序中的問題。
按照這個(gè)方式,不少學(xué)生都找到了自己程序中出現(xiàn)的部分。
環(huán)節(jié)二:理解程序執(zhí)行過程
教師提出問題:是誰告訴你們程序在哪里出錯了?并進(jìn)一步闡述:計(jì)算機(jī)最大的一個(gè)特點(diǎn)就是自動化,它在運(yùn)行程序時(shí),是一條一條語句逐步執(zhí)行預(yù)先設(shè)計(jì)的任務(wù)。計(jì)算機(jī)一旦執(zhí)行了錯誤的程序,表現(xiàn)出的現(xiàn)象與你原來設(shè)計(jì)的要求不一致。你需要像計(jì)算機(jī)執(zhí)行程序一樣地思考,理解計(jì)算機(jī)執(zhí)行每一步語句應(yīng)該有的現(xiàn)象,與實(shí)際的執(zhí)行結(jié)果比較,根據(jù)錯誤的現(xiàn)象,找到錯誤的程序語句,并把它修改正確。
教師為學(xué)生提供了調(diào)試程序的學(xué)習(xí)單(如表2)。
學(xué)生依照教師提供的程序調(diào)試方法,對照游戲規(guī)則,對《捕魚達(dá)人》這個(gè)游戲進(jìn)行調(diào)試,觀察并記錄錯誤現(xiàn)象。在找到錯誤之后,學(xué)生互相討論,分析解決這些問題的方法,修改程序,重復(fù)調(diào)試的環(huán)節(jié),直到程序完全正確。
計(jì)算機(jī)是自動執(zhí)行程序的,但計(jì)算機(jī)的自動化是一個(gè)黑匣子,沒有辦法看到每一步程序的執(zhí)行過程,只能通過執(zhí)行結(jié)果來感受。對小學(xué)生來說,以程序調(diào)試為切入點(diǎn),通過尋找計(jì)算機(jī)程序?qū)嶋H執(zhí)行結(jié)果與最初設(shè)計(jì)方案的不一致,讓學(xué)生嘗試像計(jì)算機(jī)執(zhí)行程序一樣思考執(zhí)行語句應(yīng)該對應(yīng)的動作,從而發(fā)現(xiàn)問題并解決問題。這一過程既是程序調(diào)試的過程,也是理解自動化的過程。
2012年10月,英國宣布了新的ICT課程,將ICT學(xué)科的教學(xué)層次從基礎(chǔ)應(yīng)用型提升到創(chuàng)造發(fā)明型,要重視培養(yǎng)學(xué)生的計(jì)算思維。我國的信息技術(shù)教育也正從知識與技能的學(xué)習(xí)向能力與思維方式轉(zhuǎn)變,從信息技術(shù)的應(yīng)用向信息技術(shù)的創(chuàng)造轉(zhuǎn)變。我們希望通過基于計(jì)算思維為核心的“小學(xué)Kodu趣味程序設(shè)計(jì)”課程的實(shí)施讓小學(xué)生常有一些靈感迸發(fā)出來,讓這些閃光點(diǎn)成為一個(gè)意想不到的創(chuàng)意,讓學(xué)生在自主、合作、交流、思考的過程中,促進(jìn)思維發(fā)展,在學(xué)會編程過程中,提高科學(xué)創(chuàng)新的能力。