譚立興,姜 楓
(南京理工大學(xué)泰州科技學(xué)院計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 泰州 225300)
隨著人工智能技術(shù)的飛速發(fā)展,社會(huì)對(duì)計(jì)算機(jī)專業(yè)技能人才的要求也不斷提升,不僅要求學(xué)生具備傳統(tǒng)扎實(shí)的理論研究功底,而且對(duì)學(xué)生實(shí)踐動(dòng)手能力的要求也逐年提升?!癈程序設(shè)計(jì)”是計(jì)算機(jī)科學(xué)與技術(shù)相關(guān)專業(yè)的一門通識(shí)基礎(chǔ)課,旨在培養(yǎng)學(xué)生的邏輯思維能力、創(chuàng)新能力和解決實(shí)際問題的能力,為后續(xù)專業(yè)課程的學(xué)習(xí)奠定良好的基礎(chǔ)[1]。最新TIOBE的權(quán)威統(tǒng)計(jì)報(bào)告顯示,C語言長(zhǎng)期位居編程語言排行榜前三甲,如圖1所示。
圖1 TIOBE編程語言排行榜
由此可見,C語言的重要性不言而喻。為了深度契合社會(huì)信息產(chǎn)業(yè)的發(fā)展需求,很多應(yīng)用型高校都相應(yīng)以科技競(jìng)賽為抓手推動(dòng)人才培養(yǎng)機(jī)制改革,制定并完善了與之對(duì)應(yīng)的相關(guān)制度。開展計(jì)算機(jī)學(xué)科競(jìng)賽,不僅是對(duì)學(xué)生所學(xué)專業(yè)知識(shí)和編程能力的有效檢查,更是全面考察學(xué)生利用計(jì)算機(jī)分析和解決相關(guān)實(shí)際問題的能力。
本文以“C程序設(shè)計(jì)”課程為教學(xué)改革研究對(duì)象,以直面編程競(jìng)賽為目標(biāo),教學(xué)過程以案例式教學(xué)為主體,充分融入競(jìng)賽知識(shí)點(diǎn)和傳統(tǒng)理論教學(xué)內(nèi)容,以期實(shí)現(xiàn)“以賽促教,以賽促學(xué)和以賽促改”的總體思路。主要從以下幾方面遞進(jìn)式地介紹基于競(jìng)賽模式的“C程序設(shè)計(jì)”教學(xué)改革:首先介紹傳統(tǒng)的理論教學(xué)模式的不足之處;然后介紹基于案例式的教學(xué)模式;最后融合競(jìng)賽常見知識(shí)點(diǎn)和傳統(tǒng)理論教學(xué)的內(nèi)容,介紹了面向競(jìng)賽的案例式教學(xué)模式,亦簡(jiǎn)稱為“競(jìng)賽模式”。
傳統(tǒng)的理論教學(xué)模式是一種以教師、教材和課堂為中心,周期性觀測(cè)學(xué)生學(xué)習(xí)活動(dòng)的教學(xué)模式。教師可以結(jié)合教材內(nèi)容和教學(xué)培養(yǎng)目標(biāo),對(duì)教學(xué)內(nèi)容以及各類資源加以分類和整合,結(jié)合學(xué)生學(xué)習(xí)需求、教學(xué)進(jìn)度和教學(xué)計(jì)劃形成一整套培養(yǎng)體系。教師還可以圍繞因材施教的教學(xué)理念,對(duì)學(xué)生個(gè)性需求實(shí)現(xiàn)分層教學(xué)設(shè)計(jì),為不同的學(xué)生推薦相應(yīng)的學(xué)習(xí)內(nèi)容,將C語言基礎(chǔ)知識(shí)與學(xué)生內(nèi)在的需求相結(jié)合,實(shí)現(xiàn)資源靈活分配以及有效運(yùn)用,學(xué)生也可以根據(jù)教師講題的思路和解決步驟,形成思維框架。
該模式往往會(huì)形成教師單向灌輸、學(xué)生被動(dòng)接受知識(shí)的局面。雖然所授課程的理論知識(shí)全面具體,但由于課時(shí)限制、教學(xué)手段單一、實(shí)踐教學(xué)環(huán)節(jié)松軟等因素,通常會(huì)導(dǎo)致所學(xué)理論知識(shí)與編程實(shí)踐相脫節(jié),從而使學(xué)生學(xué)習(xí)興趣大幅度下降,最后僅僅為了通過期末考試而被動(dòng)學(xué)習(xí)。不難看出這種傳統(tǒng)教學(xué)模式的缺陷是非常明顯的,問題的關(guān)鍵在于作為認(rèn)知主體的學(xué)生學(xué)習(xí)的主動(dòng)性長(zhǎng)期被忽視。換句話說,由于學(xué)生在整個(gè)學(xué)習(xí)過程中都始終處于被動(dòng)接受知識(shí)的地位,導(dǎo)致其在學(xué)習(xí)過程中無法反饋學(xué)習(xí)體驗(yàn),從而使之長(zhǎng)期處于壓抑狀態(tài)。很明顯,這種教學(xué)模式與新時(shí)代對(duì)計(jì)算機(jī)專業(yè)人才培養(yǎng)的要求是不相符的,其承擔(dān)不了培養(yǎng)當(dāng)今社會(huì)急需的高素質(zhì)創(chuàng)新性人才的重?fù)?dān)。因此,改變傳統(tǒng)教學(xué)模式,打造適應(yīng)新時(shí)代的“C程序設(shè)計(jì)”教學(xué)模式勢(shì)在必行。
案例式教學(xué)(case-based teaching)實(shí)際上是傳統(tǒng)講座和基于問題學(xué)習(xí)的經(jīng)典組合[2]。在此教學(xué)過程中,教師依據(jù)課程教學(xué)目標(biāo),按照教學(xué)內(nèi)容設(shè)置多個(gè)教學(xué)案例,并通過講解一個(gè)個(gè)的教學(xué)案例,讓學(xué)生在具體的案例中參與問題的分析、討論和交流等活動(dòng)[3]。該模式起源于1921年,最初由美國(guó)哈佛商學(xué)院所倡導(dǎo),強(qiáng)調(diào)以學(xué)生為中心,采用了一系列來自于商業(yè)管理真實(shí)情境中所特有的案例來實(shí)施教學(xué)。目前該模式已被廣泛應(yīng)用于各學(xué)科領(lǐng)域的教學(xué)過程中,幫助提高學(xué)生的學(xué)習(xí)興趣,從而有助于學(xué)生主動(dòng)積極地參與課堂討論。
案例教學(xué)既是學(xué)生綜合運(yùn)用所學(xué)知識(shí)、激發(fā)和強(qiáng)化思維的過程,同時(shí)也是學(xué)習(xí)新知識(shí)、不斷提高自身分析問題和解決問題能力的過程[4]。實(shí)施案例式教學(xué)法大致分為以下幾個(gè)步驟:①授課教師課前做好準(zhǔn)備工作,包括吃透教材相關(guān)知識(shí)點(diǎn)、確定案例所需強(qiáng)調(diào)的主題并設(shè)計(jì)好案例即將展示的方式,以便上課時(shí)能夠準(zhǔn)確詳盡地將知識(shí)傳授給學(xué)生。②教師亦需根據(jù)教材內(nèi)容和相關(guān)案例,設(shè)置一些能充分體現(xiàn)教學(xué)重難點(diǎn)的問題,從而讓學(xué)生帶著問題去探索與之對(duì)應(yīng)的理論知識(shí),并且嘗試編程實(shí)現(xiàn)這些問題;或者設(shè)計(jì)一些生動(dòng)形象的教學(xué)情境,使學(xué)生能夠在這些情境中去不斷發(fā)現(xiàn)問題、分析問題并尋求解決問題的方法。③所設(shè)置的問題需符合學(xué)生當(dāng)前的認(rèn)知水平和思維能力。設(shè)置問題應(yīng)由淺入深,由易到難,由課內(nèi)拓展到課外,由案例到教材內(nèi)容,難度適中且有針對(duì)性,能做到寓理于問題和情境之中。
案例式和競(jìng)賽式方法已在實(shí)際教學(xué)中得到廣泛應(yīng)用且兩者的融合將對(duì)教學(xué)模式的持續(xù)改進(jìn)產(chǎn)生深遠(yuǎn)影響。案例式教學(xué)屬于內(nèi)部驅(qū)動(dòng),而競(jìng)賽式教學(xué)屬于外部驅(qū)動(dòng),兩者各有優(yōu)劣、相輔相成。將競(jìng)賽納入大學(xué)教育體系已在很多專業(yè)得到初步實(shí)踐,如在佐治亞理工學(xué)院,競(jìng)賽被納入機(jī)電一體化教育[5]。
接下來,將融合案例式和競(jìng)賽式方法的優(yōu)勢(shì),對(duì)“C程序設(shè)計(jì)”課程教學(xué)改革進(jìn)行了深入研究與探索。
目前,本?!癈程序設(shè)計(jì)”課程教學(xué)所有課時(shí)全部在機(jī)房進(jìn)行,采用案例式教學(xué)模式,運(yùn)用邊講邊練的手段,將課程內(nèi)容分解為數(shù)據(jù)類型、運(yùn)算符與表達(dá)式、順序程序設(shè)計(jì)、選擇結(jié)構(gòu)程序設(shè)計(jì)、數(shù)組、函數(shù)和指針等多個(gè)知識(shí)群,而每個(gè)知識(shí)群由多個(gè)實(shí)際案例構(gòu)成。
因此,需要教師在講解編程案例的同時(shí)穿插與之對(duì)應(yīng)的知識(shí)點(diǎn),以達(dá)到學(xué)以致用的目的。傳統(tǒng)案例式教學(xué)只側(cè)重于教材內(nèi)容,而忽略了與實(shí)際問題更貼切的競(jìng)賽式編碼能力。
然而,算法競(jìng)賽題目涉及領(lǐng)域非常廣,對(duì)學(xué)生要求較高且在大三會(huì)開設(shè)對(duì)應(yīng)的“算法分析與設(shè)計(jì)”課程。競(jìng)賽題目的難度可分為低難度、中等難度和高難度3個(gè)類型,主要包含窮舉、排序、搜索、遞歸、回溯、數(shù)據(jù)結(jié)構(gòu)、動(dòng)態(tài)規(guī)劃和圖相關(guān)算法等主題。為了幫助低年級(jí)學(xué)生提前打好編程競(jìng)賽基礎(chǔ),可在設(shè)計(jì)“C程序設(shè)計(jì)”課程案例時(shí)充分融入常見的中低層次的競(jìng)賽知識(shí)點(diǎn)。
以競(jìng)賽算法中最為基礎(chǔ)的窮舉法為例,其數(shù)學(xué)本質(zhì)上屬于歸納推理范疇,即通過枚舉求解問題的所有可能情況得出一般性的結(jié)論。接下來以中國(guó)古代數(shù)學(xué)家張丘建所著《算經(jīng)》中提出的“百錢百雞”問題為計(jì)算背景,充分融入“C程序設(shè)計(jì)”課程中的循環(huán)嵌套知識(shí)點(diǎn)來構(gòu)建窮舉算法教學(xué)案例。
案例提出:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
案例分析:一方面,從數(shù)學(xué)角度看,此問題可歸結(jié)為三元一次方程組的求解。假設(shè)公雞有i只,母雞有j只,小雞有k只,則方程組如下所示:
另一方面,從算法設(shè)計(jì)角度,首先明確該案例的枚舉對(duì)象分別為i,j,k這3個(gè)大于0的整型變量;其次需確定這3個(gè)枚舉變量的取值范圍,根據(jù)循環(huán)嵌套的次序(即i→j→k),由上述方程組可知0i20,03j100-5i和0k300-15i-9j;最后使用循環(huán)語句枚舉出所有可能的解。
案例求解:百錢百雞算法流程如圖2所示。
圖2 百錢百雞算法流程圖
將競(jìng)賽的常見知識(shí)點(diǎn)融入教學(xué)案例后,C語言課題組針對(duì)基于競(jìng)賽模式的課程做了一些有效的探索,主要體現(xiàn)在以下幾點(diǎn)。
3.2.1 分組教學(xué),錘煉學(xué)生的團(tuán)隊(duì)意識(shí)
將班內(nèi)學(xué)生每3名學(xué)生分成1個(gè)小組,設(shè)置組長(zhǎng)1名,每次課后布置適當(dāng)?shù)木幊淘囶}。在下次上課前隨機(jī)抽取1個(gè)小組講解代碼,另抽取1個(gè)小組設(shè)計(jì)與之對(duì)應(yīng)的測(cè)試用例。這樣既鼓勵(lì)學(xué)生在設(shè)計(jì)代碼時(shí)表現(xiàn)其獨(dú)特的創(chuàng)造力,又能通過其所設(shè)計(jì)的測(cè)試用例觀察他們考慮問題的完整性。
3.2.2 嚴(yán)控代碼規(guī)范,提高學(xué)生的抗壓能力
在給學(xué)生布置課后編程任務(wù)時(shí),需向?qū)W生強(qiáng)調(diào)嚴(yán)格的代碼規(guī)范問題,并及時(shí)下發(fā)相應(yīng)的代碼規(guī)范文檔。驗(yàn)收任務(wù)時(shí),需指出學(xué)生的每次代碼規(guī)范問題。遇到不能通過的測(cè)試用例,教師需要逐步指導(dǎo)學(xué)生DEBUG代碼。這樣嚴(yán)格要求學(xué)生一段時(shí)間后,大部分學(xué)生的代碼質(zhì)量和DEBUG能力都將大幅度提升。
3.2.3 采用在線評(píng)測(cè)系統(tǒng),使學(xué)生編碼養(yǎng)成“自給自足”的好習(xí)慣
目前,國(guó)內(nèi)很多免費(fèi)的在線評(píng)測(cè)系統(tǒng)擁有大量的競(jìng)賽訓(xùn)練試題并提供了對(duì)應(yīng)的測(cè)試用例。學(xué)生上傳自己編寫的代碼后,在線測(cè)試平臺(tái)會(huì)在結(jié)果頁碼提供詳細(xì)的評(píng)測(cè)信息,如測(cè)試用例通過率、運(yùn)行耗時(shí)、內(nèi)存消耗等。引導(dǎo)學(xué)生正確利用網(wǎng)上計(jì)算資源的同時(shí),也潛移默化地培養(yǎng)學(xué)生良好的編程習(xí)慣。
3.2.4 基于項(xiàng)目的交互式教學(xué)情境
以構(gòu)建知識(shí)群的多個(gè)案例組建案例,制定恰當(dāng)?shù)哪繕?biāo),借助多樣化的資源開展教學(xué)活動(dòng),在有限的時(shí)間內(nèi)解決一系列問題。通過多個(gè)特定的項(xiàng)目來組織學(xué)習(xí)活動(dòng),將傳統(tǒng)的以知識(shí)傳授為中心的方法轉(zhuǎn)變?yōu)榻换ナ浇鉀Q問題和實(shí)施任務(wù)方法。在此教學(xué)情境中,學(xué)生結(jié)合專業(yè)知識(shí),把握總體任務(wù),分解并規(guī)劃編程步驟,積極探索學(xué)習(xí)途徑,在教師的指導(dǎo)下完成任務(wù)。這種方法以學(xué)生為中心,以項(xiàng)目為導(dǎo)向。教師的角色從“教”轉(zhuǎn)向“導(dǎo)”,既能培養(yǎng)學(xué)生思考問題、分析問題、解決問題的能力,又將理論知識(shí)運(yùn)用到具體任務(wù)中,從而讓學(xué)生加深對(duì)所學(xué)知識(shí)的理解。
3.2.5 針對(duì)部分晦澀難懂的知識(shí)點(diǎn),采用翻轉(zhuǎn)課堂模式
教師講解部分較難理解的案例后,如果發(fā)現(xiàn)大部分學(xué)生對(duì)此案例對(duì)應(yīng)知識(shí)點(diǎn)掌握不夠好,可根據(jù)課時(shí)情況適度采用翻轉(zhuǎn)課堂模式。主要目的是讓學(xué)生展現(xiàn)他們對(duì)所講知識(shí)點(diǎn)的掌握程度,以便教師制定針對(duì)性解決方案。如在學(xué)生講解對(duì)知識(shí)點(diǎn)的理解時(shí),如果教師發(fā)現(xiàn)錯(cuò)誤可適時(shí)提出修改建議。
近3年的“計(jì)算機(jī)科學(xué)與技術(shù)”專業(yè)課程滿意度調(diào)查問卷顯示,學(xué)生對(duì)“C程序設(shè)計(jì)”課程的滿意度逐年提升,學(xué)生參加競(jìng)賽的主動(dòng)性逐漸加強(qiáng)且取得的競(jìng)賽成績(jī)也越來越好。接下來以藍(lán)橋杯大賽C/C++小組成績(jī)?yōu)槔?,?jiǎn)要敘述課程改革后的初步成果。
藍(lán)橋杯大賽C/C++小組獲獎(jiǎng)人數(shù)對(duì)比如圖3所示。由圖3可知,自2018年全面實(shí)施面向競(jìng)賽的教學(xué)改革開始,藍(lán)橋杯大賽C/C++小組的省賽和國(guó)賽獲獎(jiǎng)人數(shù)逐年提升,近3年獲獎(jiǎng)人數(shù)累積達(dá)98人次,2019年被評(píng)為江蘇賽區(qū)優(yōu)勝學(xué)校。
圖3 藍(lán)橋杯大賽C/C++小組獲獎(jiǎng)人數(shù)對(duì)比圖
該模式的優(yōu)勢(shì)主要體現(xiàn)在以下3方面:①團(tuán)隊(duì)協(xié)作方面,競(jìng)賽模式的教學(xué)采用3人結(jié)對(duì)的形式分組學(xué)習(xí),團(tuán)隊(duì)成員之間可以相互監(jiān)督、相互學(xué)習(xí)乃至共同成長(zhǎng)。這種協(xié)調(diào)合作形式不僅增強(qiáng)了小組成員之間的合作意識(shí),也進(jìn)一步增強(qiáng)了學(xué)生主動(dòng)學(xué)習(xí)的渴望。②梯度教學(xué)方面,引入在線評(píng)測(cè)系統(tǒng)作為輔助學(xué)習(xí)平臺(tái),便于不同水平和不同階段的學(xué)生根據(jù)自己的實(shí)際編程能力選擇恰當(dāng)?shù)挠?xùn)練難度,亦便于學(xué)生循序漸進(jìn)地學(xué)習(xí)。由于不同學(xué)生的基礎(chǔ)不盡相同,提供多種難易程度不同的訓(xùn)練試題有利于梯度教學(xué)的持續(xù)推進(jìn)。③激發(fā)學(xué)生學(xué)習(xí)興趣方面,學(xué)生作為競(jìng)賽教學(xué)模式的認(rèn)知主體,其作用顯而易見。競(jìng)賽模式既完整保留了傳統(tǒng)理論教學(xué)的知識(shí)體系,又將與實(shí)際應(yīng)用中更貼切的競(jìng)賽知識(shí)點(diǎn)融入到教學(xué)案例中。學(xué)生在學(xué)習(xí)的過程中,潛移默化地訓(xùn)練了其解決實(shí)際問題的能力。隨著教學(xué)進(jìn)度的推進(jìn),學(xué)生會(huì)因?yàn)樽约耗軌驅(qū)W(xué)到的知識(shí)學(xué)以致用而逐漸增強(qiáng)學(xué)習(xí)編程的信心。
編程競(jìng)賽能有效提高參賽學(xué)生的編程能力、抗壓能力和團(tuán)隊(duì)意識(shí),而案例式教學(xué)是一種開放互動(dòng)式、基于問題和情境的教學(xué)模式,被廣泛應(yīng)用在各領(lǐng)域的教學(xué)場(chǎng)景中。本文探索了融合兩者優(yōu)勢(shì)的基于競(jìng)賽模式的“C程序設(shè)計(jì)”課程教學(xué),有效提高了課內(nèi)學(xué)生的學(xué)習(xí)體驗(yàn),使之在潛移默化中提升了學(xué)生的計(jì)算思維和編程實(shí)踐能力。未來,C語言課題組將持續(xù)推進(jìn)基于競(jìng)賽模式的課程改革,不斷分析總結(jié),為進(jìn)一步優(yōu)化課程內(nèi)涵做好積極充足的準(zhǔn)備,從而為學(xué)校培養(yǎng)更多優(yōu)秀的C程序設(shè)計(jì)人才奠定堅(jiān)實(shí)的基礎(chǔ)。