季雁



“變式探究”是教師在“變式教學”的基礎上,根據學生的特點,通過創設合理的、有挑戰性的問題變式,激發學生的探究興趣,點燃學生內心探究的種子。通過“變式探究”,教師為學生的思維發展提供支架,有助于學生構建脈絡清晰的知識。通過“變式探究”,教師有目的、有意識地引導學生從“變”的現象中發現“不變”的本質,從“不變”的本質中探究“變”的規律,真正做到融會貫通。本文筆者通過算法與程序設計教學的具體實踐,歸納出層次型、發散型、逆向型、情境型、類比型的“變式探究”,呈現了“變式探究”對提高學生學習效率、提升學生思維品質等方面的效果與價值。
● “層次型”變式探究:跳一跳,摘到桃
維果斯基的“最近發展區”理論中最經典的話語莫過于“跳一跳,摘到桃”。“最近發展區”是指“學生獨立解決問題的實際水平與在教師指導下解決問題的潛在發展水平之間的差距”。“最近發展區”強調了教學的本質特征不在于訓練和強化已形成的內部知識體系,而在于激發形成正處于成熟過程中而又未完全成熟的知識體系。因此,在教學中,要從學生的學習能力和思維特點出發,關注學生的需求,可采用“層次型”的變式來啟發、引導,激發學生主動探究。
教學闡析:循環語句是程序設計學習中的重點和難點,學生如何靈活應用循環語句來解決生活中的實際問題,如何找出這些問題的共性,并在解題過程中找出規律、提煉方法,是課堂教學所要突破的關鍵。如圖1所示,首先,從一個簡單又充分體現循環思想的問題入手,讓學生認識For語句,理解循環的原理。然后,給出探究變式1和變式2,讓學生自主完成值的計算。教師針對巡視中發現的問題進行釋疑后,讓學生完成變式3、變式4。在從變式1到變式4的認知過程中,大部分學生都能“跳一跳,摘到桃”,逐步熟悉For循環的結構并真正掌握其具體用法。“層次性”變式探究的學習過程,使學生真正實現自主地構建知識。
● “發散型”變式探究:一千個讀者眼中有一千個哈姆雷特
莎士比亞有句名言:“一千個讀者眼中有一千個哈姆雷特”。也就是說,每個立場不同的人都可以在“哈姆雷特”這本書里看出完全不同的意境。筆者以為,這個道理用在算法與程序設計教學中也十分恰當。同一個問題,學生與學生、學生與教師之間往往也會因為知識儲備、興趣愛好、能力差異、思維特點等不同而產生多種變式。
教學闡析:如圖2所示,在學習雙重循環這塊內容時,首先通過平行四邊形的打印讓學生理解雙層循環、tab()函數和print方法的用法,了解它們的具體功能。然后,讓學生自由選擇規則圖形編寫代碼,從不同圖形的打印代碼中找出相同的規律,即:①外循環控制打印的行數;②tab()函數控制每行打印的位置;③內循環控制每行的打印個數。很多學生采用了不同的打印圖案,甚至同一圖案采用了多種方法。通過引導,學生展開自主探究,進行創造變式、解決變式,從而更深入地體會問題的異化、遷移,更好地把握問題不變的本質特征。“發散型”變式探究的學習過程,能有效培養學生思維的探索性和深刻性。
● “逆向型”變式探究:反其道而思之
正向思維是指常規的、公認的、習慣的想法與做法。逆向思維則恰恰相反,是對傳統、慣例、常識的挑戰。循規蹈矩的思維和按傳統方式解決問題雖然簡單,但容易使思路僵化、刻板,擺脫不掉習慣的束縛,得到的往往是一些司空見慣的答案。逆向思維則能克服這一障礙,得到的答案往往出人意料,給人以耳目一新的感覺。有時候從思維的反方向開展“變式探究”,反其道而思之,往往能另辟蹊徑,讓人豁然開朗,對知識的靈活應用更為得心應手。
教學闡析:教材中對冒泡排序的算法僅局限于自下而上的比較相鄰兩數。首先,學生通過數字實例的內、外循環變量跟蹤,理解冒泡排序算法的基本思想,理清內、外循環變量之間的關系,基本掌握自下而上的升序排序代碼。接著,筆者提出:如何實現自上而下的反向排序?學生通過小組合作的方式展開逆向探究,回憶自下而上的過程,反向抽取內、外循環變量之間的關系,從而得出變式,如下頁圖3所示。
在算法與程序設計教學中,從問題的反面進行深入探索的例子還有很多。求解n的階乘問題,正向的思路則是通過解析算法,找出問題的前提條件和所求結果之間的數學關系表達式,用循環結構得出問題的解。筆者通過啟發學生開展“逆向型”變式探究,讓學生使用遞歸算法,將大問題分割成小問題,通過已知的小問題逆推得出最終的解。“逆向型”變式探究解決算法中的問題,往往會有一條新奇的出路,使學生的思維更加靈活。
● “情境型”變式探究:一切知識都是從感官開始的
“一切知識都是從感官開始的。”這是捷克教育家夸美紐斯在《大教學論》中的至理名言。陶行知也說過:“生活即教育。”課堂中問題的呈現要具有一定的生活情境,才能激起學生主動探究的熱情和思考問題的積極性。尤其是在算法與程序設計教學中,教師更需要有目的地引入或創設情境,以激發學生的興趣,提高學生對知識的記憶、理解和應用。學生從不同的情境變式中探究得出類似問題的統一解決方案,從多變到不變,思維的總結和概括能力得以提升。
教學闡析:如圖4所示,在講授多條件的塊if語句時,筆者選用了“田徑運動員技術等級判定”問題作為實例,幫助學生認識if語句的語法及功能。雖然if語句理解起來較為簡單,但在具體的上機實踐中,學生往往錯漏百出,需要相關的練習進行鞏固。采用“情境型”變式探究,結合學生的生活實際,可以使枯燥的練習內容變得鮮活起來。學生展開熱烈的討論,歸納并總結了生活中可以用if語句解決的情境問題,以及具體的操作方式。運用“情境型”變式探究,從不同的問題背后抽取出相同的處理方式,學生真正感受到算法與程序設計的實用性、趣味性、生動性。
● “類比型”變式探究:他山之石,可以攻玉
類比是一種重要的思維方法,在新舊知識間進行異中求同、同中求異。類比的過程是由此及彼、找尋問題的相似點或相異點的過程。“他山之石,可以攻玉”,“類比型”變式探究可以從一種問題的解決方法引申出更為優化的解決方法,由這種方法所得出的結論,既有模仿又有創新,是思維的升華,富有創造性,往往能給予學生許多啟發。2015年選考試題第16題冒泡排序優化的改錯題、2016年10月選考試題第16題冒泡排序數據的移動問題也涉及此類問題。
教學闡析:如下頁圖5所示,在給出“百錢買百雞”問題之前,學生已通過相關實例掌握了枚舉算法的基本用法,并總結了枚舉算法的常規解法,即問題有幾個變量就采用幾層循環,并在最內層循環中添加所有的條件。雖然這樣的解法能解決問題,但卻不是最優的算法。一個好的算法,很多時候需要考慮程序的執行效率。因此,筆者引導學生思考枚舉算法解決問題的關鍵,從問題的范圍、條件著手進行優化,學生順利地得出了變式。然后,筆者將兩種方法做類比,前者所需執行的循環為100×100×100次,判斷條件為2個,而變式所需執行的循環為20×33=660次,判斷條件為1個。通過這樣的“類比型”變式探究,學生的思維得到了升華,在“孫子算經”問題中立馬活學活用,順利應用了優化的枚舉算法變式來解決問題,使循環次數從500次減少到(500-9)/7次,條件從3個減少為2個。
教學闡析:斐波那契序列、兔子數列以及類似其他數列的求解是算法中常見的、經典的問題。在學習遞歸算法以后,學生往往會有思維定式,千篇一律地采用遞歸算法來編程求解。因此,筆者提出了能否用解析的方法來解決斐波那契序列問題,學生很快通過數學關系表達式的求解,順利得出了變式。接著,筆者讓學生用n=35調試兩種算法。學生驚喜地發現解析算法的機器反應快,遞歸算法明顯遲鈍。由此,筆者提出運行效率問題,讓學生利用n=5進行遞歸函數的調用次數分析,得出結論:Fib(5)調用1次,Fib(4)調用1次,Fib(3)調用2次,Fib(2)調用3次,Fib(1)則需要調用5次。函數的多次調用造成大量的重復計算,從而使得遞歸算法的效率低下。通過類比,學生總結了解析算法和遞歸算法解決此類問題的優劣。“類比型”變式探究,拓寬了思維的廣度,實現了有效拓展,學生深受啟發,明確了遇到問題時應該綜合考慮的方方面面,從而學會選擇最優的算法來解決問題,如圖6所示。
綜上所述,筆者以為,在算法與程序設計教學中開展“變式探究”,就是用有效的變式問題引導學生進行由表及里的深入探索,抽取問題的本質和核心,真正學會融會貫通,從而實現以“變”應“不變”,以“不變”應“萬變”。有關變式探究問題的有效設計,需注意教學的目標導向性、學生的主體參與性,以及變式問題的適度性。