鄧彰超
浙江省新高考實施“7選3”模式后,技術成為其中的一門選考科目。算法與程序設計作為該科目選考的主要考核內容,其難度和廣度有所提升,經典算法如解析、枚舉、排序、查找遞歸等成為選考教學的重難點。在教研時,同行們常會提出一些問題:在學習這些經典算法時,如何讓學生真正經歷計算機解決問題的過程與方法?如何讓學生界定問題、建模分析、設計算法解決問題,形成科學穩定的知識邏輯結構?如何解決經典算法學習中遇到的疑難問題?如何通過這些疑難問題的解決來培養和提升學生的思維能力?周以真教授指出,計算思維就是運用計算機科學的基本概念去求解問題、設計系統和理解人類的行為,它涵蓋了計算機科學廣度的一系列思維活動。其一般過程是注重理解問題的本質,抽象問題的特征,繼而構造模型設計可自動化執行的算法來解決問題。具體過程如圖1所示。
計算思維的提出,使高中信息技術課程的教學逐漸從注重實踐操作的技術素養層面上升到注重思維素養的培養層面,這就給經典算法選考的學習和疑難問題的解決提供了良好的方法論指導。筆者結合自己的教學實踐,分別從理解本質確定目標、設計任務講評歸納、合理建構變式內化與多元評價差異發展四個方面進行了探究。
理解本質并確定目標
在學習經典算法選考部分時,教師需要解決的是與本算法相關的既往存留問題和本課學習中的疑難問題。所以,在實施計算思維經典算法教學時,教師首先應回顧相關已學知識點,其常考常錯點則需通過思維引領精講總結的方式予以正本清源,讓學生理解這些疑難問題的本質,清除障礙,進而明確本堂課基于計算思維的學習目標。
以經典算法冒泡排序的學習為例,學業水平考試部分知識點與本課例相關的主要有賦值語句、選擇語句及多重循環,教學經驗得出疑難點是多重循環的理解應用。筆者在回顧、復習語法的基礎上將其結合枚舉算法中的“百錢百雞”問題(如圖2),采取抽象思維形象化的方法,用連線的形式將抽象問題形象地呈現出來(如圖3),讓學生理解多重循環的原理本質。
分析:①當控制外循環變量gj的取值不變,且控制中循環變量mj的取值也不變時,內循環變量xj需從1依次變化到100,同時形成100組解的形式,并進行篩選判斷。②當控制外循環變量gj的取值不變時,中循環mj的取值需從1變化到33,且針對每一次中循環mj的取值變化,內循環變量xj的取值均需從1變化到100,同時形成33×100組解的形式,并進行篩選判斷。③外循環變量gj的取值可以從1依次變化到20,針對外循環變量每一次取值的變化,中循環變量mj的取值均需從1變化到33;同時,針對中循環變量mj取值的每一次變化,內循環變量xj的值均需從1變化到100;由此可形成20×33×100組解的形式,并進行篩選判斷。
小結:中循環變動一次,內循環需變化100次;外循環變動一次,則中循環需變動33次,同時內循環需變化33個100次。學生通過連線為載體將抽象問題形象化,經由計算思維的方法過程,將多重循環的理解化難為易,達到理解問題本質的同時提升了思維能力。
學習目標是教學的核心和靈魂,圍繞教學目標,才能順利開展教學活動和評價。所以,筆者在夯實基礎后,將冒泡排序算法學習的知識教學目標分解成三個具體目標:①什么是冒泡排序;②如何編寫程序實現冒泡排序;③如何運用冒泡算法解決實際問題。關于什么是冒泡排序,筆者依據冒泡算法的問題本質,按照計算思維處理問題的模式,將問題界定為三個子目標:①n個數據排序實質就是尋找n-1個最值的過程;②如何找一個最值;③數據交換算法?;谶@樣的問題本質,分解能更好地發展學生的計算思維,把學生較難理解的算法原理轉變為一個個容易理解的、已知經典的子問題。同時,這也為下一環節的算法程序的實現打下基礎。
設計任務并講評歸納
圍繞學習目標,筆者根據計算思維的特點來設計任務,這里需注意兩點:其一是根據學習目標,選取學生學習生活中熟悉的問題切入,設計適合培養計算思維的任務;其二是所設計任務的深度和廣度要符合學生的知識水平和認知規律,方便學生運用計算思維的方法展開分析思考,進而加深對算法思維的理解和對疑難點的突破。
在本課例的任務設計方面,基于學生的認知規律,首先,筆者請學生看冒泡排序的Flash動畫,并引導學生說出動畫中所蘊含的冒泡算法原理,即“看動畫,說原理”環節;接著,筆者又請一組學生頭戴寫有自己出生日期后兩位的生日帽模擬冒泡排序Flash動畫,進行排生日游戲,此為“演動畫”環節,使枯燥的算法原理鮮活地呈現出來,加深了學生對冒泡算法的印象。為了揭示問題的本質,筆者選取了四個數據,采取小組合作分組探究的方式,將給定排序方向為從前往后和從后往前、排序結果為升序和降序,進行排列組合得到四種冒泡排序方式,對第一趟的排序結果、比較趟數、每趟比較次數以及比較交換規則分別進行探究(如上頁圖4)。學生通過小組合作學習,初步經歷運用計算思維展開問題的分析和思考。
在對這四種冒泡方式進行小組講評后,筆者引導學生一起對這四種冒泡方式的比較趟數、每趟比較次數以及比較交換規則進行異同總結(如圖5),這為學生理解算法的多樣性,進一步理解算法原理和后續的疑難點——算法程序的實現,打下了基礎。
以第四組為例,師生一起詳細探究歸納,旨在讓學生理解冒泡算法問題的本質,即:n個數排序就是尋找n-1個最值的過程;尋找最值的過程就是從最后一個位置開始,逐個往前,相鄰兩個數依次比較,讓最值自動冒出來;比較規則是,如果后面數大就交換兩者的值(如圖6)。
在這一任務教學中,筆者主要使用討論法、啟發法、歸納法等教學方法來培養學生的計算思維,從分組探究中逐步理解冒泡算法的原理過程。學生通過自主學習、小組合作探究體驗計算思維的方法,在解決問題完成任務中理解問題本質及提升計算思維。教師在完成任務過程中理性嚴密引導,使學生變被動學習為主動學習,積極參與到課堂中來,提高了學習效率。
合理建構并變式內化
學生對一個知識點的掌握需要一個過程,對經典算法中的疑難問題理解突破就更需要不斷的積累。在算法與程序設計模塊的學習中,筆者常聽到學生說:“老師,您講的內容我們能聽懂,但自己編程時卻錯誤百出?!奔毦科湓颍艽蟪潭仁侵仉y點問題沒有建構起清晰的知識結構,其次是思維強化訓練不足。
就本課例而言,筆者綜合教學實踐及學生的反饋,得出冒泡算法程序編寫的三個疑難問題:①內層for循環,如何確定循環變量的初值和終值(即確定對應數組元素的開始下標與結束下標);②到底是哪兩個數在比較?③相鄰兩數的“<”“>”符號的確定。
基于以上所述,筆者從前往后排,以排成結果為由小到大的升序形式為例,輔以磁體數字圓盤移動來演示算法原理,通過計算思維的過程方法,逐一解決冒泡排序的三個疑難問題。
第一步:在知道外循環變量i是解決尋找n-1個最大值的基礎上,提出如何找某一個最值的問題,即疑難易錯點①“如何確定內層循環變量j的取值范圍”。筆者引導學生思考:首先,題設要求從前往后排,排序結果為升序,不妨先不考慮怎么比較和交換,即通過第一趟排序,第一個最大值肯定要被放置在最后面;接著,第二趟,第二個最值肯定要放在后邊第二位;依此類推。所以,后面數組下標每趟均需要變化一位,總結規律為n-i,同時注意到前面是不變的,即每趟尋找最值都是從第一個數據開始找,從而疑難易錯點①得到了解決:內循環變量j的初值為1,終值為n-i(如圖7)。
第二步:在明確內循環變量j取值范圍的基礎上,提出問題:到底是哪兩個數在比較?筆者引導學生思考分析:既然題設排序方向為從前往后,內循環變量j的取值是從第一個數據開始往后比,規則是兩兩比較,這里不妨暫不考慮比較交換規則,易知是第一個數與第二個數比較,第二個數與第三個數比較,依次類推。筆者總結規律為:當前一個數據為a(j)時,后一個數據必定為a(j+1),從而疑難易錯點②得到了解決。具體思路歷程如圖8所示。
第三步:明確哪兩個數在比較,那么這兩個數比較交換的規則是什么呢?也就是“<”“>”符號的判斷。筆者引導學生思考分析:題設排序結果為升序,故第一趟排序是把最大數放在最后面,是找“大數”,又因為排序方向為從前往后,因此比較交換的規則為相鄰兩個數當前一個數比后一個數大就交換,程序表達為a(j)>a(j+1)(如圖9)。
綜上所述,冒泡算法程序的三個疑難問題已經得到了解決,思路清晰,學生也理解透徹??梢?,計算思維提供了重新審視程序設計教學的視角,將計算思維融入到程序設計教學中將會大大提高學生分析問題、解決疑難的思維能力。
隨著學生思維能力的逐漸提升,為了加深其對知識的理解,筆者承前述分組探究活動的鋪墊,對四種冒泡排序方式分別研究其對應的三個疑難問題(如圖10)。
至此,通過理性嚴密的引導,學生切身經歷了基于計算思維的冒泡算法疑難問題解決過程,從中體會到一題多變及算法的多樣性,進而更全面、更深入地理解了冒泡排序算法,培養了知識遷移和靈活運用的能力。推而廣之,當遇到其他類似問題時,學生也可以嘗試運用計算思維的方法去分析、解決問題。學生要先能準確地描述問題,并將問題按本質有邏輯地分解為若干求解步驟;再從這些步驟中抽象出本質性的操作模型,并尋求能通過計算機等工具自動處理實現的方案;最后選擇一種有效方案,實現疑難問題的解決。
多元評價差異發展
教師要建立多元化的評價體系,檢驗學生知識的掌握程度和思維能力的水平。具體操作時,如果學生基礎整體較弱,教師可以采取留白給學生填空鞏固,不要求完整代碼編寫,但一定要學生都參與前面問題的界定、分析、解決過程,而不是直接給答案;如學生基礎較好,教師可以減少引導的部分,布置任務讓學生自主思考,減少編程調試時間。多元評價,一方面是教師對學生進行評價,將過程性評價與總結性評價相結合,根據學生在學習過程中的表現,利用計算思維解決問題的能力,以編程作品的好壞為評價依據,全面評估學生的信息技術知識和能力;另一方面是借助學習任務單與發展性評價表,引導學生進行自評。例如,在冒泡復習課中,教師可以從教學目標中選擇體現計算思維培養的內容進行具體的教學評價設計,其發展性評價分為3個等級(如上表)。
學生自評時,就能清楚地知道自己處于哪個級別,并及時反饋給教師,這樣教師就可以根據綜合評價的反饋來檢驗教學效果,使得不同程度的學生都有所收獲,達到差異發展的教學目的。
結語
筆者將計算思維的概念滲透到高中信息技術課程教學中,并運用計算思維的方法分析解決經典算法選考學習中遇到的疑難問題,嘗試引領學生在理解計算思維概念方法論的基礎上將其應用推廣,經實踐證明,取得了良好的教學效果。但計算思維是建立在計算機解決問題層面上,屬于方法論層次的概念,教師若脫離了信息技術課程的具體內容,單純討論計算思維的培養,那也是空中樓閣。因此,教師要想真正將計算思維融入到經典算法疑難問題解決中,首先要精心備課,按問題本質建構清晰的知識結構,同時去冗存精地準備教學資源以利于把時間擠出來給學生思考、學習。其次是減少“滿堂灌”或形而上學的教學形式,不是直接告訴學生是什么,而應與學生一起走過“問題是怎么解決的”學習過程,要想方設法讓學生真正經歷問題解決的全過程,以此提升他們運用計算思維解決疑難問題的能力。