鮑通



摘要: 創造力的產生需要發散思維和聚合思維不停地相互轉換及融合,把握好兩種思維的臨界點對于學生創造力的培養至關重要。作者在小學信息技術編程教學中發現,學生更易于傾向廣而散的想象,缺乏實踐與反思,眼高手低、泛而不精的狀態時常影響學習效果,降低學習興趣。好做法離不開好想法,但如果想法過于遙遠,做法就會迷失方向。所以,作者提出教師應引導學生在一定程度上學會放慢腳步、收斂思維,利用主觀條件選擇最佳方法實現學習目標。
關鍵詞:聚合思維;小學信息技術;可視化編程;算法
中圖分類號:G434? 文獻標識碼:A? 論文編號:1674-2117(2022)05-0045-04
可視化編程如同用積木搭建“城堡”,又如同用音符譜寫樂曲。它與面向過程編程、面向對象編程、組件函數編程等都不一樣,但在編程過程中,這些思想都可能涉及,所以,可視化編程重在編“思維”,尤其是一些算法策略,更能鍛煉學生思考問題和解決問題的能力。算法是計算機科學的基礎和其他眾多子領域的前導內容,其重要性不言而喻。
遞歸,是計算機的經典算法之一,其基本思想是把規模較大的問題轉化為規模較小的相似的子問題來解決,它可以清晰地描述復雜程序的邏輯,特別適用于循環層數不確定的情形。遞歸在生活中很常見,如漢諾塔游戲、俄羅斯套娃、斐波那契數列、二叉樹等,在它們身上總能發現聚合思維的身影。因此,筆者嘗試將可視化編程與生活現象相結合,在虛實之間捕捉思維的契合點,借遞歸算法訓練進一步強化學生的聚合思維能力。
● 聚焦相同特征:尋找事物之間的共性
1.生活中的求同法:建立求同法思維模型
求同法,指被研究對象在出現的若干場合中,存在一些相關因素,從多種不同的情況中排除不相干的,最終找出最為關鍵的共同因素。該過程可以確定被研究對象與共同因素存在因果關系。例如,狄神探接到一起報案,說村子里接連出現了四戶人家中毒,他們晚飯的食材不同,就餐的時間和地點也各不相同,村民們覺得蹊蹺,隨后神探通過多方面的調查發現,當天晚上這四戶人家都飲用了村頭的井水,后經檢測得出結論:井水是導致中毒的原因。在這個例子中,狄神探得出最終結論就是運用了求同法,在中毒者諸多不同的條件中,找到“飲用井水”這個共同行為作為突破口,證實了井水與中毒之間存在著因果關系。該方法一般僅適用于聚焦具有單一因果關系的問題。
2.程序中的求同法:掌握遞歸的一般用法
下面,筆者將求同法的思想遷移至遞歸算法中,通過可視化編程進一步加強求同法的運用。觀察下頁圖1-1所示的幾個圖形,不難發現它們的規律,即組合圖形中小圖形的大小及數量雖然各不相同,但形狀都一樣。如何通過編程來繪制這些圖形呢?用普通的循環語句顯然會產生一些代碼冗余,而遞歸算法則可以精簡代碼,減少冗余,從而清晰呈現復雜問題的拆解步驟,有助于學生體驗化繁為簡的整個過程。以第一個圖形為例,多個正方形有規則地嵌套在一起,由外向內邊長呈等差數列依次遞減(也可反向遞增),為了減少代碼冗余,此處選用遞歸算法(如圖1-2),將重復部分畫單個正方形的腳本提取出來視為一個“重復體”,再用函數調用自身的方式構建循環,最后通過對“參數”的條件判斷終止程序運行,這就是遞歸的一般用法。原理類似于數學的乘法分配律,如3×15+7×15=(3+7)×15,提取公因式讓計算變得更加簡便,這也正體現了一種函數思想。其他圖形同理,包括起點終點不在同一位置的、不繞中心點旋轉的類型,都可以基于求同法的思想借遞歸策略輕松實現。這部分訓練以提高學生優化解決方法的能力為目標,引導學生在遇到問題時不急于求解,要學會提煉有效信息,挖掘事物規律,進而篩選出更為理想、更加高效的解決方法。
● 捕捉細節差異:尋找事物之間的不同
1.生活中的求異法:建立求異法思維模型
求異法,指被研究對象在出現和不出現的場合中,存在一些相關因素,除某個差異因素外其他因素都相同,且被研究對象的出現與否決定于差異因素是否出現,則該差異條件即為原因。該過程可以確定被研究對象與差異因素存在因果關系。仍以狄神探為例,他選出其中一位中毒村民的食材進行了清點,確定晚餐中包含了在村里集市上購買的豬肉、茄子、西紅柿和雞蛋,然后通過調查當晚的晚餐中也含有這些食材的其他村民得知,均沒有中毒跡象,而唯一不同的是,中毒村民喝過井水,健康村民都沒喝過井水,這就足以懷疑井水有問題了。此時,神探采取的判斷方式就是求異法,在中毒者和健康者諸多相同的條件中,找到“是否飲用井水”這個不同的行為作為突破口,對井水問題提出了質疑。該方法與求同法結合使用會提高結論的可靠性。
2.程序中的求異法:觀察遞歸的特殊情形
目光再次回到算法中,用過了遞歸,有些學生自然會對普通的循環語句產生懷念,因為對于簡單的圖形而言,循環語句本身和遞歸構建的循環沒有太大的區別,無非多寫幾行代碼而已,所以,只有當遇到復雜圖形的時候,遞歸的優勢才能得到凸顯。如上頁圖2所示,在大正方形的四角位置分別畫出小正方形,在小正方形的四角位置又繼續畫出更小的正方形,以此類推。假設小正方形邊長是大正方形邊長的四分之一,規律雖明顯,但實現較難,如果不用遞歸,代碼量必然會讓人眼花繚亂,如果使用遞歸,之前普通的遞歸也要進行“變形”才能滿足要求,由此得出,遞歸也有類型劃分。通過對比圖1可清晰觀察到:一種是在函數的末尾位置調用函數自身,另一種則是在中間位置調用自身。對于前者而言,普通循環語句同樣適用,但對于后者來說,遞歸便難以被取代。然而,世界上沒有完美的事物,有些編譯器無法使用遞歸提升性能,相比之下,循環語句更能節省系統資源,加之遞歸有時理解起來比較困難,所以二者如何選擇,應因地制宜。就算法過程而言,學生只需理解遞歸簡化腳本的思路,并用于多層次的調用即可。學生關鍵要領悟其中的思想:在運用某種公式求解問題的時候,除了學會求同,還要懂得求異,公式有時也需要“變形”,要在共性中發現特殊,在特殊中建立共性。
● 尋找級聯關系:發現事物變化的原因
1.生活中的共變法:建立共變法思維模型
共變法,指被研究對象在出現的若干場合中,其他因素皆相同,其中有一個因素的變化會導致被研究對象發生變化,這種情況被稱為共變。該過程可以確定被研究對象與變化因素存在因果關系。繼續前面的例子,狄神探通過調查多位中毒的村民后發現,中毒癥狀存在輕重之分,那么,中毒嚴重的比中毒輕的多做了什么事情呢?經檢測,水井里的水已變質,且散發著一股淡淡的農藥味,說明井水中含有農藥成分,且飲用的量越多,中毒反應就越強烈,這進一步證實了毒性與井水中的農藥含量有關。原因與結果發生共變時一般會有三種情況產生——一種呈正比,如毒性與農藥含量之間的關系,另一種呈反比,還有一種是介于兩者之間,該情形下需要找到轉折的關鍵點,才能認清存在于因果之間的規律。
2.程序中的共變法:完善遞歸的使用條件
共變法的思想在計算機系統中是很常見的,最常見的情形莫過于打開的程序越多,系統消耗的內存就越多,也因此有了釋放內存、優化系統資源等做法。遞歸算法同樣需要借助共變意識進行優化。遞歸因“變”產生,變量在計算機語言中用于儲存計算結果或表示值的抽象概念,函數中的參數也屬于變量,可用于表達長度、角度、弧度、速度,甚至個數等,正是由于這些因素的不確定性,才有了圖形的多種變化。然而,變化也要有始有終,如圖3所示,花朵的花瓣大小和花瓣數量均影響著一朵花的美觀,只有協調好兩個參數之間的關系,才能使圖形看起來更加得體。學生通過算法訓練,能夠準確找到圖形變化的原因,并熟練掌握變量的使用方法,在確定畫法的起始條件之后,還要對終止條件進行界定,限制結果隨原因的改變(事件的觸發)而持續變化,進而控制遞歸過多導致內存溢出。此處,只有理解了對象與參數的共變關系,才能更好地把握因果變化。
● 過濾確定因素:排除所有的不可能性
1.生活中的排除法:建立排除法思維模型
排除法:指被研究對象在出現的若干場合中,存在一些相關因素,將確定不會導致被研究對象發生變化的因素排除掉,剩下的即為關鍵因素。福爾摩斯偵探小說中有一句話:當你排除掉了所有的不可能性,不管剩下的是什么,無論多么難以置信,那都是真相。該過程可以確定被研究對象與不確定因素存在因果關系。狄神探同樣可以采用排除法得出結論,在對中毒的其中一戶人家進行調查的時候,發現有一位中毒村民的家人晚餐吃了豬肉、茄子和西紅柿,而這位中毒村民沒有吃這些食物,可還是中毒了,這就足以排除食材為中毒因素了。至于其家人中毒的原因,如果是炒菜時放入了少量的井水,那便可以加速判定井水有毒這個結論了。該方法又叫淘汰法或試探法。
2.程序中的排除法:理解遞歸的深層機制
排除法的思想體現在帶回溯的遞歸算法中。要說遞歸是一種算法結構,那么回溯就是一種算法思想。回溯算法的過程是通過不同的試探來確定問題的解,它從一條路往前走,能進則進,不能進則退,換條路繼續試探。其思想如同排除法,即對已經確定為錯誤的答案不必再繼續研究下去。例如,在一個集合R={0,1,2,3,4}的所有子集中找出元素之和小于3的集合,顯然,從前往后判斷到2即可終止,3、4直接排除。二叉樹是一個比較典型的例子,它由一個個節點組成,每個節點最多再分兩個子節點,從根節點開始呈左右方向延伸為左子樹和右子樹。如圖4所示,過程中它會返回至上一級節點開始把所有情況一一列出,直到遇見與自身相同的情況暫停,然后再繼續返回至上上一級節點開始,以此類推,直到遇見滿足條件的情況終止。通俗地說,遞歸結束后如果不再做其他事情,就停止;如果繼續做其他事情,就回溯。對于自定義函數不帶返回值的情況而言,可暫且認為遞歸結束后不做任何事;如果遞歸之后再有遞歸或其他任務,則必然產生回溯,與圖2同理。由于很多實際問題抽象出來的數據結構都與二叉樹的形式相似,所以這種處理問題的機制同樣值得借鑒。
● 結語
上述四種思維方法各有特點,綜合運用效果顯著。學生通過科學地訓練,能夠更好地理解遞歸算法的概念和執行機制,掌握遞歸的設計及優化策略,從而在編程學習的過程中有效提升聚合思維能力,為好想法的誕生創造更多的條件,也為好策略的實施積累有效的力量。當然,聚合思維并不孤獨,發散思維常伴左右,德國心理學家海納特曾說:發散思維只有同聚合思維綜合起來才有現實意義。如果將編程比作放風箏,那么主題就是風箏線,聚合思維和發散思維分別負責收放兩根線。二者都希望風箏飛得更高,但再高再遠也不能斷線,否則,風箏就會失去控制。只有牽好風箏線,收放自如,才能真正體驗放風箏的樂趣。
3509501908286