謝忠新 趙旻
當(dāng)前國(guó)內(nèi)外中小學(xué)信息技術(shù)教育都越來(lái)越關(guān)注學(xué)生計(jì)算思維的培養(yǎng),美國(guó)的計(jì)算機(jī)科學(xué)教師協(xié)會(huì)(CSTA)將計(jì)算思維納入《CSTA K-12標(biāo)準(zhǔn)》,英國(guó)的計(jì)算在學(xué)校工作組(CAS)將計(jì)算思維作為“學(xué)校計(jì)算機(jī)和信息技術(shù)課程”的一項(xiàng)關(guān)鍵內(nèi)容,我國(guó)正式發(fā)布的高中信息技術(shù)課程標(biāo)準(zhǔn)中,已經(jīng)明確地將計(jì)算思維作為信息技術(shù)學(xué)科的核心素養(yǎng)之一。計(jì)算思維也必將是小學(xué)信息技術(shù)學(xué)科的核心素養(yǎng)之一,那么小學(xué)生計(jì)算思維到底是指什么,包括哪些內(nèi)容,如何有效培養(yǎng)小學(xué)生計(jì)算思維呢?
計(jì)算思維涉及一個(gè)關(guān)鍵內(nèi)容:“用計(jì)算機(jī)解決問(wèn)題”,包括問(wèn)題分解、抽象、算法思維。其中將問(wèn)題分為較小可管理部件的過(guò)程稱為“分解”,分解是指將復(fù)雜的問(wèn)題或系統(tǒng)分解成更小,更易于管理的部件,是一種分層思維,有助于我們解決復(fù)雜的問(wèn)題?!俺橄蟆笔侵竷H關(guān)注重要信息,忽略不相關(guān)的細(xì)節(jié),抽象過(guò)程決定我們需要突出的特征以及我們可以忽略的細(xì)節(jié),這是計(jì)算思維的基礎(chǔ)。“算法”是一系列指令或一組規(guī)則來(lái)完成某些操作,是指開(kāi)發(fā)一個(gè)循序漸進(jìn)的解決方案,或解決問(wèn)題所遵循的規(guī)則,是解決問(wèn)題的具體流程建設(shè)。
一個(gè)國(guó)外小學(xué)生計(jì)算思維培養(yǎng)案例的描述
在小學(xué)階段如何培養(yǎng)學(xué)生分解、抽象、算法等計(jì)算思維呢?我們來(lái)看一個(gè)國(guó)外的案例:《瘋狂的角色》。
1.學(xué)習(xí)目標(biāo)
(1)學(xué)生知道什么是算法,可以說(shuō)算法是使事情發(fā)生或解決問(wèn)題一組詳細(xì)步驟。(2)學(xué)生可以創(chuàng)建一個(gè)精確并且順序正確的算法,可以調(diào)試他們的算法,提高每一步的精度。(3)學(xué)生可以精確地執(zhí)行一個(gè)算法。
2.教學(xué)過(guò)程
第一個(gè)環(huán)節(jié):學(xué)生認(rèn)識(shí)算法
課前教師編寫(xiě)要示范的瘋狂角色算法的例子。
繪制一個(gè)秘密的瘋狂角色的算法,圖1是為了幫助教師記住說(shuō)什么。
告訴學(xué)生本節(jié)課將要求他們按照一些指令去繪制一個(gè)瘋狂的角色。
教師說(shuō)出課前設(shè)計(jì)的要示范的瘋狂角色算法的具體步驟,給學(xué)生一定的時(shí)間來(lái)畫(huà)這個(gè)角色,注意在這個(gè)階段不要給學(xué)生更多的細(xì)節(jié)。
要求學(xué)生向教師展示他們畫(huà)的是什么。
教師要說(shuō)它是或不是你所期望的,例如 “哦,我沒(méi)想到,你們畫(huà)出來(lái)的角色都是不同的,我想要所有的腿像……”
詢問(wèn)學(xué)生老師該如何改變自己的指令(算法),才能使學(xué)生畫(huà)出來(lái)的是想要的,如圖2所示。
如何思考每一步以及如何添加細(xì)節(jié),學(xué)生應(yīng)該開(kāi)始意識(shí)到算法的精確性。
示范添加額外的詞,如“微小的、在頂部”等。
提問(wèn):什么是算法?
講解:算法是完成某件事情的一系列指令或規(guī)則。
設(shè)計(jì)意圖:教學(xué)開(kāi)始,學(xué)生一邊體驗(yàn)游戲的過(guò)程,同時(shí)也在思考“算法”的特點(diǎn)。學(xué)生根據(jù)老師的指令,一步一步畫(huà)完這個(gè)瘋狂的角色。然后,老師給出了算法的含義,算法就是一連串指令的精確定義,或者是執(zhí)行某一特定事項(xiàng)的一組規(guī)則。
第二個(gè)環(huán)節(jié):師生共同創(chuàng)建算法
告訴學(xué)生為繪制一個(gè)班級(jí)瘋狂角色創(chuàng)建指令。
教師示范如何想象/思考一個(gè)角色并創(chuàng)建一個(gè)一步一步的指令(算法)。
學(xué)生按照算法在底部的某個(gè)框中繪制角色。
教師問(wèn)“這是我期望的嗎”,示范如何思考每一步以及如何添加細(xì)節(jié)(精確性)。 考慮人們?nèi)绾卫斫猓ń忉專┪覀兪褂玫脑~。
要求學(xué)生使用改進(jìn)的算法再次在第二個(gè)框中繪制角色。
第三個(gè)環(huán)節(jié):學(xué)生創(chuàng)建與調(diào)試算法
要求學(xué)生想象一個(gè)瘋狂的角色,并解釋說(shuō)該輪到他們來(lái)寫(xiě)指令。提醒他們想想他們的合作伙伴會(huì)理解的簡(jiǎn)單指令。當(dāng)他們已經(jīng)寫(xiě)下算法時(shí),他們可以要求一個(gè)朋友為他們測(cè)試算法。 提醒他們想:“這是我期望的嗎?”然后他們可以改進(jìn)他們的步驟,并讓另一個(gè)朋友來(lái)測(cè)試。
教師對(duì)班級(jí)學(xué)生說(shuō):現(xiàn)在輪到你了。
想象一個(gè)角色。
寫(xiě)下你算法的每一步。
當(dāng)你完成所有步驟時(shí),請(qǐng)你的一個(gè)朋友來(lái)測(cè)試。
它是你期望的結(jié)果嗎?
通過(guò)改變你的算法來(lái)改進(jìn)它。
請(qǐng)你的另外一個(gè)朋友來(lái)測(cè)試。
你能發(fā)現(xiàn)什么?
學(xué)生使用工作表來(lái)創(chuàng)建他們自己的算法。
設(shè)計(jì)意圖:讓學(xué)生設(shè)想一個(gè)角色,并把創(chuàng)建的步驟寫(xiě)在表格中。學(xué)生的同伴根據(jù)這個(gè)表格中的步驟,畫(huà)出角色。學(xué)生設(shè)計(jì)這個(gè)角色的過(guò)程,就是在用自然語(yǔ)言描述算法。值得注意的是,這個(gè)過(guò)程,老師需要引導(dǎo)學(xué)生思考,你的同伴畫(huà)出來(lái)的角色跟你預(yù)期的樣子像嗎?為什么會(huì)有這些差距呢?
通過(guò)觀看他人的作品,老師引導(dǎo)學(xué)生在算法中添加細(xì)節(jié)描寫(xiě),幫助他人畫(huà)出自己預(yù)期相同的作品。接下來(lái),學(xué)生修改算法,添加細(xì)節(jié)描述,再換一個(gè)人畫(huà)一遍。如果他人再畫(huà)一次,也不能讓自己滿意,那么學(xué)生再次總結(jié)自己的算法中,哪些細(xì)節(jié)語(yǔ)言是可以去除,哪些是必須添加的。這是一個(gè)不斷調(diào)試的過(guò)程,學(xué)生會(huì)在一次一次的設(shè)計(jì)中,領(lǐng)會(huì)到精確的算法描述的好處。
第四個(gè)環(huán)節(jié):師生共同總結(jié)算法
要求學(xué)生告訴同伴他們的算法是如何改變的,為什么要這樣改變。
選幾個(gè)學(xué)生分享他們的討論。 添加了哪些單詞(位置、大小、數(shù)字等)?這些單詞是幫助改變的? 發(fā)生了哪些他們意想不到的事情?為了改變他們的算法他們做了什么?它有用嗎?
問(wèn)學(xué)生算法是什么。算法是完成某件事情的一系列指令或一組規(guī)則。
案例的教學(xué)實(shí)踐與反思
1.基于案例的教學(xué)再設(shè)計(jì)與實(shí)踐
借這個(gè)案例,希望嘗試一次“不插電”的信息技術(shù)課,既能在教學(xué)內(nèi)容中滲透計(jì)算思維的思想,又要把握好內(nèi)容的難度,同時(shí)讓小學(xué)生愉快的學(xué)習(xí)。在課堂上,教師設(shè)計(jì)了三個(gè)環(huán)節(jié)來(lái)讓學(xué)生體會(huì)與理解算法。
第一環(huán)節(jié):游戲?qū)?,感受算?/p>
老師提出游戲任務(wù):畫(huà)一個(gè)瘋狂的角色。畫(huà)之前,老師就告訴學(xué)生,今天有一個(gè)魔法單詞“Algorithm”(算法)幫助學(xué)生完成這個(gè)任務(wù)。教學(xué)開(kāi)始,學(xué)生一邊體驗(yàn)游戲的過(guò)程,同時(shí)也在思考“Algorithm”的特點(diǎn)。學(xué)生根據(jù)老師的指令,一步一步畫(huà)完這個(gè)瘋狂的角色。學(xué)生嘗試分享自己對(duì)“Algorithm”的體會(huì),他們會(huì)給出“步驟、指令、過(guò)程”等關(guān)鍵詞。然后老師告訴學(xué)生,“Algorithm”就是算法。算法就是一連串指令的精確定義,或者是執(zhí)行某一特定事項(xiàng)的一組規(guī)則。
第二環(huán)節(jié):設(shè)計(jì)角色,編寫(xiě)算法
教師鼓勵(lì)學(xué)生先設(shè)想一個(gè)角色,然后根據(jù)游戲過(guò)程,把自己創(chuàng)建角色的算法步驟寫(xiě)在表格中。同伴根據(jù)這個(gè)表格中的算法,畫(huà)出角色。
第三環(huán)節(jié):改進(jìn)角色,調(diào)試算法
通過(guò)觀看、評(píng)價(jià)他人的作品,老師引導(dǎo)學(xué)生理解只有對(duì)算法的描述越詳細(xì),添加細(xì)節(jié)描寫(xiě),才能幫助他人畫(huà)出與自己預(yù)期相同的作品。
2.基于案例再設(shè)計(jì)與實(shí)踐后的反思
(1)這個(gè)案例之中涉及計(jì)算思維的內(nèi)容
這個(gè)案例主要涉及計(jì)算思維的“分解”與“算法思維”。小學(xué)生為他們瘋狂的角色編寫(xiě)算法,學(xué)生分解繪制他們瘋狂角色的過(guò)程。關(guān)于“分解”,教學(xué)過(guò)程中,把算法的概念分為若干小問(wèn)題,如:感受算法的過(guò)程、總結(jié)算法的含義;另一方面,教師也在引導(dǎo)學(xué)生把問(wèn)題分解成步驟時(shí),鼓勵(lì)更多有能力的學(xué)生在創(chuàng)建他們的算法時(shí)要非常精確,去思考哪些細(xì)節(jié)是重要的,哪些不是重要的。關(guān)于“算法思維”,學(xué)生可以說(shuō)出,算法是一組詳細(xì)的步驟,讓事情發(fā)生或工作;學(xué)生可以創(chuàng)建一個(gè)精確且正確的算法;學(xué)生可以調(diào)試算法,提高每一步算法的精度。
(2)小學(xué)生體會(huì)與理解什么是算法
現(xiàn)有的信息技術(shù)教材中,只有到高中學(xué)生才會(huì)接觸算法的相關(guān)內(nèi)容。從這個(gè)案例告訴我們,小學(xué)生依然可以通過(guò)恰當(dāng)?shù)姆椒w會(huì)與理解什么是算法。
在教學(xué)第一個(gè)環(huán)節(jié)中,老師不僅要跟學(xué)生一起討論出什么是算法,還要把算法一些特征總結(jié)出來(lái),比如:必須一步一步執(zhí)行,有先后次序;必須一次完成一件事情等。在教學(xué)第三個(gè)環(huán)節(jié)中,三年級(jí)的學(xué)生很容易理解如何讓算法更加精準(zhǔn)的描述,決定他人畫(huà)出來(lái)的角色符合自己的設(shè)定。但是,在教學(xué)實(shí)際中,筆者也發(fā)現(xiàn),小學(xué)生很容易走向定式思維,對(duì)自己設(shè)定的角色缺乏一定想象力。很容易結(jié)合自己喜歡的形象進(jìn)行描述,因此在對(duì)算法優(yōu)化這一環(huán)節(jié),并不太容易獲得教師希望的結(jié)果。這還需要在今后的學(xué)習(xí)中,老師進(jìn)一步引導(dǎo)學(xué)生大膽想象。
小學(xué)生計(jì)算思維培養(yǎng)的若干思考
1.培養(yǎng)學(xué)生計(jì)算思維不一定需要編程
目前,Scratch為代表的可視化圖塊式編程工具也逐漸普及,利用這些編程工具來(lái)培養(yǎng)學(xué)生計(jì)算思維也成為當(dāng)今熱門(mén)話題。很多教育工作者會(huì)認(rèn)為,學(xué)習(xí)Scratch,培養(yǎng)學(xué)生編程思維,就是在培養(yǎng)他的計(jì)算思維。其實(shí),培養(yǎng)計(jì)算思維是為了培養(yǎng)學(xué)生解決實(shí)際問(wèn)題的能力。同樣也可以嘗試不利用編程軟件與工具來(lái)培養(yǎng)學(xué)生的計(jì)算思維。在本節(jié)課中,首先拋開(kāi)知識(shí)技能的難度,只要求小學(xué)生能理解算法,知道算法的含義,能寫(xiě)一個(gè)算法。在教學(xué)環(huán)節(jié)中,也拋開(kāi)了編程的教學(xué)思路,而是通過(guò)師生互動(dòng)、生生互動(dòng)的游戲,幫助學(xué)生一步一步構(gòu)建對(duì)算法的認(rèn)知。考慮到調(diào)試是一個(gè)枯燥的環(huán)節(jié),教學(xué)中又利用另一個(gè)人來(lái)完成改進(jìn)后的算法,讓整個(gè)教學(xué)過(guò)程都充滿歡樂(lè)。小學(xué)生在愉快的學(xué)習(xí)氛圍中感受算法、描述算法與調(diào)試算法,將來(lái)到了高中,順理成章地理解算法的概念,總結(jié)算法的特征,并用編程語(yǔ)言實(shí)現(xiàn)算法。
2.要重視思維過(guò)程的呈現(xiàn)以及對(duì)其進(jìn)行評(píng)估
計(jì)算思維培養(yǎng)過(guò)程中,重點(diǎn)工作就是對(duì)其思維過(guò)程的呈現(xiàn)以及進(jìn)行評(píng)估。本節(jié)課把握住小學(xué)生愿意表達(dá)、喜歡畫(huà)自己感興趣的角色的心理特征。課堂中,學(xué)生畫(huà)的步驟,就是其算法思維過(guò)程的呈現(xiàn)。同伴畫(huà)得像不像自己預(yù)期設(shè)想的樣子,就是對(duì)整個(gè)算法的評(píng)估。在以往的編程教學(xué)中,我們?nèi)菀卓粗鼐幊痰慕Y(jié)果,在后期調(diào)試過(guò)程中,教師發(fā)現(xiàn)學(xué)生代碼編寫(xiě)邏輯混亂,也很難通過(guò)代碼看出學(xué)生思考的過(guò)程。
3.學(xué)生計(jì)算思維的培養(yǎng)將是長(zhǎng)期努力的方向
在這個(gè)案例的前半段,老師能很好的引導(dǎo)學(xué)生畫(huà)出“瘋狂”的角色,學(xué)生也能體會(huì)“算法”的核心思想。但是,在后半段的實(shí)踐中,老師也發(fā)現(xiàn)部分學(xué)生告訴老師,同伴第一次就能畫(huà)出跟自己想象一樣的作品,不需要優(yōu)化自己的算法。這是為什么呢?反思整個(gè)教學(xué)過(guò)程,老師發(fā)現(xiàn),很多學(xué)生并沒(méi)有真正理解“瘋狂”的意義?!隘偪竦慕巧辈⒉皇亲寣W(xué)生一定要去畫(huà)幾百只眼睛、或手腳的怪物;而是當(dāng)算法不精確的情況下,他人根據(jù)這個(gè)算法畫(huà)出來(lái)隨心所欲的角色,這樣不受控制的行為才是瘋狂的。只要準(zhǔn)確的算法描述,讓角色按照自己設(shè)定的創(chuàng)設(shè),才不會(huì)瘋狂。有的學(xué)生關(guān)注的重點(diǎn)偏向一個(gè)怪物,有的學(xué)生始終認(rèn)為畫(huà)出的頭、眼睛、手都應(yīng)該固定身體的周?chē)?。定式的思維,讓學(xué)生在創(chuàng)設(shè)時(shí)受到局限,教學(xué)實(shí)踐的不完美,才讓我們的老師看到努力的方向。
作者單位:上海市浦東新區(qū)教育發(fā)展研究院 上海市浦東新區(qū)新世界實(shí)驗(yàn)小學(xué)