李霞

摘 要:教育部高教司已高度重視與支持,通過大學(xué)計算機基礎(chǔ)教學(xué),增強計算思維能力的培養(yǎng)。文章介紹了面向大一新生,用App Inventor進(jìn)行遞歸算法的教學(xué)。教學(xué)過程中引導(dǎo)學(xué)生積極思考、培養(yǎng)學(xué)生發(fā)現(xiàn)問題、解決問題以及程序分析與調(diào)試的能力,從而達(dá)到逐步培養(yǎng)學(xué)生計算思維能力的目的。
關(guān)鍵詞:計算思維;App Inventor;遞歸算法;大學(xué)計算機基礎(chǔ)
中圖分類號:G642 文獻(xiàn)標(biāo)志碼:A 文章編號:2096-000X(2017)01-0077-02
Abstract: The Higher Education Department in the Ministry of Education has attached great importance to and provided support for the cultivation of computational thinking ability, through the teaching of basic computer courses in universities. This paper introduces the teaching of recursive algorithm to freshmen with App Inventor. In the teaching process, we should guide students to think actively and cultivate students' ability on discovering and solving problems as well as analyzing and debugging programs, in order to achieve the goal of gradually developing students' computational thinking ability.
Keywords: computational thinking; App Inventor; recursive algorithm; basic computer courses in universities
引言
我國九校聯(lián)盟(C9)在2010年聯(lián)合發(fā)表了關(guān)于以計算思維改造大學(xué)計算機課程的聯(lián)合聲明,其核心要點就是強調(diào)“需要把培養(yǎng)學(xué)生的‘計算思維能力作為計算機基礎(chǔ)教學(xué)的核心任務(wù)”[1]。培養(yǎng)學(xué)生的計算思維能力已經(jīng)成為各高校各專業(yè)學(xué)生能力培養(yǎng)的重要組成部分。
目前,增強大學(xué)計算思維培養(yǎng)主要體現(xiàn)在“大學(xué)計算機基礎(chǔ)”和“程序設(shè)計”相關(guān)課程上,有眾多院校進(jìn)行了探索和實踐,并且也取得了一定的進(jìn)展[2,3]。根據(jù)我校實際情況,向全校開設(shè)了面向計算思維培養(yǎng)的App Inventor移動應(yīng)用開發(fā)的公選課程。遞歸算法在其他程序設(shè)計教學(xué)中一直是難點,但同時遞歸算法的教學(xué)是培養(yǎng)學(xué)生計算思維、分析問題、解決問題以及程序調(diào)試能力的好契機[4]。
一、App Inventor 簡介
App Inventor是由Google委托麻省理工學(xué)院(MIT)研制的一款在線快速開發(fā)移動應(yīng)用的工具,并把App Inventor定義為一種培養(yǎng)學(xué)習(xí)者計算思維能力的工具。學(xué)習(xí)者通過可視化語言來學(xué)習(xí)編程、學(xué)習(xí)設(shè)計問題解決方案以及培養(yǎng)自己的創(chuàng)造性思維。
App Inventor在移動應(yīng)用開發(fā)方面具有如下特點。
(一)開發(fā)環(huán)境簡單
App Inventor開發(fā)環(huán)境采用瀏覽器+云服務(wù)模式,所以不需要在本地安裝配置復(fù)雜的軟件,只需通過瀏覽器訪問AI服務(wù)器,就可以完成開發(fā)和App打包下載工作。目前國內(nèi)唯一的官方服務(wù)器是廣州教育信息中心的服務(wù)器。源代碼都是保存在服務(wù)器上,保證了代碼的一致性和安全性,所以開發(fā)者可以在任何一臺聯(lián)網(wǎng)機器上進(jìn)行開發(fā)[5]。
(二)簡單、直觀、可擴展
App Inventor采用模塊化、圖形化的編程方式,不需要掌握編程語言和復(fù)雜的語法規(guī)則,就可以開發(fā)出Android手機應(yīng)用。App Inventor以手機作為載體 可以利用手機的傳感器、藍(lán)牙等功能,能方便地與外部設(shè)備實現(xiàn)鏈接,從而可以實現(xiàn)將實際問題解決與算法思想形成連結(jié)[6]。
(三)容易激發(fā)學(xué)生學(xué)習(xí)興趣
根據(jù)手機內(nèi)置的加速度傳感器、方向傳感器、GPS傳感器以及攝像頭、麥克風(fēng)等學(xué)生可以發(fā)揮自己的想象、開發(fā)出具有特色的移動終端應(yīng)用,學(xué)生可以實現(xiàn)自己的應(yīng)用設(shè)想,從中獲得成就感,從而進(jìn)一步激發(fā)學(xué)生的學(xué)習(xí)動力和興趣。
(四)調(diào)試程序方便
可以通過真機或者模擬器進(jìn)行調(diào)試程序。具有單獨運行指定模塊或者禁用某些模塊,可以使開發(fā)者更具體地了解某些模塊的作用,從而及時做出調(diào)整。
二、App Inventor中遞歸算法的教學(xué)過程
(一)遞歸算法
在App Inventor移動應(yīng)用實際開發(fā)過程中,會運用到模塊之間直接或間接的調(diào)用,這種稱為遞歸調(diào)用。遞歸算法在C/C++等程序設(shè)計語言教學(xué)過程中,是教學(xué)的難點[7]。學(xué)生存在遞歸難先入為主的情緒,而且還要掌握復(fù)雜的語法規(guī)則,而且調(diào)試過程中程序的跳轉(zhuǎn)讓學(xué)生暈頭轉(zhuǎn)向,從而教學(xué)效果不理想,也不能很好地達(dá)到培養(yǎng)學(xué)生計算思維的目標(biāo)。而在App Inventor中,學(xué)生避免了掌握復(fù)雜的語法規(guī)則的學(xué)習(xí)過程,可以重點在透徹的理解算法、通過程序模塊設(shè)計出程序,通過圖形化的手機界面把程序的執(zhí)行流程和結(jié)果更直觀的展示出來。
(二)階乘遞歸算法的實現(xiàn)與調(diào)試
在App Inventor中實現(xiàn)求階乘的遞歸算法,首先要搭建一個應(yīng)用界面:由2個標(biāo)簽,2個輸入框以及1個按鈕構(gòu)成。該程序中通過觸發(fā)按鈕的點擊事件,調(diào)用一個帶參數(shù)的過程,來實現(xiàn)階乘的求解。定義全局變量result來存放階乘結(jié)果,通過邏輯模塊判斷參數(shù)值如果為1,則result值為1,否則result的值為遞歸調(diào)用n-1的階乘乘以n。根據(jù)學(xué)生已有的學(xué)習(xí)基礎(chǔ)以及遞歸流程圖的分析,絕大多數(shù)學(xué)生能夠正確實現(xiàn)程序。
程序雖然實現(xiàn)了,但從運行結(jié)果看,并沒有體現(xiàn)出遞歸的執(zhí)行流程,給人的感覺就是直接得出結(jié)果。這時候需要啟發(fā)學(xué)生思考,如何將程序的求解過程在程序中展示出來,同時訓(xùn)練學(xué)生的文字表達(dá)和邏輯歸納總結(jié)能力,使學(xué)生學(xué)會分析問題、解決問題,進(jìn)一步加深遞歸的理解[10,11]。
引導(dǎo)學(xué)生通過添加全局變量來表示遞歸調(diào)用的次序,然后分別輸出相應(yīng)次序產(chǎn)生的結(jié)果,以此驗證程序的執(zhí)行流程。這種對程序稍作修改增加輸出語句的調(diào)試方式在許多商業(yè)軟件的開發(fā)過程中也會經(jīng)常使用到,可以增強學(xué)生排錯以及調(diào)試程序的能力。在上述程序?qū)崿F(xiàn)的基礎(chǔ)上,增加1個標(biāo)簽來顯示執(zhí)行過程,編寫求解過程模塊,展示調(diào)用次序。通過展示完成的求解結(jié)果,學(xué)生就可以很好的將遞歸流程圖和計算過程結(jié)合起來,達(dá)到充分理解遞歸的教學(xué)效果。
(三)阿克曼函數(shù)的遞歸實現(xiàn)
通過實現(xiàn)經(jīng)典的阿克曼函數(shù)的遞歸求解,提升難度,加深遞歸的理解。學(xué)生在理解了遞歸求階乘的基礎(chǔ)上,再實現(xiàn)阿克曼函數(shù)難度要降低,但是阿克曼函數(shù)是遞歸調(diào)用過程中又嵌套了遞歸的調(diào)用。這時引導(dǎo)學(xué)生首先分析遞歸的結(jié)束條件,從公式中可以發(fā)現(xiàn),遞歸結(jié)束條件為m值為0,然后鼓勵學(xué)生嘗試模仿畫出A(2,2)的遞歸流程圖,最后再實現(xiàn)邏輯代碼。阿克曼函數(shù)公式如下所示。
A(m,n)n+1 若m=0A(m-1,i) 若m>0,且n=0A(m-1,A(m,n-1)) 若m>0且n>0
在該例的真機測試過程中,學(xué)生發(fā)現(xiàn)輸入某些數(shù)據(jù)時,絕大多數(shù)運行會較慢,甚至死機。教師啟發(fā)學(xué)生結(jié)合已有的數(shù)學(xué)知識去發(fā)現(xiàn),當(dāng)m值大于等于4時阿克曼函數(shù)的增長快得驚人。在該例中很好的將編程與數(shù)學(xué)知識相結(jié)合,并培養(yǎng)了學(xué)生分析問題的能力[12]。
三、結(jié)束語
文章通過“積木式拼接”的App Inventor移動應(yīng)用開發(fā)工具,講解了遞歸程序的實現(xiàn)以及如何進(jìn)行程序的分析與調(diào)試,克服了學(xué)生遞歸難的畏難情緒,加深了遞歸的理解,培養(yǎng)了學(xué)生分析問題、解決問題的能力,在培養(yǎng)了學(xué)生計算思維的基礎(chǔ)上,也為后續(xù)進(jìn)一步學(xué)習(xí)編程語言打下了良好的基礎(chǔ)。
參考文獻(xiàn)
[1]何欽銘,陸漢權(quán),馮博琴.計算機基礎(chǔ)教學(xué)的核心任務(wù)是計算思維能力的培養(yǎng)[J].中國大學(xué)教學(xué),2010(9):5-9.
[2]陸漢權(quán),何欽銘,徐鏡春.基于計算思維的“大學(xué)計算機基礎(chǔ)”課程教學(xué)內(nèi)容設(shè)計[J].中國大學(xué)教學(xué),2012(9):55-58.
[3]李文生,吳舜歆.面向計算思維能力培養(yǎng)的程序設(shè)計課程[J].計算機教育,2014(3):57-60.
[4]羅銘.基于計算思維的軟件類研究生高級算法課程教學(xué)研究[J].計算機教育,2016(7):92-95.
[5]吳明暉.面向計算思維的App Inventor課程建設(shè)與實踐[J].杭州電子科技大學(xué)學(xué)報,2015(2):93-97.
[6]郭守超,周睿,鄧常梅,等.基于App Inventor和計算思維的信息技術(shù)課堂教學(xué)研究[J].中國電化育,2014(3):91-96.
[7]申云成,趙莉,顧慶傳.基于C語言的遞歸算法分析[J].福建電腦,2015(6):133-134.
[8]譚浩強.C程序設(shè)計教程[M].北京:清華大學(xué)出版社,2010:187-188.
[9]唐大仕.“遞歸算法”微課教學(xué)設(shè)計——以“文科計算機基礎(chǔ)(下)”為例[J].計算機教育,2013(17):5-10.
[10]高思、趙博.C語言中遞歸算法的實現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2015(7):140.
[11]丁海燕.計算機程序設(shè)計課程中計算思維的培養(yǎng)[J].實驗技術(shù)與管理,2015(12):16-18.
[12]趙龍德. 大學(xué)計算機課程中計算思維培養(yǎng)的層次和原則[J].計算機教育,2015(10):9-12.