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