袁 源
(蘇州工業園區星洲小學 江蘇蘇州 215000)
計算思維是卡內基梅隆大學計算機科學系主任Jeannette M.Wing教授在2006年提出的教育理念,是近十幾年來信息技術教育、計算機科學教育最為重要的思想之一[1]。計算思維是運用計算機科學的基礎概念進行問題求解、系統設計以及人類行為理解等涵蓋計算機思維之廣度的一系列思維活動。計算思維的本質是抽象和自動化,它反映了計算的根本問題,即什么可以被有效地自動進行。計算是抽象的自動執行,自動化需要某種計算機去解釋抽象。從操作層面來說,計算就是如何在一臺計算機上去求解問題,也就是要確定合適的抽象。
計算思維中的抽象又區別于純數學的抽象,數學的抽象是拋開現實事物的外在的、物理上、化學上、生物上的一切特性,只研究其數量和空間關系。計算思維中的抽象遠超如此,比如鏈表、堆棧、樹等常見的計算機數據結構,我們肯定不能僅用數學上的加減乘除對其運算。其次,計算思維中的抽象是對具體現實問題的抽象,而客觀現實問題往往極具復雜性,因此往往將系統的方方面面都考慮到的話,系統就會變得無比的復雜,系統最終難以實現。這就使得計算思維需要根據不同的層次,選擇性地忽略部分不重要的細節,分析系統的主要矛盾,最終控制系統的復雜性。并且為了降低系統的復雜性,確保自動化的實現,一般也會要求計算機廠家開放不同抽象層次之間的接口或者不同層次之間的翻譯工具。
項目式教學法鼓勵學生在老師的指導下進行信息的收集、方案的設計、項目的實施及評價等。項目式教學法中的項目可以來源與真實的情境,教師可以鼓勵學生利用程序設計解決平時遇到的一些問題,以此訓練學生對周圍事物的抽象。筆者對學生計算思維培養研養,主要是采用項目式教學法。
Stem是一種綜合教育,是指集合科學(Science)、技術(Technology)、工程(Engineering)和數學(Mathematics)等多個學科領域的綜合教育理念。Stem強調知識的綜合性,意在培養學生的綜合使用各種知識解決問題的能力。計算思維是Stem教育的重要組成部分,2018年12月份,美國白宮公布的《制定成功路線:美國的STEM教育戰略》中重點指出:使計算思維成為所有教育的必要組成部分。Stem是一種先進的教學理念,并且和計算思維是相通的,我們在計算思維培養的過程中可以很好地融入Stem.Stem教育理念下,我們可以從以下幾兩個方面進行計算思維的培養。
現實情況紛繁復雜,同時小學生知識經驗又相對缺乏,教師需要引導學生突破抽象思維能力這一難關,在應用抽象思維的最初階段中,教師需要應用具體的形象,引導學生逐漸適應于階梯形學習理解難度[2]。我們鼓勵學生對現實的問題進行歸納總結,抽取事物的共性,再利用這些抽象的概念去描述具體的事物,實現從具體到抽象再到具體的一個轉變。
以小學程序教學的中的畫三角形為例,首先我們讓學生畫出一個邊長60個單位的正三角形,并觀察它,總結出該正三角形的特征:每個角60°;有三條邊;每條邊60個單位。觀察后,學生自己總結(必要時老師幫助)正三角形每個角60°和有三條邊是每個正三角形的共性,而每條邊60個單位是該三角形的個性。此時我們引導學生畫出來一個這樣的形狀:三條邊、每個角60°、未知長度的邊,其中未知長度的邊用參數傳入。此時,我們就實現了對一個具體的三角形的抽象。只要我們傳入不同的邊長,就可以利用該抽象去實現各種不同大小的正三角形。其次,我們還可以積極引導學生將正三角形再抽象為正多邊形,我們傳入邊數,計算出每個角的角度,如此,又實現了從正三角形到正多邊形的抽象。并且這些抽象可以與數學、科學等知識緊密結合,促進Stem教育的發生。
學生在使用程序設計解決現實問題的時候,往往面臨的是一個對他們來說很大的工程問題,這個時候很多孩子會顯得無從下手。教師可以先嘗試帶著學生對這個項目進行分解,對于六年級的學生來說,甚至可以讓學生自己分解項目。繪圖能力比較強的學生可以將他們對于項目的討論制作成思維導圖或者流程圖;美工比較好的可以構建程序的界面;最后大家各自完成程序設計的一部分。這對于教師或者學生團體里的領導者提出了更高的要求,這要求我們在分解項目時要盡量做到合理,各人負責的功能模塊不能重合,不能出現眉毛胡子一把抓的情況。培養工程思維和上述的培養抽象思維是緊密聯系不可分割的,我們只有將抽象做得非常的合理,各種抽象之間做到功能單一、職責明確,我們才能更好地對項目進行分解,實現項目的工程化。
App Inventor是一個開發移動端應用程序的編程環境,可以通過模擬器運行在安卓端或者IOS端,該環境是一個完全在線的web網頁。平臺對復雜的編程語言進行封裝,以拖拽控件塊的方式構建安卓應用,類似于Scratch程序設計。該平臺不僅可以在手機端模擬程序的運行,并且能夠將學生的項目導出成為一個可安裝的安卓應用程序,運行在安卓手機端或者平板端。實際動手制作出來有一定使用價值的App,能夠更好地激發學生的創作熱情,也能增強學生發現問題、解決問題的能力。在具體實踐中,App的創作往往依托于真實的情境。比如,各個班級都有圖書角,學生會發現我們可以開發一個小型的圖書管理系統,用于班級的圖書角管理;又比如,學校運動會上,裁判員使用的秒表計時器,我們可以很容易使用App Inventor創建一個移動端的秒表應用。
對于學生來說,借助App Inventor,學生們可以個性化地解決問題,不僅可以潛移默化地學會基礎的程序設計,并且在創作的過程中,學生會遇到很多的問題,在問題解決的過程中,學生的問題解決能力會得到提高,算法思維會得到鍛煉。基于App Inventor培養小學生的計算思維,我們主要設計有抽取教學情境、制作需求文檔、編碼調試和作品展示這四個環節,如圖1所示。教學情境是貫穿于整個教學環節的,從需求的分析、編碼調試、作品展示都需要在我們的真實情境中進行。每一個環節,學生們都需要協作學習,互相幫助,學生需要一起確定項目的功能,并一起制作需求文檔;編碼調試階段也需要小組間互相合作共同完成;最后的展示環節,小組間也可以分工合作,確定好講解人、操作人、幻燈片制作人等。下面是筆者利用App Inventor對小學生進行計算思維訓練的一些具體的經驗總結。

圖1 設計的四個環節
知識的意義寓于情境之中,學習情境不是一個無關因素,學生必須通過具體的情境才能獲得某種知識,教師應該成為良好學習情境的創設者,學生樂于建構知識的促進者[3]。教學資源最好來源于真實的情境,在真實情境下,學生的創作才會更有意義,學生可以更好地理解程序設計是為了解決生活中的問題,考慮到真實情境的復雜性。并且對于小學生來說,學生當前身心發展還很不成熟,我們很難完全用程序模擬現實情況,需要對真實情境抽取出一些簡單的共性特點。對于抽取后的情境,最好確保學生能夠在教師的指導下完成程序設計。
以學生制作的圖書管理系統為例,教師和學生一起概括出主要的業務:圖書角書目瀏覽;借出書目瀏覽;學生借書;學生還書;添加書目;刪除書目。剔除掉復雜的非主要的業務,比如書目超期未歸還、書目損壞賠償等復雜業務邏輯。
項目需求文檔的制定非常重要,因為小學生思維不成熟,他們往往還沒想清楚就開始動手編碼,做到一半發現項目進行不下去。學生做的需求文檔不需要面面俱到,但整體的思維導圖、主要的業務流程和用戶交互是必須的。學生制作文檔時,需要小組間共同協作(如圖2),確定好依據現有技能能夠完成項目的主體功能,對于復雜模塊,小組間也需要確定有一定的解決方案,或者通過學習能夠解決。學生的需求分析需要教師過目,以防止不切實際的功能。比如,學生制作的“記作業系統”中的“導入作業功能”,要提示學生,作業文件類型有很多種:Word,PPT,Excel,每種文件的模板也有很多種,我們的程序如何解析上傳的作業文件類型?我們需要引導學生在完成主要業務的前提下,再去設計復雜的需求。

圖2 小組間共同協作
項目需求文檔設計好后,學生開始著手編碼,編碼過程中,如果學生有沒接觸過的知識點,可提前指導學生學習。遇到復雜的功能模塊,可指導學生畫流程圖,通過流程圖的方式降低編碼的難度。編碼是計算思維培養的最重要的一環,因為在編碼環節,我們需要將具體的現實進行抽象,在小學階段,學生還沒學過“面向對象”的編程,筆者在抽象這一環節的通常是指導學生盡量制作單一的可復用的積木或者程序塊。
即便我們是做非常簡單的項目,項目中的錯誤往往還是難以避免。編碼完成后,應帶領學生多加調試,找出有問題的地方并修正。
經過幾輪編碼調優后,可以鼓勵學生向自己的家人或者同學介紹自己的創作過程、項目中遇到的困難,以及是如何解決這些困難的,邀請身邊的人體驗自己的作品(如圖3)。我們需要盡可能依據真實的情境,賦予項目一定的實際意義。比如,教師可以帶領學生舉辦一個小型運動會,利用我們的“秒表”程序給運動員們計時。還有,我們也可以在做手工時,利用“水平儀”程序檢驗一些手工作品表面是否平整等等。這些都是很好的貼近現實的應用。學生可以以此充分體會到項目創作的樂趣,并且在這個階段可以收集同學們的體驗反饋,為下面的程序優化做準備。

圖3 作品展示
綜上所述,“抽象”是培養計算思維的核心,具體程序的“模塊化”“可復用”是微觀的抽象,而程序設計前的項目需求分析、功能模塊設計、思維導圖、流程圖的設計是宏觀上的抽象。在App Inventor的教學實踐中,我們可以充分利用項目式教學,在真實的情境中去激發學生的創作熱情,整個項目過程中學生應協作學習,共同解決項目中遇到的問題。學生從無到有地設計一個App,本身就是一個極具抽象的過程,從零到一去編碼實現自己的設計也是一個從抽象到具體的過程。并且使用App inventor創作真實的應用程序,相比較于其他的塊語言編程工具來說,有較強的現實意義,也更能模仿真實的情境。