孫亞紅
摘要:計(jì)算思維已成為國(guó)際計(jì)算機(jī)教育界研究的熱點(diǎn)。在《算法設(shè)計(jì)與分析》課程的教學(xué)中,如何培養(yǎng)和訓(xùn)練學(xué)生的計(jì)算思維,該文提出了一種基于多樣化訓(xùn)練的計(jì)算思維培養(yǎng)方式,并分析了在課程的教學(xué)中如何具體實(shí)施該方法。
關(guān)鍵詞:計(jì)算思維;多樣化訓(xùn)練;算法設(shè)計(jì)與分析
中圖分類號(hào):G642文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)16-3910-02
The Research of Training Computational Thinking in Teaching Algorithm Design and Analysis
SUN Ya-hong
(Xian Fanyi University, Xian 710105,China)
Abstract: Computational thinking has become the hot issue in current international education. How to develop studentshabit of using the computational thinking in real life, this article discusses a computational thinking training model based on variety practice in teaching al gorithm design and analysis. And give a lot of examples to illustrate the training model.
Key words: computational thinking; variety practice; algorithm design and analysis
自2006年3月,美國(guó)卡內(nèi)基·梅隆大學(xué)計(jì)算機(jī)科學(xué)系主任周以真(Jeannette M. Wing)教授在美國(guó)計(jì)算機(jī)權(quán)威期刊《Communica tions of the ACM》上發(fā)表《Computational Thinking》一文以來,國(guó)際國(guó)內(nèi)計(jì)算機(jī)教育界掀起了研究計(jì)算思維的熱潮。2008年6月,美國(guó)計(jì)算機(jī)科學(xué)技術(shù)教師協(xié)會(huì)(CSTA)發(fā)表文章《Computational Thinking:A problem solving tool for every classroom》,在該文章中,作者給出了計(jì)算思維的定義,并分類歸納了社會(huì)科學(xué)、計(jì)算機(jī)科學(xué)、自然科學(xué)、數(shù)學(xué)、生命科學(xué)等學(xué)科領(lǐng)域中關(guān)于計(jì)算思維的經(jīng)典論文;2008年美國(guó)國(guó)家科學(xué)基金會(huì)NSF通過了一項(xiàng)計(jì)算使能的科學(xué)發(fā)現(xiàn)和技術(shù)創(chuàng)新CDI(Cyber-Enabled Discovery and Innovation)計(jì)劃,該計(jì)劃進(jìn)一步強(qiáng)調(diào)了“計(jì)算思維”領(lǐng)域的創(chuàng)新對(duì)自然科學(xué)和工程技術(shù)領(lǐng)域發(fā)展的推動(dòng)作用。同時(shí),計(jì)算思維在國(guó)內(nèi)也得到了廣泛的討論。2008年11月,由全國(guó)計(jì)算機(jī)教育研究會(huì)主持的“計(jì)算思維與計(jì)算機(jī)導(dǎo)論專題學(xué)術(shù)研討會(huì)”在廣西桂林召開,參加會(huì)議的學(xué)者總結(jié)了當(dāng)前計(jì)算思維的研究進(jìn)展?fàn)顩r,并討論了計(jì)算思維對(duì)計(jì)算機(jī)教育的影響。2009年7月,在NOI2009開幕式和NOI 25周年紀(jì)念會(huì)上,中科院計(jì)算技術(shù)研究所所長(zhǎng)李國(guó)杰院士進(jìn)一步闡述了計(jì)算思維的定義,他指出“計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問題、設(shè)計(jì)系統(tǒng)和理解人類的行為,它選擇合適的方式去陳述一個(gè)問題,對(duì)問題的相關(guān)方面建模并用最有效的辦法實(shí)現(xiàn)問題求解”;2009年12月,王亞東等人在《計(jì)算與計(jì)算思維》一文中討論了計(jì)算思維對(duì)各門學(xué)科產(chǎn)生的影響,并提出應(yīng)該在計(jì)算機(jī)專業(yè)的各門課程中滲透“計(jì)算思維”的設(shè)想;2010年12月,張曉茹等人在《再談?dòng)?jì)算思維》一文中通過對(duì)計(jì)算機(jī)科學(xué)思維,計(jì)算思維和計(jì)算機(jī)思維概念進(jìn)行一致性分析,從不同方面分析和闡述了計(jì)算思維的特征,并對(duì)計(jì)算思維研究的基本問題進(jìn)行了初步探索。盡管如此,如何在具體的課程教學(xué)中培養(yǎng)學(xué)生的計(jì)算思維能力仍處于起步階段,還沒有形成一套成熟的教學(xué)指導(dǎo)體系。那么,如何在課堂上結(jié)合課本的知識(shí)點(diǎn)培養(yǎng)學(xué)生的計(jì)算思維能力,使得計(jì)算思維成為學(xué)生的一種思維習(xí)慣;如何在學(xué)生的四年大學(xué)學(xué)習(xí),持續(xù)不斷地培養(yǎng)學(xué)生的計(jì)算思維,使學(xué)生能夠運(yùn)用計(jì)算思維的方法進(jìn)行問題的分析和思考,是一個(gè)重要且值得探討的問題。基于此,該文依據(jù)計(jì)算思維的方法,在《算法設(shè)計(jì)與分析》課程的教學(xué)中,提出一種基于算法多樣化訓(xùn)練的計(jì)算思維培養(yǎng)方法。經(jīng)實(shí)踐驗(yàn)證,該方法有利于幫助教師提高教學(xué)效率,挖掘?qū)W生潛能,有利于提高學(xué)生分析問題,解決問題的能力。
1計(jì)算思維
什么是計(jì)算思維?計(jì)算思維同我們的閱讀、寫作能力一樣,是人類的基本思維方式。這種思維方式運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念和方法對(duì)問題進(jìn)行描述,建模,求解。它是一種具有普適性的科學(xué)思維方法。為了更加具體的、詳細(xì)的說明這一概念,周教授將計(jì)算思維的概念進(jìn)一步定義為以下幾個(gè)方面內(nèi)容:
1)通過約簡(jiǎn)、嵌人、轉(zhuǎn)化和仿真等方法,把一個(gè)看來困難的問題闡釋成一個(gè)我們知道問題怎樣解決的思維方法。
2)是一種遞歸思維是一種并行處理能把代碼譯成數(shù)據(jù)又能把數(shù)據(jù)譯成代碼,是一種多維分析推廣的類型檢查方法。
3)是一種采用抽象和分解來控制龐雜的任務(wù)或進(jìn)行巨大復(fù)雜系統(tǒng)設(shè)計(jì)的方法,是一種基于關(guān)注點(diǎn)分離的方法。
4)是一種選擇合適的方式陳述一個(gè)問題,或?qū)σ粋€(gè)問題的相關(guān)方面建模使其易于處理的思維方法。
5)是按照預(yù)防、保護(hù),通過冗余、容錯(cuò)、糾錯(cuò)方式,并從最壞情況進(jìn)行系統(tǒng)恢復(fù)的一種思維方法。
6)是利用啟發(fā)式推理尋求解答,即在不確定情況下的規(guī)劃、學(xué)習(xí)和調(diào)度的思維方法。
7)是利用海量數(shù)據(jù)來加快計(jì)算,在時(shí)間和空間之間,在處理能力和存儲(chǔ)容量之間進(jìn)行折中的思維方法。
2基于多樣化訓(xùn)練的計(jì)算思維培養(yǎng)方式
如何明確地將計(jì)算思維融入到課堂教學(xué)中,以提高學(xué)生運(yùn)用計(jì)算思維進(jìn)行問題的抽象和分解能力,是一個(gè)挑戰(zhàn)。基于多樣化訓(xùn)練的計(jì)算思維培養(yǎng)模式,是筆者在《算法設(shè)計(jì)與分析》課程的教學(xué)實(shí)踐中對(duì)學(xué)生計(jì)算思維的培養(yǎng)方法一點(diǎn)嘗試。
2.1知識(shí)情境的多樣化
《算法設(shè)計(jì)與分析》課程中的抽象數(shù)據(jù)類型很多,如線性表、堆棧、隊(duì)列等。這些數(shù)據(jù)類型不象數(shù)學(xué)中的整數(shù)那樣可以進(jìn)行簡(jiǎn)單的加減乘除運(yùn)算,每一種抽象數(shù)據(jù)類型都對(duì)應(yīng)不同的應(yīng)用背景和不同的數(shù)據(jù)操作。因此,可結(jié)合具體的應(yīng)用背景,把教學(xué)內(nèi)容與具體的實(shí)際問題結(jié)合起來,讓學(xué)生通過分析實(shí)際問題,來理解隱藏于問題背后的知識(shí)。在講授新課前,教師可以設(shè)計(jì)與授課內(nèi)容相關(guān)的知識(shí)情境,激發(fā)學(xué)生的興趣,化抽象為具體,引導(dǎo)學(xué)生學(xué)習(xí)。例如在講解線性表這一章內(nèi)容的時(shí)候,首先要使學(xué)生理解線性表的概念,可以以一個(gè)具體的班級(jí)花名冊(cè)為例,花名冊(cè)上每個(gè)學(xué)生依學(xué)號(hào)排列,除了第一個(gè)學(xué)生外,其余學(xué)生有且只有一個(gè)前驅(qū);除了最后一個(gè)學(xué)生外,其余學(xué)生有且只有一個(gè)后繼。在理解了線性表的概念后,鼓勵(lì)學(xué)生在生活中發(fā)現(xiàn)相類似的情境,進(jìn)一步加深對(duì)概念的理解。
2.2算法的多樣化訓(xùn)練
由于學(xué)生個(gè)體的知識(shí)積累程度不同,對(duì)于同一個(gè)問題,學(xué)生的理解各不相同,進(jìn)而產(chǎn)生不同的解決方法;那么,教師在教學(xué)過程中,應(yīng)充分尊重學(xué)生。對(duì)于理解能力較好、采用了計(jì)算機(jī)方法解決了問題的學(xué)生進(jìn)行表揚(yáng);對(duì)于沒有采用計(jì)算機(jī)方法但卻同樣解決了問題的學(xué)生也要進(jìn)行鼓勵(lì),然后幫助他們進(jìn)行問題的分析,引導(dǎo)他們運(yùn)用計(jì)算機(jī)方法進(jìn)行問題求解。
教育的目的是培養(yǎng)學(xué)生的綜合素質(zhì),提高他們的社會(huì)生存能力。如果學(xué)生只是按照教師解決問題的方法進(jìn)行生搬硬套,這不能不說是一種失敗。所以,在讓學(xué)生學(xué)習(xí)教師分析問題、解決問題的同時(shí),要倡導(dǎo)算法的多樣性,培養(yǎng)、激勵(lì)學(xué)生的創(chuàng)新意識(shí)和探索精神。例如,在進(jìn)行單鏈表的創(chuàng)建的時(shí)候,可以按照由前往后的順序創(chuàng)建鏈表,即每次生成的新節(jié)點(diǎn),都從鏈表的尾部插入到鏈表中來;這時(shí),可以啟發(fā)學(xué)生,能夠由前往后能創(chuàng)建鏈表,那么,由后往前呢?顯然,這也是可以的,只是,每次從鏈表的首部插入節(jié)點(diǎn)后,形成的單鏈表是逆序的,即線性表中第一個(gè)元素位于單鏈表中的最后一個(gè)節(jié)點(diǎn)中。由此,再進(jìn)一步,節(jié)點(diǎn)的插入點(diǎn)可以在鏈表的頭部,可以在尾部,那么,能不能從鏈表的某個(gè)中間位置插入節(jié)點(diǎn)呢?如果要在鏈表的中間某個(gè)位置插入節(jié)點(diǎn),因?yàn)樵趧?chuàng)建鏈表之前,節(jié)點(diǎn)的輸入順序是未知的,因此,為了保證鏈表中的節(jié)點(diǎn)排列有序,在將新生成的節(jié)點(diǎn)插入鏈表中時(shí),要在已經(jīng)存在的鏈表中查找它的合適位置,然后將該結(jié)點(diǎn)插入到所找到的位置上。這種插入法,最終形成的單鏈表是一個(gè)有序表。鏈表的創(chuàng)建方法思路各異,不盡相同。因此,啟發(fā)學(xué)生跳出編程的限制,積極的思考,充分調(diào)動(dòng)積極性從不同的角度,用不同的方法解決同一任務(wù)。除此之外,要鼓勵(lì)學(xué)生改進(jìn)別人的算法,從而培養(yǎng)學(xué)生計(jì)算思維的多樣性和重構(gòu)性。
2.3算法的對(duì)比歸類
《算法設(shè)計(jì)與分析》課程中很多內(nèi)容具有類比性,在具體的教學(xué)過程中,要充分把握這一特點(diǎn),對(duì)相關(guān)內(nèi)容進(jìn)行對(duì)比歸類,引導(dǎo)學(xué)生學(xué)習(xí)思路。比如在學(xué)籍管理系統(tǒng)的設(shè)計(jì)中,可以將學(xué)生分成兩組分別完成該任務(wù)。一組以順序表為存儲(chǔ)結(jié)構(gòu)進(jìn)行系統(tǒng)設(shè)計(jì),一組以單鏈表為存儲(chǔ)結(jié)構(gòu)進(jìn)行系統(tǒng)設(shè)計(jì)。當(dāng)任務(wù)完成后,兩組對(duì)各自設(shè)計(jì)的系統(tǒng)進(jìn)行對(duì)比,分析這兩種實(shí)現(xiàn)方式在數(shù)據(jù)存儲(chǔ),修改,插入,刪除等操作上的優(yōu)缺點(diǎn)。再比如在排序這一章,當(dāng)教師精講完各種算法后,可將學(xué)生分成若干組,分別用不同的排序算法完成對(duì)同一組數(shù)據(jù)的排序,然后分別從算法的執(zhí)行時(shí)間,空間復(fù)雜度,總的比較次數(shù),最多移動(dòng)次數(shù)等各方面對(duì)個(gè)算法進(jìn)行討論,對(duì)比各算法的優(yōu)劣。幫助學(xué)生建立從時(shí)間和空間角度,在處理能力和存儲(chǔ)容量之間進(jìn)行折中的思維方式。
2.4勤上機(jī),多實(shí)踐
編寫算法目的是為了高質(zhì)量的完成問題的求解。那么,一個(gè)算法解決問題的質(zhì)量、效率究竟如何,需要將算法通過編程來實(shí)現(xiàn)。因此,教師在授課時(shí),除了對(duì)算法進(jìn)行詳細(xì)的描述外,應(yīng)該鼓勵(lì)學(xué)生多上機(jī),將設(shè)計(jì)的算法用代碼來實(shí)現(xiàn)。通常學(xué)生在編程實(shí)現(xiàn)單鏈表的插入或刪除操作時(shí),總是習(xí)慣把鏈表的創(chuàng)建和插入(或刪除)統(tǒng)統(tǒng)的寫在一個(gè)模塊中,代碼的復(fù)用率低,那么,老師可以給出一個(gè)程序主文件,其中調(diào)用了鏈表的創(chuàng)建函數(shù),插入函數(shù)和刪除函數(shù),讓學(xué)生來編寫相應(yīng)的函數(shù)實(shí)現(xiàn),以此提高學(xué)生的動(dòng)手能力,同時(shí),也可以培養(yǎng)學(xué)生用分解的方法控制系統(tǒng)設(shè)計(jì)的思維。
3總結(jié)
《算法設(shè)計(jì)與分析》是計(jì)算機(jī)相關(guān)專業(yè)的核心基礎(chǔ)課程,將計(jì)算思維這一新的思維模式融入本門課程的教學(xué)中,是筆者在計(jì)算思維培養(yǎng)方式上的初步探索。當(dāng)然,計(jì)算思維的培養(yǎng)不是通過一兩門課程的教學(xué)就能夠解決的,而是應(yīng)該貫穿于整個(gè)專業(yè)課程的教學(xué)中。因此,計(jì)算機(jī)專業(yè)的教師應(yīng)當(dāng)從計(jì)算思維的層面看待所授的課程,梳理和提煉課程中所蘊(yùn)含的計(jì)算思維的概念,方法和思路。有目的,有意識(shí)的從各個(gè)角度培養(yǎng)學(xué)生的計(jì)算思維能力,以期學(xué)生能夠利用這種思維方式自主解決實(shí)際問題,并在解決實(shí)際問題中鍛煉自己的能力。
參考文獻(xiàn):
[1] Wing J M.Computational thinking [J]. Communications of the ACM, 2006,49(3).
[2]董榮勝.計(jì)算思維及計(jì)算機(jī)導(dǎo)論[J].計(jì)算機(jī)科學(xué), 2009,36(4).
[3]牟琴,譚良,周雄峻.基于計(jì)算思維的任務(wù)驅(qū)動(dòng)式教學(xué)模式的研究[J].現(xiàn)代教育技術(shù),2011(6).
[4]張曉茹,張?jiān)佘S.再談?dòng)?jì)算機(jī)思維[J].計(jì)算機(jī)教育,2010(23).
[5]何明昕.關(guān)注點(diǎn)分離在計(jì)算思維和軟件工程中的方法論意義[J].計(jì)算機(jī)科學(xué),2009,36(4).
[6]淺談學(xué)生問題意識(shí)的培養(yǎng)[EB/OL].http://www.chianqking.com/yc/2010/94229.html.