在程序設(shè)計(jì)的“循環(huán)結(jié)構(gòu)”教學(xué)中,有一個(gè)經(jīng)典題例就是“1+2+3+……+100”的求和。因?yàn)閷W(xué)生都知道高斯公式,相信很多學(xué)生都曾質(zhì)疑過(guò)這一算法為何不用高斯公式而要用笨拙的循環(huán)?
我以前給學(xué)生的解釋是:我們編程的目的是讓計(jì)算機(jī)幫我們解決問(wèn)題,類(lèi)似于高斯公式的規(guī)律,是前人總結(jié)出來(lái)的,直接使用公式,不是讓計(jì)算機(jī)幫我們解決問(wèn)題,而成了我們來(lái)幫計(jì)算機(jī)解決問(wèn)題了。當(dāng)我們需要解決的問(wèn)題沒(méi)有公式可用時(shí),如何讓計(jì)算機(jī)來(lái)解決呢?有規(guī)律可循,我們就能利用循環(huán),讓計(jì)算機(jī)充分發(fā)揮它強(qiáng)大的運(yùn)算能力和極快的運(yùn)算速度,得到我們需要的結(jié)果。一句話(huà),程序設(shè)計(jì)時(shí)要跳出“人”的思維,采用“機(jī)器”的思維。
這種“機(jī)器思維”,看似笨拙,卻來(lái)得簡(jiǎn)單,我們只需要根據(jù)規(guī)律,讓機(jī)器重復(fù)運(yùn)算,不需要太動(dòng)腦筋思考復(fù)雜的解法。“算法”的本質(zhì)雖然也是解決方法,但它是給機(jī)器準(zhǔn)備的,不是給人工計(jì)算準(zhǔn)備的。
現(xiàn)在回頭來(lái)看,這種思想與后來(lái)周以真教授提出的“計(jì)算思維”不謀而合。根據(jù)周教授的定義,計(jì)算思維是運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問(wèn)題求解、系統(tǒng)設(shè)計(jì),以及人類(lèi)行為理解等涵蓋計(jì)算機(jī)科學(xué)之廣度的一系列思維活動(dòng)?!坝?jì)算思維”很好地概括了進(jìn)行科學(xué)研究尤其是計(jì)算機(jī)相關(guān)學(xué)科研究和思考時(shí)應(yīng)該遵循的科學(xué)思維方法。在程序設(shè)計(jì)的教學(xué)中,向?qū)W生灌輸計(jì)算思維的思想方法,可以使學(xué)生更快地步入程序設(shè)計(jì)的大門(mén)。
一次在讓學(xué)生設(shè)計(jì)一個(gè)帶單位運(yùn)算功能的計(jì)算器時(shí),遇到了一個(gè)棘手的問(wèn)題。當(dāng)時(shí)僅僅是布置下去任務(wù),并沒(méi)有仔細(xì)考慮需要解決的細(xì)節(jié)問(wèn)題。當(dāng)學(xué)生對(duì)司空見(jiàn)慣的單位運(yùn)算竟束手無(wú)策、無(wú)從下手時(shí),我才發(fā)現(xiàn)這不僅僅是個(gè)數(shù)學(xué)問(wèn)題、編程問(wèn)題,更像是一個(gè)哲學(xué)問(wèn)題。
表面上看,單位運(yùn)算還要取決于數(shù)值運(yùn)算的類(lèi)型:對(duì)于一級(jí)運(yùn)算(加法、減法),單位是不需要參與運(yùn)算的,只要轉(zhuǎn)換為相同單位即可,如1米+2米=(1+2)米;對(duì)于二級(jí)運(yùn)算(乘法、除法),單位卻要參與運(yùn)算,數(shù)值和單位同時(shí)分別進(jìn)行運(yùn)算,如2米×3米=(2×3)米2,10米÷5秒=(10/5)(米/秒)。雖然看起來(lái)確實(shí)是這樣的,但問(wèn)題是,為什么一級(jí)運(yùn)算中單位不參與運(yùn)算而二級(jí)運(yùn)算中單位卻要參與運(yùn)算?
在網(wǎng)上與一些信息技術(shù)教師討論,大家看法各不相同。有人認(rèn)為一級(jí)運(yùn)算隱含了一個(gè)特殊條件,即單位必須相同,運(yùn)算才有意義;有人認(rèn)為一級(jí)運(yùn)算中的單位其實(shí)也參與了運(yùn)算,只不過(guò)因?yàn)閱挝幌嗤床怀鍪沁\(yùn)算過(guò)的;還有人認(rèn)為,單位運(yùn)算有可能采用的是邏輯運(yùn)算而非算術(shù)運(yùn)算規(guī)則,1米+2米中的單位“米+米=米”就類(lèi)似于邏輯運(yùn)算中的“1+1=1”了……
繼續(xù)深入討論,最初的數(shù)學(xué)問(wèn)題逐漸轉(zhuǎn)變?yōu)檎軐W(xué)問(wèn)題。為了把問(wèn)題簡(jiǎn)化,避免在舉例時(shí)出現(xiàn)眾多單位,我把所有單位都用“U”來(lái)表示,無(wú)意中這個(gè)“單位”就成為一個(gè)變量符號(hào)了,寫(xiě)在紙上一看,不由欣喜若狂!——管它什么一級(jí)運(yùn)算、二級(jí)運(yùn)算,只不過(guò)是變量的加減乘除、多項(xiàng)式的四則運(yùn)算,所有的運(yùn)算都遵循數(shù)值運(yùn)算的法則!
困惑豁然開(kāi)朗,問(wèn)題迎刃而解。思維馳騁了一圈又返回原地,反思時(shí)忽然意識(shí)到,問(wèn)題的根源還是在于我們?nèi)鄙儆?jì)算思維,一直是用自然人的思維在考慮程序問(wèn)題。
人類(lèi)一思考,上帝就發(fā)笑??上](méi)有上帝來(lái)指出我們太多的思維缺陷,只能在上帝的嘲笑中繼續(xù)我們的思考,完善我們的思維品質(zhì)。