文欣秀, 顧春華, 王家輝, 楊澤平, 王占全
(1. 華東理工大學(xué) a. 信息科學(xué)與工程學(xué)院; b. 理學(xué)院, 上海 200237;2. 上海理工大學(xué) 光電信息與計算機工程學(xué)院, 上海 200093)
改革程序設(shè)計課程 探索計算思維能力培養(yǎng)
文欣秀1a, 顧春華2, 王家輝1b, 楊澤平1a, 王占全1a
(1. 華東理工大學(xué) a. 信息科學(xué)與工程學(xué)院; b. 理學(xué)院, 上海 200237;2. 上海理工大學(xué) 光電信息與計算機工程學(xué)院, 上海 200093)
以計算思維能力培養(yǎng)為切入點的程序設(shè)計課程教學(xué)改革需要轉(zhuǎn)變教學(xué)觀念和教學(xué)方式,在建構(gòu)主義指導(dǎo)下幫助學(xué)生構(gòu)建學(xué)習(xí)情境,鼓勵學(xué)生明確學(xué)習(xí)目標(biāo),激發(fā)學(xué)生進(jìn)行協(xié)作學(xué)習(xí)。我校的程序設(shè)計課程教學(xué)改革從以下四個方面展開:將計算思維特征滲入教學(xué)實踐環(huán)節(jié)中培養(yǎng)學(xué)生思維能力,開發(fā)經(jīng)典實驗案例提高學(xué)生學(xué)習(xí)興趣,設(shè)計分層實驗作業(yè)滿足各類學(xué)生需求,研發(fā)教學(xué)輔助平臺提升實驗教學(xué)質(zhì)量。實踐表明,該方法能夠幫助學(xué)生根據(jù)個性化需求主動完成學(xué)習(xí)意義構(gòu)建,增強學(xué)生解決專業(yè)問題的能力,培養(yǎng)學(xué)生的團(tuán)隊合作能力。
計算思維; 程序設(shè)計; 建構(gòu)主義; 教學(xué)改革; 教學(xué)輔助平臺; 實驗教學(xué)
自2006年美國卡內(nèi)基·梅隆大學(xué)的Jeannette M. Wing教授提出了計算思維Computational Thinking(CT)[1]的概念后,以提高學(xué)生解決問題能力、培養(yǎng)學(xué)生計算思維能力為目標(biāo)的非計算機專業(yè)的程序設(shè)計課程教學(xué)改革引起了國內(nèi)外教育者的廣泛關(guān)注[2-9]。Stephen Cooper等[2]認(rèn)為程序設(shè)計課程是培養(yǎng)計算思維能力的重要組件,而提高解決問題能力是學(xué)習(xí)程序設(shè)計課程的核心。他們通過開展數(shù)百種專業(yè)開發(fā)培訓(xùn)項目(目標(biāo)群體是教師和學(xué)生)并進(jìn)行結(jié)果分析,推斷出學(xué)習(xí)程序設(shè)計課程、利用計算機解決問題能夠提高學(xué)生的自信心、創(chuàng)造性和獨立性。Henry M. Walker[3]認(rèn)為計算思維能力的培養(yǎng)需要包含編程模塊,編程語言能夠精確解決問題的優(yōu)點可以幫助學(xué)生理解程序正確性、效率、分析等關(guān)鍵詞的內(nèi)涵,非計算機專業(yè)程序設(shè)計課程應(yīng)該淡化語法細(xì)節(jié),關(guān)注解決問題過程。韓建平等[4]構(gòu)建一種“課內(nèi)外貫穿、競賽教學(xué)融合”程序設(shè)計教學(xué)模式,從課內(nèi)基本實驗、課外自主實驗、訓(xùn)練與競賽等引導(dǎo)學(xué)生提高程序設(shè)計能力,實踐表明該模式能夠激發(fā)學(xué)生的學(xué)習(xí)興趣和熱情。劉在英等[5]分析了程序設(shè)計課程實踐教學(xué)中制約學(xué)生創(chuàng)新實踐能力培養(yǎng)的多種因素,并從教學(xué)內(nèi)容、教學(xué)方法、考核形式及平臺建設(shè)等方面進(jìn)行了相應(yīng)的改革,逐步提高了程序設(shè)計課程的教學(xué)質(zhì)量和學(xué)生的編程能力。
Java、C、C++、Python、C#等程序設(shè)計語言不僅是世界流行的編程語言(2017年5月TIOBE編程語言排行榜前5名)[10],也是國內(nèi)外大部分高校為非計算機專業(yè)學(xué)生開設(shè)的程序設(shè)計課程。然而,由于學(xué)生基礎(chǔ)差異大、理論和實驗課時有限、實驗案例與具體應(yīng)用缺少關(guān)聯(lián)等多種因素,程序設(shè)計課程的教學(xué)質(zhì)量一直不容樂觀。建構(gòu)主義提倡在教師指導(dǎo)下的、以學(xué)習(xí)者為中心的活動,教師的主要任務(wù)是輔助學(xué)生實現(xiàn)有意義的學(xué)習(xí)目標(biāo)[11-13]。本項目組以建構(gòu)主義為指導(dǎo),嘗試從思維訓(xùn)練、案例引導(dǎo)、作業(yè)分層及過程監(jiān)控等四個方面展開程序設(shè)計課程教學(xué)改革。
計算思維是一種科學(xué)思維,與理論思維、實驗思維一起構(gòu)成了人類的三大思維[14-16]。國內(nèi)外傳統(tǒng)的程序設(shè)計理論課程大多以教師講解知識點為中心,實驗作業(yè)單調(diào)統(tǒng)一,產(chǎn)生了一系列的教學(xué)問題,具體表現(xiàn)在以下兩個方面:
(1) 思維模式的拓展培養(yǎng)不夠深入。 程序設(shè)計課程的核心思想是打破學(xué)生固有的思維模式,引導(dǎo)學(xué)生理解計算思維的特征,幫助學(xué)生運用計算機高效地解決實際問題,編程語言本身只是一種載體。然而,傳統(tǒng)的程序設(shè)計課程以教師活動為中心,以知識點講解為主線,過于強調(diào)編程語言本身的完整性和系統(tǒng)性,忽略了抽象、分解、自動化等計算思維特征在教學(xué)過程中的滲透,缺少算法分析與設(shè)計過程的積極引導(dǎo)。經(jīng)過調(diào)查發(fā)現(xiàn),學(xué)生總體感覺以知識點講解為主線的程序設(shè)計課程理論與實踐脫節(jié)、語法細(xì)節(jié)過于繁瑣,導(dǎo)致學(xué)習(xí)興趣日益缺失。
(2) 統(tǒng)一設(shè)置的實驗案例不夠合理。長期以來,程序設(shè)計課程的實驗作業(yè)大多是統(tǒng)一布置,較少考慮學(xué)生基礎(chǔ)、個性化需求以及實驗案例與具體應(yīng)用的關(guān)系。大部分學(xué)生缺少明確的實驗?zāi)繕?biāo),只是被動地接受教師指令,機械地完成上機作業(yè),學(xué)生的主體地位沒有得到充分體現(xiàn),動手實踐能力和自主探索能力也難得到真正提高。調(diào)查結(jié)果表明,各專業(yè)學(xué)院教師對程序設(shè)計課程的教學(xué)滿意度不高,主要問題在于程序設(shè)計與專業(yè)后續(xù)課程銜接比較困難,課程結(jié)束后學(xué)生不能融會貫通地使用計算機分析、解決專業(yè)問題。
計算思維是運用計算機科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計系統(tǒng)和理解人類的行為[1]。面向計算思維能力培養(yǎng)的程序設(shè)計課程必須合理規(guī)劃教學(xué)模塊和實驗內(nèi)容,引導(dǎo)學(xué)生自主學(xué)習(xí),提高學(xué)生協(xié)作能力。建構(gòu)主義認(rèn)為,理想的學(xué)習(xí)環(huán)境應(yīng)該包括:情境、協(xié)作、交流和意義構(gòu)建[11-12]。
2.1 構(gòu)建新型的課程體系
建構(gòu)主義認(rèn)為,在教學(xué)設(shè)計中,創(chuàng)建有利于學(xué)習(xí)者構(gòu)建學(xué)習(xí)意義的情境是非常重要的環(huán)節(jié)[13]。計算思維的本質(zhì)是抽象和自動化[1],程序設(shè)計課程是培養(yǎng)計算思維能力的有效載體。程序設(shè)計課程主要知識模塊(面向過程和面向?qū)ο蠊灿?包括簡單數(shù)據(jù)類型、三種基本結(jié)構(gòu),復(fù)雜數(shù)據(jù)結(jié)構(gòu)、函數(shù)、繪圖、文件等,其中涵蓋了抽象、類型、遞歸、轉(zhuǎn)化、折衷等一系列計算思維特征。因此,重新梳理了程序設(shè)計課程的知識體系,闡明了每個知識模塊需要滲入的具體特征,構(gòu)建了新型的課程體系框架(見圖1)。課程大綱設(shè)計著重強調(diào)知識的基礎(chǔ)性、原理性、系統(tǒng)性,簡化繁瑣的語法細(xì)節(jié),淡化與公共基礎(chǔ)、專業(yè)知識案例無關(guān)的知識點,將節(jié)省出來的課時用于專業(yè)案例分析和實際問題解決。
2.2 精心設(shè)計經(jīng)典實驗案例、增強學(xué)生計算機應(yīng)用能力
教師應(yīng)當(dāng)充分認(rèn)識和尊重學(xué)生在課程中的思維活動和思維規(guī)律,鼓勵學(xué)生進(jìn)行有意義的學(xué)習(xí)而不是機械的學(xué)習(xí)[13]。為了提高學(xué)生解決實際問題的能力,在調(diào)研學(xué)生公共必修課程(如:高等數(shù)學(xué)、大學(xué)物理等)的基礎(chǔ)上,鼓勵優(yōu)秀學(xué)生開發(fā)了一系列公共課經(jīng)典實驗案例(面向過程、面向?qū)ο髢煞N版本),幫助學(xué)生解決平時學(xué)習(xí)過程中的實際問題,潛移默化中培養(yǎng)學(xué)生的計算思維能力。在此基礎(chǔ)上,進(jìn)一步激發(fā)學(xué)生解決專業(yè)問題的動力,不斷提高學(xué)生抽象、分析各種問題的能力。
圖1 程序設(shè)計課程思維特征
根據(jù)課程分類,已經(jīng)設(shè)計完成的經(jīng)典實驗案例主要有:① 高等數(shù)學(xué)。包括求極限、微分、泰勒展開、不定積分以及定積分;② 線性代數(shù)。包括矩陣運算、行列式、特征值、范數(shù)、條件數(shù);③ 數(shù)理統(tǒng)計。包括基本統(tǒng)計量計算、回歸分析、聚類分析、主成分分析、數(shù)據(jù)可視化; ④ 大物實驗。包括楊氏拉伸,動態(tài)楊氏,光柵衍射,密立根油滴;⑤ 實驗化學(xué)。包括分光光度法測反應(yīng)平衡常數(shù)、PH法測醋酸電離平衡常數(shù);⑥ 基礎(chǔ)化學(xué)。包括式量&配平、氣體狀態(tài)參數(shù)計算、溶液依數(shù)計算。
(1) 解題思路。該問題無法給出解析解,可以利用二分法進(jìn)行求解
(3) 操作步驟。
步驟1:計算f(x) 在有根區(qū)間[a,b]端點處的值f(a),f(b)
步驟2:計算f(x) 在區(qū)間中點(a+b)/2的值f((a+b)/2)
步驟3:如果f((a+b)/2) 與f(a)異號,則根位于區(qū)間(a,(a+b)/2)內(nèi),此時以(a+b)/2代替b
如果f((a+b)/2) 與f(a)同號,則根位于區(qū)間((a+b)/2,b)內(nèi),此時以(a+b)/2代替a
如果f((a+b)/2) =0,輸出結(jié)果
該實際問題的人工計算過程如表1所示。在解題過程中,學(xué)生發(fā)現(xiàn)手工計算的過程非常繁瑣,精確度也不夠高,通過對該問題進(jìn)行抽象分析,學(xué)生發(fā)現(xiàn)簡單數(shù)據(jù)類型可以解決數(shù)據(jù)存儲問題,選擇結(jié)構(gòu)可以解決區(qū)間定位問題、循環(huán)結(jié)構(gòu)可以解決重復(fù)計算問題。因此,學(xué)生運用計算機解決問題的主動性被大大調(diào)動起來。
表1 人工計算過程
(4) 程序方法。
#include
#include
int main()
{
float a = 1.0 , b= 1.5;
float root = 0 , tmp = 0;
float fa = 0 , f = 0;
int i = 0;
for(i = 0; i < 20; i++)
{
tmp = (a + b) / 2;
f = tmp * tmp * tmp - tmp - 1; //計算f((a+b)/2)
fa = a * a * a - a - 1; //計算f(a)
if (f == 0) break; //如果f((a+b)/2) =0,輸出結(jié)果
else if (fa * f < 0) b = tmp; //如果f((a+b)/2) 與f(a)異號,此時以(a+b)/2代替b
else a = tmp; //如果f((a+b)/2) 與f(a)同號,此時以(a+b)/2代替a
}
printf("the root is %f", tmp);
return 0;
}
在該問題的分析過程中,學(xué)生既理解了計算思維的特征(抽象、轉(zhuǎn)化、類型等),思維方式得到了拓展,又利用所學(xué)知識解決了實際學(xué)習(xí)問題,學(xué)生的興趣度和成就感倍增,也愿意積極嘗試解決各種專業(yè)問題。
2.3 面向?qū)ο笤O(shè)計遞進(jìn)式作業(yè)、有效實施分層分類指導(dǎo)
建構(gòu)主義學(xué)習(xí)理論強調(diào)以學(xué)生為中心,滿足學(xué)生的個性化需求[13]。國內(nèi)程序設(shè)計課程一般是大學(xué)一年級下學(xué)期的必修課程,由于學(xué)生來自不同的地區(qū),編程基礎(chǔ)差異非常大,主要分為以下三個層次:① 零基礎(chǔ)的學(xué)生:從未接受過編程方面的任何知識和訓(xùn)練。② 少量基礎(chǔ)學(xué)生:初高中部分或系統(tǒng)學(xué)習(xí)過一門編程語言。③ 基礎(chǔ)扎實學(xué)生:參加過計算機大賽或具有一定項目經(jīng)驗。
在學(xué)習(xí)過程中,我們鼓勵2~3名學(xué)生進(jìn)行合作,綜合多道作業(yè)完成一套系統(tǒng)的研發(fā),例如3名同學(xué)將高等數(shù)學(xué)、線性代數(shù)、數(shù)學(xué)繪圖、科學(xué)計算等作業(yè)進(jìn)行結(jié)合,開發(fā)出了一套數(shù)學(xué)輔助計算系統(tǒng)。此外,為了提高學(xué)生學(xué)習(xí)的主動性,在輔助教學(xué)平臺上設(shè)置了刷題排行榜(題目由包含重要知識點的客觀題以及和實際生活相關(guān)的主觀題組成,系統(tǒng)自動評測并公布一、二、三等獎),督促學(xué)生主動掌握重要知識點和提高分析問題的能力。
2.4 充分利用教學(xué)輔助平臺、提升實驗過程自動監(jiān)控
建構(gòu)主義認(rèn)為,學(xué)習(xí)者與周圍環(huán)境的交互對學(xué)習(xí)內(nèi)容的理解起著非常關(guān)鍵的作用[13]。為了方便實驗教學(xué)管理和推動學(xué)生協(xié)作學(xué)習(xí),基于Python開發(fā)了一套電腦、手機同步的“π課堂”教學(xué)輔助平臺,該系統(tǒng)主要包括以下功能:① 碎片時間學(xué)習(xí)。學(xué)生可以根據(jù)自己的基礎(chǔ)隨時在平臺上選擇實驗題目,通過手機或電腦完成不同層次的作業(yè),對自己的學(xué)習(xí)情況進(jìn)行有效評估,并獲得相應(yīng)的分?jǐn)?shù);② 成績隨時查詢。學(xué)生可以通過系統(tǒng)隨時查看自己的平時分?jǐn)?shù)(各項作業(yè)分?jǐn)?shù)、主客觀題練習(xí)分?jǐn)?shù)),督促學(xué)生及時調(diào)整學(xué)習(xí)節(jié)奏和努力方向;③ 圖表自動分析。通過對學(xué)生實驗答題情況、集中錯誤的圖表自動分析,幫助老師對整個班級和特定學(xué)生的情況進(jìn)行充分了解,從而及時調(diào)整課程進(jìn)度;④ 消息及時推送。通過手機、網(wǎng)頁、郵箱實現(xiàn)消息同步推送,及時實現(xiàn)教師和整個班級、個別學(xué)生之間關(guān)于實驗問題的良好互動,同時幫助學(xué)生實現(xiàn)大作業(yè)設(shè)計的互相協(xié)作。
建構(gòu)主義強調(diào)學(xué)習(xí)的目的是通過學(xué)習(xí)者的主動追求完成意義構(gòu)建[13],學(xué)生計算思維能力的提高和解決各種問題能力的增強是程序設(shè)計課程改革的目標(biāo)所在。在3年的程序設(shè)計課程改革中,除了精化教學(xué)內(nèi)容強調(diào)思維能力培養(yǎng)、開發(fā)經(jīng)典實驗案例提高解決問題能力提高外,還積極鼓勵同專業(yè)學(xué)生自由組隊、自主選題,通過溝通和協(xié)作解決專業(yè)學(xué)習(xí)中的各種問題,設(shè)計并完成與專業(yè)結(jié)合的課程設(shè)計大作業(yè),不斷提高綜合分析能力。如化工學(xué)院的學(xué)生用C語言進(jìn)行臥式儲罐計量計算、材料學(xué)院的學(xué)生用C語言解決物體物理性質(zhì)的計算、生工學(xué)院的學(xué)生用Python語言進(jìn)行DNA序列查詢、信息學(xué)院的學(xué)生用Python語言解決電路輸入輸出問題、化學(xué)學(xué)院學(xué)生用C#語言實現(xiàn)實驗數(shù)據(jù)擬合等等,大幅提高了教學(xué)質(zhì)量。在此基礎(chǔ)上,將課程大作業(yè)與計算機創(chuàng)新實踐基地緊密結(jié)合起來,選拔有潛力的大作業(yè)進(jìn)入創(chuàng)新基地繼續(xù)研發(fā),指導(dǎo)學(xué)生參加各級大學(xué)生創(chuàng)新活動,并積極推薦參加上海市、全國各級計算機大賽(近3年我校學(xué)生在國家級、上海市級比賽中獲得了30多個獎項)。值得一提的是,在推進(jìn)公共課案例整合和專業(yè)系統(tǒng)開發(fā)方面也取得了優(yōu)異的成績:理學(xué)院同學(xué)開發(fā)的“基于 Python 的輔助計算系統(tǒng)”獲得了2015年中國大學(xué)生計算機設(shè)計大賽全國一等獎,化學(xué)學(xué)院同學(xué)開發(fā)的“Chembook化學(xué)助手”獲得了2016年中國大學(xué)生計算機設(shè)計大賽全國一等獎。
以計算思維能力培養(yǎng)為目標(biāo),團(tuán)隊在建構(gòu)主義指導(dǎo)下圍繞優(yōu)化課程設(shè)計、開發(fā)經(jīng)典案例、設(shè)計分層作業(yè)、監(jiān)督實驗過程等方面展開了程序設(shè)計課程改革,幫助非計算機專業(yè)學(xué)生創(chuàng)建學(xué)習(xí)情景,鼓勵學(xué)生主動學(xué)習(xí),滿足學(xué)生個性化需求,增強學(xué)生溝通與協(xié)作,取得了良好的改革效果,不僅引導(dǎo)學(xué)生運用計算機解決了實際問題,還通過各類競賽拓展了學(xué)生的團(tuán)隊協(xié)作能力和創(chuàng)新實踐能力。下一步的工作是繼續(xù)引導(dǎo)學(xué)生在程序設(shè)計課程中主動追求有意義的學(xué)習(xí),努力解決各類專業(yè)問題,通過程序設(shè)計課程建立通識教育與專業(yè)教育的橋梁。
[1] Jeannette M. Wing. Computational Thinking [J]. Communication of the ACM,2006,49(3):33-35.
[2] Stephen Cooper,Wanda Dann. Programming:A Key Component of Computational Thinking in CS Courses for Non-Majors[J]. ACM Inroads,2015,6(1):50-54.
[3] Henry M. Walker. Computational Thinking in a Non-Majors CS Course Requires a Programming Component[J]. ACM Inroads,2015,6(1):58-61.
[4] 韓建平,劉春英,胡維華.“課內(nèi)外貫穿, 競賽教學(xué)融合” 的程序設(shè)計教學(xué)模式[J]. 實驗室研究與探索,2014,33(6):169-171,176.
[5] 劉在英,楊 平,張麗曉.程序設(shè)計課程實踐教學(xué)模式的探討[J].實驗室研究與探索,2013, 32(10):156-159.
[6] 汪紅兵,姚 琳,武航星,等. C 語言程序設(shè)計課程中的計算思維探析[J].中國大學(xué)教學(xué),2014(9):59-62.
[7] 劉光蓉. 融入計算思維的C語言實驗教學(xué)設(shè)計[J].實驗室研究與探索,2015,34(10):81-83,103.
[8] 何文廣,周 珂,熊剛強.程序設(shè)計課程實驗教學(xué)改革與實踐[J].實驗室研究與探索,2016, 35(6):163-165,169.
[9] 黃 云,洪佳明,覃遵躍,等. 基于云平臺的“程序設(shè)計基礎(chǔ)”課程實驗教學(xué)改革[J].實驗室研究與探索,2016,35(2):191-195,223.
[10] TIOBE Index for May 2017. https://www.tiobe.com/tiobe-index/,2017-5-28.
[11] Thomas M. Duffy,David H. Jonassen. Constructivism and the Technology of Instruction: A Conversation [M]. Hillsdale NJ: Lawrence Erlbaum Associates,1992.
[12] Kathryn Alesandrini,Linda Larson. Teachers Bridge to Constructivism [J]. The Clearing House, 2002,75(3):118-121.
[13] 衷克定.論大學(xué)計算機課程計算思維能力培養(yǎng)的人本位回歸[J].中國大學(xué)教學(xué),2015(7):51-55, 84.
[14] 陳國良,董榮勝.計算思維與大學(xué)計算機基礎(chǔ)教育[J].中國大學(xué)教學(xué),2011(1):9-13,34.
[15] 李 廉.計算思維——概念與挑戰(zhàn)[J] .中國大學(xué)教學(xué),2012(1):7-12.
[16] 姚天昉. 在程序設(shè)計課程中引入“計算思維”的實踐[J] .中國大學(xué)教學(xué),2012(2):61-62,76.
Exploration on Ability Cultivation of Computational Thinking Based on Programming Course Reform
WEN Xinxiu1a, GU Chunhua2, WANG Jiahui1b, YANG Zeping1a, WANG Zhanquan1a
(1a. School of Information Science and Engineering; 1b. School of Science, East China University of Science and Technology, Shanghai 200237, China; 2. School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
Taking ability cultivation of computational thinking as the breakthrough point, programming course has reformed by changing teaching ideas and methods. Constructivism can help students to construct contexts of study, encourage them to set up learning objectives and stimulate them to work on collaborative learning. The programming course reform is implemented from the following four aspects: enhancing students’ abilities of thinking by merging computational thinking characteristics into teaching process, attracting students’ interests by developing classical experimental examples, meeting multi-level students’ demands by designing layered lab assignments and improving qualities of experimental teaching by developing teaching-aided platform. The results show that, the method can help students finish construction of study meaning based on their individual requests, enhance their abilities of analyzing and solving professional problems and cultivate their abilities of team cooperation.
computational thinking; programming; constructivism; teaching reform; teaching-aided platform; experimental teaching
2016-12-18
2016年Google支持教育部產(chǎn)學(xué)合作育人項目專業(yè)綜合改革項目、全國高校計算機基礎(chǔ)教育研究會教學(xué)改革課題(2016061)
文欣秀(1975-),女,河南新鄉(xiāng)人,博士,講師,研究方向:軟件工程、形式化方法、計算機教育。
Tel.:13361876389; E-mail:wenxinxiu@ecust.edu.cn
TP 341; G 642.0
A
1006-7167(2017)08-0207-04