王榮良
情境引入:這是我們所在的城市——上海,一座現代化的美麗都市。(課件播放照片)然而,如今這座城市卻被一個嚴重的問題所困擾,那就是環境污染。上海如同我們的家,誰都希望自己的家永遠展現出美麗干凈的姿態,所以今天我們就以環境保護為主題,設計一款Kodu游戲來宣傳環境保護的意識。
技術學習:在制作這款游戲的時候,你們可能會遇到困難,當你遇到困難了,可以打開Kodu學習卡片,和小伙伴一起研究如何解決這些困難。
以上的學習卡片(部分),介紹了學生在編制游戲過程中使用CREATE命令種樹的方法,使用Setwater命令使河水變清的方法。在編程過程中,學生學會了Kodu編程平臺的創建命令等使用方法,這是一種具體技術的學習,也是理解計算機世界的基礎。
游戲設計:接下來,兩人為一組,在游戲計劃書上,寫下你們對這款游戲的構思。
在巡視的過程中,我發現每組學生設計的游戲都十分有趣,請一組學生分享一下自己的游戲。
提供游戲計劃書,是一種程序設計方法的呈現,也是一種編程思維的傳授。將學生的設計想法用計劃書來表達,是一種將學生還不是很確定的想法變為明確要完成的作品的重要思維過程。同時,計劃書中所描述的功能,特別是通過“游戲規則”的設計以及隨后“游戲規則”用程序來實現,都潛移默化地體現了“規則”應是可計算的這一編程思維特征。
交流分享:大部分小組已經完成游戲的一半內容了,問題和困難也一點點出現了。我想聽聽看,你們在制作的過程中,都遇到了哪些問題?這些問題解決了嗎?如果沒有解決,其他小組能不能提供幫助?已經完成設計的小組,可以嘗試給自己的游戲增加難度,讓游戲更好玩。
在規劃游戲計劃書的時候,學生已經將現實世界中的游戲,在自己的頭腦里進行了整理和歸納。這種整理與歸納一定是基于游戲程序開發平臺Kodu的,更一般化地說,是基于對計算機執行程序特征的理解基礎上的。在具體的編程程序和調試程序過程中,學生不斷地將自己頭腦中的游戲情節與計算機世界中的游戲情節作比較,從而體驗計算機世界的自動化屬性和解決問題的方法觀,從而形成新的“世界觀”。
隨著計算機技術的發展,友好的編程平臺操作界面降低了編程學習的技術門檻,特別是一批適合兒童開展趣味編程的學習環境,為編程學習的低齡化創造了條件。然而,當這種技術性非常強且技術變革非常快的程序設計技術成為兒童的學習內容時,如何透過技術學習的表面,挖掘其思維方式乃至更深層的教育價值,并努力實現這些教育價值,是一個迫切需要解決的問題,也是一線教師需要密切關注與不斷探索的問題。
Kodu編程《上海的環境》一課展現的就是從編程技術學習到思維培養,再到對計算機世界認識這樣一個多層次的教學目標設計與實現。當兒童編程的每堂課都擁有多層次的教學目標,并能通過教授、操練、試錯、感悟、滲透等多種途徑實現這些教學目標時,那其對應的兒童編程教育才是豐富和完整的,才是符合兒童發展需要的。
從技能到“世界觀”:兒童編程教育意義分析
學習計算機,很容易聯想到學習編程。程序設計課程是大學本科計算機科學與技術專業的基礎課程,通常要求學生掌握一門程序設計語言。程序設計課程領域的知識由程序設計基本概念和程序設計技巧組成,這些內容覆蓋了計算機科學與技術專業本科生必須了解與掌握的整個程序設計的知識范圍。因此,編程學習不僅是掌握一門程序設計語言,也是進一步開展專業學習的工具,更是體驗與理解計算機工作原理的一個途徑。
中小學開展程序設計教學,經歷了一個由盛到衰又轉向興旺的過程。當再次關注程序設計教學時,必然需要探討程序設計教學的價值。“培養未來的程序員”可以成為以課外社團形式組織少量中小學生組織開展編程教學的學習目標,但是,若此目標成為義務教育階段的學習目標肯定得不到教育界普遍的認同。多年來,業內人士不斷拓展程序設計教學更寬泛的教育價值,如培養創新思想、團隊合作精神等,并將這些價值滲透于編程教學中。然而,這些并不是程序設計教學所獨有的,通過其他學科的學習也可以獲得這些教育價值。
從程序設計本體而言,其獨有的教育價值應該有三個層次:學會一種技能,培養一種思維,形成一種對世界的看法。
首先,通過編程學習,掌握一種編程技能,是程序設計教學最直接的、最基本的目標。其最典型的就是職業教育,學習者熟練掌握一種高級編程語言進行程序開發,解決實際問題,編程效益是教學追求的重要目標。因此,學習內容除了程序設計的基礎知識以外,還會涉及大量的編程技巧,同時從工程角度出發,還會涉及具體的技術細節和工程化的規定。其學習內容是繁瑣的,學習目標指向是明確的。顯然,作為非職業教育的學習者,涉及編程技巧和具體技術細節和工程性規定的學習內容可以弱化。
其次,通過編程學習,培養一種思維。目前大力倡導的計算思維教育就屬于思維的培養。計算思維不僅是計算機專業人員應該具有的思維模式和素養,也應該成為當代公民的一種思維素養。計算機專業學生學習程序設計,不僅要作為一種編程工具來學習,還要以此為載體學習學科思維。而作為非計算機專業的學習者,關注的是計算思維的形成。那么,從思維教育的角度出發,面對程序設計大量的工程化規定,規范與設計滿足程序設計教學要求的最小子集,包括最小指令集、最基本的編程技巧等,則是一項重要的研究內容。
最后,通過編程學習,形成對一種世界的看法,即形成一種獨特的“世界觀”。當今社會是由人、物、機所組成的三元世界,即人的世界、物理世界以及計算機世界。計算機世界是現代人必須面對并且深入探索的世界,其虛擬、自動、智能等特性通過程序設計,可以讓兒童直面接觸并深入感受計算機世界。
當把程序設計的學習者框定為兒童后,你會發現,盡管學習者有可能是潛在的計算機從業人員,但是以職業教育為目標的教學對兒童肯定是不合適的。因此,培養一種思維和形成一種對計算機世界的看法,必然是兒童編程有待挖掘的教育價值。endprint
從自然語言到邏輯語言:兒童編程教育特點分析
符號功能的產生是兒童認知能力發展的一種飛躍,也是語言學習的基礎。心理學家皮亞杰借用邏輯和數學的概念,將兒童認知發展分為感知運算階段、前運算階段、具體運算階段和形式運算階段四個階段。其中,2~7歲前運算階段的兒童已經產生了人類特有的語言思維,能用詞語和表象相組合的方式去思考,從而使思維和動作分離開,使思維帶有概括性和間接性。到了7~11歲具體運算階段,兒童認知的主要特征是面對問題時,能夠遵循法則進行推理思維,但推理思維能力還是離不開具體事物的支持,只限于可見的具體情境或熟悉的經驗。
2~7歲的兒童在自然語言,特別是母語的學習方面,主要手段有:①模仿,即兒童在母語環境中模仿父母的說話。②重復,只有建立在模仿和反復使用的基礎上,語言能力才會真正形成。③運用,這是一個邊模仿、邊練習、邊運用的過程。④理解記憶,即在理解的基礎上重復是記憶的最好方法。⑤糾正錯誤,在語言大量運用的過程中,環境可以糾正使用中出現的錯誤,這是語言學習的重要環節。那么,針對小學至初中低齡段兒童學習計算機程序設計語言,是否可以借用類似自然語言的學習方式,取決于計算機程序設計語言的特點。
自然語言是人類交流和思維的主要工具,與自然語言相對的是邏輯語言,計算機程序設計語言就是一種人工構造的邏輯語言。它是計算機能夠理解的語言,是人規定計算機完成規定動作的命令序列,是人與計算機交互的接口。
如果說自然語言是人腦與人腦的交際工具,那么計算機程序設計語言是人腦與計算機的交際工具。兩者都具有符號化和形式化特征,都是采用符號高度形式化地描述事物。仔細分析,計算機程序設計語言與自然語言雖然有很多相同點,但也有明顯的不同。首先,盡管兩類語言都是采用抽象的方式用符號來表達事物,但針對不同的描述對象,自然語言描述的抽象程度不同,人們對其理解的難度也是不同的。例如,一本書、一支筆等這種對數的抽象表述比較容易理解,而一個哲學問題的抽象程度就會提高很多。在實際生活中,人們還可以借助其他表情、動作等表意渠道來理解語言。而計算機程序設計語言的抽象不存在這種漸變與過渡,其只能用字符一種方式來表達,且表達是精確的。這些不同,對于成年人來說可能困難不大,但對于兒童而言,因其思維的概括性和間接性發展還不夠成熟,所以無論是前運算階段還是具體運算階段,這些都會成為編程學習的障礙。
其次,在語言的描述對象事物方面,計算機語言偏向于具有數學特征或適合數字化表達的事物,而自然語言則極為豐富與復雜。另外,兒童對用自然語言描述事物的學習是漸進的,是從簡單到復雜的,是需要用幾年甚至于十幾年才能完成的。但兒童對程序設計語言的理解,則不存在這樣一種學習坡度。
最后,計算機語言本身并不存在與自然語言相似的學習環境,計算機語言本身不能提供自然語言學習中“模仿—重復—運用—理解記憶—糾錯”的過程,需要通過外部人為構造這樣一個學習環境。
因此,兒童編程需要解決如下三方面的問題:①盡可能降低語言形式化表達的抽象度,弱化符號性。②針對計算機程序設計語言描述的事物,或者說用計算機程序設計語言解決的問題,盡可能弱化其數學性和抽象度,而是采用符合兒童理解力的故事場景。③在學習方法上,模擬自然語言的學習過程,強化學習者在與計算機互動中完成模仿、重復、運用、理解記憶與糾錯。
從編碼到編圖符:兒童編程教育實施環境分析
軟件編碼是將軟件開發過程中經需求分析、詳細設計得到的處理過程的描述轉換為基于某種計算機語言的程序,即源程序代碼。編寫源代碼是學習程序設計語言的最終落實,也是應用編程手段解決現實問題的基礎。
從編程教學的認知視角看,編程學習環境或平臺可以分為代碼類、積木類和圖符類三類。例如,Pascal、C、VB等計算機程序設計語言都屬于代碼類,這類語言是主流的計算機程序設計語言,以英文字符為語句關鍵詞,以工程化解決問題為目標。針對兒童學習編程而言,使用這類計算機程序設計語言,需要克服過度的符號化與抽象表達、繁瑣的語法規則、復雜的問題目標等困難。
適合兒童編程學習的平臺應具有簡約和有趣的特點。簡約,既反映了編程語句形式化表達的弱化,降低了學生理解編程語句的難度要求,也反映了規則的簡化,減少了記憶要求。盡管兒童的記憶能力有可能優于成人,但是針對過多語法規則的記憶,特別是沒有建立在學習者理解基礎上的機械記憶,是學習者認知資源的一種浪費。有趣,通常反映在編程語句的去代碼化,以及學習者編程所解決問題的趣味化上,這可以增加兒童對編程語句學習以及問題分析的興趣。
積木類編程平臺是以積木塊的形式來描述計算機程序的執行流程,不同類型的積木對應不同的程序控制結構。在編程序過程中,學習者使用不同積木組合,按要求填寫積木對應的參數,就可以完成計算機程序執行流程的設置,從而達到編程的目的。Scratch就是一種積木類編程環境。顯然,用積木圖形來代替字符組成的語句,用形象化的方式來表達程序執行流程,這種積木類編程環境降低了對記憶的要求以及對符號的抽象理解要求。積木類編程環境適合7~11歲具體運算階段中偏高齡段的兒童。
圖符類編程環境是用圖示的方式來描述編程過程中所涉及的變量、表達式、輸入輸出以及各種對象的動作,同時也盡可能地簡化程序執行流程。Kodu就是一種典型的圖符類編程環境。在Kodu系統中,編程對象涉及的全部行為動作都用圖符表示,并且在需要時自動列出供編程者使用;Kodu系統全程使用單一的when…do…格式的語句,以面向對象事件驅動的方式控制程序的執行,弱化了分支、循環等程序結構;Kodu系統以設計與編制游戲為目標,降低了對目標事物的理解要求,使學習者能有更多的精力關注編程學習及其編程思想本身。Kodu適合7~11歲具體運算階段中偏低齡段的兒童學習編程之用。
除了以上三類編程平臺以外,還有一類編程學習環境,嚴格地說它并不是一種具體的程序設計語言,而是學習編程的課程。適用于兒童學習的這類課程往往是以游戲的方式展示編程的相關知識,通過關卡游戲讓兒童層層了解計算機一步一步的執行過程,體驗計算機語言控制計算機自動化特性和編程思想。這類編程學習平臺依據其學習內容的不同和呈現方式的不同,可以適合不同年齡段的學習者,尤其是能為前運算階段中偏高年齡段兒童學習編程提供可能。endprint
從訓練到體驗:兒童編程教育方法分析
無論是積木類的還是圖符類的編程環境,都在一定程度上弱化了抽象的符號表示,同時也降低了記憶要求,從而降低了學習者的認知負荷。例如,不需要定義變量名,用盒子表示變量,對應的想象就是可以存放數值,這樣就把變量形象化了。同時,從兒童認知心理特征出發選擇目標事件,也降低了學生的認知負荷。例如,對于枚舉算法的實現,高中生適合于以“查找素數”為例,而小學生則適合于使用“雞兔同籠”等故事,這樣更具象,更容易理解與分析。
就學習目標而言,如果學習編程是以掌握一門編程技能為主要目標,乃至于作為職業培訓的話,那么熟練與否是關鍵的評價點。為了達到熟練的目的,訓練是必定的實施途徑,即所謂的熟能生巧。但對于兒童來說,在編程教育的三層教育價值中,思維的培養和對世界看法的形成,比編程技能的訓練更為重要。因此,“訓練”,作為一種有計劃、有步驟地通過學習和輔導掌握某種技能的傳統而單一的學習方法,需要讓位于“體驗”,因為體驗到的東西比較真實,并且會在大腦記憶中留下深刻的印象。通過體驗能達到感悟學習對象的目的,特別是對于計算機世界自動化特征的體驗,熟練固然好,感悟更重要。
兒童編程教育,首先是確立正確的教育目標。除了傳統的目標定位,如編程的技能、將一個現實問題分解成能夠由計算機程序解決的一系列問題的方法以外,還要在編程學習過程中體驗與感悟到將問題抽象為一系列可執行步驟的思維方式,也要能夠感受到計算機通過執行程序表現的自動化特征以及通過程序控制計算機行為的愉悅。這些都是傳統編程教育所忽略的,且是兒童編程教育需要特別關注的方面。
其次,兒童編程教育需要從課程的視角整體設計課程內容,確定主線索。以小學四年級Kodu趣味編程課程開發為例,需要依托Kodu平臺提供的角色和場景,以設計與編制電子游戲為載體,形成適合兒童認知心理特征的學習環境;構建“故事—規則—語句—作品”的編程學習流程,在游戲故事情景中學會“抽象”游戲規則,學會用形式化的方式“表達”規則,學會“構造”一系列可執行的計算機程序的語句,最后形成游戲作品,并在運行游戲作品的過程中體驗自動化和人對計算機執行動作的操控。而這一過程是典型的計算思維形成過程。
最后,從“模仿—重復—運用—理解記憶—糾錯”的語言學習一般過程中可以發現,模仿與重復,都是訓練的有效手段,但只有擺脫機械的模仿與重復,才能通過理解得到深刻的感悟。軟件工程中有一種程序開發方法,稱為快速原型法,它首先構造一個功能簡單的原型系統,然后通過對原型系統逐步求精,不斷擴充完善得到最終的軟件系統。在兒童編程教學中,也可以采用相似的方法,對一個學習項目逐漸地增加任務與要求,在從簡單到復雜的演變過程中進行“理解記憶”與“糾錯”,體驗計算機執行程序的自動化屬性,采用調試程序的方式階梯性地驗證增加的功能,從而加深對學習任務的理解。
結束語
對于兒童而言,我們有必要專門研究符合低齡段兒童編程學習的目標、內容與教學方法。計算機程序設計語言,從形式上看是一套系統化的記法,即用來描述和實現計算機過程的有規則的人工語言符號系統。程序設計語言是一種形式化的語言,它比自然語言和一般的人工語言具有更大的精確性與適應性。它作為人與計算機通訊的工具,必須能夠抽象地描述客觀世界的問題,并提供解決問題的步驟和方法的集合。當我們對程序設計語言這一學習對象有這樣的認識時,當我們不再簡單地認為學習編程的目標就是用程序設計語言解決實際問題時,兒童編程教育應該可以擺脫技術性、工程性以及實用性的困擾,走向思維教育,成為認識計算機世界的通道。endprint