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