王愛勝
計算思維不等于算法,它更多地表現為計算科學的靈魂、信息時代的技術價值以及布爾邏輯的智慧。有人說計算思維的出現是計算機文化(編程)的復興,是純計算機科學的回歸,這雖有一些偏激,但無疑能反映基于計算機之“計算”這一根本核心的再次被重視。誠然,計算思維的思想不僅在程序設計教學方面被重視,在信息采集、加工、表達、存儲等技術學習方面也都應被關注。只是,我們在運用它的時候不能僅淺顯地置于算法設計或方案規劃這一個環節,需要有更深度更全面的思維含量。接下來,我們討論的是在程序設計教學中有關計算思維的方式與作用,發現它對我們重構教學體系的價值意義。對于信息技術教學內容的變革,無論怎么取舍都不宜丟掉程序設計,因為這是計算機硬件與軟件都要涉及的內容,在計算思維的倡導下,它還將是一切技術思維活動的內容基礎。為此,我們以程序設計教學為例剖析計算思維各個層次的思維深度,探索深度思維架構的過程。
● 第一層次的思維:從實際問題向數學模型架構
近幾年的程序教學中,伴隨面向對象的程序設計語言的興起,建模能力培養被進一步弱化,主要原因是控件的可視化和代碼的事件響應讓編程向多媒體技術方向發展,甚至包括機器人的可視化編程也有此傾向。這種做法雖然沒有過多地拋棄策略、規劃等算法思想,但是缺乏由實際問題開始的底層思維,是有斷層的。由于數學模型在各學科、各領域都有諸多專業方法,以下我們僅從程序教學涉及的實際問題入手,簡單地分析計算思維的表現。
從實際問題轉化為“計算機可以完成的計算”,數學模型的形成是需要計算思維的。
例1:計算多個規則圖形組成的土地面積。我們先要考慮的輸入量是各部分圖形的數據,如邊、高、角;輸出量是它們的面積之和;其中的計算關鍵并非是求和,而是各種圖形的分割及數據,每部分面積求法是思維核心。這里不考慮機器智能判斷圖形,只考慮輸入各圖形的特征數據,就已經夠復雜。或者,再考慮有多種分解法,那么數學模型的通用性就也要考慮。開始,得出的數學模型描述可以是:S=S(1)+S(2)…+S(n);S(三角形)、S(矩形)等圖形面積逐個計算。然后,可能尋找更通用的任意三角形或多邊形的面積S(i)。這種實際問題向數學思維發展的過程是逐步加深的,與純數學問題的不同在于需要同步考慮計算機程序的輸入量與運算的關系,所以是計算思維的基礎層次。
● 第二層次的思維:從數學模型向算法架構
當數學模型建立起來之后,我們就需要進一步針對計算機進行可行性設計,采用查找、篩選、遞歸、回溯等策略,依據計算機獲取、存儲、邏輯分析等特點設計算法。于是,思維開始轉向流程圖、偽代碼(或簡代碼)等更計算機化的形式。
例2:計算不規則圖形的土地面積。如果作為純數學問題,要涉及坐標分析、微積分的數學問題。如果采用“笨”的計算機計算,也會有更多其他思路,如“逐點掃描法”可以從圖形學的角度獲得計算比例,這是另一種數學模型,更容易讓我們明白數學模型與算法的關系,其核心是思維方式的改變。
● 第三層次的思維:從算法向代碼架構
算法完善明確后,程序設計有了良好基礎,但離設計出成功的程序還有距離,縮短距離需要的是對代碼熟練掌握和創造性地運用代碼,現實問題求解讓思維價值得到實現。
例3:對個人藏書進行卡片化信息管理,需要對數據庫中任意一本書目各個字段內容合成、分段,并打印圖書登記卡片。這個問題的基本算法是字符串相加,折行打印。數學模型有多種,比較簡易的是:不斷地取固定長的字符串作為一行打印內容,最后余下的字符串為最后一行。轉化代碼時,關鍵問題來了。對任意一段英漢混合的字符串進行截取中如何防止取到一半漢字呢?這已經不再是算法的問題,而是代碼編寫技巧的問題,要有對字符底層存儲的原理知識,更要有基于原理的深度思維,方才能夠從ASCII的角度去判斷截取最后字符的結果是什么。
● 第四層次的思維:從代碼向軟件架構
會編寫一段段的代碼去解決單一的問題,這只是零散的思維表達,不論深度如何這都不是整體的思維架構。算法與代碼學習扎實固然重要,但是作為創造者只有趨向軟件設計才能讓計算思維充溢大腦。
例4:做一個跟計算機博弈“剪刀石頭布”的軟件。單獨從數學結構來說,計算機出“剪刀”“石頭”“布”要有不同的數值來代替,跟人即時出手的結果按規則比較;從程序代碼來說,是“隨機數”與“分支結構”的運用。但是到了軟件,就要考慮輸入界面(如何表達出人的出手)、輸出界面(如何表達計算機的出手和博弈的結果),重要的是博弈的設計(計算機隨機數的變化、人機出手的比較和分數的統計等),這個整體的過程即是軟件設計思維的形成過程。這是一種主動、整體而深度的設計者的思維成長。
● 第五層次的思維:從軟件向計算機工程架構
軟件不論大小與功能,要看其系統內涵才能區分是不是對“工程”思維形成有幫助。工程首先是由系統分析師架構,他要從用戶需求出發,結合硬件、軟件和人力資源等多方面因素,系統地設計解決方案。這是集計算機科學和其他學科結合運用的高層次的思維。
例5:做一個學校交互宣傳項目。從工程來說,學校宣傳包括需求分析(宣傳內容、方式、效果等)、規劃(需要的素材、技術、流程、產品及人員等)、實施(算法設計、軟件設計等)、測試(運行測試、問題修正)等。作為程序教學,經歷工程的過程這很有意義,通過對流程的體驗來集成與發展宏觀思維,這類似廣義的算法設計。
● 第六層次的思維:從工程向思想架構
無論什么工作,尤其是技術工程這樣的綜合事務,經歷會讓思維臻于成熟。讓學生經歷一些實際的工程,在思維發展的基礎上逐步形成創意、創新思想這是計算思維最高層次的發展目標。
例6:使用動畫模擬春天花開。不論從花朵設計、動畫制作,或者聲音配置,在這種看似非程序內容的學習中,一般做法是運用獨立的元件進行逐個分步設計,不涉及代碼。如果具有計算思維意識,會很容易考慮到花兒的隨機位置、大小等靈活變化要素,考慮到調用同一個元件只需控制內部不同幀就會達到不同開放程度等獨特技巧。這種思維的靈活性,無疑是符合運用計算提高動畫創作效率的計算思維的最高層次。
以上對計算思維的架構過程,是從對實際問題的基礎認識開始,到運用算法思想、代碼功能、軟件技術、工程思想一步步從小到大進行分析,以更容易區分計算思維的層次,這只是其中一種學習順序,并非完全是計算思維的運用順序,因為任何事物都是立體的、綜合的。從工作實際來看,工程開發是“自頂向下”“逐步求精”設計的,對中小學生來講學習會有難度。相對的,“從下向上”的學習會更容易一些。無論怎樣,都不影響我們對計算思維之于程序教學重構的價值認識,因為計算思維核心價值更在于發展思維的品質。