吳俊杰
主持人手記:本專欄主要介紹信息技術(shù)實驗在基礎(chǔ)教育信息技術(shù)課當中的典型案例,并期望這些案例能夠促進信息技術(shù)課程學科合法性的提升、豐富信息技術(shù)課的教學內(nèi)容、拓展信息技術(shù)教師的課程設(shè)計視野。對此欄目有任何好的主意或建議,請發(fā)送稿件至towujunjie@163.com(主持人)或tougao1@chinaitedu.cn(雜志社)。
信息技術(shù)實驗最重要的核心概念是數(shù)據(jù)和穩(wěn)定的現(xiàn)象,接下來這個案例是要分析人們每天都接觸的數(shù)據(jù)—手機號碼當中有沒有一些穩(wěn)定的現(xiàn)象。
● 數(shù)據(jù)的第一個循環(huán):個體數(shù)據(jù)分析
任務:統(tǒng)計自己能夠背下來的3個手機號碼,其中數(shù)字0~9出現(xiàn)的次數(shù)。
面對上面的任務,在Scratch語言中可以選擇如下不同的技術(shù)路徑。
路徑1:建立變量n0、n1一直到n9,按下0~9這10個按鍵之后,將變量n0~n9的數(shù)值分別加1。
路徑2:使用詢問─回答功能,輸入一個11位的號碼到變量“電話號碼”中,分析這個電話號碼的第1項一直到第11項,存儲在10個變量中或者存儲在一個長度為10的鏈表“號碼分析”中。
路徑3:用一個鏈表“號碼數(shù)據(jù)庫”存儲3個手機號碼,然后用類似路徑2的方法分別分析這三個電話號碼。
上面提供了解決這個問題的三種不同的技術(shù)路徑,它們在數(shù)據(jù)的獲取、存儲過程中都有所區(qū)別,見下頁表。
以上的分析,在Scratch之外的其他程序語言中也成立,鏈表可以被替代為數(shù)組,這個分析過程是對研究工具的分析,可以一開始就呈現(xiàn)給學生,也可以在總結(jié)的過程中作為提升簡介,還可以作為程序編寫的一個螺旋上升的過程呈現(xiàn)給學生。
路徑1的程序比較簡單,這里就不再贅述,這里比較路徑2當中的代碼使用變量“號碼”存儲回答的手機號,分析數(shù)據(jù)的核心代碼如圖1所示。
圖1所示的代碼可以改進為圖2所示的結(jié)構(gòu),用另外一個循環(huán)變量j來減少代碼的長度,使用鏈表替代圖1中10個如果結(jié)構(gòu)(如圖2)。
代碼改進到這個程度時已經(jīng)涉及雙重循環(huán),其教學的難度并不比代碼語言減少多少,主要難點在于理解雙重循環(huán)過程中變量的變化,Scratch中的單步執(zhí)行功能有助于提升教學效果,讓學生“發(fā)現(xiàn)算法”的效果要比教師“講授算法”的效果好得多,但是需要設(shè)計充分的教學支架。
學習使用圖2所示的代碼之后,學生已經(jīng)掌握了循環(huán)語句的基本結(jié)構(gòu),并會搭建雙重循環(huán),但是善于觀察的學生可以發(fā)現(xiàn)圖2的結(jié)構(gòu)可以被圖3所示的結(jié)構(gòu)代替,這樣完全不用使用“如果”語句就可以完成數(shù)據(jù)分析,而且改進后的代碼易讀性也得到了提高。
為了比較圖2和圖3程序的效率,我們在“分析當前號碼”啟動之后,將,程序完成后,比較兩種算法分析一段取每個數(shù)字10個字符長度為100的字符串的時間,實驗發(fā)現(xiàn)圖3所示的算法耗時2.53s,圖2所示的算法耗時29.22s,很顯然算法的改進不僅僅意味著代碼長度的變短,更重要的是完成任務的效率的提升,這種提升在分析大數(shù)據(jù)的時候尤其重要。
路徑3相對于路徑2的改進是將每次的回答輸入到鏈表“號碼數(shù)據(jù)庫”,然后依次分析號碼數(shù)據(jù)庫的第1項到第3項,這可能又會涉及雙重循環(huán)代碼的編寫。
下頁圖4用鏈表號碼數(shù)據(jù)庫來存儲多個號碼,其循環(huán)次數(shù)可以用“3”代替,但是使用的好處是程序的可移植性會好很多,如果輸入的號碼不止3個,圖4的程序可以自動地適應這種變化。
至此,我們完成了一個分析3個手機號當中每個數(shù)字出現(xiàn)的次數(shù),并且從執(zhí)行時間、代碼長度、易讀性、可移植性四個方面分析了代碼的改進過程,代碼改進的過程稱為代碼進化,讓學生理解代碼進化的過程,主動追求代碼的進化,是將學生的編程能力引向深入的一個重要教學策略。
某位同學分析3個電話號碼最終的結(jié)果(如下頁圖5),在數(shù)據(jù)的分析和表達環(huán)節(jié),根據(jù)這個數(shù)據(jù),能否得出在手機號中出現(xiàn)最多的數(shù)字是0,其次是1?恐怕數(shù)據(jù)量還不夠大,這時就需要增加數(shù)據(jù)量。將同學們的數(shù)據(jù)進行匯總是一個好的方法。
● 數(shù)據(jù)的第二個循環(huán):群體數(shù)據(jù)統(tǒng)計
在群體數(shù)據(jù)統(tǒng)計的過程中,數(shù)據(jù)的獲取是難點,可以讓每個學生將3個電話號碼存儲在.txt文件中,然后用一個Word文檔插入這些文件,將數(shù)據(jù)匯總在一起(如下頁圖6)。
將Word文檔另存為一個.txt文件,導入到鏈表“號碼數(shù)據(jù)庫”中,使用圖4所示的程序分析,得出圖7所示的56個號碼的統(tǒng)計匯總結(jié)果。
匯總結(jié)論發(fā)現(xiàn),出現(xiàn)最多的不是0而是1,推翻了之前的猜想,而且數(shù)字4和2明顯小于其他數(shù)字,但是這是最后的結(jié)論嗎?恐怕還需要增大數(shù)據(jù)源的數(shù)目,那么,數(shù)據(jù)量大到什么程度才能比較精確地反映整體的情況,還是一個需要進一步研究的問題。在數(shù)據(jù)表達上采取了條形圖作為數(shù)據(jù)的呈現(xiàn)手段。在數(shù)據(jù)分析環(huán)節(jié),同學們可以分析數(shù)字出現(xiàn)頻率不同的原因。
● 數(shù)據(jù)的第三個循環(huán):數(shù)據(jù)挖掘
在數(shù)據(jù)挖掘領(lǐng)域,研究的是已有數(shù)據(jù)中潛在的規(guī)律,雖然相比真正的數(shù)據(jù)挖掘,100組電話號碼太少了,但是我們可以將數(shù)據(jù)挖掘的思想和方法傳遞給學生。例如,要統(tǒng)計的樣本全集為100,那么采樣樣本數(shù)為多少的時候,使得部分數(shù)據(jù)的結(jié)論和總體數(shù)據(jù)的結(jié)論基本一致?再如,電話號碼的每一位出現(xiàn)最多的字符是什么?或者分析QQ號碼當中是否還存在頻率上存在優(yōu)勢的數(shù)字。通過數(shù)據(jù)挖掘,引導學生分析數(shù)據(jù)中的潛在規(guī)律,提升其對數(shù)據(jù)蘊含的潛在規(guī)律的敏感性。
● 小結(jié)
通過本案例,學生應該可以熟練地使用變量和鏈表、循環(huán)語句和如果語句。在接下來的課程中,程序的設(shè)計難度會變得越來越低,而根據(jù)信息技術(shù)實驗的目的,設(shè)計合適的程序,在數(shù)據(jù)的獲取、存儲、分析、表達的過程中,提升學生應用程序解決問題的能力,才是課程的高級目標。本案例從信息技術(shù)實驗核心概念數(shù)據(jù)和穩(wěn)定的對應關(guān)系出發(fā),比較了三種不同難度和特點的技術(shù)路徑的效率,讓學生體驗了個體數(shù)據(jù)分析和群體數(shù)據(jù)匯總兩種工作方式,使得原本沒有規(guī)律的手機號碼,通過信息技術(shù)實驗,得出了規(guī)律,這是一個信息量減少的過程,而通過數(shù)據(jù)挖掘手段,提出新問題,找到新結(jié)論,就是一個信息量增加的過程。