摘要:如何在計(jì)算機(jī)程序設(shè)計(jì)課程教學(xué)中培養(yǎng)學(xué)生的計(jì)算思維能力,是計(jì)算機(jī)基礎(chǔ)教學(xué)的基本目標(biāo)之一。針對計(jì)算機(jī)程序設(shè)計(jì)課程的語法結(jié)構(gòu)和案例分散現(xiàn)象,本文提出“項(xiàng)目貫穿、循序漸進(jìn)、思維訓(xùn)練”的指導(dǎo)思想,介紹培養(yǎng)學(xué)生計(jì)算思維能力的教學(xué)方法和教學(xué)手段。
關(guān)鍵詞:計(jì)算思維;項(xiàng)目貫穿;循序漸進(jìn);計(jì)算機(jī)程序設(shè)計(jì)
在《中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系(CFC)2008》中,提出對大學(xué)生計(jì)算機(jī)應(yīng)用能力的三大要求:操作使用能力、應(yīng)用開發(fā)能力和研究創(chuàng)新能力[1]。操作使用能力主要在第一門課程大學(xué)計(jì)算機(jī)基礎(chǔ)中實(shí)現(xiàn),后兩種能力則主要體現(xiàn)在第二門課程計(jì)算機(jī)程序設(shè)計(jì)上。CFC 2008將學(xué)習(xí)目標(biāo)確定成:1)學(xué)習(xí)問題求解的思路和方法,即算法。2)理解計(jì)算機(jī)是如何具體實(shí)現(xiàn)算法的,即如何才能有效地利用計(jì)算機(jī)編程。
在大部分高校中,C語言程序設(shè)計(jì)是非計(jì)算機(jī)專業(yè)理工科學(xué)生的一門必修課程。根據(jù)CFC 2008精神,其目標(biāo)首先是使學(xué)生掌握程序設(shè)計(jì)的基本思想,能夠用C 語言編寫程序并具備一定的程序調(diào)試能力;第二是為學(xué)生今后利用計(jì)算機(jī)解決本專業(yè)問題奠定基礎(chǔ),培養(yǎng)學(xué)生利用計(jì)算機(jī)作為一種工具,乃至作為一種思維方式去思考問題、解決問題的能力。
在2010年“第六屆大學(xué)計(jì)算機(jī)課程報(bào)告論壇”中,陳國良院士指出,計(jì)算思維能力是大學(xué)計(jì)算機(jī)基礎(chǔ)課程教育過程中一個(gè)重要的培養(yǎng)目標(biāo)[2]。陳國良院士同時(shí)還指出,人類科學(xué)發(fā)展的三大支柱是理論科學(xué)、實(shí)驗(yàn)科學(xué)和計(jì)算科學(xué),與之相對應(yīng)的是人們認(rèn)識世界、改造世界的三種思維方式,即理論思維、實(shí)驗(yàn)思維和計(jì)算思維[2]。
那么,如何在計(jì)算機(jī)基礎(chǔ)教學(xué)過程中,訓(xùn)練和培養(yǎng)學(xué)生的計(jì)算思維能力,使學(xué)生學(xué)會(huì)用計(jì)算機(jī)的思維去思考問題和解決問題,是一個(gè)非常值得探討的問題。
1計(jì)算思維
美國卡內(nèi)基?梅隆大學(xué)的周以真(J.M.Wing)教授在計(jì)算機(jī)權(quán)威期刊《Communications of the ACM》上指出:計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計(jì)、人類行為理解等的一系列思維活動(dòng)[3]。周教授認(rèn)為,計(jì)算思維是人的思維,而不是機(jī)器的思維;是概念化的思維,而不是程序化思維;是一種思維方式,而不是一種產(chǎn)品;應(yīng)當(dāng)是每個(gè)人的基本技能,而不是僅屬于計(jì)算機(jī)科學(xué)家。計(jì)算思維概念,與董榮勝、古天龍等教授2002年提出的計(jì)算機(jī)方法論有著很多共同之處。計(jì)算思維是從學(xué)科思維這個(gè)層面直接討論學(xué)科的根本問題與學(xué)科的思維方式,而計(jì)算機(jī)方法論則是從方法論的角度來討論學(xué)科的根本問題和學(xué)科形態(tài)[4]。
2010年,李國杰院士進(jìn)一步指出,今天的信息世界已經(jīng)是一個(gè)物理世界、信息世界、人類社會(huì)組成的三元世界,是一種新的信息世界觀,與以往一人一機(jī)組成的、分工明確的人機(jī)共生系統(tǒng)完全不同。這種改變,使信息科學(xué)應(yīng)當(dāng)成為研究人機(jī)物社會(huì)中的信息處理過程[5]。
這種變化,對人們利用計(jì)算機(jī)分析、解決問題的能力提出了更高的要求,也對高等學(xué)校非計(jì)算機(jī)專業(yè)的計(jì)算機(jī)基礎(chǔ)教學(xué)提出了更高要求。計(jì)算機(jī)基礎(chǔ)教學(xué)需要培養(yǎng)學(xué)生的計(jì)算思維能力,并提高其信息素養(yǎng),使學(xué)生在處理問題時(shí),能夠更好地利用計(jì)算機(jī)作為一種不可或缺的工具進(jìn)行思維、表達(dá),從而對各種信息進(jìn)行深層次的加工處理,以便把其掌握的專業(yè)知識更好地應(yīng)用到科學(xué)研究和生產(chǎn)中,促進(jìn)科技進(jìn)步和社會(huì)生產(chǎn)力的發(fā)展。
2C語言程序設(shè)計(jì)課程面臨的問題
李未院士講到程序設(shè)計(jì)是計(jì)算機(jī)學(xué)科的核心課程,吳文虎教授也談到程序設(shè)計(jì)課程的教學(xué)經(jīng)驗(yàn),凡是講授這門課程的教師都知道,這門課程比較難于教授,尤其是為非計(jì)算機(jī)專業(yè)講授這門課程。在基礎(chǔ)教學(xué)中,這門課程難于講授的主要原因可能有以下幾方面:
1) 教師用“專業(yè)”眼光去看待非專業(yè)的學(xué)生。
2) 教學(xué)中重理論輕實(shí)踐,實(shí)踐課時(shí)不足,對程序設(shè)計(jì)能力的培養(yǎng)不夠。
3) 例題多而散,學(xué)習(xí)后,學(xué)生不能得到一個(gè)比較綜合的訓(xùn)練。
4) 學(xué)生的水平參差不齊,教學(xué)中對學(xué)生個(gè)性化學(xué)習(xí)需求關(guān)注不夠。
5) 課程特有的屬性決定的。各種程序設(shè)計(jì)語言的語法結(jié)構(gòu)一般都是零散的,學(xué)生難于相互關(guān)聯(lián)、總結(jié),采用的案例也是比較零散、短小的、關(guān)聯(lián)不大。學(xué)生經(jīng)常是學(xué)會(huì)了全部的語法知識,但仍然不知道這門語言能做什么,能解決什么實(shí)際的問題,甚至不知道如何解決問題。
6) 學(xué)生精力投入不足或?qū)W習(xí)方法不當(dāng),大部分學(xué)生認(rèn)為自己畢業(yè)又不從事計(jì)算機(jī)軟件開發(fā)工作,沒有必要學(xué)習(xí)程序設(shè)計(jì)課程。
針對這些問題,結(jié)合CFC 2008精神,我們在C語言程序設(shè)計(jì)課程講授過程中,以學(xué)生計(jì)算思維能力培養(yǎng)為目標(biāo),提出了“項(xiàng)目貫穿、循序漸進(jìn)、思維訓(xùn)練”的指導(dǎo)思想,以改變傳統(tǒng)計(jì)算機(jī)程序設(shè)計(jì)課程中側(cè)重向?qū)W生介紹語法結(jié)構(gòu)的做法。
3教學(xué)方法改革及計(jì)算思維能力培養(yǎng)
3.1項(xiàng)目驅(qū)動(dòng)教學(xué)
在理論教學(xué)環(huán)節(jié)上,本著一個(gè)項(xiàng)目貫穿整個(gè)課程教學(xué)的思想。我們用“猜數(shù)游戲”為主、常見問題為輔進(jìn)行各個(gè)章節(jié)的講授。具體做法如表1所示。
3.2循序漸進(jìn)教學(xué)
心理學(xué)家認(rèn)為,模仿是孩子學(xué)習(xí)的第一步。通過模仿,孩子不僅能夠復(fù)制行為,而且也能對模仿的行為進(jìn)行加工,有所創(chuàng)新。人們經(jīng)常把模仿描述成“學(xué)習(xí)的捷徑”。在程序設(shè)計(jì)課程的學(xué)習(xí)過程中同樣如此。讓學(xué)生通過模仿現(xiàn)有示例,逐步掌握C語言中的各種語法要求、控制結(jié)構(gòu),不斷加強(qiáng)學(xué)生對于課程的學(xué)習(xí)興趣。
在實(shí)踐教學(xué)環(huán)節(jié)上,我們將實(shí)驗(yàn)內(nèi)容按照“驗(yàn)證—調(diào)試—設(shè)計(jì)”的順序進(jìn)行設(shè)計(jì)。
1) 驗(yàn)證:安排學(xué)生對學(xué)習(xí)過的內(nèi)容利用現(xiàn)有的簡單程序進(jìn)行驗(yàn)證。
2) 調(diào)試示例:編寫簡單的程序作為調(diào)試示例,在其中設(shè)置學(xué)生經(jīng)常遇到的各種小錯(cuò)誤(包括語法錯(cuò)誤、邏輯錯(cuò)誤),讓學(xué)生按照實(shí)驗(yàn)指導(dǎo)中的講解,逐步找到各個(gè)錯(cuò)誤。
3) 調(diào)試練習(xí):讓學(xué)生根據(jù)前面的調(diào)試示例,修改類似程序的錯(cuò)誤,并進(jìn)行總結(jié)。
4) 編程示例:針對常見問題進(jìn)行分析、講解、編程,讓學(xué)生學(xué)習(xí)問題分析方法和程序設(shè)計(jì)方法。
5) 編程練習(xí):根據(jù)編程示例,將題目進(jìn)行略微調(diào)整或與前面的知識相結(jié)合,讓學(xué)生進(jìn)行編程解決。
通過上述實(shí)踐步驟,學(xué)生可以逐漸掌握編寫程序的語法規(guī)范及思維技巧。
在理論教學(xué)環(huán)節(jié),同樣按照循序漸進(jìn)的原則進(jìn)行問題講解。例如,在講授九九表輸出問題時(shí),按照如下的順序設(shè)計(jì)問題并編程,逐步實(shí)現(xiàn)九九表的輸出。
1) 輸出1到9這幾個(gè)數(shù)字。
2) 輸出9行1到9。
3) 修改九九表中各行數(shù)值的個(gè)數(shù),將輸出的9行數(shù)字轉(zhuǎn)化成九九表格式。
4) 最后研究數(shù)字的變化規(guī)律,實(shí)現(xiàn)真正九九表的輸出。
3.3多角度思維訓(xùn)練
在C語言程序設(shè)計(jì)課程中,計(jì)算思維的能力要求主要體現(xiàn)在學(xué)生對于問題的分析、解決能力培養(yǎng)上。如何在課程講述過程中,訓(xùn)練、提高學(xué)生分析問題、解決問題的能力,是講授這門課程的全體教師的責(zé)任。我校除了在課程內(nèi)容設(shè)置上按照“一個(gè)項(xiàng)目貫穿課程”的指導(dǎo)思想進(jìn)行授課、在實(shí)踐環(huán)節(jié)上按照“驗(yàn)證—調(diào)試—設(shè)計(jì)”的順序進(jìn)行設(shè)計(jì),還在教學(xué)過程中注重以下幾個(gè)方面。
1) 上機(jī)實(shí)驗(yàn)流程規(guī)范化。要求學(xué)生對于實(shí)驗(yàn)內(nèi)容,要按照“課前預(yù)習(xí)—分析問題—設(shè)計(jì)算法—編寫程序—上機(jī)調(diào)試”的順序依次進(jìn)行,使他們養(yǎng)成一個(gè)好的學(xué)習(xí)和思維習(xí)慣,逐步訓(xùn)練、提高他們分析問題、解決問題的能力。
2) 答疑指導(dǎo)引導(dǎo)化。在學(xué)生有疑問時(shí),不直接為學(xué)生指出其問題,而是用提問的方式引導(dǎo)學(xué)生逐步自己找到問題所在。例如,學(xué)生的程序代碼為:
學(xué)生提出要輸出兩個(gè)數(shù)的乘積,怎么輸出結(jié)果不對呢?可以依次提出問題:應(yīng)該輸出什么信息呢?計(jì)算機(jī)屏幕上的顯示和預(yù)期有什么不同?有哪些情況可以造成這種不同呢?printf函數(shù)的一般格式是什么,每部分什么含義?你所寫的printf函數(shù)與一般格式一致嗎?這樣,通過依次設(shè)置問題,既引導(dǎo)學(xué)生自己發(fā)現(xiàn)了程序中的錯(cuò)誤所在,又訓(xùn)練并逐步提高了學(xué)生發(fā)現(xiàn)問題、改正問題的能力。
3) 問題趣味化。常規(guī)的、一成不變的問題很難激起學(xué)生的學(xué)習(xí)興趣,趣味性是激起學(xué)習(xí)興趣的一個(gè)可行手段。那么,如何利用趣味化的問題講解程序設(shè)計(jì)中的各種控制結(jié)構(gòu)?這需要從案例設(shè)計(jì)入手。例如:用出租車的計(jì)費(fèi)方式和if結(jié)構(gòu)結(jié)合、用所得稅的計(jì)算方式和switch結(jié)構(gòu)結(jié)合、讓學(xué)生把一天的行程用基本控制結(jié)構(gòu)進(jìn)行描述等。
4) 提倡算法的多樣性。程序設(shè)計(jì)課程的價(jià)值之一在于訓(xùn)練、提高學(xué)生的計(jì)算思維能力,如果學(xué)生都按照教師的邏輯思維習(xí)慣進(jìn)行分析問題、解決問題,這不能不說是一種失敗。所以,在讓學(xué)生學(xué)習(xí)教師分析問題、解決問題的同時(shí),要倡導(dǎo)算法的多樣性,培養(yǎng)、激勵(lì)學(xué)生的創(chuàng)新意識、探索精神和問題求解能力。例如,有些同學(xué)數(shù)學(xué)基礎(chǔ)很好,有一些問題,他們總會(huì)用數(shù)學(xué)的方式先進(jìn)行初步解決,再結(jié)合計(jì)算機(jī)進(jìn)行編程。對于這些同學(xué),一定要進(jìn)行及時(shí)的鼓勵(lì),并介紹他們的做法,使之感到編程的成就感。
5) 注重算法的簡化和優(yōu)化[6]。我們不能只提倡算法多樣化,還要引導(dǎo)學(xué)生對算法進(jìn)行研究,逐步達(dá)到簡化并優(yōu)化算法的目標(biāo)。例如我們常用的“百雞百錢”問題,很多學(xué)生按照公雞、母雞、小雞的順序用三重循環(huán)進(jìn)行實(shí)現(xiàn)。我們就提出“是否可以用二重循環(huán)實(shí)現(xiàn)呢”,學(xué)生仔細(xì)一想,確實(shí)可以改成二重循環(huán)進(jìn)行實(shí)現(xiàn)。再比較兩次的實(shí)現(xiàn)方法,發(fā)現(xiàn)循環(huán)次數(shù)由100*100*100=1000000降到了100*100=10000,降幅達(dá)到了99%。一個(gè)簡單的改進(jìn),讓學(xué)生看到了算法改進(jìn)的魅力。這也讓部分同學(xué)想到“這個(gè)問題是否可以進(jìn)一步簡化呢”,再進(jìn)行分析,發(fā)現(xiàn)公雞的數(shù)量不可能大于32,從而可以將算法中公雞數(shù)量上限從100改到32,母雞數(shù)量上限也改成98,循環(huán)次數(shù)降到了32*98=3136,比二重循環(huán)又減少了近70%。這一系列的簡化,充分調(diào)動(dòng)了學(xué)生的學(xué)習(xí)興趣。
4結(jié)語
在計(jì)算機(jī)程序設(shè)計(jì)課程的講授中,通過采用項(xiàng)目貫穿、循序漸進(jìn)及多角度的思維訓(xùn)練方法,學(xué)生分析問題和解決問題的能力得到了明顯提高,也有部分同學(xué)因無法保證前后知識的連貫性,造成后期難以跟上正常教學(xué)進(jìn)度,出現(xiàn)掉隊(duì)現(xiàn)象。如何將計(jì)算機(jī)程序設(shè)計(jì)課程中的分散語法結(jié)構(gòu)相互關(guān)聯(lián)起來,利用好的案例提高學(xué)生學(xué)習(xí)積極性,培養(yǎng)、提高學(xué)生的計(jì)算思維能力,仍是值得探索的問題。
參考文獻(xiàn):
[1] 中國高等院校計(jì)算機(jī)基礎(chǔ)教育改革課題研究組. 中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系2008[M]. 北京:清華大學(xué)