周明柯 奚曉楓
培養(yǎng)中小學生的編程能力已經成為我國基礎教育改革的新熱點,基于編程課程的人工智能教育已經上升為國家戰(zhàn)略。2017年國務院出臺的《新一代人工智能發(fā)展規(guī)劃》指出:要實施全民智能教育項目,在中小學階段設置人工智能相關課程,并逐步推廣編程教育。教育部教師工作司司長任友群指出:人工智能教育的目標是素養(yǎng)培育,抓手是編程實踐,核心是實施不同層次的編程教學并培養(yǎng)學生的計算思維。在這樣的大背景下,我校在初一年級開設了選修課程《編程與計算思維導論》。該課程以Python語言作為編程教學語言,旨在培養(yǎng)學生的編程能力與計算思維。在一學期的教學實踐后,筆者總結了教學過程中常見的四大問題,并針對性地提出了相關的應對策略。
● 問題一:計算機基本操作能力缺乏
1.問題描述
本課程使用的編程語言Python是一種字符型編程語言,學生需要利用鍵盤輸入程序代碼。然而,對于初一年級學生來說,打字這一計算機基本操作仍是一種挑戰(zhàn)。雖然電腦打字技能是小學信息技術課的內容,但是這并不足以讓學生真正地掌握熟練的打字技能。另外,如今學生在家使用的都是手機和平板等觸摸式輸入設備,平時使用鍵盤進行打字練習的機會很少。因而,很多學生在課堂上表現出較弱的打字能力,輸入一個簡單的程序都需要很長時間。
與此同時,不少學生對切換輸入法這一計算機基本操作也不熟練。通過對桑田系統(tǒng)中學生數據的分析,筆者發(fā)現有大約四分之一的學生出現的程序錯誤源于其程序中的中文標點符號。在高級程序設計語言中,標點符號是非常重要的分隔符,如引號、逗號、分號等。但是,程序中作為分隔符的標點符號必須是英文符號,不能使用看上去相似的中文標點。然而,筆者在課堂觀察中發(fā)現,不少學生在輸入代碼時使用中文輸入法,有的學生甚至不知道如何在中英文輸入法之間進行切換。在這種情況下,許多學生在程序中錯誤地使用了中文標點。更重要的是,編程中常見的英文標點符號與中文標點類似(如中文的逗號和英文的逗號),當程序由此出錯時,學生很難發(fā)現并糾正這種錯誤。
2.應對策略
從以上描述可以看出,學生缺乏的計算機操作技能是熟練的文字輸入技能以及中英文切換的能力。筆者認為,可以在編程課程正式開始之前,對學生進行1~2課時的打字訓練,尤其是英文打字訓練,幫助學生熟悉鍵盤輸入的方法。雖然課程的總課時并不寬裕,但正所謂“磨刀不誤砍柴工”,學生打字能力的提升能夠提升教學效率。根據筆者的經驗,在課程的中后期,多數學生已經能夠熟練地輸入代碼,教學效率也有了大幅度提升。對于中英文輸入法切換的問題,筆者認為在課程初期也進行一些訓練,并教會學生辨別中英文標點,定能事半功倍。
● 問題二:英語拼寫的困擾
1.問題描述
因為Python編程的語句都是英文單詞或者單詞縮寫,所以正確拼寫這些單詞成為學生進行編程的一大挑戰(zhàn)。在Python編程中,不少單詞學生還沒學過,因此完成拼寫較難。例如,Python中的random包可用于產生隨機數,但是random這個單詞學生還沒有學過,因此在編程過程中經常拼錯。另一個例子是錯誤地拼寫math.sqrt()函數。Sqrt是英文Square Root的縮寫,意思是求平方根。雖然學生學過這兩個單詞,但是這兩個單詞連在一起時的意思他們并未學過,因此常常出現拼寫錯誤,如錯誤地拼寫成sprt、srqt等。根據桑田系統(tǒng)的后臺數據,筆者發(fā)現學生經常拼錯的Python關鍵詞和函數有import、random、input、float、print、sqrt等。
2.應對策略
要在短時間內提升學生的英語能力尤其是詞匯量并不容易,但是幫助學生學習Python編程相關的英文詞匯不是難事。對于英語拼寫問題,筆者認為可以分兩步走:第一,在備課時,羅列出課程內容所涉及的英文單詞,并在上課時進行講解。第二,在上課過程中,觀察總結學生容易拼寫錯誤的單詞,并強調這些詞匯的正確拼寫方式。
● 問題三:對計算機智能的錯誤假設
1.問題描述
通過觀察桑田系統(tǒng)的后臺數據,筆者發(fā)現大約三分之一的學生出現的錯誤與Python編程的語法有關,而其中的大部分是因為學生使用了模糊的語法。編程語言要求程序的每一條語句都有準確的意義,不能有歧義,否則編譯器或者解釋器就會報錯。而初一年級學生作為初學者,常常忽略語法的精確性,并使用自然語言的表達方式來編程。在筆者的課堂上,一個典型的例子就是學生使用print函數輸出多行文字時,常常使用一個print函數,然后將輸出內容寫成多行。這種方式在日常寫作中并沒有錯,但是在Python編程中需要用多個print函數來實現。當筆者問學生為什么用這種方式實現多行輸出時,他們的回答非常一致:“我覺得電腦能夠理解我的意思?!币苍S是受到科幻片的影響,或者是在日常生活中我們的計算機總是顯得那么智能,學生有了一個錯誤的假設,那就是計算機很聰明,能夠理解我表達的意思。然而,實際上計算機并不聰明,它只能執(zhí)行非常精確的指令。在程序設計中,這一點尤為突出,每一行代碼都不能有歧義。
2.應對策略
如何讓學生明白計算機只能理解精確的代碼呢?筆者認為構造認知沖突是一種有效的策略。所謂認知沖突,就是將錯誤展示給學生看,讓學生明白自己一直秉持的觀點是錯誤的。在教學中,教師可以展示一個錯誤的程序,并詳細解釋錯誤的原因,最后將修改錯誤的過程演示給學生看,從而幫助學生理解為什么自己原先的理解有錯誤。在演示過程中,教師要強調計算機并不像人一樣智能。
● 問題四:數學知識不足
1.問題描述
在課程進行過程中,筆者發(fā)現學生數學知識不足也是他們學習編程的一大障礙。首先,在編程中有不少概念與數學息息相關,如變量、函數等。初一年級學生剛開始學習代數,雖然已經知道了方程、變量等數學概念,但是他們對這些概念的掌握還不深入且經常和編程中的相似概念混淆。變量這一概念就是一個典型的例子。在編程中,變量有名稱,也有類型,一個Python變量可以是整數、小數,也可以是字符串,在進行變量運算之前,先要考慮變量的類型以及它所支持的運算。例如,將一個整數型變量和一個字符串相加,程序就會出錯。然而,在數學中,變量不存在類型特征,變量之間的運算也沒有類似的約束。因此,很多學生常?;煜龜祵W和編程中的變量概念,當程序出錯時,也很難理解錯誤的原因。另一種情況是編程中的相關概念在數學課上還沒學過,如函數、平方根等。函數是編程中最重要的概念之一,但是初一年級學生還沒有學習函數相關的數學知識,因此他們在理解編程的函數概念時就會遇到一些阻力。
2.應對策略
對于數學知識不足這一問題,筆者認為可以從兩個方面著手:第一,對于數學上已經學習過且容易混淆的概念(如“變量”),在教學中應該對比這一概念在數學和編程中的異同點,幫助學生理解這個概念在編程中的獨特之處。第二,對于數學上還沒有學過的概念(如“函數”),我們可以在課程中對這類概念進行詳細的介紹。如果某個概念在數學或者其他學科中也存在,只是學生還沒有學習到,那么從本學科的角度先進行概念介紹,這樣能夠幫助學生更順暢地理解這個概念。
隨著人工智能教育的發(fā)展,編程課程將會逐步普及。本文主要介紹了筆者在初一年級《編程與計算思維導論》課程教學中所發(fā)現的常見問題以及相關的應對策略。由于我們的課程開設時間還不長,所以本文總結的問題并不全面。與此同時,在不同學校不同年級開設類似課程,教學中所面臨的問題也會有所不同。希望未來能夠與更多同人一起來探討編程教育中的常見問題與應對策略。