王榮良
● 問題:抽象就是計算思維嗎
開展計算思維教育,首要的問題是要弄清什么是計算思維。在中小學開展計算思維教育,也需要弄清計算思維與其他思維相比較所能表達的獨特優勢與價值,需要回答計算思維的哪些特征是其他的學科思維所沒有的,或者說不能有效或顯著地表達與反映的。
周以真教授曾說過,抽象是計算思維的本質之一。那么,在教學實踐過程中,對學生開展抽象方法的教學,是不是就是在開展計算思維教育呢?
有一位教師在設計小學四年級科學學科“食物鏈”的學習內容時,結合Scratch編程技術,設計了一個項目學習活動,旨在通過該活動的實施發展學生的計算思維。該項目活動的學習目標之一是:學生能夠用Scratch語言創設一個動畫情境,表示一個真實食物鏈的發展特征。該項目活動對應的課程標準有兩個方面,即信息技術課程標準和四年級生命科學的課程標準。其中,涉及信息技術課程中關于計算思維能力要求的有:①通過抽象的方式(如模型、模擬)表示數據;②設計算法形成自動化解決問題的方案;③總結這種解決問題的方法,遷移至更寬泛的問題解決之中。這些學習目標要求在《普通高中信息技術課程標準(2017年版)》中可以找到對應的內容。
按照項目任務,活動過程包括頭腦風暴、問題討論、動畫演示、分組拓展等環節。頭腦風暴環節,學生討論在食物鏈中草、兔子和鷹的關系,說明其中太陽與細菌分解的作用;問題討論環節,針對問題(例如,如果讓生態系統更復雜一些,需要增加什么物種),討論哪些因素會改變草、兔子和鷹三者關系的平衡;動畫演示環節,每位學生用Scratch軟件創設一個簡單的動畫情境,能顯示兔子吃草、鷹抓兔子這一食物鏈場景,反映出個人對食物鏈的理解;分組拓展環節,學生分組利用Scratch軟件創設一個加入其他因素后對食物鏈產生影響的預期場景,用以預測相關因素的變化對食物鏈的影響。
根據教師的教學設計,在頭腦風暴環節,學生通過討論畫出草、兔子和鷹這些生物在食物鏈中的結構圖,抽象出鷹抓兔子、兔子吃草的相互關系,從而通過抽象方法的運用實現計算思維的培養目標。
針對以上教學設計,不妨做一個假設:這堂課的教學目標僅是通過分析草、兔子和鷹三者關系讓學生理解食物鏈的概念,不需要學生用Scratch編制程序來動畫表示食物鏈中的相互關系。教師同樣設計相同的討論環節,學生在畫出草、兔子和鷹這些生物在食物鏈中的結構圖過程中同樣使用了抽象的方法。顯然,這里的“抽象”,是生命科學學科中分析問題、解決問題的一種方法。那么,我們是否可以認為,因“抽象”方法的運用,也就實現了計算思維的培養目標呢?
在中小學計算思維教育的實踐中,相類似的問題還有不少。例如,在項目學習過程中,教師往往會引導學生將一個復雜的大問題分解成若干個簡單的小問題分別解決,這一特征符合計算思維中的分解屬性,即將整體的對象、問題、過程或者系統分解成單獨的部分,因此,不少教師將這一教學過程歸類到計算思維的培養。又如,運用生活中的算法來培養計算思維,如泡茶過程,先燒水,然后洗杯子、找茶葉、放茶葉,水開后泡茶,這一過程可以盡可能地節省時間。再深入思考,我們就會發現,前一個例子,將大問題分化為小問題逐一解決,是解決問題的一般方法之一。顯然,計算思維不應該包羅解決問題的一般方法,那么解決問題的一般方法與計算思維的邊界在哪里?后一個例子,本質上是運籌學在生活中應用的一個實例,運籌學與計算思維的關系又是什么?
之所以在計算思維認識上會出現偏差,乃至在計算思維教學實踐上出現偏差,原因之一是我們缺少對計算思維所對應的學科進行追溯,沒有建立計算思維的學科觀。在日常的教學活動中,教師關注具體的教學內容,而對相應的學科背景的研究比較少。
目前,學術界對計算思維概念的認識比較模糊,定義也比較多。關于計算思維內涵的研究大致有兩個相反的傾向:一是宏觀視角的、廣義的計算思維研究,傾向于計算思維概念的通俗化和普適性;二是微觀視角的,傾向于其專業化和高端化的狹義計算思維的研究。但無論哪一種傾向,都需要回答計算思維與其他形式思維相比,其獨特性在哪里,都需要以計算科學學科為起點,從學科的特征去考察計算思維的獨特性。
● 基礎:可計算問題與計算科學學科
所謂可計算,通俗地說,如果存在一個機械的過程,對給定的一個輸入,能在有限步驟內給出答案,那么這個問題就是可計算的。圖靈是用抽象的圖靈機描述了可計算模型。
20世紀初,著名的數學家希爾伯特提出了著名的23個數學問題,其中包括試圖建立通用的邏輯系統驗證所有反映客觀世界的定理,或者從少數幾條公理和推導規則出發,證明或發現和導出所有的未知定理。這就是有名的“希爾伯特計劃”。1931年,數學家哥德爾提出了不完備性定理,指出任何一個數學系統,如果是一致的,那么其一致性不能在自身內部來證明,從而否定了“希爾伯特計劃”。圖靈提出圖靈機模型,是其論文《論可計算數及其在判定問題中的應用》中所舉的一個實例,其結論是,能夠用圖靈機解決的問題,就是一個可計算問題,從而給出了可計算問題的一種判別方法。因此,圖靈機設計的本意并不是為了設計計算機,而是為了討論可計算問題,但客觀上為計算機的發明奠定了理論基礎。
20世紀70—80年代,計算機得到了飛速的發展,并開始滲透到許多學科領域,但“計算機科學能否成為一門學科”以及“計算機科學是理科還是工科,或只是一門技術”等問題仍然存在很大爭議。針對計算是否能成為一門學科的激烈爭論,1985年春,ACM和IEEE-CS聯合攻關,開始對“計算作為一門學科”做存在性證明。1988年,研究報告《計算作為一門學科》(Computing as a Discipline)發布于Communications of the ACM雜志上。
報告《計算作為一門學科》為計算學科做了如下定義:計算學科是對描述和變換信息的算法過程進行的系統研究,包括理論、分析、設計、效率、實現和應用等。計算學科涵蓋了對計算過程的分析以及計算機的設計和使用。
聯合攻關組在隨后的研究中,形成了一系列供大學開展專業教育的課程計劃。聯合攻關組將計算學科分為計算機科學、軟件工程、計算機工程、信息技術和信息系統五個分支學科,先后遞交了SE2004、CE2004、CC2005、IT2008、CE2008和IS2012等報告,其中CC2005是總報告(如上頁圖1)。
計算機科學(CS)是有關計算的理論、算法和實現、機器人技術、計算機視覺、智能系統、生物信息學和其他新興的有發展前途領域的學科。計算機科學專業培養的學生,更關注計算理論和算法基礎,并能從事軟件開發及相關的理論研究。
軟件工程(SE)是以系統、規范、定量的方法把工程應用于軟件開發、運行和維護,同時對上述過程中各種方法和途徑展開研究的學科。軟件工程專業培養的學生,更關注以工程規范進行大規模軟件系統開發與維護的原則,盡可能避免軟件系統潛在的風險。
計算機工程(CE)是對現代計算系統和由計算機控制的有關設備的軟件與硬件設計、構造、實施和維護進行研究的學科。計算機工程專業培養的學生,更關注設計并實施集軟件和硬件設計于一體的系統。
信息技術(IT)是針對社會和企業信息化需求提供與實施解決方案的學科,它主要側重于在一定的組織及社會環境下,通過選擇、創造、應用、集成和管理的計算技術來滿足用戶的需要。信息技術專業培養的學生,更關注基于計算機的新產品及其正常運行和維護,并能使用相關的信息技術來計劃、實施和配置計算機系統。
信息系統(IS)是指如何將信息技術的方法與企業生產和商業流通結合起來,以滿足這些行業需求的學科。信息系統專業培養的學生,更關注信息資源的獲取、部署、管理和使用,能夠分析信息需求和相關商業過程,能詳細描述并設計出與目標一致的系統。
● 理解:學科視角下的計算思維
學科的基本問題是一個非常重要的概念。學科的基本問題不是針對一個學科的具體問題提出來的,而是在一個學科一大類具體問題的基礎上,通過分析這類問題共同的特點和本質屬性,經過總結、提煉得到更一般化的抽象的問題。學科中許多具體問題是某一抽象的基本問題在該具體問題所屬領域內的一個具體的實例。通過學科基本問題的討論,可以幫助我們認識一個學科,認識這個學科有哪些具體問題。每個學科都有基本問題,計算學科也不例外。
計算過程的能行性問題,即可計算問題就是計算學科的基本問題。在計算學科中,無論是計算模型的研究、實際計算機系統的制造、高級程序語言的設計,還是操作系統的開發,都是圍繞這一問題而展開的。在可計算問題的研究過程中,通過解決一系列的具體問題,來推動計算學科的發展。
計算科學是一門自然科學,也是一門工程類科學,人們基于計算理論以工程的方法制造計算機。計算機是人造物,計算機程序也是人造物。在計算機學科領域,解決實際問題就是需要制造這一人造物,這樣的人造物可能用于模擬,可能用于運算,也可能直接用于控制外部世界,其取決于實際的需要。“設計”就是依據需要來實現人造物的制作。這里,要完成正確的設計,有兩個前提:一是應用需求,即設計者對客觀世界進行分析與抽象,構造性地進行需求分析,并能夠形式化地表達需求,以便用機械的計算方法實現之,即構造計算過程;二是計算理論,因為設計是以計算理論為基礎的,是以需求為目標的。有了正確的計算模型,才會有可用的、具有自動化屬性的人造物。問題求解中的計算思維過程如圖2所示。
制造人造物的需求分析,是以客觀世界為分析對象的。從信息視角來看,客觀世界可以通過抽象方法描述成由一系列數據及關系、規律所組成的概念模型。可計算問題是計算學科研究的核心,只有可計算的問題,才能構建相應的計算模型。現實世界,通過抽象的操作和形式化的表達,形成可計算模型,也形成了相應的計算理論。
人造物和客觀世界的關系是應用與驗證。人造物的制造目標是應用,這是設計的原始目標,也是理論的價值所在。因此,人造物最終回到客觀世界,在實際應用中體現實用價值。同理,由于人造物的功能或性能目標來源于客觀世界,所以,客觀世界為人造物的應用目標是否實現提供了價值判斷的依據。
在以上闡述中,抽象、形式化表達、構造、自動化都是關鍵詞,反映了計算學科的特征。
回到計算思維的討論。思維是人腦對客觀事物的一種概括的、間接的反映,它反映了客觀事物的本質和規律;思維是在人的實踐活動中,在感性認識,特別是表象的基礎上,借助語言,以知識為中介而實現的。計算思維是人依據自己對有關計算知識的認識,通過對客觀世界中的計算現象、計算需求和計算過程的分析,認識有關計算的本質與規律,形成新的知識與理論。
在計算思維的形成過程中,實踐活動是計算思維的基礎。通過實踐活動,可以將表面現象從對客觀事物的直接感知通過抽象過渡到理性認識。在一個有關計算的實踐活動中,在對客觀世界進行分析、制造人造物的過程中形成對計算的新認識,從而形成計算思維。這是一個反復循環的過程,是從感性到理性、從具體到抽象的過程,也是計算思維的過程。
計算思維是一種問題求解的思維,它吸取了問題求解所采用的一般的數學思維方法、現實世界中復雜的設計與評估的一般工程思維方法以及復雜性、智能、心理、人類行為理解等一般科學思維方法。盡管計算思維本身可能不是計算科學所專屬,但計算思維確實是反映了用計算的手段來解決問題的思維方式。也就是說,計算思維是運用計算機基本概念去求解問題、設計系統和理解人類的行為。
● 反思:指向自動化的抽象
現實世界中有很多的人造物。能夠實現計算的裝置,即計算機這樣一個人造物,與現實世界中其他的人造物相比較,最大的特點就是自動化,即該計算裝置是具有自動化屬性的,能夠自動地執行預設操作。
從計算學科出發,在解決問題過程中,人們是否使用了計算思維,不能簡單地以是否運用了抽象這一思維方法作為判別依據,而應該從人們思考問題是否從計算這一核心概念出發來判斷,即首先判斷該問題是否可計算,在可計算的前提下給出計算的確切操作步驟,最后對計算的過程與效果進行評價。
回到本文初討論的“食物鏈與Scratch編程”的課例。人類無時無刻不在使用抽象的方法,不同學科都運用抽象,抽象也是思維的最基本方式。計算思維的抽象,一定是指向自動化的。理性的思維具有連續性,也具有目標性。在本課例中,如果對鷹、兔子、草三者關系的抽象,是以學習食物鏈原理為目標的,則顯然不是計算思維的抽象。當學生得出鷹、兔子、草三者關系時,思維的延續是對食物鏈的思考,已經偏離了計算思維的軌跡。如果學生在已知Scratch工具實現自動化機理的基礎上,梳理出“如果鷹遇到兔子,就抓兔子”“如果兔子遇到草,就吃草”這樣的規則,并且還可以羅列出在顯示屏上一步步地繪制“鷹抓兔子”或“兔子吃草”的操作步驟,那么,這里的抽象,是屬于計算思維中的抽象。其抽象方法的運用,是為可計算判別和計算步驟構造服務的,是以自動化實現為目標的。學生在對鷹、兔子、草三者關系抽象的時候,始終是以Scratch為平臺的計算環境為判別依據的。
本課例的分組拓展環節是:學生分組利用Scratch軟件創設一個加入其他因素后對食物鏈產生影響的預期場景,用以預測相關因素的變化對食物鏈的影響。針對這一教學環節的學習活動,如果學生運用Scratch編制的程序,來模擬增加一個動物以后食物鏈的結構變化,預測食物鏈中相關因素的變化對食物鏈結構的影響,那么,這里的學生學習指向并不是計算思維,而是食物鏈的相關知識,計算機技術只是為學生深入理解食物鏈知識體系提供方便。如果學習目標是計算思維的培養,那么學生應該在已知食物鏈中相關因素的變化對食物鏈影響的有關知識基礎上,運用計算學科的知識和方法,對食物鏈結構進行分析與抽象,設法用Scratch實現,這才是解決計算學科中的計算問題,這才涉及計算思維的培養。在這個過程中,同樣要判斷是否可計算,考慮如何計算,還要考慮計算的開銷,最終通過程序實現預設的功能。
通過對“食物鏈與Scratch編程”課例的討論,我們會得到兩方面的啟示:第一,計算思維是有學科背景的,忽視計算學科,對計算思維的理解會出現偏差。第二,類似于STEM的多學科學習場景,有利于培養學生的綜合能力,也為計算思維的培養提供了真實場景,但如果教師對計算思維的學科理解不透徹的話,反而會削弱計算思維的教學效果。
思維具有指向性,思維是一個過程,抽象不是計算思維的全部,只有以自動化為目標,經歷了從抽象、形式化表達、構造到自動化的過程,才是計算思維的實施過程。并不是所有的抽象就一定涉及計算思維,在計算學科框架下,抽象的運用可能成為計算思維的一部分。英國從原來的信息通信技術(ICT)課程轉向計算(Computing)課程,在中小學開展計算思維教育,提出了五個特征:抽象、分解、評估、算法思想以及歸納。其作為計算課程框架中的抽象,一定是指向自動化的。
從計算學科視角出發,可以分析類似的問題。在項目學習中,把復雜問題分解成一個個小問題,一步一步地完成,這是問題解決的一般方法。如果對復雜問題的分解,是以這樣的策略進行的——經分解的操作步驟,讓一個完全不懂的人,按給定的步驟操作,也能夠完成項目,并且最好是重復執行相同的操作,那么,這樣的任務分解方法,可以說,有一定的計算思維屬性,說明分解后的操作步驟是可機械地執行的,即可計算的。這也可以從另一個側面說明,計算機作為計算的執行裝置,只會機械地執行操作命令,是一種很“笨”的執行裝置。
當然,一步一步地執行操作步驟,是計算學科實現自動化很重要的因素。但計算學科在構造自動實現的過程中,還有很多學科方法和特征,這些方法和特征同樣也可以反映在計算思維之中,需要我們不斷地探索與實踐。堅持以計算學科視角分析計算思維,有利于認清計算思維的本質。