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