徐晶+周彩英+盧雪松+楚紅
摘要:培養(yǎng)計算思維是培養(yǎng)復(fù)合型創(chuàng)新人才的重要內(nèi)容之一。該文結(jié)合我校非計算機專業(yè)程序設(shè)計課程教學(xué)的實際,以C語言程序設(shè)計課程為例,整合教學(xué)內(nèi)容,對基本語法的問題式教學(xué)、基本控制結(jié)構(gòu)的案例教學(xué)及模塊化設(shè)計的任務(wù)驅(qū)動教學(xué)等研究性教學(xué)法進(jìn)行探討,旨在培養(yǎng)學(xué)生的計算思維能力,進(jìn)一步提高學(xué)生的創(chuàng)新能力。
關(guān)鍵詞:計算思維;程序設(shè)計;研究性教學(xué)
中圖分類號:G424 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)28-0150-03
1 背景
1.1 計算思維
“計算思維”一詞早在2006年美國卡內(nèi)基梅?。–MU)的周以真教授就給出了定義,其本質(zhì)是抽象和自動化。周教授強調(diào)計算思維不僅屬于計算機科學(xué)家,而應(yīng)是每一個人的基本技能。[1]2010年我國九校聯(lián)盟會議也發(fā)表聲明指出,培養(yǎng)復(fù)合型創(chuàng)新人才的一個重要內(nèi)容就是要潛移默化地培養(yǎng)學(xué)生養(yǎng)成一種新的思維方式——計算思維。[2]
1.2 研究性教學(xué)
高等教育的任務(wù)是培養(yǎng)具有創(chuàng)新精神創(chuàng)新能力的高級專門人才。研究性教學(xué)作為一種開放式教學(xué)模式,是本科院校培養(yǎng)人才的重要途徑。2000年以來,教育部先后出臺“關(guān)于加強高等學(xué)校本科教學(xué)工作提高教學(xué)質(zhì)量的若干意見”等文件,都明確提出積極推動研究性教學(xué),提高大學(xué)生的創(chuàng)新能力。[3]各高校積極將研究性教學(xué)理念融入到教學(xué)改革中,積極探討研究性教學(xué)的理論與實踐模式。
由此可見,在當(dāng)今信息技術(shù)時代,培養(yǎng)學(xué)生的計算思維能力是培養(yǎng)具有創(chuàng)新能力的人才的必要條件。在積極實踐研究性教學(xué)改革過程中,不斷滲透計算思維的思想,培養(yǎng)學(xué)生計算思維能力,是一項非常有意義的重要任務(wù)。
2 我校計算機基礎(chǔ)教學(xué)的現(xiàn)狀
為應(yīng)對高校計算機基礎(chǔ)的教學(xué)改革,我校對計算機基礎(chǔ)課程的教學(xué)做了改動,非計算機專業(yè)學(xué)生第1學(xué)期先行開設(shè)大學(xué)計算機基礎(chǔ)課程,第2學(xué)期開設(shè)程序設(shè)計課程。這樣使新生在了解計算思維的概念后,能有意識地使用計算思維去思考問題、去解決一些基本問題,同時對后續(xù)開設(shè)的程序設(shè)計課程有一定的鋪墊作用。
我校在研究性教學(xué)初步實踐的基礎(chǔ)上,現(xiàn)已在18個專業(yè)全面開展研究性教學(xué)改革,計算機公共課教學(xué)也在此列中。將研究性教學(xué)改革應(yīng)用于程序設(shè)計課程,正好解決了目前非計算機專業(yè)程序設(shè)計課程教學(xué)過程中尷尬局面,其一是教學(xué)過程中偏重語法講解,內(nèi)容多、晦澀難懂;其二實驗課時少,學(xué)生編程能力和調(diào)試能力差等。
程序設(shè)計課程正好也是訓(xùn)練學(xué)生計算思維能力的一個重要平臺。因而,如何在程序設(shè)計課程的研究性教學(xué)中訓(xùn)練學(xué)生的計算思維能力,又如何利用學(xué)生的計算思維能力促進(jìn)程序設(shè)計課程的教學(xué)改革,則是我們計算機公共課教學(xué)工作者要積極思考并付諸實踐的重要課題。
3 注重計算思維的程序設(shè)計課程研究性教學(xué)探討
我們在非計算機專業(yè)開展注重計算思維的程序設(shè)計課程(以《C語言程序設(shè)計》課程為例)研究性教學(xué),是以培養(yǎng)創(chuàng)新人才為目標(biāo),激勵和引導(dǎo)學(xué)生主動發(fā)現(xiàn)問題、分析問題和解決問題,在以教師為主導(dǎo)、學(xué)生為主體的探究過程中運用計算思維的方法獲取知識、訓(xùn)練思維、培養(yǎng)能力。
根據(jù)計算思維和研究性教學(xué)的特點,我們從本校實際情況出發(fā),實施C語言程序設(shè)計課程研究性教學(xué)以課堂研究性教學(xué)為主,且又不僅僅局限于課堂中,輔以學(xué)生自主探究、合作學(xué)習(xí)、網(wǎng)絡(luò)自測、觀看視頻。對教學(xué)內(nèi)容進(jìn)行整合,將課程內(nèi)容分為幾個階梯式的程序設(shè)計階段,依次是語法基礎(chǔ)、基本控制結(jié)構(gòu)、模塊化程序設(shè)計等。教學(xué)過程中,根據(jù)具體教學(xué)內(nèi)容靈活運用適合于研究性教學(xué)的方法和手段,如問題式教學(xué)法、案例教學(xué)法、任務(wù)驅(qū)動教學(xué)法等,激發(fā)學(xué)生的學(xué)習(xí)興趣,注重解決實際問題的程序設(shè)計思想與方法,注重計算思維能力的培養(yǎng)。
3.1 基本語法的問題式教學(xué),培養(yǎng)計算思維能力
問題式教學(xué)通過提出一系列問題來組織教學(xué)內(nèi)容,把問題貫穿于教學(xué)過程的始終。古人云“學(xué)起于思,思源于疑”,問題、疑問是思維的“啟發(fā)劑”。我們首先要創(chuàng)設(shè)問題情境,激活學(xué)生思維;交流討論,啟發(fā)學(xué)生反向思維;解決疑問,學(xué)會計算思維的方法。
C語言的基本語法、基本控制結(jié)構(gòu)本身就蘊含著重要的計算思維。[4]我們通過不斷設(shè)問、反問,來逐步分析、挖掘、探索C語言語法的知識內(nèi)涵,讓學(xué)生領(lǐng)悟語法定義的目的、形式和使用方式。這樣讓學(xué)生既學(xué)到了C語言基本語法,又有利于在使用過程中少犯錯誤,即使出現(xiàn)語法錯誤也能快速找出癥結(jié)所在。
示例問題:將華氏溫度轉(zhuǎn)換成攝氏溫度。轉(zhuǎn)換公式:C=5.0/9*(F-32),其中F為華氏溫度。
講解示例,首先設(shè)問“如何告訴計算機所要完成任務(wù)?”,當(dāng)然用符號表示(即符號化),這是一次抽象的過程。再問“直接輸入轉(zhuǎn)換公式,計算機能識別公式中的符號嗎?”,演示發(fā)現(xiàn)系統(tǒng)會報錯,無法識別F和C。接著問“怎樣讓系統(tǒng)接受未知的數(shù)據(jù)?”及“在C語言中如何“介紹”新數(shù)據(jù)?”,此時讓學(xué)生去自學(xué)、討論數(shù)據(jù)對象的命名規(guī)則及基本數(shù)據(jù)類型,并帶著問題“為何不能將形如int、1st、W.Join作為對象名(用戶標(biāo)識符)?int和Int在有何區(qū)別?”去思考。通過討論最終確認(rèn),使用“float F,C;”來聲明兩個實型變量F和C。這又一次的抽象使學(xué)生不僅學(xué)到了知識,而且還體會計算思維的確定性和形式化。
聲明變量后,設(shè)問“能運行并得到正確結(jié)果嗎?答案是多少?”,此時讓學(xué)生手算或心算,有人發(fā)現(xiàn)F的值未知,無法計算。但教師演示系統(tǒng)卻未報錯,提問“為什么?”學(xué)生帶著好奇,教師道出原因,讓其進(jìn)一步了解變量的含義。為得到正確結(jié)果,需要先為F賦值,設(shè)問“怎么賦值?”,學(xué)生回答“F=50”,教師給予肯定的同時反問,這樣系統(tǒng)每次運行得到的結(jié)果會怎樣?讓學(xué)生發(fā)現(xiàn)這樣的程序不具備通用性,由此引出C語言的輸入輸出庫函數(shù)。
以問題為中心的教學(xué)示例中,將學(xué)生思考、討論和教師講解、點評有機地結(jié)合起來,師生在互動中學(xué)習(xí)、探究,教師引導(dǎo)學(xué)生積極主動地獲取知識,學(xué)生通過基本語法的學(xué)習(xí)也培養(yǎng)了計算思維能力。
3.2 三種控制結(jié)構(gòu)的案例教學(xué),強化計算思維能力
案例的選取是案例教學(xué)中的關(guān)鍵因素,[5]選取的案例所反應(yīng)的知識點要豐富,具有針對性、啟發(fā)性和擴展性,應(yīng)由簡單到復(fù)雜。針對結(jié)構(gòu)化程序設(shè)計思想中的順序、選擇和循環(huán)三種結(jié)構(gòu),通過抽象問題、分組討論、集中討論和總結(jié)反思等環(huán)節(jié),使學(xué)生在案例分析的過程中體會計算思維的特征,強化計算思維能力。
案例1,已知三條邊長,求三角形面積。[6]
學(xué)生課前準(zhǔn)備案例時,收集或查找各種計算三角形面積的方法。在小組討論時每位學(xué)生給出不同的解題思路,相互間指出問題,比較哪種算法描述更簡潔。課堂教學(xué)時采用集中討論,每組推選代表簡述討論結(jié)果,由教師和其他組學(xué)生給予評價。教師在教學(xué)過程中不斷啟發(fā)學(xué)生、鼓勵學(xué)生,同時給出總結(jié),比如該案例使用海倫公式計算是較方便的方法,使用語言描述算法時注意的語法規(guī)則。如果有小組提出“三邊能否構(gòu)成三角形”問題,則應(yīng)大力表揚,促使學(xué)生提高思維的縝密性和嚴(yán)謹(jǐn)性,同時順理成章地引入分支結(jié)構(gòu)。
案例2,比較兩位學(xué)生的成績,輸出最高分。如果人數(shù)擴展到3人、N人,如何找出最高分?
案例第1問解決思路非常清晰簡潔,使用1次雙分支結(jié)構(gòu)即可,至少兩種描述方法:if-else和switch-case結(jié)構(gòu)。當(dāng)比較人數(shù)擴展到3人時,和學(xué)生探討出多種描述算法,既可以使用嵌套的分支結(jié)構(gòu),也可兩次使用分支結(jié)構(gòu)。通過討論可以開闊學(xué)生的思路,又促使學(xué)生主動思考,鼓勵思維的多樣性。案例的最后一問是難點,教師應(yīng)給予指點,讓學(xué)生帶著問題“N個成績?nèi)绾未鎯??使用N個簡單變量可行嗎?N個成績需要比較多少次?”去查資料、思考,有思路也有困惑?!癗個成績比較N-1次找出最高分”答案是肯定的,但數(shù)據(jù)存儲是難點。一種思路是用數(shù)組,引入數(shù)組的概念,為下一章做好鋪墊;另一種思路依舊用簡單變量,但用N個簡單變量是不現(xiàn)實的,引導(dǎo)學(xué)生縱向思考,每次存放一個成績,重復(fù)N次即可,引入循環(huán)結(jié)構(gòu)。解決方案是用兩個變量,擂臺思想,循環(huán)N-1次就能找出N個中的最高分。
通常我們設(shè)計的教學(xué)案例都不是很復(fù)雜,讓學(xué)生努力一下能解決,但是要具備多樣性和擴展性,讓學(xué)生從不同角度認(rèn)識問題,用不同方式描述算法,用不同方法實現(xiàn)問題求解。用程序設(shè)計語言描述、解決問題,正是將人的日常思維轉(zhuǎn)換到計算機思維的過程。
3.3 模塊化設(shè)計的任務(wù)驅(qū)動教學(xué),提高計算思維層次
任務(wù)驅(qū)動教學(xué)是一種建立在建構(gòu)主義學(xué)習(xí)理論基礎(chǔ)上的教學(xué)模式,[7]它以教師為主導(dǎo)、學(xué)生為主體,教、學(xué)雙方都圍繞若干項任務(wù)展開,在求知欲的驅(qū)動下,學(xué)生采用自主探究和協(xié)作學(xué)習(xí)方式,根據(jù)對任務(wù)的理解,運用共有知識和已有經(jīng)驗提出解決方案、完成特定任務(wù)。
將任務(wù)驅(qū)動教學(xué)法應(yīng)用于程序設(shè)計課程教學(xué)的后半期,此時學(xué)生已具備一定的程序設(shè)計基礎(chǔ)知識和計算思維能力,教師把精心準(zhǔn)備的小系統(tǒng)(如一元多項式運算系統(tǒng)、基本算術(shù)運算測試系統(tǒng)、矩陣運算系統(tǒng)及小規(guī)模信息處理系統(tǒng))的開發(fā)任務(wù),分配給每個協(xié)作小組,也可讓小組(或組長)從若干任務(wù)中挑選。
每個小組接到不同任務(wù)后,結(jié)合系統(tǒng)設(shè)計要求,采用自頂向下、逐步細(xì)化、模塊化的方法,設(shè)計系統(tǒng)的總體結(jié)構(gòu),包括系統(tǒng)的基本處理流程、組織結(jié)構(gòu)、模塊劃分、功能分配、接口設(shè)計和數(shù)據(jù)結(jié)構(gòu)設(shè)計等。比如一元多項式運算系統(tǒng),其設(shè)計要求是實現(xiàn)一元多項式的加、減、乘、除運算。從表面上看系統(tǒng)應(yīng)由1個主模塊和4個子模塊組成,起主導(dǎo)作用的教師要引導(dǎo)學(xué)生運用計算思維的關(guān)注點分離、抽象和分解的方法進(jìn)行分析。為了能進(jìn)行運算,首先要輸入一元多項式,運算結(jié)束后要輸出一元多項式,增加輸入、輸出兩個子模塊。在實現(xiàn)四種運算時,引導(dǎo)學(xué)生使用計算思維的約簡、嵌入、轉(zhuǎn)化等方法,將其轉(zhuǎn)化成合并同類項、降冪排列、刪除系數(shù)為0項等問題,又需增加4~5個功能模塊。在任務(wù)驅(qū)動下,協(xié)作小組成員通過參考書、網(wǎng)絡(luò)等自主檢索、探究、思考、討論,對每個模塊進(jìn)一步細(xì)化,確定每個模塊的具體功能,畫出系統(tǒng)的組織結(jié)構(gòu)圖和基本處理流程。在設(shè)計數(shù)據(jù)結(jié)構(gòu)時,小組成員討論是從已會的一維、二維數(shù)組中選擇,還是從未學(xué)的結(jié)構(gòu)數(shù)組、鏈表中選擇,既要考慮能便于數(shù)據(jù)的處理,又要考慮組內(nèi)成員的水平,因為每個系統(tǒng)需組內(nèi)成員分工協(xié)作才能完成。組長此時可以協(xié)調(diào),先用一維數(shù)組實現(xiàn),后期也可在素質(zhì)較高的學(xué)生帶領(lǐng)下使用鏈表等實現(xiàn),這樣小組成員相互協(xié)作、相互啟發(fā)、共同提高,體現(xiàn)團隊合作的理念。
每位成員領(lǐng)取分解的任務(wù)后,根據(jù)共同確定的數(shù)據(jù)結(jié)構(gòu)和模塊接口的描述,對具體子模塊進(jìn)行詳細(xì)設(shè)計,給出詳細(xì)的算法描述。然后,分組討論每位成員的算法可行性,以及與其他子模塊之間的調(diào)用關(guān)系,如遇到解決不了的問題,教師可參與討論,給予一定指導(dǎo),調(diào)動大家的積極性。算法確定后,每位學(xué)員根據(jù)算法編寫代碼并寫出設(shè)計報告。協(xié)作小組成員再集中交流各自完成的情況,由組長集成系統(tǒng)代碼,組員一起參與調(diào)試過程,發(fā)現(xiàn)問題解決問題,共同進(jìn)步。每位學(xué)員按照報告模板提交各自的設(shè)計成果,采用答辯的形式在班級討論課上進(jìn)行匯報。答辯過程中,教師和其他學(xué)生可以提出看法和觀點,教師應(yīng)對答辯學(xué)生的講述和提出異議的觀點進(jìn)行正誤的分析,因為學(xué)生為了完成這項任務(wù)都是深思熟慮的,教師及時地分析總結(jié)歸納,不僅使學(xué)生對所學(xué)知識的鞏固,而且進(jìn)一步擴展學(xué)生的計算思維能力。
采用任務(wù)驅(qū)動教學(xué)法不再強調(diào)系統(tǒng)開發(fā)的成功與否,而是強調(diào)學(xué)生在系統(tǒng)設(shè)計過程中的收獲。每位學(xué)生通過對具體問題分析、討論、解決,不斷訓(xùn)練自己的計算思維能力,通過以小組方式進(jìn)行一個小規(guī)模系統(tǒng)的設(shè)計,將學(xué)生的計算思維能力提高了一個層次。
4 結(jié)語
在程序設(shè)計課程研究性教學(xué)過程中不斷滲透計算思維的思想,更加利于學(xué)生對知識的掌握,同時利于提高計算思維能力,推動學(xué)生創(chuàng)新能力的進(jìn)一步發(fā)展。我們從學(xué)校實際出發(fā),提出整合教學(xué)內(nèi)容,對基本語法的問題式教學(xué)、基本控制結(jié)構(gòu)的案例教學(xué)及模塊化設(shè)計的任務(wù)驅(qū)動教學(xué)等研究性教學(xué)法進(jìn)行探討,以期使教師能夠擺脫教材束縛,將理論與實驗課時、課內(nèi)和課外充分利用,更好地發(fā)揮教學(xué)的自主性,促進(jìn)學(xué)生的計算思維能力的提高。
參考文獻(xiàn):
[1] Jeannette M.Wing.Computational Thinking[J].Communications of the ACM,2006,49(3):33-35.
[2] 何欽銘,陸漢權(quán),馮博琴. 計算機基礎(chǔ)教學(xué)的核心任務(wù)是計算思維能力的培養(yǎng)[J]. 中國大學(xué)教學(xué),2010( 9):5-9.
[3] 徐風(fēng)生. 研究性教學(xué)的理論探討與實踐[J]. 高等理科教育,2012(6):44-48.
[4] 徐新海,林宇斐. 注重計算機思維的啟發(fā)式C語言語法教學(xué)[J]. 計算機教育,2014(9):1-4.
[5] 唐芳. 案例教學(xué)法與任務(wù)驅(qū)動教學(xué)法的比較[J]. 順德職業(yè)技術(shù)學(xué)院學(xué)報,2011(10):36-37
[6] 周彩英. C語言程序設(shè)計[M]. 北京:清華大學(xué)出版社,2011.
[7] 牟琴,譚良,周雄峻. 基于計算思維的任務(wù)驅(qū)動式教學(xué)模式的研究[J]. 現(xiàn)代教育技術(shù),2011(6): 44-49.