黃麗達(dá) 陳湘濤
摘要:以湖南大學(xué)c++程序設(shè)計(jì)教學(xué)為例,闡述將計(jì)算思維融入程序設(shè)計(jì)課程的具體實(shí)施方法:從理論教學(xué)到實(shí)踐教學(xué),從授課案例到日常評(píng)測(cè)。全方位引入計(jì)算思維的教學(xué)方式可以明顯提升教學(xué)效果,有利于培養(yǎng)學(xué)生探究問題和求解問題能力。
關(guān)鍵詞:計(jì)算思維;教學(xué)實(shí)施;程序設(shè)計(jì);交叉評(píng)閱
0 引言
程序設(shè)計(jì)類課程,是工科專業(yè)的重要基礎(chǔ)課程之一,是本科高年級(jí)和碩士階段許多專業(yè)核心課的驗(yàn)證與研究工具,且對(duì)學(xué)生在計(jì)算機(jī)科學(xué)思維方式的培養(yǎng),以及對(duì)未知問題的分析、對(duì)解決方案的探究與比較等多方面能力的訓(xùn)練都具有良好的促進(jìn)作用。同時(shí),作為專業(yè)基礎(chǔ)課,程序設(shè)計(jì)課學(xué)得好不好、學(xué)得是否愉悅,對(duì)本科生的后續(xù)學(xué)習(xí)在心理上和學(xué)習(xí)習(xí)慣上均有不容小覷的影響。然而,程序設(shè)計(jì)課程在國內(nèi)外的大學(xué)教育中均存在不少問題,例如,實(shí)踐上機(jī)操作和理論授課之問如何相輔相成?如何根據(jù)學(xué)生特點(diǎn)盡可能地因材施教?如何引導(dǎo)學(xué)生合理利用網(wǎng)絡(luò)上的學(xué)習(xí)資源和參考資料?諸如此類的問題絕非某些國家或某些學(xué)校在教學(xué)中面臨的個(gè)別問題。
自2006年計(jì)算思維的概念首次明確地由周以真教授提出后,對(duì)計(jì)算機(jī)教育領(lǐng)域產(chǎn)生了重大的影響。像計(jì)算機(jī)科學(xué)家那樣思考,讓計(jì)算思維真正融入生活,接受了計(jì)算思維的學(xué)生可以運(yùn)用計(jì)算機(jī)科學(xué)的思想和方法求解問題、設(shè)計(jì)系統(tǒng)和理解人類的行為。計(jì)算思維以求解問題的途徑為主要訴求,涵蓋了計(jì)算機(jī)科學(xué)之廣度的一系列思維活動(dòng)。因此,計(jì)算思維的培養(yǎng)在現(xiàn)代大學(xué)教育中日益受到認(rèn)可與重視,以培養(yǎng)計(jì)算思維為目的或融合計(jì)算思維的各種研究和課程改革在國內(nèi)外的各階段計(jì)算機(jī)教學(xué)中以多種形式展開。
雖然不能將計(jì)算思維狹隘地理解為計(jì)算機(jī)編程,但是程序設(shè)計(jì)的思維過程卻與計(jì)算科學(xué)的思維方式及其吻合:接受問題→分析問題→尋求解決方案→比較解決方案→實(shí)現(xiàn)解決方案,只是這里的解決方案是借助高級(jí)程序語言來實(shí)現(xiàn)的。因此有意識(shí)地將“計(jì)算思維”融入程序設(shè)計(jì)課程的教學(xué)實(shí)施是確實(shí)可行的,也是必要的。筆者以湖南大學(xué)c++程序設(shè)計(jì)課程為例,列舉了若干具體教學(xué)實(shí)施方法,并對(duì)相應(yīng)問題進(jìn)行了探討。從教學(xué)效果看,顯著提升了學(xué)生在程序設(shè)計(jì)方面的學(xué)習(xí)積極性,計(jì)算思維在潛移默化中被學(xué)生接受和應(yīng)用,挖掘了學(xué)生的潛能,提高了學(xué)生的程序設(shè)計(jì)能力和分析解決問題的能力。
1 課程如何開始
一門程序設(shè)計(jì)課程如何開篇?傳統(tǒng)上一般從語法入門開始。雖然語法是程序語言的基礎(chǔ),但目前國內(nèi)高中計(jì)算機(jī)課程普及率較低,多數(shù)本科低年級(jí)學(xué)生難以理解和接受程序?yàn)槭裁匆@樣寫?入門困難使得后續(xù)教學(xué)受到明顯的負(fù)面影響。文獻(xiàn)[4]提出“2%障礙”一說,即程序設(shè)計(jì)類的理論課堂上大略只有2%的學(xué)生能和教師的講授內(nèi)容產(chǎn)生同步共鳴。
C++之父Bjane Stroustrup指出:不需要在知道了C++的所有細(xì)節(jié)之后才能寫出好的C++程序……請(qǐng)?zhí)貏e關(guān)注程序設(shè)計(jì)技術(shù),而不是各種語言特征。我們選擇在教學(xué)實(shí)際中學(xué)生最困惑而對(duì)c++語言而言最基本的概念解讀作為課程開篇內(nèi)容。
中國古語“人以群分,物以類聚”,按照類和對(duì)象的方式認(rèn)識(shí)世界正是我們無意為之的認(rèn)知方式。我們刻意弱化c++的語法細(xì)節(jié),著重引導(dǎo)學(xué)生以類的概念認(rèn)識(shí)和描述自己周遭的事物,以開放性的話題——“請(qǐng)描述自己的手機(jī)”作為第一節(jié)課的內(nèi)容。以下是一個(gè)學(xué)生首次描述自己手機(jī)的實(shí)錄:“我用的手機(jī)是一部國產(chǎn)的魅族MX2,購買于2013年初,內(nèi)存16GB,表面是黑色,觸屏,電容屏,分辨率較高,智能手機(jī),可以打電話、上網(wǎng)、聽歌、拍照、游戲、導(dǎo)航、發(fā)短信、鬧鐘……”
這樣的描述在學(xué)生最開始的表述中具有代表性:條理比較雜亂,語言組織性欠缺。這正是缺乏計(jì)算思維訓(xùn)練,未知自己認(rèn)識(shí)過程的“原生態(tài)”表述。只要做適當(dāng)?shù)囊龑?dǎo),學(xué)生就能立即表現(xiàn)得很好。在前述描述的基礎(chǔ)上,要求學(xué)生按照手機(jī)的外在屬性和功能,以及“看得見的”和“看不見的”的分類重新組織內(nèi)容,學(xué)生的描述演變?yōu)椋?/p>
外在屬性:品牌是魅族;顏色是黑色;外形是直板矩形;屏幕尺寸為4.4英寸,觸屏;分辨率是1280×800像素……
功能:打電話、上網(wǎng)、發(fā)短信、鬧鐘、導(dǎo)航、游戲、手寫輸入、記事本……
“看得見的”包括:屏幕、power鍵、音量調(diào)節(jié)按鈕、耳機(jī)孔、話筒孔、攝像頭……
“看不見的”包括:天線、內(nèi)存、電路、電池、無線傳輸帶寬……
教師可以明顯看到這一次的學(xué)生描述,雖然仍不盡完美,但基本上暗合了類與對(duì)象的屬性和行為的概念。據(jù)此,教師逐步展開講授c++中的屬性和行為概念,漸漸地將對(duì)象與類及其類層次等基礎(chǔ)概念進(jìn)行對(duì)應(yīng)講解。以學(xué)生為主體、教師適當(dāng)引導(dǎo)的反饋遞進(jìn)式學(xué)習(xí)過程如圖l所示,其中步驟②可能會(huì)反復(fù)迭代進(jìn)行多次。在最初的2-4個(gè)學(xué)時(shí),讓學(xué)生以相對(duì)輕松、自然的方式認(rèn)識(shí)C++基礎(chǔ)概念的精髓,讓學(xué)生在心理上對(duì)這門課程有了一個(gè)很好的接受度,為本門課程之后的學(xué)習(xí)打下較好的基礎(chǔ),形成良性的心理優(yōu)勢(shì)。
這種課程開篇方式,正是計(jì)算思維對(duì)學(xué)生潤物細(xì)無聲的影響。概念化是計(jì)算思維的基本特征之一,其側(cè)重抽象層次上的思維。抽象層次的認(rèn)知不可能一蹴而就,課程最開始就引入抽象性的概念,其基礎(chǔ)性正如程序設(shè)計(jì)的基石。為了讓抽象的概念具體化,讓學(xué)生從自己所熟悉的東西開始,契合了計(jì)算思維所具有的“是思想而非人造品”的特性,將日常生活的實(shí)例映射到c++的基本概念,學(xué)生解除了之前“程序設(shè)計(jì)課程就是學(xué)程序語言語法”的誤解,開始思考“這門程序語言能解決我可能會(huì)遇到的什么問題呢?”相較于傳統(tǒng)以語法開篇的授課,學(xué)生表現(xiàn)更為積極主動(dòng),且學(xué)生對(duì)程序語法的學(xué)習(xí)也會(huì)帶著問題有備而來,后續(xù)教學(xué)效果提升明顯。
2 從自然語言到程序語言
計(jì)算思維作為人類求解問題的途徑之一,絕對(duì)不是讓人如計(jì)算機(jī)那樣思考,而是應(yīng)用計(jì)算機(jī)的能力去解決各種需求產(chǎn)生的問題。我們將這個(gè)思路持續(xù)貫徹到教學(xué)的全過程。
在一定規(guī)則下使用自然語言描述問題,再引導(dǎo)學(xué)生將自然語言“翻譯”成程序語言。例如,在類繼承層次知識(shí)點(diǎn)的教學(xué)中,讓學(xué)生按照某種既定的分類層次,描述一個(gè)兩層以上的分類結(jié)構(gòu)。這項(xiàng)半開放性的練習(xí)在“繼承”一章的第一節(jié)理論授課后作為課堂練習(xí)來進(jìn)行,由于剛剛講授了繼承的基本概念,且是任由學(xué)生隨意選擇符合邏輯的類層次例子,學(xué)生寫起來駕輕就熟,表現(xiàn)力豐富。例如,圖2所示是某位學(xué)生的類層次實(shí)例描述實(shí)錄。endprint
圖2即為植物學(xué)領(lǐng)域的實(shí)際分類結(jié)構(gòu),可見c++的類層次與現(xiàn)實(shí)世界中人類認(rèn)知事物的分類層次的吻合度甚高。學(xué)生還需要描述各類的基本屬性和功能。再要求學(xué)生將前述自然語言描述的類繼承層次“翻譯”成c++程序語言的表述。
在“翻譯”階段通過教師引導(dǎo),學(xué)生逐步將共有屬性、特有屬性、繼承特性在編程中“將理論映射到實(shí)踐”。由于繼承層次實(shí)例是自己表述的熟悉或感興趣的內(nèi)容,所以學(xué)生寫起代碼頗有自信,且力圖表現(xiàn)得最好,諸如派生類對(duì)繼承類的功能的重定義等后續(xù)問題在練習(xí)中由學(xué)生自己發(fā)現(xiàn)并引發(fā)討論,從其后續(xù)相關(guān)章節(jié)學(xué)習(xí)效果和平時(shí)小測(cè)結(jié)果來看,這種學(xué)生自擬內(nèi)容的“翻譯”式實(shí)例分析練習(xí)要優(yōu)于傳統(tǒng)的教師擬定典型繼承實(shí)例進(jìn)行講解再由學(xué)生驗(yàn)證演練的方式。
上述啟發(fā)式的教學(xué)讓學(xué)生在不確定的條件下來分析確定問題并尋求解決方案。這種練習(xí)只要稍稍進(jìn)行一點(diǎn)變化,還能進(jìn)一步豐富其內(nèi)容,如學(xué)生之間交換實(shí)現(xiàn)從自然語言實(shí)例描述到程序語言的“翻譯”,再由實(shí)例描述人來評(píng)價(jià)程序語言實(shí)現(xiàn)者的工作成果,無形中融入了軟件工程的基本思想和過程。整個(gè)教與學(xué)的過程互動(dòng)頻繁,學(xué)生易于接受,為后續(xù)更加抽象的多態(tài)內(nèi)容的教學(xué)打下了良好基礎(chǔ)。
3 “非一致”實(shí)踐課程安排
程序設(shè)計(jì)離不開編程實(shí)踐,通常除了課后的實(shí)踐練習(xí)之外,只要有條件,程序設(shè)計(jì)課程會(huì)為學(xué)生配備統(tǒng)一的實(shí)踐(上機(jī))課程。如何安排實(shí)踐(上機(jī))課程才能使學(xué)生更自主、獨(dú)立、有效的練習(xí)一直是程序設(shè)計(jì)類課程的教學(xué)實(shí)施所關(guān)注的關(guān)鍵問題之一。
“面向所有人”的計(jì)算思維讓我們關(guān)注學(xué)生的個(gè)性。每個(gè)學(xué)生都有其個(gè)體特點(diǎn),在學(xué)習(xí)習(xí)慣、學(xué)習(xí)興趣和學(xué)習(xí)方式上各不相同,只有適不適合自己而沒有絕對(duì)的優(yōu)劣之分。我們?cè)赾++程序設(shè)計(jì)課程配備的實(shí)踐(上機(jī))中,安排內(nèi)容和要求契合了上述的“非一致性”——每一次實(shí)踐都安排不同難度權(quán)值的題目:必做題、升級(jí)題以及挑戰(zhàn)題。其中必做題是基于理論授課內(nèi)容的基本考核,是每堂實(shí)踐(上機(jī))課學(xué)生必須完成的內(nèi)容;升級(jí)題則是在理論授課的基礎(chǔ)內(nèi)容上增加一定難度或略微超前學(xué)習(xí)內(nèi)容;挑戰(zhàn)題則多是趣味性和難度性進(jìn)一步提高的練習(xí)。鑒于學(xué)生解決不同難度權(quán)值的題目可能付出努力的差異,不同難度權(quán)值的題目設(shè)定不同的分?jǐn)?shù)權(quán)值。不同接受程度的學(xué)生可以按照自己的個(gè)體需要進(jìn)行選擇:一方面保證必做題在所有學(xué)生中得以完成,使得基本教學(xué)內(nèi)容能最廣泛地為學(xué)生所接受并檢驗(yàn);另一方面,學(xué)生普遍具有的“追求更好”的積極訴求,在這種隱形競爭心理下,推動(dòng)升級(jí)題和挑戰(zhàn)題被盡可能多的學(xué)生嘗試完成。
由于要求學(xué)生盡量在3學(xué)時(shí)內(nèi)完成當(dāng)次實(shí)踐練習(xí),所以每次實(shí)踐(上機(jī))的練習(xí)題量和綜合難度教師要仔細(xì)把握,求質(zhì)而非求量——因?yàn)樯杏姓n后作業(yè)可供學(xué)生反復(fù)練習(xí),但是每次的實(shí)踐(上機(jī))題都包含前述3類。綜合兩屆3個(gè)專業(yè)學(xué)生的平均情況,實(shí)踐(上機(jī))題目的完成情況統(tǒng)計(jì)如圖3所示。
圖3所示二維折線圖中的橫坐標(biāo)表示實(shí)踐次數(shù),縱坐標(biāo)表示完成題目的學(xué)生數(shù)量占學(xué)生總數(shù)的百分比,用以衡量實(shí)踐題目的完成度。虛線表示傳統(tǒng)的使用無難度區(qū)分的實(shí)踐(上機(jī))完成情況,實(shí)線、點(diǎn)劃線和虛點(diǎn)線分別表示有階梯式難度差異的“非一致”實(shí)踐(上機(jī))安排中必做題、升級(jí)題和挑戰(zhàn)題的完成情況。為了對(duì)比效果,傳統(tǒng)實(shí)踐安排和“非一致”實(shí)踐安排在題量上相當(dāng)。隨著教學(xué)內(nèi)容的深入,題目的難度隨之增加。由圖3可知,基本必做題的完成度穩(wěn)定在100%,而升級(jí)題隨著難度的增加,第二次的完成比例較第一次下滑厲害,但是從整個(gè)學(xué)期的實(shí)踐來看,升級(jí)題的完成度除了中間某一次實(shí)踐題目內(nèi)容略超前導(dǎo)致完成度暫時(shí)下滑外,基本在后半學(xué)期穩(wěn)定在70%左右,挑戰(zhàn)題完成比例更是接近并穩(wěn)定在30%上下。盡管平均來看,非一致性實(shí)踐題目的完成百分比與傳統(tǒng)的“完全與理論內(nèi)容并行、驗(yàn)證式”的實(shí)踐完成百分比(約60%)相近。但是從折線圖的走勢(shì)來看,由于重復(fù)練習(xí)和題目數(shù)量設(shè)計(jì)等原因,傳統(tǒng)實(shí)踐題完成百分比隨著學(xué)習(xí)內(nèi)容的難度增加明顯呈現(xiàn)下行趨勢(shì);而“非一致”實(shí)踐(上機(jī))練習(xí)的完成百分比卻似乎未受學(xué)習(xí)難度的影響,呈現(xiàn)明顯的上升趨勢(shì),且學(xué)生整體的分析解決問題的能力、自由自主的學(xué)習(xí)能力和競爭意識(shí)的提升得到了巨大的提升,這從實(shí)踐課的積極活躍氣氛上看亦是表現(xiàn)無遺。
4 評(píng)測(cè)中的交叉評(píng)閱
課程的教學(xué)可能會(huì)延續(xù)16周,這期間需要檢驗(yàn)階段性學(xué)習(xí)效果,才能對(duì)后續(xù)的教學(xué)進(jìn)行益于學(xué)生的調(diào)整,并可針對(duì)反映出的薄弱環(huán)節(jié)進(jìn)行鞏固。日常作業(yè)和隨堂小測(cè)是檢驗(yàn)階段性學(xué)習(xí)效果的基本方法。然而,不論是國內(nèi)還是國外,程序設(shè)計(jì)課程練習(xí)的一個(gè)普遍存在的問題就是原創(chuàng)性不足。有研究指出可能有近50%的學(xué)生作業(yè)或參考網(wǎng)絡(luò),或參考其他學(xué)生的作業(yè)。這一方面是由于程序設(shè)計(jì)練習(xí)本身的特點(diǎn)使抄襲非常容易,同時(shí),隨時(shí)隨地可接入網(wǎng)絡(luò)的便利性以及當(dāng)今網(wǎng)絡(luò)信息的豐富度,使得學(xué)生可以比較輕易地從網(wǎng)絡(luò)獲取所需答案。
雖然國內(nèi)外有各種人工或自動(dòng)的作業(yè)檢查/查重系統(tǒng)來控制抄襲情況,但在教學(xué)實(shí)際中發(fā)現(xiàn)讓學(xué)生參與到日常評(píng)價(jià)中來,即學(xué)生間進(jìn)行交叉評(píng)閱,可以很好地促進(jìn)日常練習(xí)的原創(chuàng)完成。交叉評(píng)閱的具體實(shí)施方法為:以自然班為單位,班級(jí)問進(jìn)行作業(yè)(或小測(cè))的交叉評(píng)閱。例如,若有3個(gè)自然班,那么A班學(xué)生評(píng)閱B班的作業(yè),B班評(píng)閱c班的作業(yè),c班評(píng)閱A班的作業(yè),所有評(píng)閱都是實(shí)名制進(jìn)行,評(píng)閱結(jié)果最終返回到作業(yè)完成人。
能夠堂而皇之地看到別人的作業(yè),還能對(duì)其評(píng)分,學(xué)生都躍躍欲試,90%以上的學(xué)生評(píng)閱都相當(dāng)認(rèn)真,從編碼規(guī)范性、交互性、程序設(shè)計(jì)階段性及最終結(jié)果與要求的吻合度等多個(gè)方面進(jìn)行了點(diǎn)評(píng)。在交叉評(píng)閱過程中,學(xué)生不僅能評(píng)分,還能對(duì)比自己的完成情況,指出所評(píng)閱作業(yè)的問題,并給出解決意見,或者發(fā)現(xiàn)別人優(yōu)于自己的地方。交叉評(píng)閱之后的作業(yè)仍需返給教師。教師通過適時(shí)講評(píng),總結(jié)作業(yè)和交叉評(píng)閱的問題。
通過交叉評(píng)閱,學(xué)生能直觀、及時(shí)地發(fā)現(xiàn)自己的不足,而由同齡人所給出的意見更易被接受,并自然地將學(xué)生日常討論的圈子從同寢之間或同班的有限幾個(gè)好友之間擴(kuò)展到同時(shí)學(xué)習(xí)本門課程的同學(xué)之間,在2~3次的交叉評(píng)閱后即發(fā)現(xiàn)跨班、跨專業(yè)的討論比比皆是,交流的增加使學(xué)生能直面自己的不足與優(yōu)勢(shì),對(duì)增強(qiáng)自信、自我鞭策很有效果。對(duì)比未使用交叉評(píng)閱和使用交叉評(píng)閱的班級(jí)整體學(xué)習(xí)效果,經(jīng)過交叉評(píng)閱的學(xué)生其學(xué)習(xí)積極性、自主『生都有顯著提升。
5 結(jié)語
計(jì)算思維的明確提出獲得了全球教育界的認(rèn)可與支持,深刻影響著從小學(xué)到大學(xué)的各個(gè)教育階段[”。我們結(jié)合湖南大學(xué)c++程序設(shè)計(jì)課程本身的特點(diǎn),有意識(shí)地將計(jì)算思維融入教學(xué)實(shí)施的全過程。本文選取介紹了其中有代表性的課程開篇、“翻譯”轉(zhuǎn)化式實(shí)例討論與非一致性的實(shí)踐題目設(shè)計(jì)以及以交叉評(píng)閱為特點(diǎn)的日常評(píng)測(cè)機(jī)制等具體實(shí)施方法,探討了如何將計(jì)算思維貫徹到程序設(shè)計(jì)類課程教學(xué)的各個(gè)方面。從連續(xù)兩屆學(xué)生的反映來看,實(shí)際教學(xué)效果良好,學(xué)生接受程度明顯高于之前傳統(tǒng)程序設(shè)計(jì)教學(xué),這既印證了計(jì)算思維對(duì)學(xué)生求解問題能力的良性影響,同時(shí)也說明這樣的教學(xué)實(shí)施確實(shí)是有效、有益的。
信息時(shí)代日新月異,每一屆的學(xué)生都會(huì)有或多或少的變化,根據(jù)學(xué)生的特點(diǎn),深化程序設(shè)計(jì)類課程中對(duì)學(xué)生計(jì)算思維的培養(yǎng)是我們?cè)诮虒W(xué)中持續(xù)努力的目標(biāo)。
(見習(xí)編輯:劉麗麗;編輯:宋文婷)endprint