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

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