陳凱
所謂黑箱法,指的是這樣一種方法:當(dāng)對某個系統(tǒng)的內(nèi)部結(jié)構(gòu)和工作原理不了解(包括無法了解、難以了解或無必要了解等情況)的時候,可以通過對這個系統(tǒng)從外部輸入數(shù)據(jù),然后觀察系統(tǒng)輸出的數(shù)據(jù),比對輸入和輸出的聯(lián)結(jié)對應(yīng)關(guān)系,判定系統(tǒng)的功能和特性,或者也可借此揣測系統(tǒng)內(nèi)部的結(jié)構(gòu)。在信息技術(shù)教學(xué)中,有許多地方可以使用到黑箱法,用以提高概念教學(xué)和思維培養(yǎng)的效率,下面試舉幾例。
● 用黑箱法簡化生活情境,挖掘思維深度——以信息的含義為例
“信息”這個概念在不同的語境中有不同的含義,在生活語境中,“信息”與數(shù)據(jù)的意義密切相關(guān),而在信息論的語境中,“信息”與確定性(或不確定性)的量度有關(guān)。對于前者,通過對數(shù)據(jù)的采集、記錄、計(jì)算和展現(xiàn)等步驟來實(shí)現(xiàn)信息的處理,是“數(shù)據(jù)與計(jì)算”教學(xué)模塊的主要線索之一,至于后者,關(guān)于如何通過計(jì)算機(jī)系統(tǒng)消除不確定性的需求始終蘊(yùn)藏在信息技術(shù)的各個教學(xué)模塊中,直到在“人工智能初步”模塊中更鮮明地顯現(xiàn)出來。
日常生活是豐富而復(fù)雜的,人們的語言更是靈活多變的,這就使得學(xué)生對如何從數(shù)據(jù)的角度對“信息”一詞進(jìn)行理解產(chǎn)生迷惑,甚至說,一些教師自己也是存在迷惑的,這時可以考慮創(chuàng)設(shè)一個對于現(xiàn)實(shí)世界有著映射關(guān)系的較為簡單純粹的情境,來凸顯語言符號的所指。在教學(xué)中,筆者編寫了這么一個小故事:
因?yàn)椴幻鞑《镜娜肭?,兔子大森林爆發(fā)了傳染病,熟悉生物學(xué)的凱凱兔志愿前往第一線支援疫苗開發(fā)的研究工作。凱凱兔向自己媽媽告別時,媽媽問:“你什么時候才能回來?。俊眲P凱兔回答:“等我負(fù)責(zé)的技術(shù)難題被突破了,就可以回來啦?!?/p>
媽媽很想念孩子,她等了很久很久,終于有一天,快遞送來了一個小禮盒,小禮盒的面板上有個按鈕,一按,里面彈出一只小玩具兔子,一邊晃著腦袋,一邊連著喊了7聲媽媽。
第二天,按了按鈕后彈出的兔子玩具喊了6聲媽媽,到第三天只喊了5聲,這到底是什么意思?兔媽媽弄不明白,直到第八天,玩具安靜地一聲也不叫了。就在這時,門外響起了凱凱兔的喊叫聲:“媽媽,媽媽,我回來啦!”
在上面的例子中,到了第八天,兔媽媽就可以知道,原來這個禮盒是孩子回家日期的倒計(jì)時裝置,數(shù)據(jù)和意義聯(lián)系之后,相關(guān)信息就呈現(xiàn)出來了。
剛才的結(jié)論聽上去很合理,但也存在值得深入討論的問題。畢竟,兔媽媽可能在收到禮物三四天后,就已經(jīng)意識到數(shù)據(jù)中可能存在某種意義了,或者說,這時她或多或少已經(jīng)獲取了某些信息,她或許猜對了這些數(shù)據(jù)的意義,或許猜錯了,那么,這個時候,她到底有沒有接收到孩子即將回家的信息呢?要解釋這個問題,可以將玩具看成是一個黑箱,它的輸入是天數(shù),輸出是玩具兔子叫聲的次數(shù)。假設(shè)在平行世界A,這個黑箱的輸入和輸出是有規(guī)律的,但在另一個平行世界B,黑箱的輸入和輸出完全沒有規(guī)律,輸出的次數(shù)完全是隨機(jī)的,那么,兔媽媽是無法從平行世界B中的黑箱里獲取到信息的,而在平行世界A,卻能獲得一個對于未來狀況的預(yù)期,這個預(yù)期是否能被驗(yàn)證,其實(shí)是和概率有關(guān)系的,這說明,信息的概念和概率是存在關(guān)聯(lián)的。接下來可以繼續(xù)思考,既然兔媽媽能獲得這樣的預(yù)期,一個人造的智能機(jī)器兔媽媽裝置也一樣能通過對數(shù)據(jù)的分析獲得預(yù)期,并且,這個人造機(jī)器兔媽媽根本不需要知道第八天中數(shù)據(jù)0在生活實(shí)境中的具體意義。
在教學(xué)中,這個小禮盒可以用簡單的程序來模擬實(shí)現(xiàn),也可以真的借助單片機(jī)和語音播放芯片來制作成一個電子小裝置,這些都可以和后續(xù)的如程序算法、信息處理系統(tǒng)、開源硬件、人工智能等教學(xué)內(nèi)容遙相呼應(yīng)。
在上述例子中,通過設(shè)置黑箱,避免了日常生活情境中紛繁蕪雜的細(xì)節(jié)對思考造成干擾,使得問題的思考有了更明確的指向性,也更有深度。下面再對兔子的故事做一點(diǎn)改寫,大家有沒有興趣試著回答故事中提出的問題呢?這個問題并沒有標(biāo)準(zhǔn)答案。
……一按,里面彈出一只小玩具兔子,一邊晃著腦袋,一邊連著喊了7聲媽媽。
第二天,按了按鈕后彈出的兔子玩具喊了6聲媽媽,到第三天只喊了5聲,這到底是什么意思,兔媽媽心里很清楚,因?yàn)槭孪染鸵呀?jīng)約定好了,一連串依次遞減的數(shù)字,其實(shí)是自家孩子即將回家的信號啊。
第八天,凱凱兔如期回到自己的家,桌子上擺滿了自己喜愛的菜,啊,溫暖的家。
第九天的時候,兔媽媽隨意按下按鈕,玩具兔子又開始叫起媽媽來,這是怎么一回事呢?凱凱兔驚訝地發(fā)現(xiàn),原來自己錯拿了玩具,這個玩具本來就是隨機(jī)喊叫的,只是前幾天,它都十分湊巧地對應(yīng)上了次數(shù)遞減的規(guī)律。這么說來,兔媽媽究竟有沒有收到正確的信息呢?
必須承認(rèn),“信息”是一個很難解釋的概念,與其強(qiáng)行去解釋,不如用它作為激發(fā)思維碰撞的撞針。
● 用黑箱法約束操作過程,強(qiáng)化思維方式——以最深色選取為例
大家常常會討論如何拓展學(xué)生的思維,但也有很多時候,為了將特定的思維方式彰顯出來,用黑箱對思維進(jìn)行框定。下面是一個顏色選取的例子:存在一系列不同深淺的顏色,這些顏色像顏料一樣存儲在框中,從上至下排列著,要求將其中最深的顏色找出來,但不能移動框。這里之所以用顏色而不是數(shù)字,是為了便于在畫圖軟件中對數(shù)據(jù)進(jìn)行機(jī)械性的操作。之所以不能移動框,是因?yàn)橐獙?yīng)程序算法中數(shù)組的結(jié)構(gòu)。原始圖樣如圖1所示。
圖1 放在框中的深淺不同的顏色
人眼一望便知,第二個框中顏色最深,但對一個機(jī)器或程序來說,它往往缺少全局的視野,盡管存儲器中所存儲的數(shù)據(jù)可能很多,但在某個特定時間段里,內(nèi)部數(shù)據(jù)只有一小部分是對計(jì)算裝置顯現(xiàn)的。在這五個框旁設(shè)定了一個待比較框,默認(rèn)是最淺的白色,為后續(xù)操作方便,將待比較框在豎向方向上拉長。然后,就可以通過取色工具和填充工具,手動模擬出在一系列顏色中選取最深顏色的操作。在操作時,可以將畫圖軟件的尺寸拉小,這樣就模擬出只有部分?jǐn)?shù)據(jù)對外顯現(xiàn)的效果,如下頁圖2所示。
操作時,學(xué)生只能同時看到兩個框,如果待比較框中顏色淺,則從顏色框中取色,填充至待比較框,否則就不做填充。每做完一次比較、填充(或不填充)操作后,則往下翻頁,顯現(xiàn)出新的顏色并重復(fù)剛才同樣的操作。于是,在思維中就存在一個黑箱,它有兩個輸入和兩個輸出,兩者關(guān)系如下頁圖3所示。
接下來,就是將黑箱的輸出的結(jié)果,再次反饋到黑箱的輸入端,這樣一來,顏色選取的任務(wù)就成為一種迭代操作,具有了非常鮮明的自動化的特點(diǎn)。雖然人的操作動作被約束了,但卻更容易顯現(xiàn)出計(jì)算思維的特征。
● 用黑箱法回避操作細(xì)節(jié),建構(gòu)思維模型
筆者一直在思考一個問題,學(xué)生對于像從1累加到10這樣的簡單循環(huán)結(jié)構(gòu)程序,究竟是真正理解了其工作原理,還是僅僅簡單地將循環(huán)結(jié)構(gòu)三要素和常用語句套用到問題的解決中?為了解答這個問題,筆者設(shè)計(jì)了兩個小游戲,一個叫貨車搬磚,一個叫黑箱變寶。先來看貨車搬磚,這是一個棋盤游戲,棋盤布局如下表所示。
假設(shè)貨車上磚塊無限多,貨車按箭頭方向行進(jìn),當(dāng)貨車經(jīng)過X區(qū)倉庫下方時,就會在X區(qū)卸貨,新添加的磚塊數(shù)量與A區(qū)磚塊數(shù)量相同,當(dāng)貨車經(jīng)過A區(qū)下方時,就會在A區(qū)添加一塊磚,然后貨車重復(fù)剛才的行為,問:當(dāng)貨車第n次回到出發(fā)點(diǎn)時,X區(qū)和A區(qū)磚塊的數(shù)量?能比較容易看出,貨車和倉庫的協(xié)同運(yùn)作,相當(dāng)于實(shí)現(xiàn)了數(shù)字的累加。
第二個游戲叫黑箱變寶,是一個簡單的圖形界面游戲。游戲中有兩個加法機(jī)、兩個傳送機(jī),它們是四個黑箱,每個黑箱的輸入在左側(cè)、輸出在右側(cè),在3號傳送機(jī)的左側(cè)已存放了一顆鉆石,用“@”符號表示,游戲界面如下頁圖4所示。
點(diǎn)擊3號傳送機(jī)的黑箱按鈕,鉆石會被傳送到右側(cè)輸出端。當(dāng)鉆石出現(xiàn)在黑箱右側(cè)時,可以選擇繼續(xù)在右側(cè)保留鉆石,或點(diǎn)擊按鈕實(shí)現(xiàn)清空鉆石,或?qū)@石傳送到某指定編號的黑箱的左側(cè)輸入端的功能。
加法機(jī)的工作方式基本和傳送機(jī)相同,唯一不同的,是鉆石輸入黑箱后,會多加一顆鉆石到右側(cè)輸出端。下頁圖5是加法機(jī)效果的演示。
對于黑箱的操作實(shí)際上對應(yīng)了程序代碼中的賦值、計(jì)數(shù)、累加操作,但游戲過程中,玩家并不需要事先掌握任何程序代碼知識和語法細(xì)節(jié)。
游戲的要求是,用黑箱操作這些鉆石,來計(jì)算1加2加3……數(shù)字累加的結(jié)果,并要求在操作過程中,點(diǎn)擊按鈕的順序,必須遵照一定的模式。例如,假設(shè)游戲界面里的按鈕的名稱分別是A、B、C、D……,那么,A、B、C、D、A、B、C、D、A、B、C、D……類似這樣具有相同模式的點(diǎn)擊次序是被允許的,而A、B、C、D、A、B、D、A、C、D……類似這樣的點(diǎn)擊次序是不被允許的。
設(shè)想一下,如果任務(wù)是1加上1,再加上1,再加上1……那么就很容易實(shí)現(xiàn)任務(wù),只要不停地重復(fù)把加法機(jī)右側(cè)的鉆石移動至加法機(jī)左側(cè),然后輸入黑箱再輸出的動作即可。但若要實(shí)現(xiàn)累加,就必須綜合使用不同的黑箱,實(shí)際上,這個任務(wù)的完成,也并不需要用到所有的黑箱,如何用最精簡的方式完成任務(wù),也是值得玩家探索的。
第二個黑箱變寶的游戲的難度明顯高于第一個貨車搬磚的游戲,貨車搬磚的游戲讓學(xué)生經(jīng)歷了累加操作的過程,但黑箱變寶卻要求學(xué)生自己利用黑箱構(gòu)建出一個可實(shí)現(xiàn)累加操作的系統(tǒng)。如果學(xué)生的構(gòu)建是成功的,那么就可以進(jìn)而將構(gòu)建這個系統(tǒng)的思維方法用到循環(huán)結(jié)構(gòu)算法的程序編寫中。所以,用于黑箱協(xié)調(diào)使用的方法,成為溝通具體的現(xiàn)實(shí)生活和抽象的程序代碼之間的思維聯(lián)結(jié)點(diǎn)。
這一組游戲可以用來驗(yàn)證在學(xué)生學(xué)習(xí)和掌握了循環(huán)語句結(jié)構(gòu)后,其解決具體問題的計(jì)算思維能力,尤其是借助數(shù)據(jù)的變化建立結(jié)構(gòu)化模型的能力。小范圍的實(shí)驗(yàn)結(jié)果是,對于貨車搬磚游戲,大部分學(xué)生在理解上沒有太大困難,對于實(shí)現(xiàn)累加的程序的流程圖或代碼,大部分學(xué)生也能完成,但那個黑箱變寶的游戲卻難倒了很多學(xué)生。這從一定程度上說明,學(xué)生在編寫程序完成累加任務(wù)的時候,主要依靠的是記憶、模仿以及對數(shù)據(jù)變化的跟蹤,而缺少系統(tǒng)模型構(gòu)建的能力。并且,這還給出了另一個可供參考的研究思路:那些尚未有循環(huán)結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)經(jīng)驗(yàn)的學(xué)生,能否通過這些游戲交互,并結(jié)合基本的循環(huán)結(jié)構(gòu)代碼語法的資料,自主地設(shè)計(jì)出用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)數(shù)字累加的程序代碼?這是為了更清楚地獲取到明晰的數(shù)據(jù),用以評價按基于建構(gòu)主義理念的方法開展程序算法教學(xué)的價值和效率。