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