陳凱 上海市位育中學(xué)
在頭腦中想象有兩頭大象正緩慢而又莊嚴(yán)地走過(guò),這似乎并不是什么特別困難的事情,然后,集中注意力,把內(nèi)心的目光聚焦在大象的腿上,假設(shè)將大象邁出任意一側(cè)的腿的動(dòng)作視作1步,并幻想這樣的場(chǎng)景,當(dāng)一頭大象邁出3步的時(shí)候,另一頭大象恰好邁出4步,雖然步數(shù)不同,但它們經(jīng)過(guò)的距離是一致的。
要精準(zhǔn)地構(gòu)想出上述場(chǎng)景,的確是有較大困難的,很多人甚至很難想象一頭大象具體行走時(shí)腿的動(dòng)作變化。相信隨便觀看一段大象行走的視頻,都遠(yuǎn)勝于下面的文字解釋?zhuān)@里還是盡量解釋一下:大象先邁出某一側(cè)后腿,當(dāng)這一側(cè)后腿看上去即將要踩到同一側(cè)的前腿時(shí)—當(dāng)然這并不會(huì)發(fā)生,前腿往前邁出,相隔很短的時(shí)間,這一側(cè)后腿才著地,也就是說(shuō),在某一時(shí)刻,大象一側(cè)的兩條腿是騰空的,接著,這一側(cè)前腿著地,以上稱(chēng)為1步,然后,就是換另一側(cè)腿按同樣動(dòng)作前進(jìn)。雖然花費(fèi)了不少文字來(lái)描述,但總是不可能由這些文字精準(zhǔn)地還原出大象行走的過(guò)程,語(yǔ)言文字的抽象難以完整地反映整個(gè)客觀事實(shí),只是提供了一些關(guān)鍵性特征的描述。
這里有一道簡(jiǎn)單的數(shù)學(xué)題:設(shè)有兩只大象A和B,A大象邁出3步的距離與另一只B大象邁出4步的距離均為t,且走過(guò)t距離路程所消耗的時(shí)間也是一致的,問(wèn)A大象邁出第n步時(shí),B大象邁出了多少步?考慮A大象每一步的距離是t/3,n步的距離就是n*t/3,B大象每一步的距離是t/4,則可以看出B大象邁的步數(shù)是(n*t/3)/(t/4),公式可以進(jìn)一步簡(jiǎn)化為n*(4/3),計(jì)算結(jié)果自然有可能存在小數(shù),只要取整即可。在做數(shù)學(xué)題時(shí),不用去考慮大象本身,也不用考慮大象行走的具體過(guò)程,這種提取出事物中數(shù)量關(guān)系并建立數(shù)學(xué)語(yǔ)言的表征的方法,顯然就是一種數(shù)學(xué)上的抽象。這里的問(wèn)題是,假設(shè)某人編寫(xiě)了一段程序,由用戶(hù)輸入變量值n,程序自動(dòng)計(jì)算后得出并打印結(jié)果,這個(gè)過(guò)程中有沒(méi)有體現(xiàn)出計(jì)算思維的抽象?
關(guān)于數(shù)學(xué)抽象,《普通高中數(shù)學(xué)課程標(biāo)準(zhǔn)(2017年版2020年修訂)》指出:“數(shù)學(xué)是研究數(shù)量關(guān)系和空間形式的一門(mén)科學(xué)。數(shù)學(xué)源于對(duì)現(xiàn)實(shí)世界的抽象,基于抽象結(jié)構(gòu),通過(guò)符號(hào)運(yùn)算、形式推理、模型構(gòu)建等,理解和表達(dá)現(xiàn)實(shí)世界中事物的本質(zhì)、關(guān)系和規(guī)律……數(shù)學(xué)抽象是指通過(guò)對(duì)數(shù)量關(guān)系與空間形式的抽象……獲得數(shù)學(xué)概念和規(guī)則,提出數(shù)學(xué)命題和模型,形成數(shù)學(xué)方法與思想,認(rèn)識(shí)數(shù)學(xué)結(jié)構(gòu)與體系。”[1]我們可以從中很清晰地看出數(shù)學(xué)學(xué)科中抽象的對(duì)象、抽象的目標(biāo)以及作為抽象結(jié)果的表征符號(hào)。除了數(shù)學(xué),其他學(xué)科的方法中也涉及抽象,雖然說(shuō)不同學(xué)科中“抽象”的含義本身是相同的,但抽象的對(duì)象和目標(biāo)是不同的。以物理學(xué)科為例,關(guān)于物理學(xué)科的抽象,是“從物理學(xué)視角對(duì)客觀事物的本質(zhì)屬性、內(nèi)在規(guī)律及相互關(guān)系的認(rèn)識(shí)方式,是基于經(jīng)驗(yàn)事實(shí)建構(gòu)物理模型的抽象概括過(guò)程”[2],“理想化模型來(lái)源于實(shí)際的事物,是將實(shí)際事物的某些物理性質(zhì)或物理性質(zhì)的變化在一定條件下理想化而得到的抽象”[3]??梢钥闯?,雖然說(shuō)數(shù)學(xué)和物理的抽象都面向現(xiàn)實(shí)世界,但數(shù)學(xué)關(guān)心的是數(shù)量關(guān)系和空間形式,數(shù)學(xué)模型可以超越現(xiàn)實(shí)、獨(dú)立于真實(shí)的物理現(xiàn)實(shí)而存在(不妨想象一個(gè)物理現(xiàn)實(shí)與當(dāng)前世界完全不同的異世界的數(shù)學(xué)定律是否和當(dāng)前世界一致)。大衛(wèi)·呂埃勒(David Ruelle)說(shuō):“數(shù)學(xué)自身構(gòu)成一個(gè)有意義的、自然的結(jié)構(gòu)?!盵4]戈丁(LarsGarding)說(shuō):“為了理解周?chē)氖澜?,人們總是把自己的觀察及思想組織成概念的體系,我們把這些概念體系稱(chēng)為模型,數(shù)學(xué)模型在邏輯上是首尾一貫的……數(shù)學(xué)的對(duì)象顯然是抽象的觀念,邏輯是最后判斷正誤的標(biāo)準(zhǔn)?!盵5]而物理學(xué)關(guān)心的是對(duì)自然界的最合理描述,也就是尼爾斯·玻爾(Niels Bohr)所說(shuō)的“我們能對(duì)自然說(shuō)些什么”。
關(guān)于數(shù)學(xué)或物理學(xué)的抽象,對(duì)于抽象的對(duì)象、目標(biāo)以及作為抽象結(jié)果的表征符號(hào),各家觀點(diǎn)還是比較清晰和一致的。那么,計(jì)算思維的抽象到底有怎樣的獨(dú)特性?周以真教授倡導(dǎo)的培養(yǎng)計(jì)算思維的課程的一項(xiàng)目標(biāo)是“像計(jì)算機(jī)科學(xué)家那樣思考”,她認(rèn)為“計(jì)算思維是利用計(jì)算機(jī)科學(xué)的基本概念,進(jìn)行的問(wèn)題解決、系統(tǒng)設(shè)計(jì)、人類(lèi)行為理解等一系列涵蓋計(jì)算機(jī)科學(xué)之廣度的思維活動(dòng)……像計(jì)算機(jī)科學(xué)家一樣思考不僅僅意味著能夠?yàn)橛?jì)算機(jī)編程,它需要在多個(gè)抽象層次上進(jìn)行思考”。[6]董榮勝認(rèn)為“計(jì)算思維的重點(diǎn)在于計(jì)算機(jī)科學(xué)中的不同抽象層次的‘自動(dòng)有效進(jìn)行’”。[7]這些說(shuō)法提示了抽象具有層次性,同時(shí)也存在讓人困惑的地方,如數(shù)學(xué)問(wèn)題的解決也往往需要在多個(gè)或不同的抽象層次上進(jìn)行思考,所以說(shuō)僅僅看“在多個(gè)抽象層次上進(jìn)行思考”這一點(diǎn),未必體現(xiàn)計(jì)算思維的特點(diǎn)。這里需要弄清楚的問(wèn)題是,所謂的抽象層次到底是什么層次,抽象層次間的關(guān)系又可能是怎樣的。
盧西亞諾·弗洛里迪(Luciano Floridi)給出過(guò)一個(gè)簡(jiǎn)單卻值得深思的例子:“你詢(xún)問(wèn)一輛二手車(chē)的價(jià)格,得到的回復(fù)是5000,那么你是否能知道車(chē)的價(jià)格呢?”在不同語(yǔ)境下,是否能成功判斷價(jià)格的情況有所不同,原因是數(shù)字后沒(méi)有單位,在某些特定的語(yǔ)境下,數(shù)字的單位作為不必要的細(xì)節(jié)被舍棄掉了。而在更復(fù)雜的情況下,就需要在數(shù)字后加上單位,比如英鎊,于是抽象的層次就發(fā)生了變化。[8]盧西亞諾·弗洛里迪認(rèn)為,數(shù)字加上單位后到達(dá)了“正確的抽象層次”(筆者認(rèn)為不加單位也不能視為錯(cuò)誤的抽象層次,而是一種更加抽象的抽象),這個(gè)層次錨定了一個(gè)基于規(guī)則的、易于執(zhí)行和控制的情境。這個(gè)例子的啟發(fā)是,當(dāng)談?wù)撚?jì)算思維的抽象是什么的時(shí)候,需要問(wèn)其錨定的是什么樣的情境。
回到先前的問(wèn)題,問(wèn)當(dāng)A大象邁出第n步時(shí),B大象邁出了多少步?假設(shè)直接將原始的數(shù)學(xué)公式轉(zhuǎn)換為Python程序代碼來(lái)解決大象漫步的步數(shù)問(wèn)題,程序因變量t未被賦值而無(wú)法運(yùn)行,如圖1所示。
圖1
顯然,變量t的值是多少,絲毫也不影響計(jì)算結(jié)果,但既然表達(dá)式中有t,計(jì)算機(jī)就會(huì)追問(wèn)t到底是什么。為了解決這個(gè)問(wèn)題,有兩個(gè)辦法,比較常見(jiàn)的是在列出表達(dá)式時(shí)就將t約掉,但這樣其實(shí)就是人工地進(jìn)行了公式的變換。另一個(gè)不太常見(jiàn)的辦法是,隨便給t賦一個(gè)值(只要不是零),程序就能正常運(yùn)行了,如圖2所示。這個(gè)例子其實(shí)顯現(xiàn)出計(jì)算機(jī)科學(xué)中的一種抽象所對(duì)應(yīng)的情境是如何使自動(dòng)化過(guò)程能行。
圖2
所以,從大象漫步問(wèn)題的提出到數(shù)學(xué)公式的列出,這個(gè)過(guò)程主要體現(xiàn)數(shù)學(xué)上的抽象,而編寫(xiě)成可執(zhí)行的程序語(yǔ)言,是對(duì)數(shù)學(xué)抽象層次上的又一次抽象。然而問(wèn)題是,由于高級(jí)語(yǔ)言與日常及數(shù)學(xué)語(yǔ)言過(guò)于接近,所以當(dāng)數(shù)學(xué)的表征符號(hào)和計(jì)算機(jī)的表征符號(hào)具有相當(dāng)程度的相似性時(shí),反而難以顯著地體現(xiàn)出計(jì)算思維抽象的特點(diǎn)。來(lái)看這樣的表述:“計(jì)算思維就是將所研究的問(wèn)題抽象表示為形式化、程序化和機(jī)械化的對(duì)象,成為可以用于機(jī)器做批處理的對(duì)象,這種抽象也就是計(jì)算思維的精髓。”[9]將數(shù)學(xué)表達(dá)式轉(zhuǎn)化為程序語(yǔ)言表達(dá)式,雖說(shuō)的確也算是將問(wèn)題抽象成為可以用于機(jī)器做批處理的對(duì)象,但這個(gè)過(guò)程中所做的主要是數(shù)學(xué)表征符號(hào)向程序語(yǔ)言表征符號(hào)的變換,那個(gè)機(jī)械化的對(duì)象本身是在場(chǎng)的,除此以外,我們?cè)谠S多情況下還需要考慮那個(gè)機(jī)械化對(duì)象本身并不在場(chǎng)且等待著將要被構(gòu)建成為具有實(shí)施批處理能力的機(jī)械(或虛擬的機(jī)械)的狀況。這里試著舉一個(gè)更容易理解的例子,借助枚舉算法編寫(xiě)程序解決一個(gè)可以用枚舉法來(lái)解決的問(wèn)題,與綜合運(yùn)用循環(huán)結(jié)構(gòu)、分支結(jié)構(gòu)、變量等構(gòu)建出一個(gè)枚舉算法的程序來(lái)解決一個(gè)可以用枚舉法來(lái)解決的問(wèn)題,這兩者抽象的對(duì)象和目標(biāo)是不同的。
有很多來(lái)自基礎(chǔ)教育階段的一線教師對(duì)計(jì)算思維中抽象作用的看法是相似的(這里暫且將筆者的看法排除在外),如認(rèn)為“學(xué)生根據(jù)老師的引導(dǎo),把問(wèn)題模型抽象成算法描述,然后形成程序達(dá)到自動(dòng)化”[10]“把具體問(wèn)題進(jìn)行抽象,轉(zhuǎn)換成計(jì)算機(jī)能夠識(shí)別的符號(hào)或?qū)ο蟆薄11]值得一提的是,許憬對(duì)數(shù)學(xué)解題過(guò)程中的抽象與運(yùn)用計(jì)算機(jī)解題過(guò)程中的抽象的區(qū)別做了比較詳細(xì)的分析,關(guān)于計(jì)算機(jī)解題過(guò)程中的抽象,認(rèn)為“在解決問(wèn)題過(guò)程中,我們需要從事物的描述中梳理和抽象出可以控制執(zhí)行的若干條規(guī)則,并且將這些規(guī)則轉(zhuǎn)換成計(jì)算機(jī)可以理解的表達(dá)形式”。[12]不過(guò)與此形成對(duì)照的,是根據(jù)文獻(xiàn)資料,來(lái)自一些大學(xué)教師關(guān)于計(jì)算思維中抽象的作用的討論,往往集中在對(duì)計(jì)算機(jī)硬件或軟件系統(tǒng)的構(gòu)建上,如“抽象思維的本質(zhì)是運(yùn)用分析、判斷、推理、比較等方式抽取事物本質(zhì)或共性的思維。對(duì)計(jì)算機(jī)系統(tǒng)資源的抽象,使用戶(hù)不必了解下層實(shí)現(xiàn)細(xì)節(jié)……”[13]“計(jì)算機(jī)系統(tǒng)的運(yùn)行過(guò)程,將動(dòng)態(tài)電子事件組合,用程序設(shè)計(jì)語(yǔ)言文本化表示,常見(jiàn)的各種形式化程序設(shè)計(jì)語(yǔ)言都是類(lèi)似的抽象工具……”[14]“形式化表達(dá)有不同的層次……從外向內(nèi),從人向計(jì)算機(jī),每一層次的形式化表達(dá)都可以向內(nèi)層轉(zhuǎn)換,每一層向內(nèi)層的轉(zhuǎn)換都需要經(jīng)歷抽象和形式化”。[15]可見(jiàn),即便都提及計(jì)算思維的抽象,錨定的情境往往是不同的,情境之一是將現(xiàn)實(shí)問(wèn)題抽象成以計(jì)算機(jī)系統(tǒng)可實(shí)現(xiàn)的方法,在現(xiàn)有的抽象層次上解決自動(dòng)化問(wèn)題,更關(guān)心的是計(jì)算機(jī)系統(tǒng)的能行的問(wèn)題。情境之二是某個(gè)可執(zhí)行計(jì)算的環(huán)境本身是需要等待被構(gòu)建,計(jì)算系統(tǒng)本身是其他層次的軟硬件系統(tǒng)抽象的結(jié)果,抽象層次本身的架構(gòu)需要經(jīng)歷抽象和形式化的過(guò)程,其更關(guān)心的是如何使系統(tǒng)能行的問(wèn)題。例如,一段含有乘法和除法的表達(dá)式可以是數(shù)學(xué)表達(dá)式在計(jì)算機(jī)程序語(yǔ)言環(huán)境中抽象的結(jié)果,同時(shí),這個(gè)語(yǔ)言環(huán)境也是更底層更復(fù)雜的機(jī)器指令抽象的結(jié)果。筆者注意到,2010年7月在西安交通大學(xué)舉辦的首屆“九校聯(lián)盟(C9)計(jì)算機(jī)基礎(chǔ)課程研討會(huì)”發(fā)文提出,“計(jì)算機(jī)科學(xué)基礎(chǔ)理論研究實(shí)際上是基于抽象級(jí)環(huán)境(如圖靈機(jī))的問(wèn)題求解,計(jì)算機(jī)硬件體系的設(shè)計(jì)與研究則是一種指令級(jí)的問(wèn)題求解,程序設(shè)計(jì)是基于語(yǔ)言級(jí)的問(wèn)題求解活動(dòng),系統(tǒng)軟件設(shè)計(jì)與應(yīng)用軟件設(shè)計(jì)則是一種系統(tǒng)級(jí)的問(wèn)題求解……計(jì)算思維的本質(zhì)特征是基于不同層次計(jì)算環(huán)境的問(wèn)題求解……是基于計(jì)算模型(環(huán)境)和約束的問(wèn)題求解”。[16]這其實(shí)就闡述了抽象具有多樣性,某些問(wèn)題的解決涉及抽象級(jí)環(huán)境本身架構(gòu)的問(wèn)題。這對(duì)基礎(chǔ)教育階段的計(jì)算思維培養(yǎng)的教學(xué)設(shè)計(jì)給出了一條值得關(guān)注的線索,不同層次抽象的共同情境是基于計(jì)算模型(環(huán)境)和約束的問(wèn)題求解。
到目前為止,基礎(chǔ)教育階段的教學(xué)案例的資料在提及計(jì)算思維的抽象時(shí),所引用的案例絕大部分都屬于在現(xiàn)有的抽象層次上解決自動(dòng)化問(wèn)題,對(duì)抽象級(jí)環(huán)境本身架構(gòu)的問(wèn)題的討論是相當(dāng)有限的。為了讓教學(xué)設(shè)計(jì)更能體現(xiàn)出計(jì)算思維方面的抽象能力的培養(yǎng),可以從有意設(shè)定約束條件,改造抽象級(jí)環(huán)境入手,之所以是改造而不是直接利用某些知名的抽象級(jí)環(huán)境如圖靈機(jī),是為了便于學(xué)生能夠借助已有的知識(shí)和能力實(shí)現(xiàn)相對(duì)平滑的遷移。仍然以大象漫步問(wèn)題為例,給出一個(gè)不甚成熟的改造,規(guī)定學(xué)生在使用程序語(yǔ)言表達(dá)式時(shí),不能運(yùn)用乘法和除法運(yùn)算,在這樣受到限制的環(huán)境中,思考如何解決計(jì)算大象步數(shù)的問(wèn)題。
解決的方法有很多種,如可以用加法和減法來(lái)模擬乘法和除法,如圖3代碼所示,或者直接用計(jì)數(shù)的辦法對(duì)兩頭大象的步伐進(jìn)行模擬,上頁(yè)圖4所示的代碼給出了模擬大象步伐計(jì)數(shù)的計(jì)算方法,當(dāng)然,也可以很方便地?cái)U(kuò)展代碼使之成為可以任意設(shè)定大象步數(shù)的更一般性的解法,前者是對(duì)數(shù)學(xué)運(yùn)算過(guò)程進(jìn)行模擬,后者是對(duì)大象步伐行為本身進(jìn)行模擬。兩種方法都體現(xiàn)出形式化表達(dá)向內(nèi)層轉(zhuǎn)化的特點(diǎn),被轉(zhuǎn)化的結(jié)果可以進(jìn)一步被封裝成為抽象的模塊,供高一層次的系統(tǒng)調(diào)用。
圖3
圖4
在現(xiàn)實(shí)情況中,基礎(chǔ)教育階段的學(xué)生很可能對(duì)計(jì)算機(jī)軟硬件系統(tǒng)底層原理的認(rèn)識(shí)不夠深入,且較難領(lǐng)會(huì)諸多抽象的計(jì)算模型的運(yùn)行原理,在這樣的情況下,不僅可以要讓學(xué)生體驗(yàn)特定抽象層次上的自動(dòng)化的實(shí)現(xiàn),還可以試著讓學(xué)生體驗(yàn)在計(jì)算模型(環(huán)境)受約束的情境下,抽象層次本身架構(gòu)的實(shí)現(xiàn)需要經(jīng)歷的抽象和形式化的過(guò)程,這可能是一個(gè)值得深入探索的方向。