馬 波
(浙江省余姚市姚北實(shí)驗(yàn)學(xué)校,浙江余姚315480)
2010年7月,教育部高等學(xué)校計(jì)算機(jī)基礎(chǔ)課程教學(xué)指導(dǎo)委員會(huì)在西安的會(huì)議上發(fā)布了《九校聯(lián)盟(C9)計(jì)算機(jī)基礎(chǔ)教學(xué)發(fā)展戰(zhàn)略聯(lián)合聲明》,確定了計(jì)算機(jī)基礎(chǔ)課程的教學(xué)改革,此次教學(xué)改革是以計(jì)算思維為核心的。在初中階段的信息技術(shù)課程,教師不應(yīng)再將授課的重點(diǎn)放在計(jì)算機(jī)相關(guān)知識(shí)和軟件操作應(yīng)用上,應(yīng)以培養(yǎng)學(xué)生的信息素養(yǎng)為核心,而初中生的信息素養(yǎng)又尤以計(jì)算思維能力為重中之重。
在長期的程序設(shè)計(jì)教學(xué)中,筆者一直非常注重培養(yǎng)學(xué)生的算法思維,認(rèn)為算法思維是一種解決問題的過程性思維方式:算法思維就是能清楚說明問題解決的方法,能夠?qū)⒁粋€(gè)復(fù)雜的問題轉(zhuǎn)化成若干子問題并將其進(jìn)一步簡化,以達(dá)到解決問題的目的,這也是科學(xué)和設(shè)計(jì)領(lǐng)域的一項(xiàng)重要技能;算法思維就是能清楚地理解問題解決的規(guī)則,能夠認(rèn)識(shí)到問題的起點(diǎn)、邊界和限定范圍,按部就班地完成任務(wù)或解決問題;算法思維就是能清楚地分析問題解決方法的優(yōu)劣,能夠設(shè)計(jì)與構(gòu)造操作步驟更少、更經(jīng)濟(jì)的算法。
通過算法和程序設(shè)計(jì)的學(xué)習(xí),學(xué)生可以體驗(yàn)解決問題的過程,以及人與計(jì)算機(jī)共存的思維特征。但是,算法思維是以算法為出發(fā)點(diǎn),相比以計(jì)算理論出發(fā)的計(jì)算思維,有更多的局限性。因此,計(jì)算思維有利于推進(jìn)信息技術(shù)課程在學(xué)科思維方面的研究,有利于學(xué)生通過信息技術(shù)課程獲得終身有用的知識(shí)與能力,而不是面臨過時(shí)的計(jì)算機(jī)操作步驟。
計(jì)算思維這一概念的提出,最早是在2006年3月周以真教授提出的。周教授認(rèn)為,計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計(jì)、以及人類行為理解等涵蓋計(jì)算機(jī)科學(xué)之廣度的一系列思維活動(dòng)[1]。根據(jù)周教授的觀點(diǎn),計(jì)算思維就是通過簡略、融入、轉(zhuǎn)換和仿真的方法把一個(gè)看起來比較困難的問題重新解釋成一個(gè)人們知道用什么方法解決的問題,計(jì)算思維與人們的日常生活及工作密切相關(guān),應(yīng)為人類不可或缺的一種能力。此概念的提出,引起了學(xué)術(shù)界廣大學(xué)者的熱烈討論,分別對計(jì)算思維有著不同的解讀闡釋。
Google最近的課程建設(shè)成果里面推出了面向教師的計(jì)算思維課程,旨在協(xié)助教育工作者學(xué)習(xí)計(jì)算思維(CT:Computational Thinking),了解它與計(jì)算機(jī)科學(xué)的區(qū)別,以及理解如何將其整合到不同的學(xué)科中[2]。Google認(rèn)為計(jì)算思維的基本要素如下:
“分解”:把數(shù)據(jù)、過程或問題分解成更小的、易于管理或解決的部分
“模式識(shí)別”:觀察數(shù)據(jù)的模式、趨勢和規(guī)律
“抽象”:識(shí)別模式形成背后的一般原理
“算法開發(fā)”:為解決某一類問題撰寫一系列詳細(xì)的指令
從以上對計(jì)算思維的概念和要素中可以看出,計(jì)算思維不是對計(jì)算機(jī)的思考,也不是要求人類像計(jì)算機(jī)那樣思維。因?yàn)橛?jì)算機(jī)本身并沒有思維,是人類在計(jì)算求解問題的過程中賦予計(jì)算機(jī)的人的思維。因此計(jì)算思維只是一種人的思維,應(yīng)在平時(shí)教學(xué)中要多采用思維啟發(fā)式教學(xué),引導(dǎo)和關(guān)注思維走向,通過內(nèi)容的教學(xué)來培養(yǎng)計(jì)算思維,運(yùn)用到日常的學(xué)習(xí)生活中,來解決實(shí)際遇到的問題,因此它是人人都需要的一種思維方式。
在一般的程序設(shè)計(jì)教學(xué)中,大家都非常注重培養(yǎng)學(xué)生的算法思維,課堂比較注重算法的概念和應(yīng)用,強(qiáng)調(diào)解決問題的方法和步驟[3]。其實(shí),在算法思維學(xué)習(xí)中已經(jīng)培養(yǎng)了大部分的計(jì)算思維,例如“抽象”和“算法開發(fā)”。那么如何提高學(xué)生的“分解”和“模式識(shí)別”能力呢?這就是問題分析能力,如果在課堂中更加注重問題的分析和討論,強(qiáng)調(diào)解題算法是怎么誕生的,在無形之中學(xué)生的計(jì)算思維能力就能全面提高,課堂自然而然也從注重培養(yǎng)算法思維提升到注重培養(yǎng)計(jì)算思維。
下面,以程序設(shè)計(jì)課程中的博弈問題教學(xué)為例,來談?wù)動(dòng)?jì)算思維培養(yǎng)的具體策略和方法。
博弈問題:給你2n個(gè)數(shù)字,放在一行的格子上。下面你跟同學(xué)玩取數(shù)字游戲,兩個(gè)人輪流取,每次只能取最左邊或者最右邊的數(shù),最后每人都能取到n個(gè)數(shù)字,請問誰取的數(shù)字之和最大。兩個(gè)人都是很聰明的,都會(huì)用最優(yōu)策略盡量保證自己能夠贏。
假如你先取,你有沒有必勝策略呢?
1353768413
例如:上面格子中的10個(gè)數(shù)字,你怎么取,才能保證自己一定勝利呢?
“分解“就是把數(shù)據(jù)、過程或問題分解成更小的、易于管理或解決的部分。其實(shí)類似于數(shù)學(xué)中的數(shù)學(xué)歸納法。要舉幾個(gè)小規(guī)模的問題例子,去分析和解決問題,以小見大,得出問題的一般規(guī)律。
許多學(xué)生一看到這樣一道問題,往往沒有思路,無從下手。“分解”就是給了一個(gè)下手的辦法。
問題規(guī)模 問題解決辦法2個(gè)數(shù)字3 5我取右邊的數(shù)字5就勝利了,4個(gè)數(shù)字1 2 7 5我取左邊的數(shù)字1,再取數(shù)字7就勝利了第一個(gè)取的是左邊14個(gè)數(shù)字1 2 4 4我取右邊的數(shù)字4,再取數(shù)字2就勝利了第一個(gè)取的是右邊46個(gè)數(shù)字1 2 3 4 6 5我能取到2+4+5=11我第一個(gè)取的是右邊5…
學(xué)生們可以列一張表格,不斷的變化問題并計(jì)算得到答案。
在此環(huán)節(jié)中,學(xué)生在填寫表格的同時(shí),啟發(fā)學(xué)生思考,將一個(gè)復(fù)雜的大問題變成了小規(guī)模問題。以這樣的形式進(jìn)行教學(xué),在無形中引導(dǎo)學(xué)生自己處理問題的時(shí)候也應(yīng)將復(fù)雜問題細(xì)化、簡單化,長而久之,形成分解的計(jì)算思維能力。
“模式識(shí)別“就是觀察數(shù)據(jù)的模式、趨勢和規(guī)律。
就跟做實(shí)驗(yàn)一樣,上面是實(shí)驗(yàn)過程,下面要統(tǒng)計(jì)數(shù)據(jù),發(fā)現(xiàn)規(guī)律。
同學(xué)們在大量的小規(guī)模問題中,就會(huì)發(fā)現(xiàn)其實(shí)有一種取數(shù)的策略是你可以控制的。
第1個(gè)數(shù)一定是奇數(shù)位置,最后1個(gè)數(shù)一定是偶數(shù)位置。
取法1:
你如果第1次取走了奇數(shù)位置上的數(shù),那么對手只能面對偶數(shù)位置上的數(shù)。
這樣你就可以一直取走奇數(shù)位置上的數(shù),逼迫對手只能取得偶數(shù)位置上的數(shù)。
取法2:
你如果第1次取走了偶數(shù)位置上的數(shù),那么對手只能面對奇數(shù)位置上的數(shù)。
這樣你就可以一直取走偶數(shù)位置上的數(shù),逼迫對手只能取得奇位置上的數(shù)。
所以最后的答案就是你可以先把奇數(shù)位置上的數(shù)都累加起來,和設(shè)為s1.
把偶數(shù)位置上的數(shù)也累加起來,和設(shè)為s2。
然后根據(jù)s1和s2的大小來決定你是準(zhǔn)備取奇數(shù)位置還是取偶數(shù)位置。
在此環(huán)節(jié)中,重點(diǎn)培養(yǎng)學(xué)生的觀察力和數(shù)學(xué)歸納能力,有的學(xué)生經(jīng)過長時(shí)間的模式練習(xí)后,能夠很快的發(fā)現(xiàn)新問題的內(nèi)在規(guī)律。
“抽象”就是識(shí)別模式形成背后的一般原理。
“抽象”更多的是提煉出規(guī)律,把問題數(shù)學(xué)化、數(shù)字化。
例如上面那個(gè)博弈問題,本來問題很難,現(xiàn)在被抽象成一個(gè)數(shù)學(xué)問題。
給你2n個(gè)數(shù)字,請你求出奇數(shù)位置上的n個(gè)數(shù)字之和,以及偶數(shù)位置上的n個(gè)數(shù)字之和。
抽象要求學(xué)生有比較好的數(shù)學(xué)基礎(chǔ),在這個(gè)過程中能夠培養(yǎng)學(xué)生的數(shù)學(xué)建模思想。當(dāng)學(xué)生把一個(gè)具體問題抽象化后,接下來就是圍繞這個(gè)數(shù)學(xué)問題進(jìn)行展開,運(yùn)用算法思維進(jìn)行算法設(shè)計(jì)。
“算法開發(fā)”就是為解決某一類問題撰寫一系列詳細(xì)的指令。可以先讓學(xué)生寫成解決問題的算法,也就是方法和步驟。既可以用文字描述過程,也可以用流程圖描述過程,最后把算法翻譯成你會(huì)的某一門計(jì)算機(jī)語言。
下面,就上面的“抽象”后的問題進(jìn)行算法設(shè)計(jì)。
1、用文字描述該問題的算法如下:
(1)輸入2n個(gè)數(shù)字到數(shù)組a[];
(2)設(shè)兩個(gè)累加器s1=0和s2=0;
(3)求出n個(gè)奇數(shù)位上的數(shù)字之和放入s1中;
(4)求出n個(gè)偶數(shù)位上的數(shù)字之和放入s2中;
(5)如果s1>s2,那么,第1次就取第1個(gè)數(shù),后面每次都取奇數(shù)位上的數(shù)字。反之,第1次就取最后1個(gè)數(shù),后面每次都取偶數(shù)位上的數(shù)字。
2、用pascal語言代碼實(shí)現(xiàn)如下:
Var n,i,s1,s2:longint;
a:array[1..1000]of longint;
Begin
Readln(n);
For i:=1 to 2*n do read(a[i]);
S1:=0;s2:=0;
For i:=1 to 2*n do
Begin
If (i mod 2=0) then s2:=s2+a[i] else s1:=s1+a[i];
End;
//輸出第1次取那一個(gè)數(shù)。
If s1>s2 thenwriteln(1)
Else writeln(2*n);
End.
從上述的這節(jié)博弈問題的教學(xué)設(shè)計(jì)實(shí)例來看,基于培養(yǎng)學(xué)生的計(jì)算思維來設(shè)計(jì)整堂課的教學(xué)活動(dòng),能讓學(xué)生知其然知其所以然,可以更好地掌握解決問題的一般方法,為以后舉一反三、觸類旁通打下基礎(chǔ)。例如,通過“分解”的方法對問題進(jìn)行分析和解決;通過“模式識(shí)別”的方法對上述的“分解“結(jié)果進(jìn)行觀察、歸納、總結(jié);通過“抽象”的方法將問題進(jìn)行簡化、數(shù)學(xué)化、一般化;通過“算法開發(fā)”的方法運(yùn)用算法思維將“抽象”的問題進(jìn)行分步解決。在這節(jié)課中,充分挖掘出程序設(shè)計(jì)中所蘊(yùn)含的計(jì)算思維相關(guān)內(nèi)容,讓學(xué)生理解與掌握信息技術(shù)相關(guān)知識(shí)與技能的同時(shí),更培養(yǎng)了學(xué)生的計(jì)算思維。
對于計(jì)算思維來講,要成為一門學(xué)科,還有很長的路要走。目前,計(jì)算思維還不是知識(shí)形態(tài)的學(xué)科,因?yàn)槠浔旧淼母拍?、原理、特征、培養(yǎng)方法論以及創(chuàng)新方法論等方面的知識(shí)體系并未形成。因此,計(jì)算思維學(xué)科體系的建立任重而道遠(yuǎn)。
在程序設(shè)計(jì)課程中,可以從算法思維的培養(yǎng)延伸到計(jì)算思維的培養(yǎng),那么其他課程呢?
在常規(guī)信息技術(shù)教學(xué)中,其實(shí)不僅僅程序設(shè)計(jì)這個(gè)模塊可以培養(yǎng)學(xué)生的計(jì)算思維能力,其他的模塊同樣也可以。教師必須首先深刻理解計(jì)算思維的內(nèi)涵和本質(zhì),掌握計(jì)算思維的四個(gè)基本特征:“分解“、“模式識(shí)別”、”抽象”、“算法開發(fā)”。從過去的單純教授學(xué)生知識(shí)轉(zhuǎn)變?yōu)榻淌趯W(xué)生思維方法和能力,這樣才能將計(jì)算思維貫穿到信息技術(shù)課程教學(xué)中去。長此以往,在潛移默化中學(xué)生的計(jì)算思維能力一定能得到提高。