金一民
摘要:圖形化編程在小學階段開展得如火如荼,但初中生學習高級程序設計語言(如Python,C++)比較困難。作者認為,圖形化編程和高級程序設計語言之間如果能有效進行知識遷移,則能促進初中生學好高級程序設計語言。Mind+軟件在新版本中推出了Python模式,將模塊與Python指令實時匹配,做到了圖形化和程序代碼的結合,即“圖代”結合。利用“圖代結合”通過由淺入深的教學,把遞歸等算法清晰地展示給學生,加快初中生對高級程序設計語言的使用和理解,由此發(fā)現(xiàn)“圖代”結合能夠有效促進學生對高級程序設計語言的學習,讓小學時期所學的編程知識有了更多的用武之地。“圖代”結合的作用是趨近于流程圖的圖形模塊與程序代碼形成近似匹配,降低學習難度,提高學習深度,對培養(yǎng)創(chuàng)新精神和計算思維有積極意義。
關鍵詞:“圖代”結合;算法;知識遷移;計算思維
中圖分類號:G642 ?文獻標識碼:A ?論文編號:1674-2117(2022)03-0000-04
● 始于創(chuàng)客軟件版本更新,深挖“圖代”知識有效遷移
Mind+軟件是配套于DFROBOT創(chuàng)客設備的圖形化編程軟件,有使用Arduino C語言的上傳模式,但是在上傳模式中代碼區(qū)域不是隨著模塊增減的變化而變化,同時也需要硬件的支持否則無法進入該模式,因而它對學習計算機語言并不友好。雖然筆者帶學生參加創(chuàng)客項目比賽,一直用DFROBOT的創(chuàng)客設備,也持續(xù)使用此款軟件,但在V1.7.0RC3.0版本出來后,美妙的東西隨之出現(xiàn),筆者腦海中也有了新的編程教學思維。
Mind+推出了全新的Python模式,它解決了長期以來一直困擾筆者的關于高級程序設計語言學習的一個重要問題,即如何讓圖形化編程和程序代碼之間進行有效的知識遷移?對于計算機語言的教學來說,圖形化編程是很棒的入門,很容易被中小學生接受,學生只需要拖動模塊,不考慮其他太多因素,就能把一個程序寫出來,但在學習諸如Python,C++,Java這類高級程序設計語言時,需要記憶許多內容,思考抽象問題,還要搞清符合規(guī)范的符號等,否則就會報錯或存在漏洞。這樣的變化肯定會極不舒服,但Mind+推出了全新的Python模式,就好像在圖形化編程和學習高級程序設計語言之間給出了一個緩沖地帶,確保兩者間的知識能較柔和地進行遷移。
Mind+推出的Python模式包含模塊方式和代碼方式。以模塊方式舉例,如下頁圖1所示,可以發(fā)現(xiàn)在界面的左側部分,Python中能用到的數(shù)據(jù)類型、結構等都有對應的圖形化模塊,當拖動指令模塊到腳本區(qū)域并連接到“Python主程序開始”后,在自動生成區(qū)域就能實時匹配相應的程序代碼,接著可以點擊運行按鈕,終端內就會出現(xiàn)運行結果。
● 由淺入深教學,“圖代”共建計算思維
使用由淺入深的教學方式來學習計算機算法是許多教師普遍的做法,首先做一個乘法案例,如10*2=20,要求是以加法的方式表示,即使是小學生也懂得2+2+2+2+2+2+2+2+2+2,用10個2逐個相加的方法,這就是遞歸,先展示用模塊搭建符合遞歸的條件的框架,即建立一個結構框架,如圖2所示。
此函數(shù)調用自身規(guī)則是在原次數(shù)減一的基礎上加二并連加十次,可以得到F(n)=F(n-1)+2,那么把否則里的返回return None改成return (DiGui((CiShu - 1)) + 2),對應的核心模塊如圖3所示。
接著,調用這個遞歸函數(shù)并輸入一個實際參數(shù),打印這個帶有實參的函數(shù),由于遞歸在Python中受到次數(shù)限制,所以輸入的時候要注意不要輸入過大的數(shù)值。參考代碼如圖4所示。
加二案例做完后讓學生知曉何為遞歸,那就是在運行的過程中調用自身,且需具備的兩個條件:①子問題與原始問題為同樣的事,或更簡單;②不能無限制地調用本身,應有出口。
另外,以漢諾塔為例來加深構建,漢諾塔規(guī)則:有A,B,C三根針,將A針上N個從小到大疊放的盤子移動到C針,一次只能移動一個,不重復移動,小盤必須在大盤上面。根據(jù)實測結果f(1)=1,f(2)=3,f(3)=7,f(4)=15可以得出規(guī)律為f(n)=2*f(n-1)+1。所以,把否則里的返回return None改成return ((2 * HanNuoTa((YuanPanShuLiang - 1))) + 1),從中可以發(fā)現(xiàn)遞歸的結構框架并沒有發(fā)生改變,改變的只有第二個返回的值(如下頁圖5)。
兩次加深對遞歸算法理解可能還不夠,可以再試著用階乘、斐波那契數(shù)列(其他數(shù)列都可以)、棋盤上的麥粒、楊輝三角等經典案例,鞏固遞歸核心認知,拓寬算法適用范圍。用了“圖代”結合的方式,可以把以前未涉及的或大多數(shù)不理解的算法講解清楚,真實觸及培養(yǎng)學生計算思維的基本要素,可能會成為他們在未來求解問題的重要手段。教師跟學生講解不必先從規(guī)范或格式開始,不糾結于何時縮進,寫冒號、括號等。
● 用好對應關系,促編程代碼加速理解
用模塊編寫完程序僅僅是開始,還要對Python進行全面描述,這種描述是可以根據(jù)模塊一一對應的,在面對圖5所示的漢諾塔界面時,學生肯定會提出疑問,前六行代碼帶有#的內容沒有被顯示,無法找到對應的模塊,這時可以告訴學生注釋的知識,因為注釋是程序員之間溝通的橋梁,讓學生先養(yǎng)成好習慣,即做好注釋。
定義對應def,漢諾塔對應HanNuoTa,圓盤數(shù)量對應YuanPanShuLiang,如果對應if,圓盤數(shù)量=0對應YuanPanShuLiang ==0,返回數(shù)字0對應return 0,else對應否則,返回2*漢諾塔圓盤數(shù)量-1+2對應return((2* HanNuoTa((YuanPanShuLiang - 1)))+1),對于定義函數(shù)這樣的一一對應是可行的,但也有另外的做法(如圖6),可以更好地解釋。
在“圖代”結合的方式下,多增加一行語法解釋,從整體上來理解編程代碼的含義以及符號的使用,條件判斷也可如圖7所示來操作。
可以發(fā)現(xiàn),指令模塊和語法解釋之間是好理解的,而指令模塊或語法解釋與Python語句對應經過了許多次匹配后學生的思維就會產生有趣的變化,當進行圖形化編程時會聯(lián)想到Python代碼,當直接寫Python代碼時又會聯(lián)想到圖形化編程,這是一件特別好的事情。眾所周知,右腦思維是一種圖像思維,主要是針對圖形的感知功能,也可以理解成圖形化編程部分;左腦以邏輯思維為主,主要包括邏輯分類功能、語言功能、數(shù)學運算功能、理性思維功能,也可以理解成Python代碼部分。這樣就意味著學生的左右腦同時工作,那么知識遷移將會更容易實現(xiàn)。另外,圖形化編程結構跟流程圖比較相似,把“圖代”結合者認為類似流程圖和高級程序設計語言之間的匹配也未嘗不可。
● 發(fā)揮Mind+軟件優(yōu)勢,推薦庫深度教學
再看看Mind+軟件的代碼模式,直接在里面寫出符合Python語法的代碼,必須先建立一個擴展名為.py的文件,然后在編寫區(qū)域內輸入程序指令,會有一些智能提示,熟練后并不比專業(yè)的軟件慢,如果忘了怎么寫,看一下軟件左側的模塊指令區(qū)域,拖出相應的模塊指令會生成相應的Python語句,如圖8所示。
所以,無論是以拖動模塊指令為主的模塊模式還是以代碼輸入為主的代碼模式都降低了編寫程序的難度,對初中生學習高級程序設計語言來說是非常友好的。對教學來說,不用過多關注書寫是否符合要求,應重點強調提升學生對計算思維的理解。
筆者之所以用Python是因為Python之禪,但更重要的是其豐富的庫,恰巧Mind+也支持這樣的操作,點擊庫管理,就會出現(xiàn)熟悉的庫名,安裝模式可以直接選擇源再點安裝,也可以使用pip模式進行安裝,已安裝的會出現(xiàn)在庫列表中,使用的時候只需要import一下(如圖9)。
這里的庫存量很豐富,雖然大多都是存在,但很多庫可以導入但并不能真正地使用,雖然目前這個版本尚無法對這些內容進行全方位支持,但對于初中生學習來講已經是綽綽有余。
● 國產軟件兼容并蓄,“圖代”迸發(fā)思維火花
從Scratch的缺位到很多類似Mind+的新版本“雨后春筍”般的出現(xiàn)可以看出,國產圖形化編程軟件正在經歷著一個“百家爭鳴”“兼容并蓄”的階段,這樣的嘗試對教師和學生來講,都是積極的良性的探索。我們擁有著一副“好牌”,當然,好牌也存在打爛的情況,所以教師必須堅定地走好每一步,讀懂創(chuàng)作者的心意,深挖“圖代”結合,用好“圖代”結合,讓學生小學時期所學習的編程知識有更多的用武之地。讓初中生能夠在計算思維和創(chuàng)造精神方面有更多的探索機會。
參考文獻:
[1]趣味編程指南(8-1)-自定義函數(shù)與分形遞歸-DF創(chuàng)客社區(qū)-分享創(chuàng)造的喜悅[J/OL] (2017-8-18).https://mc.dfrobot.com.cn/thread-24203-1-1.html.
[2]Python代碼模式- Mind+教程[J/OL](https://mindplus.dfrobot.com.cn/Python-code.2021-5-15).
[3]劉汝佳.算法競賽入門經典(第2版)[M]北京:清華大學出版社 2015,6.
[4]董永建.信息學奧賽一本通[M]北京:科學技術文獻出版社,2017,10.