仲軼宏



《普通高中信息技術課程標準(2017年版)》(以下簡稱《課標》)提倡基于項目的學習,讓項目式教學在日常課堂中落地,是當前高中信息技術教師關注的熱點,而計算思維是信息技術學科核心素養之一,是信息技術課堂培養學生的重要素養。如何將學科核心素養與項目式教學有效融合,將計算思維有效滲透到日常課堂教學實踐中,是筆者一直探索的問題。
● 計算思維與項目式教學
1.計算思維
周以真教授認為,計算思維是一種以計算科學為核心,運用計算科學的基本概念進行問題求解、系統設計和行為理解的,涵蓋計算機科學之廣度的一系列思維活動。
2.項目式教學
項目式教學是隨著《課標》的頒布而逐漸成為熱點的教學模式,通常圍繞學生生活、學習實際選取合適的項目,采用“自頂而下,逐步細化”的方法,即將完整的大項目分解成若干個小項目,再將每個小項目逐步細化、分解成一系列具體的可以實現的小任務。教師負責創設這樣的真實的項目情境,在項目實施過程中以學生為主體,全程參與項目的分析、管理、求解、完善、評價等。
3.基于計算思維的項目式教學
基于計算思維的項目式教學可以理解為一種滲透式教學,它將計算思維這一學科核心素養滲透、融入到項目實施的每個環節,在計算思維的引導下推進課堂項目進度。它兼顧思維訓練和課堂教學,項目隨著思維的擴散而推進,思維隨著項目的完善而進階,最終使能力在思維的訓練下得以提升,從而把信息技術課堂教學從重技術層面提升到重思維素養層面。
● 計算思維素養下程序設計項目式教學探索與實踐
基于計算思維能力提升的程序設計項目式教學是一個較為復雜的工程。本文圍繞“解決火柴棒擺數字問題”項目,開展課堂教學。該部分屬于《信息技術必修1 數據與計算》中的2.4節“可以復用的代碼”,旨在通過函數和模塊的方法,實現代碼的復用。
1.計算思維環境——創設
計算思維不是靠教師課堂講解其概念、知識及方法就能形成的,它需要教師為之創設特定的內、外部環境。本課創設了“解決火柴棒擺數字問題”的Python語言程序設計的項目環境,讓學生在其環境中迸發思維碰撞的火花。題目如下:已知0~9這十個數,分別由若干根火柴棒擺放而成,如下頁圖1所示。問題為:若給你6根火柴棒,請列出所有能擺出的自然數,要求6根火柴正好用完。
根據項目式教學中“自頂而下,逐步細化”的方法,可以對題目進行分解,把它分解成以下幾個子問題:①每一個數字分別需要多少根火柴棒?②列舉5個能用6根火柴棒擺出的數字?③用6根火柴棒能擺出的最大、最小數分別是多少?④一位數、兩位數、三位數所需要的火柴數量分別怎樣計算?依次解決這些子問題,將有助于學生找到解題思路和方法。
2.計算思維構建——求解
編程的核心是算法設計,算法即解決問題的方法和步驟,找到算法之后,還需要準確地將它通過自然語言或者流程圖的方式描述出來,然后進行程序結構分析、代碼編寫,最后進行調試、迭代、完善,在問題求解過程中構建學生的計算思維。
如何計算一個數需要多少根火柴棒呢?即將這個數每個位上的數字所需的火柴棒數相加。那么,如何加呢?首先,讓學生拆解數字如4,5,6,得出需要的火柴數為15根;其次,反推,如果給你15根火柴,能擺出哪些數字?通過拆解和擺放這一正一反的逆過程,讓學生熟悉項目題意。然后根據分解的子問題,從已知條件入手,可以創建一個列表,即f=[6,2,5,5,4,5,6,3,7,6],表達每個數字分別需要的火柴數;嘗試擺出幾個數字,如0,6,14,111等符合要求的數字;找到6根火柴棒能擺出的最小數0和最大數111。畫出流程圖,如圖2所示。最后我們發現,6根火柴棒能擺出的數是[0,111]區間的部分一位數、兩位數和三位數,那么將這三種類型分別找出來問題就迎刃而解了。
顯然,根據列表索引及元素之間的對應關系(如下頁表1),當0≤n<10時,s=f[n],就解決了一位數問題。那么兩位數呢?兩位數是由十位(sw)和個位(gw)組成,思路就變成了分別取出兩位數中的十位和個位上的數,通過應用整除(//)和取模(%),可得出當10≤n<100時,gw=n%10,sw=n//10,s=f[gw]+f[sw],s即為擺出兩位數中個位、十位上對應的數分別需要的火柴棒數之和。同理可類推出三位數,即當100≤n<1000時,gw=n%10,sw=n//10%10,bw=n//100,s=f[gw]+f[sw]+f[bw],如下頁表2所示。三種情況合在一起,即通過if多分支語句判斷三種情況,完成一個自定義match_num(n)的函數,然后通過主程序在range(112)中判斷match_num(n)==6,即可完成火柴棒擺放數字問題。
3.計算思維進階——轉變
圍繞“解決火柴棒擺數字問題”的項目,筆者對項目進行升階,把火柴數由6根改為10根,請列出所有能擺出的自然數,要求10根火柴正好用完。此時會發現,按照原來的解題思路,可以得出10根火柴能擺出的最大數是11111,此時就會涉及四位數和五位數的每位的取數問題,可以想象一個五位數將變成s=f[gw]+f[sw]+f[bw]f[qw]+f[ww],程序將變得非常冗余復雜。顯然,當火柴棒數量發生變化時,原來的算法程序已經不再適用,思維也應隨之產生變化,那么,是否可以設計一個不管火柴棒怎么變,都可以適用的算法呢?
計算一個數所需的火柴棒數,即計算這個數的每個位上的數所需的火柴棒數之和,可以繼續應用取模(%)和整除(//)的原理,將這個數除以10取模(n%10),求得個位數;然后將這個個位數所需的火柴棒數累加;接著去掉個位數,即將這個數對10取整(n//10);重復以上步驟直到這個數為0。以數字12345為例,如表3所示,通過while語句循環5次,便可完成這個五位數每位的取數,然后判斷這些位上的數所需的火柴棒數之和是否等于10,便可完成問題的求解,而且似乎不再受火柴棒數量的牽制。這種方法可行嗎?可通過流程圖來驗證,如上頁圖3所示。
4.計算思維回歸——嚴選
算法的改變,是計算思維變化的結果,兩者互為因果關系。嚴謹的思維和算法設計,是程序編寫的前提。再次圍繞“解決火柴棒擺數字問題”,把火柴數由剛才的10根改回6根,以驗證程序的嚴謹性。通過修改程序、調試運行,可以發現10根火柴棒擺數字完全正確的程序,火柴棒改回6根后,運行結果少了一個數0。此時,思維再次回歸到剛才的算法設計上,重新思考算法的嚴謹性,不難發現上述算法中while循環語句的前提是n>0,即忽略了考慮n=0的問題,而10根火柴不可能擺出0這個數,故而在10根火柴棒擺數字沒有出現問題,在改回6根后卻出現了問題。改變思維,完善算法,堵住0這個漏洞,通過添加一個if判斷分支,即當n=0時,s=f[0],否則s=0,便可達到程序的優化。
圍繞“解決火柴棒擺數字問題”的項目,解題的終點是擺出每個符合要求的數。選擇if分支結構語句解題,思路清晰,便于理解,但對于數據量大、程序冗長時卻不相適應;而選擇while循環結構語句解題,顯然更適合復雜的情況,但需要前瞻的大局觀和縝密的計算思維,這也是程序算法設計的精髓。
5.計算思維升華——共享
在互聯網時代,信息共享已經成為一種常態。自己編寫的程序代碼也可以幫到其他人,如把自己編寫的“火柴棒擺數字問題”的代碼成果共享給其他人。那么如何把自己的代碼共享給別人呢?筆者展示了一個近似火柴棒擺數字問題的主程序的簡短程序,運行后卻能得到相同的結果,而且任意修改火柴棒數量,都能運行出正確的結果,如上頁圖4所示。這里的謎出現在程序開頭的第一句“import ZYH”,ZYH是筆者姓名的首字母。有學生思維敏捷,也用自己的名字給程序加了一句,但卻沒有出現想要的結果,頓時陷入疑惑。解開ZYH這個謎團,便能化解學生的疑惑。ZYH是筆者自己命名的模塊名,“import ZYH”就是導入ZYH這個模塊。其實它的本質是把自己編寫的程序代碼封裝進去,需要用的時候首先利用import導入模塊,然后調用模塊中的函數,如要實現火柴棒擺數字問題,便可通過ZYH.match_num(),調用ZYH模塊中自定義函數的matchnum()。同時,也可以把其他自定義的函數一起封裝進去,ZYH.*即可調用該模塊下任意函數。打開展示ZYH模塊的內容,如上頁圖5所示。最后,把封裝好的模塊,構建發布文件,以嶄新的維度,實現思維的升華,完成成果共享。
● 結束語
伴隨著大數據、人工智能等技術的飛速發展,計算思維為學生打開了看世界的新視角,提供了解決問題的新思路,它也是今后適應社會的關鍵能力。教育是慢的藝術,學生計算思維的形成不是一蹴而就的,它需要在教學實踐中,不斷地滲透、培養。探索在項目式教學過程中滲透、培養學生的計算思維素養,不僅使思維訓練有了具體的依托,而且豐富了項目式教學的內涵。尤其是在程序設計項目式教學中,從實際問題出發,分析問題,從形成抽象到簡單數據模型,從算法設計到程序編寫,從代碼調試到優化完善程序,整個過程都伴隨著思維的變化與挑戰,有助于不斷訓練和提升學生的計算思維,使其養成良好的思維習慣,也為項目式教學從思維方法的高度培養學生做了有益嘗試。
參考文獻:
[1]楊簡云.基于計算思維的項目教學法在高中信息技術教學中的實踐[J].課程改革與教學研究,2020(05):35-38+44.
[2]薛磊,孫玉強,顧曉清.基于計算思維的項目教學法的研究與實踐[J].職業與教育,2012(11):148-150.
[3]張勇.基于計算思維培養的小學信息技術教學策略探究[J].中小學電教,2021(02):95-97.
[4]王榮良.計算思維的教學評價方法探析[J].中國信息技術教育,2020(15):56-60.
[5]韓晶.計算機基礎教學中學生計算思維能力的培養分析[J].科技經濟導刊,2019(17):176-177.