馮友梅
天津師范大學教育學部副教授,博士,碩士生導師。主要研究方向為信息科技課程與教學、思維可視化理論與實踐。近年來圍繞以上兩個研究方向在《電化教育研究》《中國電化教育》《現代教育技術》等期刊上發表論文20余篇,主持全國教科規劃教育部重點項目等省部級課題四項,主編及參編教材多部,多次被評為全國優秀培訓教師。
魏寧
北京市東城區教育科學研究院研修員,《中國信息技術教育》雜志特約撰稿人/專欄作者。
歸于算法——發展學生的計算思維應該“教什么”?
魏寧:馮教授您好,很高興有機會和您聊一聊有關計算思維的話題。作為學科核心素養,近年來,計算思維受到了廣大信息科技教師的普遍關注,如何培養、發展學生的計算思維,已經成為信息科技課程教學的重要任務,您對此有何看法?
馮友梅:的確,計算思維是重要的學科核心素養,稱得上是課程的核心教學目標。特別是在當前計算思維的培養已經常態化的情況下,甚至要求每節課都有自己明確的計算思維培養目標。這就需要我們思考:應該如何通過課程內容的學習系統、有計劃地培養、發展學生的計算思維?
在當前的教學實踐中,存在這樣一種現象,就是每當提到計算思維的培養,所有人都覺得非常重要,但一說到具體怎么做,又會感覺到計算思維有點“虛”,感覺就像飄在空中,很難落地,不易找到一個具體的解決方案。
較為普遍的一種認識和做法是:在教學過程中讓學生多經歷問題解決的過程,在這個過程中去培養計算思維。例如,把計算思維從思維過程的角度拆分成若干要素——抽象、分解、建模等,讓學生通過抽象、分解、建模等一系列思維活動達成對計算思維的培養。
但這樣做存在的問題是,無法把計算思維拆分到很細的粒度,做不到每節課都有明確的計算思維培養目標。其結果就是老師們雖然知道每節課的教學都是面向計算思維的,但又說不清楚這節課為計算思維的發展做出了什么具體的貢獻,也無法形成一個計算思維培養的系統的、有規劃的教學體系。
魏寧:因此,需要換一個角度去思考?
馮友梅:計算思維的培養屬于思維教學,多年來,我們一直是把思維教學和知識教學拆分成兩條線來進行的。但在教學實踐中會觀察到,如果一個學生對知識的掌握能夠系統、深入,達到深度學習的層次,他的思維必然處于高水平。從這個角度來看,就需要反思,將思維教學和知識教學分開是否合理呢?
事實上,教學中知識與思維分離這一假設,源自認知心理學中關于學習核心機制中的“信息加工”隱喻,并且是通過與計算機科學簡單類比得出的。它把學習解釋為一個程序加工的過程,這個時候程序本身就是思維過程,而內容與過程則是割裂的。
相比之下,皮亞杰的發生認識論所揭示的“思維過程和思維內容是本質上不可分割的統一整體”這一觀點顯然更為合理,也就是說,在思維培養的過程中,思維和知識,即思維過程和思維內容是不能分開或者說不能截然分開的。以此作為核心理論依據,我們就可以把計算思維的培養歸結為特定的知識結構的培養。這就是我們所說的“面向知識的教學”,當然,在這里,從面向思維的教學“回歸”到面向知識的教學,并不是一種簡單的回歸,而是一種哲學上的“否定之否定”。
原來的知識教學,大家總會詬病說“有知識無能力”“有知識無智慧”,因為它更多的是一種面向知識點的教學,教的是一個個散點,缺乏一種知識結構。因此,對于計算思維的教學,就要想辦法把它轉換成面向特定知識結構的教學,最終實現知識結構和思維結構的內在統一,從而發展學生的計算思維。
同時,還要關注知識結構中知識點與知識點之間的關聯,讓每節課的知識點都能融入已有的知識結構中,最后形成復雜、整體的知識結構,這樣才能與高水平的思維和智慧相匹配。
魏寧:從這個角度出發,您認為能夠支撐計算思維發展的知識結構是什么樣的?
馮友梅:我覺得可以用一個二維描述框架來說明,它包括計算概念和計算策略兩個維度。我稍微解釋一下:如果把信息科技學科的所有學科對象的集合定義為“信息科技世界”,從這個世界自身的角度看,處于支撐地位的知識就包括了信息科技世界內部的各種對象及其屬性的知識、各類信息系統運行過程及其控制機制的知識,而從人與信息科技世界關系的角度看,則包括了各種實踐過程及其目標的知識。所謂的策略性知識體系就“鑲嵌”于以上各類知識之中。我們可以把策略性知識體系稱為“計算策略”,這是知識結構中的核心,而把所有處于支撐地位的知識稱為“計算概念”。這兩類知識作為靜態知識的基礎,支持動態計算思維過程的運轉,達成動態統一,這就是計算思維描述框架中兩個維度的由來(如下頁圖)。
可以預見的是,以上策略性知識體系,也就是支撐計算思維發展的知識結構一旦在學生頭腦中形成,就可以向其他學科和生活領域遷移,從而表現出高水平的計算思維。
魏寧:具體的計算概念和計算策略該如何提取呢?
馮友梅:計算概念和計算策略可以采取自上而下與自下而上相結合的方式來提取。
首先,從基礎教育階段的上游學科——計算機科學與技術學科中尋找依據和線索。其實,在高等教育領域,自20世紀90年代起就開始追問:“作為一門學科,計算機科學與技術應該讓學生了解哪些富有智慧的核心思想?”“計算機科學與技術學科中具有共同、本質特征的內容是什么?”經過多年的提煉,目前較為公認的學科核心概念包括算法、程序、硬件、軟件、效率、安全性等,學科核心知識領域包括離散結構、程序設計基礎、算法和復雜性、操作系統、網絡計算、圖形學和可視化計算、信息系統、軟件工程等,學科核心方法包括分解、封裝、模塊化、遞歸、迭代、折衷、重用等。
上述的計算機科學與技術學科的核心概念、核心知識領域就是提取計算概念維度核心要素的重要依據,而核心方法則是提取計算策略維度核心要素的重要依據。
其次,還要以基礎教育階段信息科技學科的基本理念和學生特點為依據,將上游學科核心知識領域、核心概念和方法做取舍、調整后向下映射,最終形成計算概念和計算策略維度的核心要素集合。
魏寧:最終的核心要素包含什么?
馮友梅:作為支撐計算思維發展的知識結構的核心,計算策略維度包含13個核心要素——分治、減治、變治、封裝、重用、可視化、迭代、統籌、折衷、貪心、蠻干、回溯、動態規劃(如下頁表)。這些策略在信息科技課程中都可以找到相應的實例,如“信息系統自頂向下的開發過程”“網絡體系結構”“遞歸算法”中包含了分治策略,“折半查找算法”“快速排序算法”中包含了減治策略,“蒙特卡洛算法”中包含了變治策略,等等。
計算概念是計算策略的支撐,大致包括對象與屬性、過程與控制、目標與實踐三個維度。
這樣以計算策略、計算概念兩個維度及其核心要素構成計算思維二維描述框架,將有助于將計算思維的培養落到實處。
魏寧:以上您為我們呈現了發展學生計算思維的知識結構—— 一個包含計算概念和計算策略的二維描述框架。通過這些核心要素的分解、滲透,就能解決發展計算思維應該“教什么”的問題,同時讓每節課的教學目標落在實處。
馮友梅:這也就是針對計算思維培養和發展的一個核心觀點——將信息科技學科的知識結構還原為計算方法和策略,也就是我們常說的算法,以解決發展學生計算思維應該“教什么”的問題,我把它稱作“歸于算法”。
魏寧:它是如何落實到每一節課上的呢?
馮友梅:通俗地說就叫以點帶面,通過這種形式,讓每一節課都能有明確的計算思維培養目標。如果我們形成了知識意義上的計算思維,也就是二維描述框架里面的各個核心要素,并且這些核心要素又可以一層一層細分,那么我們就能夠讓每一節課都有明確的計算思維培養要素,進而對整體的面向計算思維培養的信息科技教學進行系統的、精確化的教學設計。
始于算理——發展學生的計算思維應該“怎么教”?
魏寧:馮教授,前面我們通過對支撐計算思維發展的知識結構的探討,明晰了這一結構中的計算概念、計算策略及其核心要素,進而提出了發展計算思維應該教什么——“歸于算法”。那接下來的問題就是,在課堂上,學生怎樣才能掌握這些核心要素?教師又該“如何教”呢?
馮友梅:是的,我們剛才提到了一個核心觀點——培養和發展計算思維需要將信息科技學科的知識結構還原為算法,其中最為核心的是形成計算策略維度的13個核心要素,這樣就解決了發展學生計算思維“教什么”的問題,接下來的問題就是,算法類的知識、策略該“如何教”?
要想弄清楚這個問題,首先要明確算法屬于一種什么類型的知識。我們不妨換一個角度來理解這個問題,這次信息科技課程的確立,一個重要的特征就是課程名稱中的“科”字,在課程理念中,也強調了“體現‘科’‘技’并重”,即科學原理和實踐應用并重。那么,信息科技課程中的“科”與物理、化學等科學課程有何區別呢?
魏寧:很多老師會期待,信息科技課程的確立,能讓課程增加科學的“味道”,更多地向物理、化學等科學類課程靠攏。
馮友梅:是這樣的,但如果仔細觀察的話,就會發現,信息科技課程中的科學原理與物理、化學等科學課程中的科學原理,在本質上是不同的。
我舉一個例子,直觀地看,信息科技課程中的互聯網基本原理與生物課程中的光合作用原理都屬于科學原理。但科學類課程中的科學原理源自自然世界,是自然世界中存在的自發性規律。而信息科技學科本質上屬于技術學科,它的使命是改造自然世界。從嚴格意義上說,信息科技課程中存在的是技術原理,而不是科學原理,它針對的是人工自然對象,從源頭或本質上來說就是問題解決方案,也就是算法。
所以,要想在信息科技課程中去探尋科學原理,并不是向科學課程去靠攏,而是不局限于技術的表層功能,把表層功能的傻瓜化“面紗”撕掉,深入到更底層去關注技術的內部結構以及運行機理,看看是如何實現這些功能的。從培養和發展學生計算思維的角度考慮,也是一樣的道理,如果我們只關注技術的表層功能,以及如何使用它的話,將很難理解計算策略是如何發揮作用的,很難為計算思維的發展提供有力的支撐。
但是,技術的表層功能和底層的算法,往往是一個互補的過程。表層越“傻瓜”,它的底層的運行機理越復雜,其中蘊含的方法和策略也更多,技術的智慧就體現在這里。
魏寧:也就是說,對于信息科技課程來說,這些技術底層的算法就是它的“科學原理”。那么,我們能否借鑒科學類課程中科學原理的教學流程來教算法呢?
馮友梅:這個問題非常重要,我認為不能。我們知道,在科學類課程中,科學原理通常依照“現象感知—原理理解(探究)—應用遷移”這一教學流程展開。這是因為科學知識是人類認識世界的成果,科學原理是它的重要組成部分,在上述教學流程中,學生可以把具體的科學現象和抽象的科學原理關聯起來,實現科學原理的內化,也可以通過自主探究,經歷科學原理的發現過程,來習得科學原理。
但信息科技課程中的科學原理,也就是算法,它在本質上是人類改造世界的成果,也就是問題解決方案。試想,我們如果采用科學類課程的教學流程,會出現什么結果呢?我們以互聯網基本原理為例,多半會是這樣一個過程:首先讓學生感受生活中的互聯網應用場景,引導學生思考它的內部原理,再通過類比、動畫等方式讓學生理解這一原理,最后用掌握的原理解釋相關現象或解決相關問題。但問題是,在以上過程中,學生經歷的是對“互聯網基本原理”的認識,而沒有經歷“互聯網基本原理”的創造過程,他們很難理解互聯網中的每一層是做什么的、如何開展協作,更難領會到計算策略的核心要素——分治、封裝、統籌等。畢竟,學生所習得的是作為表象的科學原理,而不是作為本質的問題解決方案。簡言之,如果照搬科學類課程中的科學原理教學過程,學生將很難真正理解信息科技課程中的科學原理——算法,也就難以使計算思維到有效發展。
魏寧:那么,應該通過什么樣的教學方法,才能讓學生通過對信息科技課程中科學原理也就是算法的學習,更好地理解其中的計算策略呢?
馮友梅:我認為,應該還原當時激發計算機科學家創造算法(科學原理)的問題情境,以問題為先導,讓學生經歷“創造”概念、原理、策略、技能的過程。通俗地說,要“重走計算機科學家的來時路”,像計算機科學家一樣思考,才能更好地掌握信息科技課程中的科學原理——算法,進而解決發展學生計算思維“怎么教”的問題,我把它稱作“始于算理”。
如果和前面“教什么”的問題連起來,可以把算法“教什么、怎么教”,也就是如何發展學生計算思維的整個過程概括為:歸于算法,始于算理。
魏寧:這八個字很好地解釋了信息科技課程中的科學原理——算法應該“教什么、怎么教”。您能舉一個例子嗎?
馮友梅:例如,在七年級“互聯網基本原理”這一單元的教學中,從教學目標和內容的角度,就可以將“認識互聯網基本原理”還原為“創造互聯網協議”,并提煉出具體的協議中內含的計算策略——分治、封裝、統籌。
單元內的三個分目標層層遞進,它們分別是:①了解電路交換、報文交換、分組交換及其適用情境,初步內化效率意識,初步了解網絡數據傳輸中的編碼和解碼過程;②通過對復雜的數據傳輸控制問題進行合理分解,內化分治策略及效率、可靠意識;③通過設計互聯網各層接口,內化封裝、統籌策略。
與之對應的三個分任務也是層層遞進的,它們依次為:①互聯網中高效的數據傳輸過程是怎樣的?(分組交換)②通過怎樣的控制算法才能實現高效、可靠的數據傳輸?如何有效設計該數據傳輸控制算法?(分層)③如何使各層有效“合作”?(接口)
限于篇幅,這里僅給出了教學設計中的核心目標和任務,在具體教學時,還需要根據實際情況動態調整。
魏寧:對于核心的計算策略,如“分治”策略,如何在“互聯網基本原理”教學中進行滲透呢?
馮友梅:以“互聯網基本原理”中的分治策略為例,教師的教學設計需要通過單元內任務鏈、任務內問題鏈的系統設計,還原互聯網協議的生成情境,讓學生經歷當時科學家創造互聯網協議的過程。在教學中,教師可以首先拋給學生一個問題——當時的計算機科學家在創造互聯網協議時,面對的是什么樣的問題?讓學生在教師提供的一系列支架下,重新經歷一遍創造互聯網協議的整個路徑。例如,計算機科學家當時面對的一個重要問題是:全世界范圍內有那么多網絡,每個網絡內部的主機和主機之間都有通信的需求,同時每個網絡在和其他較遠的網絡進行信息傳輸、交換的過程中,也存在著多種路徑,如何保證數據在復雜的網絡環境中高效、可靠地傳輸呢?
現在我們當然知道了,當時的計算機科學家們創造了分組交換的方式,也就是說在兩點之間如果想傳輸數據,并不是通過一條專線,而是采用存儲轉發的方式。后來大家發現,如果不把發送端的數據拆分成組的話,也會產生很多的傳輸等待。所以,為了要進一步提高信道的整體應用率,創造了分組交換的方式。
接下來還有一系列的問題。例如,因為在從發送端到接收端的傳輸過程中需要分組,要把一個數據打散成若干個較小的數據塊,那么,每個數據塊應該選擇怎樣的傳輸路徑?如何選擇最快、最可靠的傳輸路徑?在傳輸的過程中又該如何排序?如果在傳輸過程中,發生了部分丟失的情況,該如何處理?
我們發現,所有這些問題都是為了保證分組交換的過程能夠高效、有序、可靠地進行,因此需要考慮的問題就非常之多。當把這些問題一個個拋給學生的時候,他們就會意識到,分組交換需要解決的問題太多了。
正是因為我們面對的問題過于復雜,而人類處理問題的能力終究是有限的,所以必須通過一定的計算策略去解決它。這就用到了分治策略,把復雜問題一層層分解,如分解為傳輸層、網絡層的問題,分別去解決。
還原計算機科學家當時面對的核心問題,把這些問題一步步拋給學生,讓學生經歷計算機科學家解決問題的過程,重走計算機科學家的“來時路”,等于讓學生自己去再次“創造”了一次互聯網協議。在這個過程中,自然就經歷了運用分治策略去解決復雜問題的過程。當教師這樣去教授“互聯網基本原理”的時候,是以計算策略的滲透為目的的,同時直指信息科技課程中的科學原理,也就是算法。因此,我把它稱作“歸于算法,始于算理”。這是教學的核心方法論。
關于計算思維的評價等其他話題
魏寧:當我們給出一個計算思維描述框架的時候,也有助于解決計算思維評價的問題。
馮友梅:以往針對計算思維的評價,更多的還是從問題解決的過程出發的,面向抽象、分解等要素展開,這樣的評價通常只能是粗粒度的。而教學都是微觀的,是面向具體的知識展開的,如何通過微觀的、具體的教學內容對計算思維做出評價呢?
另外,我們現在倡導的“教-學-評”一體化,同樣要求把評價落實到微觀的層面,能夠隨時獲得學生的反饋,甚至在每節課上都能了解學生計算思維的發展狀況,以便即時調整教師的教學。如果經歷了一個單元的學習,甚至是一個學期才能對學生進行一次計算思維的評價,就無法針對學生計算思維的發展狀況做出及時的調整,“教-學-評”一體化也就無從談起了。
因此,只有轉換評價的內在邏輯,從面向問題解決過程的評價轉向面向知識結構的評價,通過計算思維二維描述框架,將觀測點聚焦于13種計算策略以及計算概念這些核心要素,并在此基礎上進一步細化,才能精細刻畫學生的計算思維發展狀況。
打個比方,評價工具就好比一把尺子,它的刻度有米、分米、厘米、毫米,當我們的評價是粗粒度的時候,它只能以米為單位去測量,而當我們把評價工具做到很小的粒度的時候,就能夠在厘米甚至毫米級進行測量,這樣才能實現“教-學-評”一體化。
魏寧:從思維培養的角度講,計算思維并非信息科技課程所獨有。那么,上述13種計算策略是否在其他學科中也能有所體現?
馮友梅:是的,作為一種思維方式,原則上,所有學科都可以培養學生的計算思維。我舉一個例子,語文教材里有一篇課文《曹沖稱象》,因為當時的條件沒法直接給大象稱重,曹沖非常聰明地把大象的體重轉化成了石頭的重量,這就把“稱象”的難題轉化成了“稱石頭”。這其實就是“變治”的計算策略。類似的,數學學科里的“數形結合”就包含了可視化策略。
我認為,所有學科都可以培養學生的計算思維,但只有信息科技學科可以最全面、最系統地培養各種計算策略,其他學科更多地體現為輔助性的作用。
魏寧:近年來,計算思維的影響力已經超越了信息科技學科,被更多學科所接受,成為學生的一種基本素養,您怎么看待這一現象?
馮友梅:這和基礎教育的培養目標是有關的,基礎教育階段是為學生的終身發展和社會發展奠基的。擁有了計算思維能力,并不是只能在本學科從事科研和專業工作時才起作用,對絕大多數學生而言,掌握了計算思維,就可以更好地去解決生活中遇到的問題,甚至是復雜問題,讓自己今后的生活、工作更高效,這同樣是非常有意義的。
當前,作為基礎教育階段的一種重要素養,計算思維有著廣闊的發展空間,被眾多學科所認可,但只有信息科技學科能夠系統地對其加以培養,這恰恰說明了信息科技學科的重要性。
魏寧:是的,我想我們應該以更加開放的心態去看待計算思維。計算思維被越來越多的人認為是面向未來學生必備的基本素養之一,這對于信息科技學科來說,無疑是有著積極意義的。
感謝馮教授今天和大家分享的對計算思維、對信息科技課程教學的思考,希望這些思考能讓老師們從新的視角審視信息科技課程教學和計算思維的培養。
馮友梅:也感謝《中國信息技術教育》雜志長期以來對信息科技課程的關注,祝愿老師們在信息科技課程中不斷創新,讓學生的計算思維得到更好的發展。