盧 玲,陳 媛,曾慶森
(重慶理工大學(xué) 計算機(jī)科學(xué)與工程學(xué)院,重慶 400050)
程序設(shè)計類課程(如程序設(shè)計基礎(chǔ)、C語言程序設(shè)計、Java語言程序設(shè)計等)普遍開設(shè)于普通高校本科一年級。目前,隨著人工智能等應(yīng)用的快速發(fā)展,培養(yǎng)既有特定工程背景,又有程序設(shè)計、計算思維[1]能力的人才,已逐漸成為各應(yīng)用領(lǐng)域的普遍需要。因此,普通高校計算機(jī)類、信息類、理工科非計算機(jī)類、文科類各專業(yè)的學(xué)生都需學(xué)習(xí)程序設(shè)計類課程,接受不同程度的程序設(shè)計能力培養(yǎng),運(yùn)用程序設(shè)計思想和方法來解決實際問題[2],課程受眾十分廣泛。
程序設(shè)計課程的教學(xué)目標(biāo)取決于人才培養(yǎng)方案,各專業(yè)存在一定差異,但由于在各應(yīng)用領(lǐng)域的研究及實踐中,都普遍將程序視為一種工具,因此,如何培養(yǎng)學(xué)生在實踐環(huán)節(jié)自然地、無門檻地運(yùn)用編程語言,解決實際問題,是受到普遍關(guān)注的問題。
目前,許多學(xué)生在學(xué)習(xí)程序設(shè)計時,存在聽得懂、看得懂、會分析、會設(shè)計,卻無法自如地運(yùn)用程序設(shè)計語言[3],順利地將設(shè)計思路轉(zhuǎn)換為程序代碼的問題,難以逾越理論與實踐間的鴻溝。針對這一現(xiàn)象,教育工作者在改進(jìn)教學(xué)方法、教學(xué)內(nèi)容方面做了很多嘗試。
編碼能力是程序設(shè)計類課程需培養(yǎng)的多種能力之一,也是學(xué)生觀察、驗證其所思所想的極其重要的環(huán)節(jié)。學(xué)生編碼能力的培養(yǎng)需經(jīng)過邏輯思維鍛煉及程序設(shè)計理論的學(xué)習(xí),由于編碼具有實踐性的特點(diǎn),因此,還需通過科學(xué)的實踐,將系統(tǒng)的編程能力[4]訓(xùn)練貫穿于教學(xué)始終。在編碼時,學(xué)生需將“小明和小紅交換了座位”理解為“內(nèi)存中的兩個數(shù)據(jù)交換了存儲空間”,這是學(xué)生的計算思維借助計算機(jī)系統(tǒng)的存儲及運(yùn)行來體現(xiàn)的過程,大量的編碼實踐可以促使這種理解成為自然。可見,與人們掌握任何一種實踐技能的過程一樣,編碼能力的培養(yǎng)是一個“從量變到質(zhì)變”的過程,因此,“飽滿的代碼量”是達(dá)成程序設(shè)計類課程教學(xué)目標(biāo)的必備條件。
以重慶理工大學(xué)開設(shè)在大學(xué)一年級第一學(xué)期的FP課程為例,該課程主要依托C程序設(shè)計語言讓學(xué)生學(xué)習(xí)程序設(shè)計理論,接觸初步的算法設(shè)計及分析方法,為學(xué)習(xí)編寫高性能程序及其他計算機(jī)系統(tǒng)理論知識打下基礎(chǔ)。依據(jù)該校授課教師多年的教學(xué)經(jīng)驗、學(xué)生的能力特點(diǎn)及課程的教學(xué)目標(biāo),在FP課程教學(xué)期內(nèi),學(xué)生應(yīng)完成代碼量為人均5 000行,該校以此為核心進(jìn)行了課程的教學(xué)設(shè)計,如圖1所示。
由圖1可知,為實現(xiàn)“飽滿的代碼量”需3大因素配合,一是規(guī)劃實踐內(nèi)容,實踐內(nèi)容應(yīng)豐富、富有層次性;二是設(shè)計評價方法,評價方法應(yīng)是科學(xué)公正的、多元的;三是需一定的教學(xué)平臺支撐,使規(guī)劃的實踐內(nèi)容及設(shè)計的評價方法易于開展。

圖1 以代碼量為核心的教學(xué)設(shè)計
合理定義代碼量的“飽滿性”是準(zhǔn)確達(dá)成課程教學(xué)目標(biāo)的基礎(chǔ),其定義依據(jù)是課程教學(xué)大綱。首先根據(jù)教學(xué)大綱設(shè)定的教學(xué)內(nèi)容、教學(xué)目標(biāo),結(jié)合學(xué)生的特點(diǎn),進(jìn)行代碼總量設(shè)定;再根據(jù)課程大綱擬達(dá)成的具體能力點(diǎn)要求,結(jié)合大綱對課程重點(diǎn)、難點(diǎn)的描述,對各知識點(diǎn)進(jìn)行代碼量分項設(shè)定。重慶理工大學(xué)FP課程先將代碼總量定義為人均5 000行,再根據(jù)課程大綱的重、難點(diǎn)知識分布,對各知識點(diǎn)的代碼量估算,具體規(guī)劃如圖2所示。
課程教學(xué)以“循環(huán)結(jié)構(gòu)”為分界點(diǎn),在“循環(huán)結(jié)構(gòu)”前是語法基礎(chǔ)及3大基本結(jié)構(gòu),“循環(huán)結(jié)構(gòu)”后是復(fù)雜數(shù)據(jù)類型及程序框架。因此,“循環(huán)結(jié)構(gòu)”是課程知識點(diǎn)綜合應(yīng)用的第一階段,需進(jìn)行大量驗證性、設(shè)計性實驗的練習(xí),為此,設(shè)計的代碼量為850行。假設(shè)單個程序代碼長度平均為25行(含注釋行),由此估算“循環(huán)結(jié)構(gòu)”需完成題目數(shù)約34個,其他各章也依此方法規(guī)劃代碼及習(xí)題數(shù)量。圖2所示的設(shè)計主要用于對教學(xué)進(jìn)行指導(dǎo),以促成代碼量達(dá)成,實際執(zhí)行時,還需根據(jù)教學(xué)情況進(jìn)行調(diào)整。圖2中“綜合應(yīng)用”規(guī)劃代碼量為600行,估計題目數(shù)為24個,實際上該階段的程序具有復(fù)雜的調(diào)用框架,單個程序代碼遠(yuǎn)超過25行,因此,實際完成題目數(shù)遠(yuǎn)低于24個。從教學(xué)實踐看,由于在“綜合應(yīng)用”結(jié)束后,課程將進(jìn)入課程設(shè)計環(huán)節(jié),學(xué)生面臨又一輪代碼編寫的高峰,因此,在“綜合應(yīng)用”中適當(dāng)減少題目數(shù),對學(xué)生調(diào)整學(xué)習(xí)節(jié)奏是有利的。
飽滿的代碼量,不僅指數(shù)量多,還需要精準(zhǔn),以突出能力的培養(yǎng)。教育者們在程序設(shè)計類課程長期的建設(shè)過程中對實驗內(nèi)容的設(shè)計積累并貢獻(xiàn)了非常多的優(yōu)質(zhì)資源,但仍需仔細(xì)篩選、整理,使習(xí)題與教學(xué)大綱高度吻合,尤其應(yīng)突出重、難點(diǎn),進(jìn)行難度分層,以形成正確的學(xué)習(xí)導(dǎo)向。
首先,為培養(yǎng)問題分析和設(shè)計能力,習(xí)題應(yīng)在編程語言與編程方法間把握平衡,實現(xiàn)兩者相長。選題時需注意語法練習(xí)與程序結(jié)構(gòu)練習(xí)的比例,避免過于注重語法細(xì)節(jié),只見樹木,不見森林。重慶理工大學(xué)的FP課程尤其強(qiáng)調(diào)對程序設(shè)計方法及程序結(jié)構(gòu)的把握,為避免學(xué)生將主要精力投入于語法細(xì)節(jié),課程的實驗有針對性地減少了對C語言的某些運(yùn)算符,如自增、自減、逗號運(yùn)算符的操作;強(qiáng)調(diào)文件讀、寫操作,并減少復(fù)雜的輸入、輸出格式控制練習(xí)等。從課程的期中、期末等測試結(jié)果看,大部分學(xué)生對試卷的“編程題”完成較好,從一定程度表明學(xué)生對程序結(jié)構(gòu)的運(yùn)用能力普遍較強(qiáng),這種學(xué)習(xí)導(dǎo)向的效果十分明顯。其次,為加深學(xué)生對數(shù)據(jù)存儲的理解,需強(qiáng)調(diào)對各種數(shù)據(jù)類型的靈活運(yùn)用。許多學(xué)生由于無法靈活操作結(jié)構(gòu)類型、數(shù)組等復(fù)雜數(shù)據(jù)類型,在解決小型應(yīng)用問題時,存在強(qiáng)烈的畏難情緒。針對該問題,實踐中需重點(diǎn)選取與數(shù)據(jù)類型、復(fù)雜數(shù)據(jù)類型操作相關(guān)的題目。

圖2 各知識點(diǎn)代碼量及題目數(shù)規(guī)劃示例
由于預(yù)設(shè)了代碼量,可能使學(xué)習(xí)者陷入預(yù)定框架,認(rèn)為學(xué)習(xí)缺乏自由度,有壓力而沒有動力。因此,在實驗內(nèi)容上應(yīng)提供分級習(xí)題,如提供必做、選做題或者基礎(chǔ)、進(jìn)階題;在題目數(shù)量、題目難度方面體現(xiàn)差異,如以5 000行代碼量的30%為基礎(chǔ)題,即基礎(chǔ)題總量約1 500行代碼,進(jìn)階題約為3 500行代碼。由此,學(xué)生在練習(xí)過程中就能由淺入深,根據(jù)自身的情況調(diào)整學(xué)習(xí)節(jié)奏。
為使設(shè)定的代碼量能被優(yōu)質(zhì)、高效地完成,需對所完成代碼給出科學(xué)、合理的評價。課程的評價體系依課程教學(xué)目標(biāo)而定,應(yīng)是多元、科學(xué)、公正的,其設(shè)計以形成良好的學(xué)習(xí)導(dǎo)向為原則,使不同特點(diǎn)的學(xué)生都受到科學(xué)評價,意識到自己的特長被認(rèn)可,同時找到努力的方向。其中,最重要的是加大實踐環(huán)節(jié)的分?jǐn)?shù)比重,提高學(xué)生對實踐能力、操作能力的重視程度。如重慶理工大學(xué)的FP課程將全部預(yù)設(shè)的實踐習(xí)題安排為課外練習(xí),為保證代碼被按時完成,安排多次階段性上機(jī)測試,全部上機(jī)測試題目均從實踐習(xí)題中抽取,直接或經(jīng)修改后用于上機(jī)測試。上機(jī)測試題按比例抽取基礎(chǔ)題和進(jìn)階題,以反映實踐習(xí)題層次性的特點(diǎn),保證課外練習(xí)的量及知識覆蓋面。
另外,由于側(cè)重考查問題分析能力和程序編寫能力,采取課程理論考試與實踐環(huán)節(jié)分?jǐn)?shù)比例為6:4,并在閉卷理論考試中增加編程題比例,編程題、程序閱讀題、其他題目比例為4:2:4,考察程序分析、編碼能力的導(dǎo)向性十分明顯。在各次上機(jī)測試中,選取基礎(chǔ)題、進(jìn)階題的比例為4:6,僅完成基礎(chǔ)題的學(xué)生,其上機(jī)測試評價就會比較低。對基本概念掌握準(zhǔn)確、分析能力較好,但程序調(diào)試技能較弱的學(xué)生,多數(shù)可獲得“中等”或“良好”的評價;對程序調(diào)試技能熟練,但不喜歡進(jìn)行問題分析和設(shè)計的學(xué)生,多數(shù)可獲“中等”評價;只有兩者兼?zhèn)涞膶W(xué)生才能獲得“優(yōu)秀”的評價。
大規(guī)模的代碼及評價方法的多元化,將大幅增加教師的工作量。為使教師從繁重的批改作業(yè)、統(tǒng)計分?jǐn)?shù)的工作中擺脫出來,集中精力解決教學(xué)問題,提高教學(xué)研究的積極性,需借助易用的代碼評閱和管理平臺。重慶理工大學(xué)的FP課程就選用學(xué)校自主設(shè)計實現(xiàn)的程序設(shè)計在線測試平臺來減輕相關(guān)教師的負(fù)擔(dān),任課教師通過在線平臺就可以安排課外作業(yè),進(jìn)行上機(jī)測試;利用平臺的自動評閱功能,可促使、幫助學(xué)生課外自主完成預(yù)設(shè)的習(xí)題,任課教師只需將注意力集中到教學(xué)平臺的資源建設(shè)、維護(hù)上,這有利于教師對學(xué)生代碼的完成量、學(xué)生的能力達(dá)成度進(jìn)行深入、細(xì)致地觀測和分析。
上述對程序設(shè)計類課程如何達(dá)成飽滿的代碼量的分析,是結(jié)合程序設(shè)計基礎(chǔ)課程的教學(xué)實踐提出的,是對幫助教學(xué)雙方以科學(xué)、高效的方法度過程序入門關(guān)的有益嘗試,旨在幫助學(xué)生跨越程序設(shè)計理論與實踐之間的鴻溝。分析重慶理工大學(xué)近3年計算機(jī)專業(yè)程序設(shè)計基礎(chǔ)課程的理論試卷,從各知識點(diǎn)的能力達(dá)成度看,學(xué)生的程序編寫能力普遍較好。在輔以程序閱讀專項練習(xí)之后,學(xué)生的程序閱讀水平顯著提升,這與注重教學(xué)的導(dǎo)向性是密切相關(guān)的。近年來,該校計算機(jī)專業(yè)有更多的學(xué)生經(jīng)過程序設(shè)計類課程的學(xué)習(xí)后,進(jìn)入機(jī)器人、大數(shù)據(jù)實驗室及其他應(yīng)用系統(tǒng)開發(fā)項目組,參與研究性或工程項目的開發(fā)實踐,也從一定程度驗證了程序設(shè)計基礎(chǔ)課程的教學(xué)效果。
當(dāng)然,一種教學(xué)目標(biāo)的達(dá)成是多種因素共同作用的結(jié)果。文章中的方法只著眼于編碼能力的達(dá)成,希望以此促使學(xué)生程序設(shè)計及計算思維能力的整體提升,后續(xù)還將在如何設(shè)計好的綜合性實驗案例方面,展開進(jìn)一步的研究。
[1]高枚, 龔沛曾, 孫麗君. 構(gòu)建多層次思維培養(yǎng)的C/C++程序設(shè)計教學(xué)[J]. 計算機(jī)教育, 2016(1): 81-83.
[2]張鋼, 冉娟, 朱鵬飛, 等. 以“計算思維”為導(dǎo)向的程序設(shè)計入門類課程改革探索[J]. 計算機(jī)教育, 2016(8): 106-109, 114.
[3]文艾, 陳衛(wèi)衛(wèi). 高效程序設(shè)計的七個習(xí)慣[J].計算機(jī)教育, 2017(4): 41-42, 46.
[4]蘇小紅, 趙玲玲, 邱景, 等. CS2013指導(dǎo)下的程序設(shè)計課程實踐教學(xué)實施方案設(shè)計與翻轉(zhuǎn)實驗教學(xué)實踐[J]. 中國大學(xué)教學(xué),2016(5): 55-60, 69.