黎啟韶
程序在開發(fā)的過程中充滿著“試錯(cuò)”與“糾錯(cuò)”,這也是不斷完善“程序”與深化“編程語言”認(rèn)識的必然過程。筆者在App Inventor編程教學(xué)中,以學(xué)生的一次“錯(cuò)誤”為契機(jī),讓學(xué)生開展自主探究、自主糾錯(cuò)的嘗試,從而使其了解了如何利用App Inventor中的“語音識別器”與調(diào)用第三方翻譯API的方法,實(shí)現(xiàn)了編譯人工智能語音翻譯程序的案例,同時(shí)讓學(xué)生體驗(yàn)了程序開發(fā)中“關(guān)注用戶、簡化操作、注重體驗(yàn)”的設(shè)計(jì)原則與認(rèn)知,為樹立正確的程序開發(fā)理念夯實(shí)了基礎(chǔ)。
項(xiàng)目引領(lǐng)激內(nèi)需
大量的實(shí)踐證明,項(xiàng)目式學(xué)習(xí)對激發(fā)學(xué)生的學(xué)習(xí)內(nèi)需、提升課堂參與度有著無可比擬的效果。筆者在設(shè)計(jì)本課時(shí)也使用了項(xiàng)目式學(xué)習(xí)的教學(xué)方式:小明同學(xué)打算在新冠疫情過后,跟隨父母到英國旅行,如何利用編程知識幫助不會講英語的小明一家,開發(fā)一款軟件來解決與外國人交流的問題。學(xué)生在情境任務(wù)的驅(qū)動下表現(xiàn)了極大的興趣,而且由于對App Inventor已經(jīng)有了一定的認(rèn)識,所以通過小組討論很快得出了解決方案:使用App Inventor內(nèi)置的“Yandex語言翻譯器”組件實(shí)現(xiàn)文字翻譯功能。
巧設(shè)“波瀾”起懸念
在學(xué)生的“共識”下,教師通過“電子課堂”下發(fā)了“探究任務(wù)單”(如下表),讓學(xué)生兩人一組開展初步探究。
在“探究任務(wù)單”的設(shè)計(jì)上,筆者注重依據(jù)功能選取組件,這能夠幫助學(xué)生溝通功能與組件之間的邏輯關(guān)系,讓他們易于開展邏輯設(shè)計(jì),這也是培養(yǎng)學(xué)生計(jì)算思維的一種有效做法。
在學(xué)習(xí)本課之前,學(xué)生已認(rèn)識了App Inventor大部分組件的功能作用,并懂得該類組件邏輯設(shè)計(jì)的規(guī)范,而且也填寫過“探究任務(wù)單”,所以填寫已學(xué)過組件時(shí)駕輕就熟??墒堑教顚憽癥andex語言翻譯器”組件時(shí),由于書本沒有詳細(xì)介紹用法,學(xué)生便不知道如何填寫?!斑@個(gè)問題我們該怎么辦?”教師問道。為了幫助教師解決問題,學(xué)生們又展開了討論與研究,突然有個(gè)學(xué)生說道:“書上沒有的問題可以到百度上找答案?!睂W(xué)生紛紛認(rèn)同,并希望筆者允許他們到“百度”上尋找答案。
可以說,學(xué)生對“Yandex語言翻譯器”的疑問是筆者意料之中的,在教學(xué)中就是要設(shè)置這樣的“波瀾”才能激發(fā)學(xué)生進(jìn)一步探究的沖動。讓學(xué)生知道通過什么“方法”“手段”和“途徑”獲取答案,比直接給予他們“答案”重要得多。
成功“遇錯(cuò)”促提升
在學(xué)生的強(qiáng)烈請求下,筆者同意了他們的做法,之后,學(xué)生在百度中找到了相關(guān)的教學(xué)視頻。通過視頻的指引,學(xué)生知道了在使用Yandex語言翻譯器代碼塊時(shí),需要按照Yandex平臺的接入規(guī)則填寫“發(fā)送請求”與“返回結(jié)果”的參數(shù),因此他們也補(bǔ)充填寫了第一份“探究任務(wù)單”中缺失的內(nèi)容。緊接著學(xué)生們便開展了程序的設(shè)計(jì),但在調(diào)試中學(xué)生驚奇地發(fā)現(xiàn)“程序”無法進(jìn)行有效翻譯,是不是“組件設(shè)計(jì)”與“邏輯設(shè)計(jì)”存在問題導(dǎo)致的呢?筆者指引學(xué)生再次檢查,可是學(xué)生發(fā)現(xiàn)他們選用的代碼塊和使用的參數(shù)都與教學(xué)視頻中一模一樣,究竟是什么原因造成了問題呢?學(xué)生陷入了沉思。筆者這時(shí)向?qū)W生提示,是不是Yandex語言翻譯器在使用上發(fā)生了限制,導(dǎo)致翻譯功能不能使用?并向?qū)W生提供了Yandex翻譯的中文官網(wǎng)地址,引導(dǎo)學(xué)生一查究竟。
果然,答案就藏在Yandex的中文官網(wǎng)中,原來Yandex平臺之前是免費(fèi)提供翻譯功能,但2019年4月1日之后這個(gè)政策取消了,開發(fā)者需要申請API_ID和API_KEY才允許調(diào)用翻譯功能。而學(xué)生在百度上找到的教學(xué)視頻是在2019年4月前發(fā)布的,若簡單地復(fù)制視頻中的做法,當(dāng)然就無法實(shí)現(xiàn)翻譯了。
適度的“錯(cuò)誤”是不斷完善自我行為的“催發(fā)劑”,學(xué)生在程序開發(fā)過程中往往會遇到不可知的錯(cuò)誤,但只要正確引導(dǎo),鼓勵他們反復(fù)檢查、自我糾錯(cuò),他們就會獲得知識之外的能力發(fā)展。
巧加點(diǎn)撥助創(chuàng)新
接著,筆者又提供了第二個(gè)教學(xué)視頻讓學(xué)生自主學(xué)習(xí),引導(dǎo)學(xué)生注冊Yandex平臺的API_ID和API_KEY,再思考如何把這兩個(gè)關(guān)鍵元素加入到編程中。程序的邏輯設(shè)計(jì)如下圖所示。
在如圖所示的“邏輯設(shè)計(jì)”中,需要在原來的代碼塊中增加兩個(gè)全局變量,并在“Yandex翻譯器獲得譯文”代碼塊中執(zhí)行這兩個(gè)變量,執(zhí)行時(shí)利用文本代碼塊將變量指定為自己申請的API_ID和API_KEY,當(dāng)Yandex平臺接收到相關(guān)數(shù)據(jù)并審核通過后,可以允許程序調(diào)用Yandex翻譯功能,否則Yandex平臺不會向程序返回翻譯結(jié)果。同時(shí),Yandex平臺會發(fā)送一個(gè)含有返回值的響應(yīng)代碼到程序中,只有返回值“等于200”的“響應(yīng)代碼”才表示Yandex平臺成功“接收”和“返回”了數(shù)據(jù),因此在邏輯設(shè)計(jì)中還需要運(yùn)用“判斷”代碼塊判斷返回值是否等于200。學(xué)生也把這個(gè)作為Yandex翻譯器的注意事項(xiàng)補(bǔ)充到第一份“探究任務(wù)單”中。
通過調(diào)整邏輯設(shè)計(jì),所有的學(xué)生的測試都成功了,學(xué)生們興奮不已。但是教師又提出了問題:“每次輸入文字都這么麻煩,有沒有方法讓翻譯器的操作變得更簡單?”正在興奮中的學(xué)生頓時(shí)又安靜了下來。突然有一個(gè)聲音叫出來:“用‘語音識別器?!边@時(shí)學(xué)生又一次恍然大悟,對!“語音識別器”可以實(shí)時(shí)將錄音轉(zhuǎn)化為文字,再將文字翻譯成英文,這樣就方便多了?!斑€能不能添加更實(shí)用的功能?”教師又一次提問?!斑€可以添加‘音頻播放器,把翻譯結(jié)果通過手機(jī)讀出來,這樣就更方便了?!睂W(xué)生立刻回答道。通過這樣的一問一答,既讓學(xué)生運(yùn)用了舊知進(jìn)行創(chuàng)新,又讓他們明白了程序開發(fā)中需要充分考慮用戶的體驗(yàn),簡化操作的道理。
結(jié)語
本節(jié)課通過一次“錯(cuò)誤”的碰撞,讓學(xué)生的思維與能力得到了考驗(yàn)與發(fā)展,教師自始至終均沒有正面給出任何一個(gè)答案,學(xué)生兩次的“恍然大悟”均是在教師一次一次的設(shè)疑中實(shí)現(xiàn)的。知識是學(xué)會的,不是教會的,只有讓學(xué)生在課堂中自主、自立,放飛思維,他們才會學(xué)得深、學(xué)得透。當(dāng)然,Yandex翻譯的功能仍存在很多問題,如有學(xué)生告訴筆者,他在官網(wǎng)上看到,Yandex只允許免費(fèi)申請的API_ID和API_KEY使用15天,如果要繼續(xù)使用則要續(xù)費(fèi)。筆者告訴這位學(xué)生,其實(shí)程序開發(fā)是“一理通百理”,只要明白了App Inventor調(diào)用Yandex API的原理,就會懂得調(diào)用“百度翻譯API”等第三方平臺的方法,只要敢于探索與嘗試,所有的異想天開就都有可能實(shí)現(xiàn)。