朱紅 柯璟
摘 要:《C++程序設(shè)計(jì)》是培養(yǎng)學(xué)生編程能力、計(jì)算思維能力的重要課程,具有知識(shí)點(diǎn)豐富、實(shí)踐性強(qiáng)、課時(shí)有限等特點(diǎn)。文章針對(duì)目前大學(xué)教學(xué)的實(shí)際情況,提出了翻轉(zhuǎn)課堂與課堂教學(xué)相結(jié)合的教學(xué)模式,提升了教學(xué)質(zhì)量和教學(xué)效果;同時(shí)結(jié)合已有的校園網(wǎng)平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了動(dòng)畫(huà)演示的C++算法資源庫(kù),提高了學(xué)生的學(xué)習(xí)興趣,降低了學(xué)習(xí)難度。
關(guān)鍵詞:翻轉(zhuǎn)課堂;微視頻;資源庫(kù)
中圖分類號(hào):G434 文獻(xiàn)標(biāo)志碼:B 文章編號(hào):1673-8454(2018)18-0050-03
一、C++教學(xué)應(yīng)適應(yīng)現(xiàn)代社會(huì)的發(fā)展
計(jì)算機(jī)程序設(shè)計(jì)類課程是理工類各個(gè)專業(yè)的必修課程?!禖++程序設(shè)計(jì)》是大部分專業(yè)選擇的課程,因?yàn)镃++算法語(yǔ)言廣泛用于編寫(xiě)各類操作系統(tǒng)、微處理器控制系統(tǒng),同時(shí)在圖形處理、神經(jīng)網(wǎng)絡(luò)計(jì)算等各類算法編程方面具有廣泛的應(yīng)用。
在《C++程序設(shè)計(jì)》的教學(xué)中,由于知識(shí)點(diǎn)眾多,尤其是指針和面向?qū)ο蟛糠指拍畛橄?,所以這門(mén)課程一直存在課時(shí)量少、課容量大、教師講課速度過(guò)快等問(wèn)題;而學(xué)生普遍反映課程內(nèi)容枯燥,隨堂掌握知識(shí)程度低,語(yǔ)法難懂,算法難以理解。隨著“互聯(lián)網(wǎng)+”時(shí)代的到來(lái),需要教師改變傳統(tǒng)的教育教學(xué)理念,利用先進(jìn)的教學(xué)理念和教學(xué)設(shè)備進(jìn)行教學(xué)方法和模式的改革,提高學(xué)生學(xué)習(xí)的興趣,降低學(xué)習(xí)的難度[1]。
二、翻轉(zhuǎn)課堂應(yīng)與課堂教學(xué)相結(jié)合
翻轉(zhuǎn)課堂(Flipped Classroom)是近年來(lái)全球教育界普遍關(guān)注的熱點(diǎn)之一[2]。這種新型的教學(xué)模式,將傳統(tǒng)教學(xué)模式“課堂上教師主要傳授知識(shí),課后學(xué)生溫習(xí)知識(shí),進(jìn)行強(qiáng)化練習(xí)與反饋”翻轉(zhuǎn)為“課外學(xué)生自主學(xué)習(xí)教學(xué)、微視頻等學(xué)習(xí)資源,完成知識(shí)建構(gòu),課堂上學(xué)生在教師面對(duì)面的指導(dǎo)下做練習(xí)或者以小組合作等形式完成對(duì)知識(shí)技能的掌握,進(jìn)行知識(shí)內(nèi)化”[3]。翻轉(zhuǎn)課堂將教師為中心的傳統(tǒng)教學(xué)模式轉(zhuǎn)換成以學(xué)生為中心的新的教學(xué)模式,充分調(diào)動(dòng)了學(xué)生的主觀能動(dòng)性,在教學(xué)活動(dòng)中具有不可替代的積極作用。
隨著教學(xué)改革的深入,減少課堂教學(xué),重視應(yīng)用實(shí)踐,注重學(xué)生能力的培養(yǎng)已經(jīng)是教改的大趨勢(shì),翻轉(zhuǎn)課堂的出現(xiàn)為教學(xué)改革提供了一個(gè)很好的途徑。在翻轉(zhuǎn)課堂上所涉及的內(nèi)容大多是概念性的或演示性的,而大量涉及復(fù)雜算法、邏輯思維等的概念和程序還需要在課堂上進(jìn)行講解。
微視頻是翻轉(zhuǎn)課堂一種重要的學(xué)習(xí)資源,微視頻資源的質(zhì)量影響著學(xué)生的學(xué)習(xí)興趣與學(xué)習(xí)效果,決定著翻轉(zhuǎn)課堂的教學(xué)效果[4]。焦建利教授[5]認(rèn)為,教學(xué)中的微視頻以闡釋某一知識(shí)點(diǎn)為目標(biāo),以短小精悍的在線視頻為表現(xiàn)形式,以學(xué)習(xí)或教學(xué)應(yīng)用為目的。因此,我們?cè)凇禖++程序設(shè)計(jì)》課程的微視頻制作中,以知識(shí)性、趣味性為目標(biāo),對(duì)課程的知識(shí)點(diǎn)按章節(jié)進(jìn)行分類,基本上每個(gè)微視頻都在10分鐘之內(nèi),講解1-2個(gè)相關(guān)的知識(shí)點(diǎn)和附帶的語(yǔ)法格式、數(shù)據(jù)存儲(chǔ)形式等,而具體的程序運(yùn)行過(guò)程則在課堂上講解。
以“函數(shù)”這章為例,微視頻主要介紹函數(shù)的概念和類型及各種類型函數(shù)的語(yǔ)法形式,用時(shí)8分鐘,表1列舉了前4個(gè)分鏡頭的處理腳本。
通過(guò)觀看微視頻,學(xué)生已經(jīng)了解了函數(shù)的概念、函數(shù)的類型、函數(shù)的調(diào)用格式和定義格式,并對(duì)與函數(shù)定義相關(guān)的名詞術(shù)語(yǔ):如“函數(shù)類型”“實(shí)際參數(shù)”“形式參數(shù)”等都有直觀的認(rèn)識(shí)。這樣,在課堂教學(xué)中,教師先用3分鐘時(shí)間把微視頻的內(nèi)容概括總結(jié)一下,然后就可以直接開(kāi)始講解無(wú)參函數(shù)、有參函數(shù)程序的運(yùn)行過(guò)程等內(nèi)容。為了更好地展示程序的運(yùn)行過(guò)程,提高學(xué)生的學(xué)習(xí)興趣,我們將課件全部采用交互式的Flash動(dòng)畫(huà)方法制作,講解程序時(shí)運(yùn)行一條語(yǔ)句,就展示相應(yīng)的存儲(chǔ)器中變量或數(shù)據(jù)的變化過(guò)程,清晰直觀效果很好。表2是在函數(shù)的課堂教學(xué)設(shè)計(jì)中的教學(xué)內(nèi)容部分。
通過(guò)觀看微視頻和一節(jié)課的課堂教學(xué),使學(xué)生對(duì)函數(shù)的知識(shí)從概念到種類,從分析程序到編寫(xiě)程序,都有一個(gè)完整的認(rèn)識(shí),形成了一個(gè)完善的認(rèn)知過(guò)程。
三、利用網(wǎng)絡(luò)教學(xué)環(huán)境建立C++算法資源庫(kù)
課程的資源建設(shè)是一個(gè)長(zhǎng)期積累的過(guò)程,在《C++程序設(shè)計(jì)》的教學(xué)改革實(shí)踐中,我們依托校園網(wǎng)的平臺(tái),建立了包括Flash動(dòng)畫(huà)課件、微視頻、算法資源庫(kù)、課程作業(yè)等各種資源,具有在網(wǎng)上提交上機(jī)作業(yè)、答疑討論等功能。
1.建立算法資源庫(kù)的必要性
任何課程的教學(xué)活動(dòng)都是為了提高學(xué)生分析問(wèn)題、解決問(wèn)題的能力,強(qiáng)化學(xué)生的實(shí)踐動(dòng)手能力,因此在具體的C++算法語(yǔ)言的教學(xué)實(shí)踐中,應(yīng)采用強(qiáng)化算法、弱化語(yǔ)法的原則,以算法教學(xué)為主,通過(guò)對(duì)典型算法的分析講解,培養(yǎng)學(xué)生的計(jì)算思維能力和規(guī)范的編程習(xí)慣[6]。但是,用程序設(shè)計(jì)語(yǔ)言編寫(xiě)的算法與數(shù)學(xué)、物理中的解決問(wèn)題的方法還是有很大差別的,需要對(duì)計(jì)算機(jī)的運(yùn)行、存儲(chǔ)機(jī)制有全面的了解,熟悉基本數(shù)據(jù)類型、自定義數(shù)據(jù)類型在計(jì)算機(jī)中是如何存儲(chǔ)、賦值的,熟悉地址、數(shù)據(jù)在內(nèi)存和CPU中的作用等,而所有這些又都是在計(jì)算機(jī)內(nèi)部進(jìn)行的活動(dòng),學(xué)生是無(wú)法看見(jiàn)的,因此算法的講解和解釋具體程序的運(yùn)行過(guò)程一直是程序設(shè)計(jì)類語(yǔ)言教學(xué)中的難點(diǎn)。
針對(duì)教學(xué)活動(dòng)中出現(xiàn)的大量的有關(guān)算法的問(wèn)題,我們歸納總結(jié)了C++程序設(shè)計(jì)中應(yīng)該掌握的各類算法,建立了一個(gè)由Flash動(dòng)畫(huà)制作的算法資源庫(kù)。對(duì)每一類算法,用動(dòng)畫(huà)詳細(xì)演示了算法實(shí)現(xiàn)的過(guò)程、步驟,對(duì)實(shí)現(xiàn)算法的程序也給出了詳細(xì)的講解。每種算法獨(dú)立成章,既可以在課堂上進(jìn)行講解,又可以供學(xué)生在課前課后反復(fù)觀看。由于動(dòng)畫(huà)生動(dòng)形象,又與程序同步,詳細(xì)地描述了程序在計(jì)算機(jī)及存儲(chǔ)器中運(yùn)行的過(guò)程,因此對(duì)學(xué)生而言,有較深刻的印象,達(dá)到了很好的效果。
2.篩選典型算法
制作算法資源庫(kù)的第一步要由易而難地篩選出一些典型算法。在這里,算法是指廣義的計(jì)算方法,即用編程語(yǔ)言解決各類問(wèn)題的方法。算法庫(kù)中的算法主要有以下兩類:
(1)常規(guī)的經(jīng)典算法。比如交換兩個(gè)數(shù)據(jù),最小公約數(shù)和最大公倍數(shù),起泡法排序,牛頓法、弦截法、二分法解方程,鏈表的建立、輸出、刪除、插入等。
(2)很多在教學(xué)過(guò)程中總結(jié)出來(lái)的經(jīng)驗(yàn)和規(guī)律。例如循環(huán)就有兩種形式,一種是“窮舉法”,或稱為“海選法”,就是將所有可能的選擇列出,繼而用各種條件篩選,找出符合篩選條件的結(jié)果,例如水仙花數(shù)、雞兔同籠、計(jì)算三個(gè)數(shù)的公約數(shù)和公倍數(shù)等都是利用這種方法;另一種是“遞推法”,就是用前一個(gè)數(shù)去遞推后一個(gè)數(shù),大部分循環(huán)問(wèn)題都是利用這種方法求解,例如計(jì)算某個(gè)數(shù)的階乘、求級(jí)數(shù)等問(wèn)題。再例如字符串的操作,從母串中查找子串,進(jìn)而可以統(tǒng)計(jì)子串?dāng)?shù)量、刪除子串、用另一子串替換子串等,其算法也是根據(jù)大量的經(jīng)驗(yàn)和規(guī)律總結(jié)的。
這些算法基本涵蓋了《C++程序設(shè)計(jì)》的全部?jī)?nèi)容,也是對(duì)C++算法語(yǔ)言所涉及到的各種類型問(wèn)題的細(xì)化分類,有助于學(xué)生按圖索驥,模仿練習(xí),繼而總結(jié)規(guī)律,培養(yǎng)自己的算法意識(shí)和思維。
3.算法的動(dòng)畫(huà)演示
算法的動(dòng)畫(huà)演示是制作算法資源庫(kù)的重點(diǎn)和難點(diǎn)。不同的算法解決的問(wèn)題不一樣,解釋算法的側(cè)重點(diǎn)也不一樣。我們根據(jù)長(zhǎng)期的教學(xué)實(shí)踐經(jīng)驗(yàn),針對(duì)不同的算法制作了一系列特點(diǎn)鮮明的動(dòng)畫(huà),從不同的角度由淺入深詮釋算法的本質(zhì)和內(nèi)涵,以期給學(xué)生留下鮮明的印象。
在算法的動(dòng)畫(huà)制作上,根據(jù)不同的問(wèn)題,采取了以下幾種方法:
(1)比喻法
就是用淺顯的道理去解釋算法的本質(zhì)。例如,在“窮舉法”中,用尋找筆筒中的紅色鉛筆來(lái)演示海選的范圍與海選條件之間的關(guān)系,將一只只鉛筆從筆筒中彈出,紅色和黑色的鉛筆分開(kāi)存放,當(dāng)所有的鉛筆都從筆筒中彈出,才能解決這個(gè)問(wèn)題;在“遞推法”中,用一個(gè)小豬吃食物長(zhǎng)大的例子來(lái)描述前一時(shí)刻的小豬和吃了食物后的同一小豬的關(guān)系,從而推導(dǎo)出循環(huán)體:小豬+食物→小豬。通過(guò)這些生動(dòng)有趣的例子,給學(xué)生留下了深刻的印象,進(jìn)而幫助他們理解算法的本質(zhì)。
(2)解析法
有些算法是利用解析幾何的知識(shí)得到的,例如牛頓法、弦截法、二分法求解方程,梯形法、矩形法求解定積分等。雖然在編程中不用推導(dǎo)具體的算法迭代公式,但是在講解算法時(shí),還是要讓學(xué)生了解迭代公式的原理和含義,這樣才能記憶深刻、靈活應(yīng)用、舉一反三。因此,在這些算法的演示中,以動(dòng)畫(huà)的形式,讓鉛筆在屏幕上移動(dòng),畫(huà)出表示算法的幾何圖形并標(biāo)出了具體的參數(shù),經(jīng)過(guò)反復(fù)迭代后,推導(dǎo)出算法迭代公式。這樣演示生動(dòng)形象,效果直觀明了,既解釋了公式的出處,也給出了具體的迭代程序。
(3)實(shí)例法
有些算法可以開(kāi)門(mén)見(jiàn)山,直接用實(shí)際例題代入,通過(guò)對(duì)這一問(wèn)題的求解而推廣到這一類問(wèn)題的算法。例如數(shù)組的排序、篩法求素?cái)?shù)、字符串的操作等。舉例來(lái)說(shuō),字符串的操作包括求子串在母串中的位置、刪除子串、替換子串等。
(4)分析程序法
在鏈表的建立、輸出、刪除和插入的操作中,是通過(guò)分析描述程序的運(yùn)行過(guò)程來(lái)講解算法的。以鏈表的建立為例,首先將循環(huán)建立結(jié)點(diǎn)的語(yǔ)句一一列出,然后運(yùn)行一條語(yǔ)句,接著就演示運(yùn)行語(yǔ)句后程序的操作過(guò)程和結(jié)果,通過(guò)一條條語(yǔ)句的動(dòng)畫(huà)運(yùn)行和操作演示,可以清楚地看到一個(gè)一個(gè)結(jié)點(diǎn)有規(guī)律地組織在一起、形成鏈表的過(guò)程。
四、結(jié)束語(yǔ)
在《C++程序設(shè)計(jì)》的教學(xué)改革過(guò)程中,我們通過(guò)翻轉(zhuǎn)課堂與課堂教學(xué)相結(jié)合的教學(xué)模式,有效地提高了學(xué)生課堂學(xué)習(xí)的效率,加強(qiáng)了分析和編寫(xiě)程序的能力;同時(shí),結(jié)合網(wǎng)絡(luò)教學(xué)環(huán)境建立的C++算法資源庫(kù)將《C++程序設(shè)計(jì)》中的各類算法以動(dòng)畫(huà)的形式生動(dòng)形象地演示出來(lái),應(yīng)用到C++算法語(yǔ)言的教學(xué)過(guò)程中,可以有效地激發(fā)學(xué)生的學(xué)習(xí)興趣,降低學(xué)習(xí)難度,提高學(xué)習(xí)效率,對(duì)學(xué)生的學(xué)習(xí)起到很好的促進(jìn)作用。
參考文獻(xiàn):
[1]李雪飛,李晶,余琍等.面向?qū)ο蟪绦蛟O(shè)計(jì)類課程實(shí)踐教學(xué)改革[J].計(jì)算機(jī)教育,2017(7):118-121.
[2]何克抗.從“翻轉(zhuǎn)課堂”的本質(zhì),看“翻轉(zhuǎn)課堂”在我國(guó)的未來(lái)發(fā)展[J].電化教育研究,2014(7):5-16.
[3]鐘曉流,宋述強(qiáng),焦麗珍.信息化環(huán)境中基于翻轉(zhuǎn)課堂理念的教學(xué)設(shè)計(jì)研究[J].開(kāi)放教育研究,2013(1):58-64.
[4]王覓,賀斌,祝智庭.微視頻課程:演變、定位與應(yīng)用領(lǐng)域[J].中國(guó)電化教育,2013(4):88-94.
[5]焦建利.微課與翻轉(zhuǎn)課堂中的學(xué)習(xí)活動(dòng)設(shè)計(jì)[J].中國(guó)教育信息化,2014(24):4-6.
[6]陳亮. C語(yǔ)言教學(xué)如何提高實(shí)效性[J].科教導(dǎo)刊,2015(8):101-102.
(編輯:李曉萍)