王蘇明 江蘇省南京市龍江小學
如果要推選近年來信息技術學科的“網紅”詞匯,“計算思維”當選一定是當仁不讓。中科院徐志偉總工指出,“計算思維是一種本質的、所有人都必須具備的思維方式,就像識字、做算術一樣。”他更提出了“在2050年以前,應該讓地球上的每個公民都具備‘計算思維’能力”的愿景。美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授在接受專訪時解釋說,“計算思維就是像計算機科學家一樣思考。”然而對于一線教師而言,知易行難,這些聽起來很美好的想法,想要在小學信息技術課堂上呈現,似乎仍缺少切實可行的途徑。
在剛剛進行的一次主題為“基于計算思維的兒童編程教學研討”的區內教研活動中,教師的發言很能說明現狀:
師1:我覺得我們的教研活動的主題不應該嘩眾取寵,寫“小學編程教學實踐”就行了,不要老是追熱點,動不動就計算思維,說半天,我就覺得還是原來的編程課嘛!
第一位發言的教師是一位資深的信息技術教師,從開設信息技術課開始,他就一直教這門學科,在編程競賽方面獲得過很多成績。他的發言馬上獲得了不少教師的贊同。
師2:李老師說得沒錯,熱點熱點,總是來得快去得也快,追熱點追名詞沒有意義,重要的還是把課上好。老是炒作熱點,一點兒新意都沒有,就像計算思維的概念解釋,我都能背了,但誰能把“計算思維”說得能讓學生都懂?還讓小學生“像計算機科學家一樣思考”,真的離得太遠了!
師3:是的,是的。不單單是計算思維,還有什么“抽象”“建模”這些概念,能有幾個學生是真正明白的?我看老師都說不清楚!
師4:剛才幾位老師的意見,我不是完全贊同,計算思維之所以能有這么長時間的熱度,說明它一定有值得思考的地方,要不去年發布的高中新課程標準也不會把它列為學科核心素養之一。但是很多課,確實如大家所言,只是冠以“計算思維”的名字,實際和原來的課并沒有大的改變,或者說沒讓我們一下子就感覺到,這節課里確實能看到“計算思維”的影子。
一場主題為“計算思維”的教研活動,最后差點演變成了一場批判“虛無浮躁”主義的撻伐會。筆者恰巧即將承擔下一期區教研活動,主題是“體驗程序設計 落地計算思維”,看來今天的“球”必須要接下了。
不能免俗,概念還是要從源頭理起。2006年3月,周以真教授在美國計算機權威期刊Communications of the ACM雜志上給出并定義了計算思維(Computational Thinking)。周以真認為,計算思維是運用計算機科學的基礎概念進行問題求解、系統設計,以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。問題來了,這種“硬科學”的描述方式是不是在某種程度上成為了師生理解“計算思維”的一種“障礙”?我們再來看看,陳國良院士在《計算思維與大學計算機基礎教育》一文中對“計算思維”中的幾個明確觀點做的更進一步的說明:①是概念化,不是編程化;②根本的,不是刻板的技能;③是人的,不是計算機的思維;④是思想,不是人造品;⑤數學思維與工程思維的互補與融合;⑥面向所有的人,所有地方。這樣一解釋,清晰了不少。再簡單地說,“計算思維”應該是人類所應具備的一種思考方式,一種運用計算機科學的基礎概念解決問題的思路。同時,根據人類和機器各自擅長的領域,計算思維對問題解決做出了“分工”:人類負責思考,機器負責求解。再直白一點地表述就是:人類負責把實際問題轉化為可計算的問題,并設計算法讓計算機去執行,計算機負責具體的運算任務。這一過程完成了思考和求解之間的鏈接,這也正是我們要帶給學生的,體現計算思維最核心的兩個特征:抽象(Abstraction)和自動化(Automation)。那么,抽象是什么?簡單一點地說,做三件事:一是對問題做分析和描述,找到一種數學上的表達;二是在數學表達的基礎上,找到解決的方法,這就是常說的算法;三是通過編程,把這個算法告訴計算機。計算機根據算法,一步步執行指令,求出結果,就是自動化求解。
到此,概念基本厘清了,也基本能回答本次教研活動時諸位教師的質疑了。但又如何在小學Scratch教學中實施呢?這還需要聽得見看得著的課堂實踐。筆者設計了《有趣的概率》一課,具體實施過程做以下闡述。
《有趣的概率》是Scratch“數值與邏輯運算”單元的綜合應用課,是學生應用Scratch模擬求解生活中實際問題的拓展課,引導學生根據不同場景有效運用Scratch解決實際問題,體驗“抽象”到“自動化求解”的計算思維實踐路徑。本課的主要學習目標如下:①如何在計算機中表達生活中的“事與物”;②能夠應用隨機數模擬實際生活中發生的概率事件情境;③搭建腳本嘗試通過條件判斷進行求解。
本課我們選擇了學生熟悉的場景進行導入:“同學們,你們知道在足球、籃球等球類比賽項目,裁判員是用什么方式決定哪一方先開球的嗎?這個人們約定俗成的規則是否公平?有辦法證明嗎?”大多數學生認為這種方法是公平的。教師再請學生小組討論,能否設計一個實驗來支持驗證自己的結論。學生都通過拋硬幣記正反的方法進行小組實驗。各小組匯報后,發現了問題:在10組實驗中,有的組硬幣正面達到了8次,有的組反面也有7次,各組數據差異較大,很難支持之前的結論。學生一致認為:次數有限的實驗很難證明自己的結論,可能需要“成千上萬”次實驗才有說服力。教師適時提出要請計算機幫忙,模擬這樣的概率事件,從而引出第一個問題:如何在計算機中表示硬幣的“正”與“反”?計算機顯然更擅長處理數字,學生很快就能說出用0/1或1/2等數字表示。這個過程就完成了最簡單樸素的抽象,用數字0和1表示硬幣“正”與“反”兩種狀態,將人工記錄“正”“反”轉換成了計算機得到0或1的次數。
經驗1:鏈接生活。將現實問題轉換成數學問題,是計算思維實踐的第一步,這也使得計算機介入問題求解成為可能。比如,我們運用百度地圖進行出行路線規劃,其前提是所有物理存在的建筑或地點都在地圖里坐標化了;我們用美團外賣進行點餐,各類美食或商家活動都被貨幣化了;我們去醫院體檢,看到的各項生理機能的描述也被指標化了。這些我們在終端上的所見,都是科學家們做了大量的工作后,用戶所能看到的結果,這些工作的第一步就是將生活中的“事與物”用數字表示,以便讓計算機可以處理。那么,如何讓小學生“像科學家一樣思考”呢?鏈接生活,選擇一個簡單可理解的生活現象進行“數學化”嘗試,就是一種切實可行的選擇。
在本次“拋硬幣”的模擬實驗中,學生很快會想到這樣的問題:計算機如何模擬不確定的結果?在該實驗中,硬幣只有兩種狀態,因此,我們只需要獲得0或1兩個數字即可。需要獲得有范圍又不確定的數字,選擇隨機數也就順理成章了。隨機數是不確定的數,我們需要建立變量“模擬”來記錄每次隨機數控件獲得的值。每得到一個值,通過條件判斷,計算機就會給正的次數或是反的次數進行累加,累加的結果也需要呈現,因此,還需要建立變量“正的次數”和“反的次數”記錄整個模擬實驗最后的結果。有了以上分析,再用自然語言描述計算機模擬“拋硬幣”實驗的過程就不再是難事了。這樣可清晰描述的問題解決方法其實就是算法。

真實世界中的“事與物” 計算機處理的方式 Scratch中對應的功能塊硬幣的正反面 數字表示:0/1不確定的結果 隨機數條件判斷正與反的次數累加多次實驗 重復運行
經驗2:鼓勵表達。Scratch和其他編程語言有所區別的是,它有著和自然語言相似的表達結構,一定要鼓勵學生嘗試用自然語言描述清楚問題的解決方案,這樣的梳理過程就是算法產生的過程。而且,Scratch允許時刻進行“自下而上的修補(bottom-up tinkering)”,這就更符合小學生的心智特點:往往不能一次說全,需要一定的“容錯”空間。這樣,學生在發現自己方案不足時,可以隨時修補,其實正是這種看似“隨意”的過程,卻給學生帶來了更友好的算法體驗,讓小學生更能理解算法的本質。
有了明確的算法,接下來就是腳本搭建了。這一過程就是學生經歷了任務分析、指令選擇之后的編程組織,是人類完成思考,將解決問題的方案傳遞給計算機的過程。這一過程的完成也就意味著計算思維中“人機分工”的完成,這一過程也是幫助學生逐步形成“任務—指令—序化”程序設計思想的必要途徑。那么,如何有效有序地幫助小學生來完成這一過程呢?我們提供了下列轉換表(見上表),學生對照表格再去完成搭建,較為輕松地全部完成了“拋硬幣”的實驗腳本搭建任務。
經驗3:提供支架。Scratch雖然有著眾多適合小學生學習的優點,但從算法變為程序,對小學生而言仍然是一種挑戰。如何分層化解這些挑戰?使用學習支架,是一種很好的輔助方式。學習支架幫助學生梳理計算機解決問題的過程,完成從自然語言描述向Scratch腳本轉換的過程。這種支架可以幫助學生轉換獲得的信息,使所學知識更為清晰、易于理解。在學生初學階段進行這種轉換練習,可以很好地鍛煉學生的邏輯分析能力。實際上,這種將真實世界中的“事與物”表示為計算機可以處理的方式,再向Scratch腳本轉換的過程,也就是抽象與建模的過程。
在隨后的教學中,我們又給學生提供了兩種變式情境。第一種問題情境如下:投擲常見的六面骰子。問題解讀如下:如何在計算機中表示骰子不同的面?又如何模擬每次獲得的不同結果?如何記錄某一面的次數?有了“拋硬幣”的例子,絕大部分學生都能很好地完成“色子”問題。第二個問題是經典的“車羊游戲”:有3扇關閉著的門,其中兩扇門后面各有一只羊,另一扇門后面有一輛車。游戲中有一位游戲者和一位主持人,主持人事先知道各扇門后的物品,游戲者不知情。游戲過程如下:①游戲者隨機選定一扇門;②在不打開此扇門的情況下,主持人打開另一扇有羊的門;③此時面對剩下兩扇門,游戲者有一次更改第一次選擇的機會。問題如下:如果想選到車的概率更大,游戲者是否應該改變第一次的選擇?請學生說說自己的選擇,并用Scratch編程驗證自己的推論。面對這一經典問題,學生仍然可以“扶著架子過河”,只是在“過河”的過程中,多跨一道坎,在抽象建模時,規則會有一定的變化,比如,門和羊在符號映射是可以一一對應的,但在統計時,又會變成打開兩扇門都會觸發選到羊的次數的累加。這個問題設計有一定的難度,原來是打算放在課后完成,但前兩個問題較圓滿地完成,也給了學生當堂嘗試的時間和信心,完成情況也大大超出預期,每個小組也都有學生搭建成功!
經驗4:梯度設計。在一堂課中,圍繞目標達成設計的任務一定要有梯度,本節課的兩個問題情境,“色子”問題的目的是為了驗證與鞏固剛剛建立的計算思維實踐路徑,讓學生學會運用支架完成轉換,學生的達成度很高,也證明了這是一條切實可行的問題解決路徑;“車羊問題”,從模式識別來說,仍然是聚類問題,但又有了較大坡度的提升,學生在面對這樣的變式情境時,既能體會到計算思維確實是“看得見”的,又能幫助學生加深對計算思維中抽象的理解,達到思維訓練上的提升。
一節課下來,教學的思路,學生的表現,都得到了聽課教師的一致認可。李老師在評課時說:“這堂課,雖然教師課堂上沒有提到‘計算思維’四個字,但是,我看到了學生解決問題的過程,看到了學生看到計算機執行后得到數據時的興奮,體會到了學生的成長,我想這樣的課堂才是真正意義上的基于‘計算思維’的課堂。”王老師說:“我曾經聽過微軟劉康平博士講計算思維的演講,感覺今天課堂的設計和劉康平講的例子有異曲同工之處,也讓我本人對計算思維有了更直觀的理解。”郭老師說:“這節課,給我最深的影響是對‘學會學習’四個字的理解:學生從將硬幣正反面抽象成0/1到將車、羊抽象成1/2/3,從自然表達到利用支架轉換,從簡單情境的處理到復雜變式的應對,都讓我體會到了‘學會學習’的重要性,也讓我感覺到‘計算思維’在課堂落地是切實可行的。”大家的認同,也是筆者“作文以記之”的最初動力,后面筆者作為主持人又和幾位志同道合的教師成功立項了計算思維應用于小學Scratch教學的市級規劃課題,這是后話。
“計算思維”被確立為信息技術學科核心素養之一,對于信息技術課程的發展無疑有著深遠的影響,但課程的實施歸根到底還是依靠一線教師去推動。因此,一線教師如何在課堂滲透、實踐“計算思維”,使得“計算思維”能夠被學生“看見”,必然成為學生發展的關鍵。本文僅從學生立場出發,對“計算思維”在小學Scratch課堂的實踐落地做了粗淺的思考,探究了運用“計算思維”解決實際問題的可行路徑,帶領學生認識了計算思維的核心特征——“抽象”和“自動化”,以期拋磚引玉,引起一線教師的重視與思考,為“計算思維”落地小學信息技術課堂帶來更多的可行性和可能性。