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