摘 要:小學(xué)生計算思維的訓(xùn)練必須具備系統(tǒng)性。而充分利用程序“BUG”,引導(dǎo)學(xué)生發(fā)現(xiàn)問題、提出問題以及自主分析、調(diào)試、解決問題,可以培養(yǎng)學(xué)生的程序調(diào)試能力,從而使學(xué)生的計算思維得到系統(tǒng)訓(xùn)練。學(xué)生程序調(diào)試能力的提升也能有效促進其創(chuàng)造性思維的發(fā)展。文章聚焦程序“BUG”,對小學(xué)生程序調(diào)試能力的培養(yǎng)問題進行詳細研究。
關(guān)鍵詞:信息科技;編程教學(xué);程序調(diào)試;能力培養(yǎng)
作者簡介:張曉明(1975—),男,江蘇省常熟市顏港小學(xué)。
一、全方位審視“BUG”,充分認識程序調(diào)試能力的重要性
(一)程序調(diào)試能力能夠有效促進學(xué)生計算思維形成
信息科技核心素養(yǎng)的核心之一是計算思維,計算思維是通過冗余、堵錯、糾錯的方式,在最壞的情況下進行預(yù)防、保護和恢復(fù)的一種思維[1]。小學(xué)信息科技課程中編程模塊尤重學(xué)生計算思維的培養(yǎng),編程課堂是用計算思維解決問題的課堂,而培養(yǎng)學(xué)生的程序調(diào)試能力的過程,就是學(xué)生發(fā)現(xiàn)問題、解決問題的計算思維訓(xùn)練的過程。在計算思維的培養(yǎng)過程中,調(diào)試的頭腦風(fēng)暴過程對于計算思維的訓(xùn)練更直接有效,程序調(diào)試能力也是學(xué)生計算思維的具體能力體現(xiàn)。
(二)程序的獨立調(diào)試過程是學(xué)生主體性得到充分發(fā)揮的過程
從教學(xué)的角度來看,調(diào)試是一種層次較高的能力。在傳統(tǒng)的步驟式教學(xué)中,學(xué)生跟隨教師學(xué)習(xí)教學(xué)案例,卻無法真正提升自身的思維能力。所以,在教學(xué)環(huán)節(jié)的設(shè)計上,教師應(yīng)盡可能地讓學(xué)生發(fā)現(xiàn)問題,并嘗試通過各種方法進行調(diào)試。每節(jié)課完成基礎(chǔ)知識教授后,教師要為學(xué)生預(yù)留足夠的時間讓其進行知識延伸,在摸索“BUG”的過程中不斷糾錯,掌握程序調(diào)試的方法,充分發(fā)揮學(xué)生的主體性。
(三)程序調(diào)試成功的成就感能夠激發(fā)學(xué)生對編程的學(xué)習(xí)興趣
編程與人工智能的密切聯(lián)系使很多學(xué)生對編程有著濃厚的興趣,但在經(jīng)過一段時間的學(xué)習(xí)后,簡單機械的復(fù)制、按部就班的跟從導(dǎo)致編程失去了挑戰(zhàn)性,從而使學(xué)生的探究興趣降低。而經(jīng)歷程序調(diào)試成功,能夠使學(xué)生產(chǎn)生更多的成就感,進一步增強深入學(xué)習(xí)編程的興趣。
(四)程序調(diào)試能力的培養(yǎng)關(guān)系到程序的有效優(yōu)化
學(xué)生程序調(diào)試能力的培養(yǎng)對程序的后期優(yōu)化能起到關(guān)鍵作用。程序的優(yōu)化實際上也是程序反復(fù)調(diào)試的過程。教師沒有精力與全體學(xué)生一起進行程序的后期優(yōu)化,這就需要學(xué)生自身具備程序調(diào)試能力。調(diào)試不局限于糾錯,也包括程序的進一步完善和功能增強。這是一個反復(fù)打磨的過程,好程序在一定程度上是改出來的。
(五)程序調(diào)試能力的培養(yǎng)有助于學(xué)生編程自學(xué)能力的提升
與其他課程不同,編程是一門在曲折中前行的思維能力訓(xùn)練課程,程序調(diào)試能力的培養(yǎng)也是學(xué)生編程自學(xué)能力的培養(yǎng)。李開復(fù)在《做最好的自己》一書中提出這樣幾種學(xué)習(xí)境界:熟能生巧→舉一反三→無師自通→融會貫通。其中的“無師自通”說的就是自學(xué)能力。在學(xué)習(xí)編程的過程中自己摸索、研究,這就是調(diào)試的過程。具備程序調(diào)試能力的學(xué)生,能夠?qū)l(fā)現(xiàn)的問題與所學(xué)知識相聯(lián)系,最終抽象歸納出解決問題的方法。
(六)程序調(diào)試能力培養(yǎng)有助于學(xué)生邏輯思維能力和批判性思維能力的形成
程序調(diào)試能力的培養(yǎng)不僅僅是讓學(xué)生找出程序“BUG”然后修復(fù)那么簡單,重要的是其能幫助學(xué)生形成邏輯思維能力和批判性思維能力[2],這些能力對學(xué)生以后的日常生活和學(xué)習(xí)有著推動作用。
二、多渠道培養(yǎng)學(xué)生程序調(diào)試能力
編寫一段程序并不難,難的是程序出現(xiàn)“BUG”后調(diào)試、排查、修復(fù)的過程。在具體教學(xué)活動中,教師要從多種渠道,采用多種方法引導(dǎo)學(xué)生主動探究解決問題的策略和方法,以此培養(yǎng)學(xué)生的程序調(diào)試能力,切實發(fā)展學(xué)生的計算思維。
(一)借助流程圖和思維導(dǎo)圖設(shè)計“思維樹”,進行系統(tǒng)性調(diào)試
教師要讓學(xué)生從全局出發(fā),充分認識到程序調(diào)試能力的培養(yǎng)不是瑣碎片段的思維訓(xùn)練過程,要讓學(xué)生養(yǎng)成在發(fā)現(xiàn)問題時先從整體考慮的習(xí)慣。筆者在教學(xué)中結(jié)合流程圖和思維導(dǎo)圖設(shè)計“思維樹”,輔助學(xué)生培養(yǎng)程序調(diào)試能力。
筆者從編程教學(xué)第一節(jié)課開始就向?qū)W生提出要養(yǎng)成使用“思維樹”的習(xí)慣。在具體教學(xué)中,筆者將每節(jié)課的案例設(shè)計成“思維樹”,通過板書由“根”向“枝葉”逐步呈現(xiàn),做到每個重要環(huán)節(jié)都能在“樹”上有所體現(xiàn),每個思維過程都能在“樹”上找到脈絡(luò)。
在學(xué)生有了一定的基礎(chǔ)后,筆者指導(dǎo)學(xué)生在紙上自己動手繪制“思維樹”,以此幫助學(xué)生養(yǎng)成良好的編程思維習(xí)慣。教材案例的“思維樹”可以讓學(xué)生在課前先整體設(shè)計,然后在教學(xué)中逐步補充,最后安排課后作業(yè)讓學(xué)生進行延伸設(shè)計。長此以往,學(xué)生就可以獨立設(shè)計一個程序的“思維樹”。
“思維樹”的應(yīng)用在程序調(diào)試能力的培養(yǎng)中起到了重要作用。在程序出現(xiàn)“BUG”后,學(xué)生可以自己根據(jù)“思維樹”從源頭梳理“BUG”,進行糾錯。例如,在講解“克隆飛機大戰(zhàn)”第一個環(huán)節(jié)“克隆飛機”時,總有學(xué)生將頂部隨機位置出現(xiàn)的部分積木放置在“當(dāng)綠色旗幟被點擊”的事件下。對此,教師要讓學(xué)生通過反復(fù)仔細觀察“思維樹”,系統(tǒng)理清整個程序的思維過程,尋找思維的遺漏點,引導(dǎo)學(xué)生發(fā)現(xiàn)應(yīng)該使用“當(dāng)克隆體啟動”的事件。教師要教會學(xué)生先從“思維樹”的主干上查找問題,再逐步分級向下細查慢研。
(二)通過拆解程序、分解功能來調(diào)試程序
小學(xué)編程沒有專業(yè)編程軟件的逐步運行的調(diào)試功能,那么我們可以將程序拆分為一個個、一段段小程序,分別來驗證結(jié)果。反復(fù)拆解組合,這種積木重組式的編程方法正是培養(yǎng)學(xué)生程序調(diào)試能力的巧妙方式。在教學(xué)中,當(dāng)學(xué)生不知道哪一個積木出現(xiàn)問題的時候,教師可引導(dǎo)學(xué)生先將部分積木從腳本中抽離出來,再運行這個腳本;如果沒錯,就再從剩余的積木中尋找問題。通過一部分一部分拆解排查的方式,將有問題的積木“揪”出來。
例如,在“花朵繽紛”的教學(xué)中,學(xué)生剛接觸重復(fù)的嵌套,有的學(xué)生會思維混亂,不知道積木應(yīng)該出現(xiàn)在哪個重復(fù)里,從而將積木放置在“清空”下面,甚至放置在“花朵重復(fù)”里。此時,教師就要引導(dǎo)學(xué)生將復(fù)雜的問題簡單化,將兩個重復(fù)拆分,先運行一朵花的重復(fù),引導(dǎo)學(xué)生觀察一朵花重復(fù)后,第二朵花的位置在哪,從而讓學(xué)生發(fā)現(xiàn),“移動”應(yīng)該是在一朵花重復(fù)之前或之后運行,最后再通過重復(fù)產(chǎn)生很多花朵,這樣理清思路,學(xué)生就能順利完成調(diào)試。
在拆解過程中,有時也可以采用放大錯誤現(xiàn)象的方法。在“BUG”不明顯、不能準(zhǔn)確判斷“BUG”的情況下,我們可以試著修改程序,想辦法將其拆解,同時通過調(diào)整參數(shù)等方法放大錯誤現(xiàn)象,有效定位具體的出錯位置,發(fā)現(xiàn)出錯原因,幫助學(xué)生完成調(diào)試。
(三)有意預(yù)設(shè)“BUG”,制造調(diào)試機會
教師在課堂預(yù)設(shè)的過程中,應(yīng)該結(jié)合學(xué)生學(xué)情,埋“坑”設(shè)“洼”,充分挖掘、預(yù)設(shè)錯誤。有的錯誤往往是學(xué)生思維的閃光點,不應(yīng)堵塞,而是要做好預(yù)案及時激發(fā)、疏導(dǎo),在學(xué)生踩“坑”后再引導(dǎo)他們分析、調(diào)試、解決問題。埋“坑”設(shè)“洼”能訓(xùn)練學(xué)生思維,對學(xué)生程序調(diào)試能力的培養(yǎng)效果顯著。
如在教學(xué)“畫正多邊形”這節(jié)課時,當(dāng)以邊長為100步完成正三邊形、正四邊形、正五邊形的繪制后,筆者讓學(xué)生上臺嘗試完成正六邊形的繪制,并在學(xué)生不注意的情況下將畫筆下移,使學(xué)生繪制的正六邊形因碰到邊緣而變形。這個問題在學(xué)生畫更多邊形時也會出現(xiàn),但筆者認為邊數(shù)越多越不利于學(xué)生思維清晰地解決這個難題。學(xué)生發(fā)現(xiàn)問題后,自主摸索出了調(diào)整畫筆位置或縮小邊長等方法,然后在畫更多邊形時,利用這個方法成功完成繪制。
又如在教學(xué)“克隆飛機大戰(zhàn)”這節(jié)課時,因為繪制“火炮”和“飛機”是基礎(chǔ)操作,筆者在課前下發(fā)的文件中有意縮小了“火炮”的火力范圍,在學(xué)生完成“克隆飛機”后,“飛機”出現(xiàn)在頂部位置時也不指出學(xué)生設(shè)置的(-240,240)x范圍值有問題。最后,當(dāng)學(xué)生完成游戲運行時,他們才發(fā)現(xiàn)很多“飛機”無法被擊中。此時,筆者再引導(dǎo)學(xué)生發(fā)揮程序調(diào)試能力,尋找解決問題的方法,最終通過增加“火炮”火力范圍或縮小“克隆飛機”頂部出現(xiàn)的范圍值,來取得理想效果。
編程教學(xué)的“BUG”預(yù)設(shè),能夠訓(xùn)練學(xué)生思維,但一節(jié)課也不宜設(shè)置過多“BUG”,教師要在充分挖掘的基礎(chǔ)上進行有效篩選,切實找到能提高學(xué)生程序調(diào)試能力的思維訓(xùn)練點。
(四)通過程序補充練習(xí)培養(yǎng)學(xué)生程序調(diào)試能力
在編程教學(xué)中,教師往往根據(jù)教材內(nèi)容,通過案例的教學(xué)培養(yǎng)學(xué)生的計算思維。但筆者認為,有針對性地搜集設(shè)計一些程序補充習(xí)題讓學(xué)生練習(xí),可以提高學(xué)生的程序閱讀理解能力。程序閱讀理解能力的提高,能夠幫助學(xué)生快速發(fā)現(xiàn)程序的“BUG”所在,從這個意義上來講,程序閱讀理解能力也是程序調(diào)試能力的一部分。程序補充練習(xí)設(shè)置要多樣化,可以是程序補充題,也可以是程序“BUG”判斷題,可以利用試卷在課堂上進行考試,也可以利用“問卷星”在網(wǎng)上進行答題。
(五)借助工具積木進行程序調(diào)試
隨著編程學(xué)習(xí)的深入,程序的復(fù)雜程度不斷增加,在紛亂的程序中找到“BUG”進行調(diào)試會越來越難,這時我們希望能運行部分程序代碼后停下來,通過分析各個變量的值,來發(fā)現(xiàn)錯誤。因此,在講授完變量和克隆的知識點后,筆者認為有必要培養(yǎng)學(xué)生使用一些特定的積木來輔助調(diào)試程序。
在編程中,學(xué)生可以通過直接點擊某些積木獲取當(dāng)前相關(guān)屬性值,以此幫助自己進行調(diào)試判斷。如“說”“思考”等積木的對話顯示結(jié)果能幫助學(xué)生獲取一些不可見的角色的屬性值,有助于學(xué)生在運行程序時找到“BUG”所在。
克隆體局部屬性信息的獲取是比較麻煩的,而用“說”積木可以較為方便地查看某個克隆體的某個局部屬性。在機器人模塊中,一些傳感器的屬性值也可以通過這些積木具體呈現(xiàn),幫助學(xué)生進行判斷,為進一步展開后續(xù)程序優(yōu)化奠定基礎(chǔ)。
這類積木使用起來十分方便、靈活,在程序運行過程中想要測試某個角色在某個節(jié)點的參數(shù),只需要把積木放置在對應(yīng)的腳本中,結(jié)果便一目了然。同時,它們通用性強,支持多種數(shù)據(jù)類型的輸出,呈現(xiàn)方式也最直觀,通過這種方法可以同時在舞臺上觀察到多個角色的局部屬性,而不必切換角色。
(六)通過修改優(yōu)化既有程序來培養(yǎng)學(xué)生程序調(diào)試能力
在學(xué)生有了一定的基礎(chǔ)后,教師可尋找一些小程序,刻意將其中關(guān)鍵部分刪除或改錯,然后下發(fā)給學(xué)生,讓學(xué)生進行糾錯、補充再創(chuàng)造。而選擇的這個關(guān)鍵部分最好是可以采用多種不同方法來完成的內(nèi)容,這樣更有助于發(fā)散學(xué)生思維,有效培養(yǎng)學(xué)生的程序調(diào)試能力。
教師還可以通過一些網(wǎng)絡(luò)資源,如“好好搭搭在線”,設(shè)計編程活動課,給學(xué)生足夠的時間,讓學(xué)生試玩網(wǎng)站中其他小朋友上傳的作品,并通過在線編輯功能,進行游戲腳本的更改。在利用網(wǎng)絡(luò)資源時,教師不能讓學(xué)生沉溺于游戲本身,而是要根據(jù)學(xué)生水平,有目的地選取相應(yīng)難度的作品開展調(diào)試修改。之后,教師可在班級內(nèi)組織學(xué)生共享,挑選部分優(yōu)秀的修改作品進行展示,在展示時向修改者提問:為什么要這么改?向其他學(xué)生提問:還能怎樣改?
通過修改優(yōu)化既有程序,學(xué)生接觸了大量教材以外的案例,既開闊了眼界,也培養(yǎng)了興趣。在教師的主動干預(yù)、合理引導(dǎo)下,學(xué)生的程序調(diào)試能力能夠得到有效鍛煉。
三、重視情感態(tài)度價值觀教育,鼓勵學(xué)生主動調(diào)試
編程教學(xué)的情感態(tài)度價值觀教育體現(xiàn)為鼓勵學(xué)生根據(jù)所學(xué)知識主動大膽聯(lián)想、探索,勇于嘗試,善于發(fā)現(xiàn)錯誤。在課堂教學(xué)中,教師要正視學(xué)生的錯誤,把學(xué)生認真學(xué)習(xí)而產(chǎn)生的“錯誤”看成是課堂的閃光點,因為那都是學(xué)生計算思維的有形體現(xiàn)。
我們也可以說程序調(diào)試能力培養(yǎng)是一種逆能力培養(yǎng),逆水行舟,往往培養(yǎng)出的學(xué)生能力更強。教師要向?qū)W生明確計算思維的重要性,要求學(xué)生切實培養(yǎng)自身的程序調(diào)試能力;要讓學(xué)生明白,編程不是僅僅靠跟隨教師學(xué)習(xí)幾個案例就能學(xué)會的,也不能僅僅靠同學(xué)的幫助,只有靜下心來沉浸進去,訓(xùn)練自身的計算思維,形成能力,才能真正學(xué)好程序設(shè)計。
最后,我們也要教育學(xué)生養(yǎng)成良好的、嚴(yán)謹(jǐn)?shù)木幊趟季S,根據(jù)程序調(diào)試能力培養(yǎng)方法,積累經(jīng)驗,逐步完善自己的計算思維,逐步減少程序“BUG”出現(xiàn)的概率。
[參考文獻]
[1]高萍.基于計算思維培養(yǎng)的Scratch教學(xué):以《大魚吃小魚》一課為例[J].中國信息科技教育,2016(9):33-35.
[2]鄧正杰,楊帥森.少兒編程調(diào)試模塊教學(xué)的分析與設(shè)計[J].電腦知識與技術(shù),2019,15(26):123-125.