沈 軍
(東南大學 計算機科學與工程學院,江蘇南京 211189)
隨著泛計算社會的到來,大學程序設計課程的地位變得十分重要,其教材建設成為整個教學活動的關鍵。目前該課程教材建設的流派主要有語言主導型、算法主導型、環(huán)境主導型和應用主導型。語言主導型屬于傳統(tǒng)教學范式,主要強調程序設計語言本身的各種機制及其具體表達[1],將語言的應用交給其他課程以及學生本身。該流派的主要問題是,割裂了語言與語言應用兩者之間的內在思維聯系,并且對語言機制產生的動因(即如何支持程序設計方法)以及語言各種機制之間的思維聯系沒有給出解析。算法主導型改進了傳統(tǒng)范式,將一些基礎數據結構及基本算法作為語言機制的初步應用[2]。該流派的主要問題是,語言機制缺乏系統(tǒng)性邏輯,對語言機制產生的動因及語言各種機制之間的關系沒有給出解析,同時,對數據結構及基本算法知識缺乏結構化梳理,過多強調數據結構及基本算法的知識,導致認知難度增加。環(huán)境主導型往往結合某種具體開發(fā)環(huán)境,以其如何使用為主線,穿插介紹程序設計語言機制和環(huán)境機制的具體使用。該流派的主要問題是就事論事,適合于技能訓練(本文對該類教材不做評論)。應用主導型一般以某個或某些專業(yè)的基本應用為主要示例,結合該示例的具體實現,介紹語言的各種機制及其基本使用。該流派的主要問題是,缺乏系統(tǒng)性的語言機制邏輯組織,對語言機制產生的動因及其內在關系同樣缺乏解析,并且,因其應用的針對性,缺乏普適的意義。
相對于國內教材建設,國外同類教材建設思路具有明顯的邏輯性。首先,將教材分為兩個主要層次:面向基礎教學類和面向應用類。前者定位于與領域應用相對獨立的程序設計基礎知識與能力培養(yǎng),主要面向教學,可以對應國內教材建設狀態(tài);后者定位于與領域應用相關的程序設計基礎知識與能力培養(yǎng),主要面向后教學(即離開學校后的進一步教學)的拓展,針對各種特定領域應用,系統(tǒng)化梳理該領域應用應具備的普適處理方法。其次,兩類教材的內容和體系具有一定的邏輯完備性。對于面向基礎教學類教材,一般都綜合了語言、算法及應用,并且,對三者的關系及其運用進行系統(tǒng)化梳理。其教學目標是覆蓋語言、算法及應用三個維度,使學生具備程序設計應有的基本能力(即夯實基礎知識,兼顧縱向的知識應用能力)。對于面向應用類教材,一般都淡化語言,適當兼顧算法,重點強調領域相關的通用問題處理方法。其教學目標是使學生具備較強的領域應用程序設計能力(即強調知識應用能力)。最后,兩類教材建設的基本理念都是以方法為主,而不是以知識為主。盡管國外教材建設思路是西方邏輯文化及其延伸的教學理念使然,具備一定的教學應用優(yōu)勢,然而,它對思維能力的培養(yǎng)仍然是隱式的,其對思維能力的培養(yǎng)深度取決于教師對教材的解讀及其教學設計能力。
綜上所述,國內各種流派的教材建設思路未能系統(tǒng)地深入到方法和思維層次。國外教材建設思路盡管對這方面的缺陷作了一定彌補,但是其隱式思維能力的培養(yǎng)方式,對于國內大部分教師而言,無法真正起到有效作用。另外,國外教材建設思路的隱式思維能力培養(yǎng)未能深入到計算機學科固有的元思維特征層次[3]。
計算機學科固有的多維屬性,孕育了其獨有的計算思維(computational thinking)[4-5]。本質上,計算思維的核心是遞歸思維,它是處理多維形態(tài)的一種最簡潔的策略,可以通過有限的基本手段實現無限的應用需求。因此,計算思維具有天生的高階屬性。這種思維策略的關鍵是構建了一種自含式的基本原理。具體而言,該基本原理是一個二元組(BS,BRS),其中BS表示基礎方法(或原子方法)集合,BRS表示基礎方法的關系(或原子方法的運算)集合,并且,BRS作用于BS的結果仍然可以是BS的元素,從而使其具備自含特性。
計算思維基本原理的教學指導意義在于強調方法和思維的教學,將具體的知識作為其外化的表現和示例,從而回歸教學的本源。深入而言,其教學指導意義在于提升了教學的抽象層次,將目前面向知識傳授的單一層次拓展為面向知識傳授和方法及思維培養(yǎng)的兩個層次,并解析兩個層次的內在辯證關系。具體而言,針對程序設計課程,其涉及的方法、語言、環(huán)境、應用等都應該圍繞計算思維原理展開,并解析原理對各個方面的具體映射和作用,從而培養(yǎng)學生正確的專業(yè)思維,播下支持學生未來持續(xù)創(chuàng)新的思維種子。
3.1.1 內容及其關系
程序設計涉及計算機語言(簡稱語言,用以描述程序)、計算機環(huán)境(簡稱環(huán)境,用以給出程序構造和運行的基礎)、計算機應用(簡稱應用,用以給出符合計算機特點的問題處理方法及步驟安排)和程序構造基本方法(簡稱方法,用以給出程序基本結構的定義,包括基本元素及其交互關系)四個方面,稱為程序設計四要素。其中,方法是程序設計的內因,語言、環(huán)境和應用都是程序設計的外因。程序設計四要素之間相輔相成,缺一不可。語言和環(huán)境成為“程序”的約束條件,應用就是滿足這些約束條件的“程序”。語言是一種黏合劑,將應用和環(huán)境連接起來。語言、環(huán)境和應用三個要素給出程序設計要素的外化關系,方法要素給出了程序設計要素的內化關系。也就是,語言和環(huán)境的各項機制設立,都必須圍繞方法展開或支持方法,應用也是基于方法或是方法的具體運用。作為程序設計的內因,基本方法的演化帶動了語言和環(huán)境的同步演化,最終又驅動了應用的發(fā)展。
3.1.2 教學特點
程序設計課程的教學具有明顯的多維特征。一方面,其四個要素需要同步展開。盡管方法作為內因起到核心作用,其他要素都圍繞它展開。但是,程序設計的教學卻是不斷在四個要素之間跳躍。圖1(a)所示為四個要素的同步性。另一方面,計算思維作為一個隱式的維度,分別作用于四個基本要素,成為耦合四個基本要素的關鍵,圖1(b)所示為相應的解析[6]。
圖1 程序設計的多維特征
大學程序設計課程教材的建設思路應該針對四個基本要素,分別找到其二元組(BS,BRS)的具體映射,并在此基礎上構建教材的體系。
3.2.1 方 法
程序設計方法分為多個邏輯層次,一般包括面向數據組織和數據處理的基礎方法、面向程序模型及結構定義的基本方法和面向應用的應用方法。基本方法是對基礎方法的應用,應用方法是對基本方法的應用。本質上,基礎方法和基本方法屬于原理性層次,應用方法則屬于原理的具體應用層次。對于基礎方法,具體映射的定義如圖2所示。
圖2 計算思維原理到基礎方法的映射
對數據組織和數據處理兩個方面的基礎方法及其關系的不同認識,構成不同的程序設計基本方法。伴隨著人類自身對程序構造問題認識的不斷深入,程序設計基本方法得到不斷的演化,經歷面向功能方法、面向對象方法、面向組件方法和面向服務方法的發(fā)展,每一種基本方法都給出程序的基本要素及其交互關系的定義,即程序基本結構模型的定義。程序基本結構模型的定義就是建立在計算思維原理之上,面向功能方法的具體映射為({模塊},{模塊之間的關系}),面向對象方法的具體映射為({對象},{對象之間的關系}),面向組件方法的具體映射為({組件},{組件之間的關系}),面向服務方法的具體映射為({服務},{服務之間的關系})。從模塊到對象,從對象到組件,從組件到服務,粒度不斷擴大,抽象層次及平臺獨立性越來越高。
3.2.2 語 言
語言作為一種描述工具,從其本身來說主要是提供各種描述機制。由于語言是方法的外化體現,因此,語言機制構建必然是為了支持方法。因此,計算思維原理對語言的具體映射就是給出用于表達基礎方法和基本方法所定義二元組的相應語言機制。以C++語言為例,其映射關系如圖3所示。
圖3 計算思維原理到語言的映射(1)
考慮到語言要素自身的系統(tǒng)性,對于語言機制及其關系也遵循計算思維原理。圖4(a)所示為語言的基本體系,圖4(b)所示為語言機制及其關系的計算思維原理映射[7]。
圖4 計算思維原理到語言的映射(2)
3.2.3 環(huán) 境
作為語言賴以作用的基礎,環(huán)境一般分為程序運行支撐環(huán)境(或開發(fā)平臺、運行平臺)和程序開發(fā)(或寫作、構造)環(huán)境兩大類。程序運行支撐環(huán)境就是指計算機系統(tǒng),包括系統(tǒng)軟件操作系統(tǒng)(operating system,OS)。程序開發(fā)環(huán)境主要是指用于程序開發(fā)的工具集,兩種環(huán)境的關系如圖5所示。程序設計課程中,主要側重于開發(fā)環(huán)境,其計算思維原理的映射如圖6所示。
圖5 程序設計環(huán)境
圖6 計算思維原理到環(huán)境的映射
另一方面,針對環(huán)境自身,也遵循計算思維的宏觀視圖,即所有環(huán)境基本上都是圍繞工程管理基本模型來構建,由此,環(huán)境的使用方式及其界面的設計與使用都基于定義的工程管理模型展開。隨著應用的復雜而導致的程序規(guī)模龐大問題,現代程序設計環(huán)境所定義的工程管理模型也依據計算思維原理進行拓展,支持多維的工程管理模型。
3.2.4 應 用
應用一般是指對具體問題的處理。也就是,針對給定的具體問題,基于基本方法找到一種問題處理的方案,然后用語言將其表達出來并在環(huán)境中實現。盡管某個問題的解決方案是多樣的,然而,在此,問題解決方案必須受到計算機這個特定環(huán)境的限制和約束。也就是,程序設計中的應用是人類處理問題的思維在計算機環(huán)境中的投影,這種投影具體表現為問題解決方案應滿足計算機系統(tǒng)的特性和程序基本模型。這種獨有的、在約束條件下的問題處理過程,形成了各種面向各類問題的有效的處理方法,并通過抽象建立起相應圖式或模式。依據計算思維基本原理,程序設計應用的精髓在于發(fā)掘各種基本應用模式,以及對各種應用模式進行靈活建構。應用模式及其建構成為計算思維基本原理到應用要素的具體映射如圖7所示。
圖7 計算思維原理到應用的映射
建立在對學科特征及思維本質深刻認識基礎上的教材建設新思路具有重要的現實意義,主要體現在:①是“教育部關于進一步深化本科教學改革全面提高教學質量的若干意見”的最貼切實踐,提出的以思維和方法為核心的教學理念,回歸了教學的本質,詮釋了本科教學“本”的內涵[8];②為程序設計課程的教學改革及發(fā)展指明正確方向;③引導并實現教師工作性質回歸教學研究,促進教師自身專業(yè)認知能力及素質的提高;④針對中西方文化差異,給出基于顯式專業(yè)思維能力培養(yǎng)的教材建設方法并由此驅動教學設計,消除了國外教材建設中隱式思維能力培養(yǎng)教學方式對國內教學的不適應性;⑤深入元思維層次,并在此基礎上重構程序設計課程知識的新結構視圖,建立面向元認知能力培養(yǎng)的全新教學模式的基礎。建材建設新思路的全面實現,必將對我國新一輪程序設計課程類教學改革的發(fā)展產生深遠影響。