曾偉鋒 上海市朱家角中學
計算思維是運用計算機科學的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計,以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動。在算法與程序?qū)崿F(xiàn)單元教學中,應(yīng)從生活實例出發(fā),創(chuàng)設(shè)程序設(shè)計的活動情境,組織學生在解決問題的過程中,掌握一種程序設(shè)計語言的基本知識,使用程序設(shè)計語言實現(xiàn)簡單算法。基于生活游戲的程序設(shè)計是將生活游戲體驗整合到程序設(shè)計中,學生通過情境體驗、任務(wù)分解、抽象建模、算法實現(xiàn)等一系列過程解決實際問題,培養(yǎng)計算思維。下面,筆者以《用Python實現(xiàn)“石頭剪刀布”游戲》一課為例談?wù)劵谏钣螒蚺囵B(yǎng)計算思維的實踐體驗。
情境體驗激發(fā)學生學習積極性,為計算思維發(fā)展提供思維材料,提高學生利用計算思維解決實際問題的意識和能力。游戲情境能夠激發(fā)學生的學習興趣,使學生樂于參與,同時能夠調(diào)動學生已有的經(jīng)驗,使其在情境中思考問題。
教學片段:同桌之間玩“石頭剪刀布”游戲,詳細描述游戲規(guī)則。
總結(jié)游戲規(guī)則:兩個玩家出示自己心中想好的手勢。如果雙方出示了一樣的手勢,就是平局,需要重新出示手勢,直到手勢不同分出勝負〔石頭>剪刀(石頭勝利),剪刀>布(剪刀勝利),布>石頭(布勝利)〕。
這個小游戲?qū)W生都熟悉,因此他們參與游戲的積極性很高,而且能夠詳細描述出游戲規(guī)則。這個環(huán)節(jié)以生活中最常見的猜拳游戲引入,增強課堂教學的趣味性,調(diào)動了學生的學習積極性。把生活游戲轉(zhuǎn)化為計算機游戲,增強了學生的探究欲望,提升了學生對程序?qū)W習的主觀能動性。學生能在游戲過程中提煉出明確的游戲規(guī)則,這是用計算機可以處理的方式界定問題的前提,是從具體到抽象的重要過程,為接下來的學習做了良好的鋪墊。
化繁為簡,培養(yǎng)學生計算思維任務(wù)分解的意識和能力。將問題分為較小、可管理部件的過程稱為分解,分解有助于解決復(fù)雜的問題并管理大型項目。任務(wù)分解是明晰如何拆解一個任務(wù),把問題分解為若干部分或步驟,同時厘清各個部分的屬性。軟件開發(fā)是一個復(fù)雜的過程,因此能夠?qū)⒁粋€大型項目分解為多個小項目是至關(guān)重要的。
教學片段:引導(dǎo)學生分步驟描述“石頭剪刀布”游戲過程,這也是用自然語言來描述游戲算法的過程。
①雙方準備好要出的拳;
②亮拳;
③如果雙方出拳相同,顯示“平局”,回到步驟①開始執(zhí)行,否則進入步驟④;
④根據(jù)雙方出拳,判斷勝負〔石頭>剪刀(石頭勝利),剪刀>布(剪刀勝利),布>石頭(布勝利)〕;
⑤本局游戲結(jié)束。
學生在教師的引導(dǎo)下將猜拳游戲分解為小的步驟,有助于計算機編程實現(xiàn),這也是算法每一個步驟確定性和可行性的充分準備,是算法的自然語言描述。很多學生對將實際問題轉(zhuǎn)為程序?qū)崿F(xiàn)感到困難,究其原因是缺乏對具體問題的細致解讀,缺少問題詳細分析的過程。問題拆解,化繁為簡,為以后完成復(fù)雜的程序提供了一種問題解決的思路。
計算思維的本質(zhì)是抽象,計算思維中的抽象需要依據(jù)計算模型對現(xiàn)實世界中要處理對象的屬性、規(guī)則、方法進行抽象和形式化表達,為構(gòu)建計算機世界提供依據(jù)。對中學生而言,從熟悉的形象、具體的思維轉(zhuǎn)向抽象、復(fù)雜的計算思維,難度和跨度較大。這就需要教師在教學的過程中呈現(xiàn)思維的過程,為學生搭建思維支架,幫助學生搭建具體問題到抽象的模型,以實現(xiàn)計算機自動解決問題。同時,在任務(wù)分解的基礎(chǔ)上,形成相關(guān)性的問題鏈,以引導(dǎo)和促進學生的思維活動。通過創(chuàng)設(shè)問題情境可以啟發(fā)學生提取先驗知識,概括問題關(guān)鍵特征并對問題進行形式化表達,將其抽象為計算機能夠“理解”的具體的步驟,使其抽象特征能力得到發(fā)展。
從自然語言的描述到程序語言的表達,學生缺少實踐的機會,難以自主完成程序設(shè)計。而在問題的引導(dǎo)下,學生能夠把實際問題用課本中學到的程序設(shè)計知識描述出來,實現(xiàn)問題的形式化表達。軟件開發(fā)是人們使用計算機語言將現(xiàn)實世界映射到計算機世界的過程。教師引導(dǎo)學生嘗試將一方玩家由人變成計算機,理解人的行為怎么變?yōu)橛嬎銠C的行為。學生通過問題的引導(dǎo),結(jié)合已有信息技術(shù)學科知識,逐步將游戲情境抽象為計算機能理解的執(zhí)行步驟。學生獨立運用程序解決實際問題比較困難,需要教師的引導(dǎo)和幫助,也需要通過實踐提升程序設(shè)計能力和自信心。教學片段如上頁表所示。

①雙方準備好要出的拳問題1:人出的拳如何輸入到計算機?通過輸入語句:player=input(“請出拳:(石頭、剪刀、布)”)問題2:計算機如何隨機出拳?使用隨機函數(shù):quan=["石頭","剪刀","布"]computer=random.choice(quan)②亮拳 問題:計算機和玩家都出了什么拳?使用輸出語句顯示出來:print語句③如果雙方出拳相同,顯示“平局”,回到步驟①開始執(zhí)行,否則進入步驟④問題1:根據(jù)語義描述,屬于什么程序結(jié)構(gòu)?循環(huán)結(jié)構(gòu)。問題2:計算機程序是如何描述出拳相同的,即循環(huán)的條件如何用表達式來表示?player==computer或 者 (player == “ 石 頭 ” and computer == “ 石 頭 ”) or(player == “ 布 ” and computer == “ 布 ”) or(player == “ 剪 刀 ” and computer == “剪刀”)都是可以的問題3:循環(huán)體的內(nèi)容,碰到出拳相同要執(zhí)行哪些語句?依次執(zhí)行:顯示“平局”、步驟①、步驟②分析:判斷勝負已經(jīng)有個前提,即雙方出拳不同④判斷勝負images/BZ_46_1320_2321_1922_2689.png如何根據(jù)出拳比較得出結(jié)果?將實際的6種情況轉(zhuǎn)化為Python程序代碼。以第1種情況為例:變量player表示人出拳,變量computer表示電腦出拳。如果 人出石頭 計算機出剪刀結(jié)果人獲勝if(player =="石頭" and computer == "剪刀"):print("人獲勝")
算法實現(xiàn)是按照特定的問題及規(guī)則,利用編程設(shè)計出一系列的指令,以自動實現(xiàn)該問題的解決。學生信息技術(shù)學科基礎(chǔ)差異比較大,可能會產(chǎn)生如語法錯誤、中英文混合輸入等方面的基礎(chǔ)問題,在有限的課堂時間內(nèi),教師來不及一一指導(dǎo)。因此在教學中,教師可且學且教。學,是在教學活動中給學生留有更多的思維空間和動手實踐機會;教,不是教師一個人單獨講解、輔導(dǎo),還有學生教學生。學生完成石頭剪刀布的計算機游戲程序,體驗到游戲的過程從我和同學猜拳變成了我和計算機猜拳,經(jīng)歷從實際問題到程序?qū)嵺`的完整過程,獲得運用學科知識解決身邊實際問題的經(jīng)歷和體驗。學生圍繞特定任務(wù)在學習共同體中共享算法設(shè)計過程,互助實現(xiàn)編程,以此實現(xiàn)學科知識的意義建構(gòu)和學科思維的深度培養(yǎng)。
計算思維教育不是知識接受,而是思維發(fā)展;計算思維教育不是孤立的“代碼編寫”,而是過程性的“程序體驗”。本課利用學生生活中最常見的小游戲——石頭剪刀布來開展教學,幫助學生認識身邊的實際問題是如何利用計算機來處理的,有利于學生理解現(xiàn)實世界映射到計算機實際的過程。通過“情境體驗=>任務(wù)分解=>抽象建模=>算法實現(xiàn)”這一過程將學生的生活經(jīng)歷和學科思維、學科知識相結(jié)合,讓學生感受到計算方法與自動化實現(xiàn)的真實存在,在實踐體驗程序設(shè)計每個環(huán)節(jié)的過程中內(nèi)化計算思維。