陳凱



假設某節課的內容,是通過循環結構語句(或者流程圖)來求得自然數數列若干項的和,那么在這節課中,到底哪些地方能落實計算思維的培養目標?雖然說教學內容中可能涉及抽象——如果將生活場景中的事件轉化為數據和符號的表達看成是一種抽象的話,涉及借助循環結構實現重用,涉及邏輯嚴謹的執行、分析和調試過程……但毫無疑問這些都與計算思維有著關系。然而,常能見到一線教師在關于計算思維培養的分析案例中,以“因為使學生能夠通過抽象/重用/邏輯分析來解決……的問題,從而有效培養了學生的計算思維”這樣的句式得出結論,筆者感覺其論據是不充分的,甚至在以上句式的“能夠通過”后加上那些公認為與計算思維密切相關的方法名詞,如“迭代”“遞歸”“模塊化”等,以這種形式表達觀點的可靠性仍然值得懷疑。一方面,相關性和因果性本來就應避免相互混淆;另一方面,計算思維作為一種高階思維具有系統思維整體性的特點。在利用計算思維解決問題的過程中,往往需要綜合“用邏輯思維精準描述計算過程,用算法思維有效構造計算過程,用網絡思維有效組合計算過程”[1],可見計算思維是在設計和使用某計算模型來解決具體問題的過程中,綜合了具有多種特征的思維方式而整體涌現出來的,這樣就難以用還原論的方法,認為只要在教學活動中體現了邏輯思維、算法思維、網絡思維等,即是實現了計算思維的培養。當使用整體性思維解決問題時,“人們通過對要素的重組,改變對象系統的結構和層次關系,實現認識的突破……體現創造系統的自組織能力”[2],以此觀點對照循環結構的教學內容,可以想見,對象系統結構和層次的再組織,不是僅僅借助修改一下初始值、循環條件、計數器的步長值等就能實現的。假設整個循環結構是預設的,如果學生能做的只是針對不同情境套用這個結構,那么無論是否在此過程中使用到有所謂抽象/重用/邏輯分析等特征的方法步驟,都只是應用了已有的結構,而沒有實現認識的突破。
周以真認為“計算思維是運用計算機科學的基礎概念進行問題求解、系統設計以及人類行為理解等涵蓋計算機科學之廣度的一系列思維活動”。在這極為著名且被廣泛引用的觀點中,缺失的是思維的動機,即何以要用計算機科學的基礎概念進行問題求解、系統設計等一系列的活動?相對而言,Robert Tinker提出:“計算思維的核心是將大的問題分解成很多小的問題直到小的問題能夠自動化解決的思維過程。”[3]這一論述中的思維動機就十分明顯,而周以真于2011年所補充的“形式化表達問題和解決方案,使之成為能夠被信息處理代理有效執行的思維過程”[4],可以視作是實現自動化解決問題的具體途徑。關于怎樣將問題分解成能被自動化解決的小問題,并且,怎樣用形式化的方法來有效執行自動化,由此可以展開許多方面的討論,一個較容易操作的路徑是“解構—模式識別—抽象與重構—算法實現”。如前文所說,為了培養計算思維,需要對要素進行重組,改變對象系統的結構和層次關系。對于數列求和的教學來說,一種策略是將數列求和的任務置放于更大的任務場景中,另一種策略是對數列求和的任務本身進行解構。本文選取后一種策略實施教學設計,是因為它更能體現計算機科學的基本思想方法。
● 解構:從流程圖到安置物的空間
用變量值列表來跟蹤流程圖或程序中不同時刻變量值變化的情況,是算法教學中常見的方法,在分析數列求和的流程圖或程序代碼時,計數器變量和累加器變量的值的變化至關重要,讓學生理解已有算法流程和變量變化之間的關系,是理所當然的。但為了體現計算思維的培養,可以考慮采用解構的方法,將變量值的變化從當前流程圖和程序代碼中剝離出來。
解構,是對已有結構的反叛和消解,作為哲學思想的解構主義的興起,“對秩序、結構以及現有的語言體系產生了懷疑和否定……將斗爭的矛頭指向結構主義所推崇的整體、結構、次序、層次和權威”。[5]雖然本文不打算深入討論解構主義的問題,但不妨將程序設計語言的結構也視為一種權威,大膽對其進行消解的嘗試,甚至可將程序中的變量名本身和數字作為預設權威加以消解,或者,至少對變量加上括號使之成為(變量)而引發學習者對概念名詞含義的懷疑。然后就只剩下了純粹的代表數的物,這樣就實現了符號的消解,雖然在操作過程中,為了交流上的方便,仍然要用某種符號如星號來代表這種“用以代表數的”物,然而,物與物在空間和時間上的關系,是不能被消解的部分,最初的時候,存在著用表格來代表的空間。空間和空間中的物,對應變量和變量值,具有同構的關系,如表1所示。如果說用變量的設定和變量值的變化,是對現實事件變化狀態的抽象后的結構系統,則空間的設定和空間中物的變化,就是將原有結構系統拆解后的留存,為后續的重構提供了可能性。
● 模式識別:空間中物的變化模式與計算的對應
每個空間結構的擁有者,對空間結構的使用具有自由的決定權,可以將某物搬運到某空間,可以將某物復制到某空間,或者直接讓某空間的物消失(虛擬數字空間的一個重要特點是,它具有超乎物理現實的時空特性),空間的擁有者的另一項能力是,可以為自己的行為設定重用的規則,不妨假設某種“魔法”能實現反復進行某一系列的操作。假設在第2個時間周期內,所做的操作是將初始時刻中一號空間的物復制到三號空間,然后再將二號空間的物復制到三號空間,那么第2個時間周期結束時,三號空間將有兩個物。接下來實施魔法重復這一系列的操作,在第3個時間周期結束時,三號空間就將得到4個物,以此類推。這樣實際上就實現了差值為2的等差數列項的計算。
假設三個空間中的物以這樣的規律發生變化,在時間周期內,二號空間中的物會復制并添加到三號空間中,而一號空間中的物會復制并添加到二號空間中,如表2所示。
從表2可以看出,三號空間中的物的數量,就對應著1、2到5數列的和。在這里沒有流程圖,沒有程序代碼,有的是可安置物的空間以及嚴格按步驟進行的復制和搬運的規則,可以輕易識別出其中的變化模式。當然,即便這個方法可以順利求得數列和,但就好像歌德的敘事詩《魔法師的弟子》那樣,一旦讓掃帚開始取水,就難以停下來,所以這里暫且通過限定次數的方法來避免無休止的重復。限于篇幅,關于如何設計某個可以自動停止的規則系統的問題留待以后討論。
通過特定規則的物的復制和搬運,使得這個空間結構能夠實現特定的計算過程,顯然,結合不同的空間結構和規則,就能實現不同目的的計算。有興趣的讀者可以試著用類似的方法得到1、4、9、16等完全平方數。
● 抽象與重構:將數據作為計算的一部分
通過物的復制和搬運,使得這個空間結構能夠實現特定的計算過程。接下去的問題就指向了計算自動化的可行性問題,重新構建計算裝置的路徑當然可以指向程序設計,但肯定不僅僅指向程序設計。為了計算思維的培養,在引入程序算法之前,首先要做的,是要更自由地進行抽象和重構的嘗試,這樣才能彰顯出此前解構的意義。下面試舉一例。
假設存在某個符號串,小括號、中括號和大括號分別對應三個存儲物的空間:
(*)[*]{}
考慮存在一個機器人,它要做的就是自動通過物的復制和搬運來實現數列和的運算,但在機器人看來,并不存在什么存儲空間,它看到的其實就是不同的符號。它所要做的,就是先匹配所有中括號后跟星號的符號串,并將這個符號串復制并插入到大括號后,接著匹配大括號緊跟中括號的符號串,將其替換為大括號;然后匹配所有小括號后跟星號的符號串,并將這個符號串復制并插入到中括號后,接著匹配中括號緊跟小括號的符號串,將其替換為中括號。整個過程如圖1所示。
這些符號將此前的空間和空間中的物再次抽象化為符號,并通過設定模式匹配規則的方法,構造出一個可以自動實現復制和搬運的系統。可以看出,三種不同的括號符號是這個機器人得以正確復制和搬運這些物的關鍵。如果將星號符號看成數據,那么這些括號符號就是另一種作用的數據,是專門為劃分出數據空間結構的數據,為機器人得以實施自動化工作提供了重要辨識標志。可以將這些數據稱為元數據。
關于特定符號作為執行計算的數據,而不僅僅是被計算的數據這個問題,還有更多值得探討的地方。例如,機器人如何知曉諸如“匹配所有中括號后跟星號的符號串,并將這個符號串復制并插入到大括號后”這樣的規則要求,假如說機器人執行動作的規則行為是被固化在機器中的,那么這個機器人也就只能實現求自然數數列和的工作了。但若規則本身也是一串被編碼的符號,那么機器人可實施的工作種類就會多很多。
● 算法實現:回到求自然數數列和的程序算法
經由上述“解構—模式識別—抽象與重構”的過程,再重新回到若干項自然數數列和的程序算法,便可對應上述“復制—搬運”過程實現相應的算法,其中用變量t代表時刻,用變量a1、a2、a3來代表三個可存儲數據的空間,完整的代碼如圖2所示。可以看出其中a1總是不發生變化,因此可以將代碼簡化,圖3所示。繼而發現,變量t和a2的變化完全是一致的,所以可以進一步將代碼簡化,如下頁圖4所示。
除了變量名不同以外,這和程序算法中求自然數數列和的經典的程序代碼是一樣的。但到達此代碼實現的路徑卻漫長很多,其原因,是為了讓學生體驗到在自動計算的任務實現的過程中,既要考慮到人的需求,同時也要從機器運作的可能性、可行性和效率方面來考慮構建一個自動計算模型的問題。這是一種“認知思維主體客體化”[6]的方法,希望能打破學生在利用程序算法解決問題的過程中,圍繞某特定計算模型所形成的過于單一的思維模式。
參考文獻:
[1]張菡.簡析計算思維中的思維方式及思維本質[J].科學與財富,2020(01).
[2]王玉琳,王諍諍.創造性思維的系統分析[J].系統辯證學學報,2002(03):13-16.
[3]NRC. Report of a Workshop on the Pedagogical Aspects of Computational Thinking[C].Washington,D.C.: National academies press, 2011.
[4]J M Wing.Research Notebook:Computational Thinking-What and Why?The Link Magazine.Carnegie Mellon University,Pittsburgh[DB/OL].https://www.cs.cmu.edu/link/research-notebook-computational-thinking-what-and-why.2021-06-12.
[5]葛卉.淺論解構主義與結構主義的關系[J].時代文學,2008(15):170-171.
[6]王榮良.計算思維教育中的信息處理行為主體分析[J].中國信息技術教育,2021(09):37-39.