曾偉鋒
青少年逐步成為新時代的數字土著,他們在日常生活中已經潛移默化地掌握了常用的信息技術處理工具。中小學計算思維教育并不是要把所有學生都培養成計算機專家,而是要幫助每位學生更好地適應當代信息社會,更好地利用信息技術理解和解決生活與學習中的真實問題,成為合格的數字化公民。計算思維是一種解決問題的思維,那么讓學生體驗解決問題的過程應該是培養學生計算思維的一種路徑。通過在每次課上讓學生經歷發現問題、提出問題、利用信息技術學科思維方式解決問題的過程,引導學生逐步建立、形成計算思維。中小學信息技術教育的學科價值除了讓學生掌握必要的知識與技能外,更重要的是培養學生運用這些知識和技能解決實際問題的能力。《對分查找》一課的設計與實施就體現了高中程序設計教學中滲透計算思維教育的一些做法。
對分查找實施原理:(1)對分查找是效率很高的查找方法,但被查找的數據必須是有序的;(2)首先將查找的數與有序數組內處于中間位置的數據進行比較,如果中間位置上的數與查找的數不同,根據有序性,就可確定應該在數組的前半部分或后半部分繼續查找;(3)在新確定的范圍內,繼續按上述方法進行查找,直到獲得最終結果。
本課重點:探索、理解、分析對分查找的執行過程。
本課難點:根據算法的過程描述設計對分查找算法流程圖。
由于信息科技課程具有很強的實踐性,圍繞實踐性這個學科特點,本節課教師讓學生在解決問題的過程中提高計算思維能力。
環節一:根據生活經驗,初步感知對分查找算法
師:有一個整數在1~100之間(舉例62),一般情況下,如果要用較少的次數猜出這個數。你會先猜幾?
生:50。
師:小了,那么這個數在51~100之間,接下來猜幾?
生:75。
師:剛才的對話中隱藏著經典的算法——對分查找,它是比順序查找效率更高的方法。通過這種每次查找范圍縮小一半的方法很快就能猜出這個數是62。
如圖1所示,1~21號代表21個箱子,在21個箱子里分別放著21位學生的考試號碼(考試號碼為無序)。上一次課用順序查找的方法找到了489號。
師:能不能用對分查找的方法找出489號?
生:不能。對于一個找到的數,如第一次查找的11號數312,它不能和前面或后面的數比較大了還是小了。
因此,要用對分查找須先將數字進行排序,使之變成有序數列。
教師利用學生已學的冒泡排序的算法將這組數據進行升序排列,如圖2所示。
為了節約教學成本,教師要盡快切入正題,爭取在兩三分鐘內引入對分查找,同時讓學生從互動討論中預熱對分查找的思想。教師從學生生活經歷中提煉對分算法,引出沖突,引導學生發現問題,得知使用對分要先進行排序,使學生對對分查找算法有初步的認識。
環節二:結合圖形,化抽象為形象,引導學生探索對分查找的過程
對分查找每次要查找的是中間的數。那么,如何確定中間的數是哪一個數字呢?教師引導學生通過圖形直觀地觀察查找并表達出來。如圖3所示,M表示每次查找的中間箱子的編號,L、R表示每次查找的第一個和最后一個箱子的編號。
第一次要找的箱子是:M=11=(1+21)/2=(L+R)/2。
第二次要找的箱子是:M=16=int((12+21)/2)=int(16.5)=int((L+R)/2)。
第三次要找的箱子是:M=13=int((12+15)/2)=int((L+R)/2)。
三次找到考試號碼489。
通過每次查找的過程歸納總結出每次查找的M與L、R的關系:M=int((L+R)/2)。
如圖4所示,教師再次引導學生詳細描述查找箱子的過程,仔細分析梳理查找的過程,細化每一個步驟。學生通過查找的過程描述出算法的過程。
教師要讓學生參與分析過程,而不是直接告訴他們“是什么”,應與他們一起經歷“這是怎么來的”學習過程。結合圖形,利用形象直觀的查找過程,學生在頭腦中容易形成形象具體的問題解決過程的模型,并通過學習過程理清楚查找的詳細過程。同時,該例子形象地表示了數據在計算機內部數組元素中對分查找的過程,有利于學生形成抽象思維,幫助學生掌握知識。
環節三:根據算法的過程描述,設計流程圖并書寫程序代碼
教師應逐漸展開流程圖,讓學生結合算法描述逐步填充并完成流程圖的設計。結合流程圖,學生利用VB語言編寫程序計算出結果。學生的中心任務就是完成對分查找程序。經過編寫、調試、思考、改進和教師旁白引導、個別指導,絕大部分學生在5分鐘內都能編寫出完整的對分查找程序。適當的留白可讓學生只需把精力投入到對分查找的主體程序上。這樣做的目的是讓學生充分聚焦到學習重點上,讓時間有限的一節課變得更有效,從而實現教學目標的最大化達成。
這節課沒有先聲奪人的情境鋪墊,沒有氣氛熱烈的小組合作,沒有滔滔不絕的教師講解,更多的是教師嚴密理性的引導和學生被激活的思考和實踐。同時考慮到一節課的時間,如果要查找的數據不在數組里面,還沒有被考慮進來,留給學生下一節課去解決。學生運用信息知識與技術解決問題時,首先要理性地分析問題,將一個復雜的問題轉變為若干便于解決的簡單問題。通過細致的分析,可以自上而下,逐步求精,不斷將問題分解,直至計算機可以解決。這有助于培養學生的分析性思維方式。
中小學計算思維教育不應限于計算知識的學習和技術工具的操作應用,而應強調學生利用計算知識和技術工具解決問題綜合能力的形成與思維的內化。如果孤立地學習程序編碼而不給學生創設算法設計的體驗情境,就會導致盲目模仿科學實驗而不知為什么做科學實驗;如果一味要求學生進行算法設計,而不給學生驗證自己想法的機會,就會掉入只講授科學知識而不做科學實驗的泥潭。因此,中小學計算思維教育既不能簡單地等同于代碼編寫,也不能將算法設計與程序實現割裂開來,最重要的還是要引導學生體驗“程序驅動”的技術工具應用情境,感受到計算方法與自動化實現的真實存在,使其在實踐、體驗程序設計每個環節的過程中將計算思維內化為普適性的思維方式。