陳英



[摘 要]高中開展編程教學是發展學生信息素養的客觀需要,也是人工智能發展的客觀需要。文章針對高中編程教學的問題,提出了植根生活、分析建模、迭代優化等有效教學措施,并以身份證項目研究為例,闡述了高中編程項目式學習的具體實踐。
[關鍵詞]項目式學習;身份證;編程教學
[中圖分類號] G633.67 [文獻標識碼]? A [文章編號] 1674-6058(2023)26-0088-04
一、高中開展編程教學的客觀需要
2017年對編程教學來說很有意義。隨著《普通高中信息技術課程標準(2017年版)》和《新一代人工智能發展規劃》的出臺,國家在教育層面吹響了在中小學開展編程教學的號角。
(一)高中開展編程教學是發展學生信息素養的客觀需要
高中編程教學,圍繞信息素養,將信息意識、計算思維、數字化學習與創新以及信息社會責任的培養作為教學要點,特別是對學生計算思維、數字化學習與創新素養的培養有關鍵作用。通過編程教學,可培養學生問題分解的意識和能力, 提升學生的計算思維水平,幫助學生適應信息社會的學習和生活,提升學生的數字化學習與創新能力。
(二)高中開展編程教學是人工智能發展的客觀需要
2017 年頒布的《新一代人工智能發展規劃》中提出了“全民智能教育”,同時明確了在中小學階段開設人工智能相關教學內容,進一步推廣編程教育。 編程是實現人工智能的基礎要素,在中小學階段開展編程教學,是實現人工智能教育培養目標的根本需要。
二、高中編程教學中存在的一些問題
編程教學,特別是算法教學是近幾年信息技術一線教師談論的熱點話題,如何讓編程教學深入淺出,值得信息技術一線教師持續探索。通過教學聽評課等活動,筆者發現編程教學在實施中存在一些問題。
(一)教學目標未通達信息素養
高中信息技術教師對編程課程的教學理解不夠深入,對編程教學目標的定位不夠明確。編程是教學活動的載體,通過編程教學,我們要讓學生獲得什么?普通高中信息技術課程標準告訴我們,高中編程課程教學的核心是培養學生的計算思維,同時讓學生學會如何分析與解決生活中遇到的實際問題。在某些課例的授課環節,教師將教學重點放在編程基礎知識、代碼、算法的傳授上,而忽略了學生信息素養的培養,這樣的教學是不完整、不全面的。編程教學不僅僅是代碼,而是代碼背后的“能力組合”:問題界定、特征抽象、建模組織,以此為基礎判斷、分析信息資源,科學合理地選擇算法進行編程,最終解決問題。
(二)教學內容不易激發學生的學習興趣
高中編程教學的主要內容為算法和簡單數據結構,這部分內容比較抽象復雜,學生初學時會感覺比較困難。由于內容枯燥,與生活聯系不夠緊密,學生的有意義學習乃至深度學習不易發生。又由于課時的限制,豐富有效的教學也難以開展,如探究學習、項目學習等新型模式在編程教學中的運用也受到限制,教學內容與模式不易激發學生學習興趣。因此,教師在教學設計中應避免復雜枯燥的教學內容,將復雜抽象的算法進行推演、解構和建構,并與實際生活相結合,這樣才能激發學生的學習興趣。項目問題的設計,也應側重算法思想和方法的綜合應用,并突出計算思維和創新意識的培養。
(三)教學過程未實現分層教學
高中編程教學較多的還是采用“講—學—練”模式。一方面,是由于學生缺少編程學習的知識儲備,不具備獨立進行編程學習的能力;另一方面,編程學習,特別是算法學習難度大、要求高,學生在完成任務的過程中會遇到各種各樣的困難,學習任務達成度較低。鑒于以上考慮,較多的教師傾向于“講多一點,講細一點”,留給學生自主學習和思考的時間和空間不夠,也就很難實現分層學習,最終,能力較差的學生沒學懂,能力強的學生沒學好,因為最終的“作品”都一樣,沒有差異性和創造性,也不利于學生計算思維和創新能力的培養。高中編程教學必須堅持以學生為主體,發揮學生的主觀能動性,讓學生自主探索算法和簡單數據結構等內容,掌握解決編程問題的方法和步驟,進而解構知識,形成概念,建立認知模型,架構學習方法,提升學習效率。
三、高中編程教學的有效實施
隨著編程教學的日益普及,計算思維成為數字公民必備的核心素養,編程教學作為其主要培養載體引起廣泛關注。算法是編程的靈魂,也是信息科技教學的核心,更是編程教學的重難點。要有效實施編程教學可從以下方面入手。
(一)植根生活,尋找編程教學的切入口
陶行知先生說:“生活即教育。”教育的素材應該源自社會生活,以社會生活以及在此基礎上產生的經驗為中心。教學做合一,以生活為中心,怎樣做就怎樣學,怎樣學就怎樣教。所有的問題,都是從生活中來,從生活中來的困難和疑問,才是實際的問題;用這種實際的問題來求解決才是實際的學問。
信息技術是一門技術學科,技術的根本目的是解決生活中的實際問題,所以筆者會將“技術服務于生活”的思想植根于課堂教學中。這與《普通高中信息技術課程標準(2017年版)》倡導的項目式教學不謀而合。教學的素材源自社會生活,對照我們的課堂教學,要關注以下幾點:首先,學習的問題應該是學生身邊的,對于他們來說,是有生活經驗的問題。這樣的問題才能更好地激發學生的學習興趣,才能讓他們體會到技術的價值。其次,我們的課堂教學要緊緊圍繞這類生活問題,圍繞認知沖突,將生活問題分解、解構,用技術手段逐一擊破問題中的困難和疑問,讓課堂具有生命力。我們應植根生活,發現生活中的真問題,圍繞問題,解決生活中的真疑問,回歸生活,尋找技術服務于生活的真價值。高中編程教學也必須遵循教育教學的基本規律,從生活中來,到生活中去。只有植根生活,從生活中汲取教育的靈感與養分,才能找到編程教學的切入口。
(二)分析建模,打通編程教學
高中編程教學的主要內容為算法和簡單數據結構,這部分內容高度抽象,也相對枯燥。一方面,需要學生具備一定的數學功底,也需要具備較強的分析問題、抽象建模的能力。特別是算法模塊,高一編程教學中涉及非數值計算:分治思想,其中包括二分查找、遞歸法等,數據結構中也涉及線性結構中的列表、字典和元組。這些內容,對于大學計算機專業的學生來說也絕非易事,因此在高一進行編程教學時教師不能照搬照抄大學模式,不能將其視為大學先修課,必須在教學內容的質和量上進行適度改造和創新,使其符合高一學生的認知規律、心理特點和生活經驗。教師應在有趣、有用、有價值的基礎上兼顧程序設計的科學性和嚴謹性,將教學重點從編寫代碼轉移到分析建模上,讓學生學會對生活中的實際問題進行分析、解構、建模,以及將問題抽象成數學模型。從編程解決問題的一般過程來看,首先是分析問題,其次是抽象建模,最后是編寫代碼。由此可見,抽象建模是編程學習的核心環節,起到承上啟下的作用。具體來說,主要包括以下內容:1.分析問題(要解決什么問題?這個問題可以分解為哪些子問題?用什么工具來解決問題?);2.抽象建模(每個子問題如何解決?需要用到哪些算法和數據結構?);3.編寫代碼(在厘清算法的基礎上使用合適的編程語言來實現項目的需求,解決實際問題)。
建模和編程的關系不可分割,互為表里。建模是從現實世界到數學抽象的過程。編程則是在模型的基礎上用具體的編程語言來實現。如果說建模是藝術,那么編程就是技術,兩者相互依托,不可分割。優秀的模型能夠讓編程簡潔、高效,同理,離開了編程,建模也只能是空中樓閣,紙上談兵。在高一編程教學中,教師要重視問題的解構和分解,教會學生如何分析建模,這樣學生才能掌握打開編程之門的鑰匙。在日常教學中,教師要有意識地引導學生開展抽象建模的實踐,提供給學生抽象建模的時間和平臺,這樣才能打通編程教學。
(三)迭代優化,精進編程教學
高一編程教學受內容難度和學生基礎參差不齊兩方面因素的影響,必須堅持“小步子”的教學策略。“小步子”就是起點不要太高,從基本需求問題解決開始,讓學生初步體會到解決問題的樂趣,接著,再逐步迭代優化,這也是程序設計的基本思想:自頂向下,逐步求精。解決了基本問題后,在此基礎上,再提出新的需求,如界面優化、功能拓展、自動化及批處理等。學生在實現新需求的過程中,知識和技能得到了拓展和提升;在解決問題的過程中,問題解決策略和編程思想方法得到了驗證,計算思維、創新能力也得到了升華。
在高中編程教學中,為了達到較好的教學效果,教師通常會選擇融合各個知識點的經典例題進行教學。比如,在教學分支結構時,會選擇BMI例題;在講解循環結構時,會選用1加到100的案例,等等。雖然這些案例在單元教學中非常具有代表性,但是也存在現實問題,單元和單元之間彼此獨立,關聯度較差,不能形成案例聯結,前后知識點之間的關聯度差,案例不能體現知識點的綜合應用,因此,高階思維能力不能得到培養和提升。
AI的知識迭代,對人類社會產生了廣泛而深遠的影響,編程教學也是如此。為了解決上面的知識碎片問題,在編程教學中教師需引入優化迭代思想。將Python中的三種程序設計結構、簡單算法、簡單數據結構融合在一個小項目中,項目從最簡單、最基本的功能開始,逐步求精,不斷提出新問題,不斷考慮新思路,不斷實現新功能。這樣就能將零散知識關聯起來,使項目功能豐富起來,計算思維提升起來,學科思維拓展起來。這樣學生才能體會到技術在解決生活中的實際問題上的價值,才能領悟技術服務于生活的學科思想。
四、高中編程項目式學習案例解析
下面,筆者以“身份證項目研究”為例,和大家一起探討高中編程項目式學習。
【學情分析】在進行本項目前,學生已經學習了Python編程的基礎知識(三種程序設計結構、函數、列表、字典),能夠利用編程解決簡單問題,但是這些問題涉及的知識點相對零散,很少觸及單元間知識的整合,知識點之間沒有形成從“點”到“面”的思考。考慮到本項目涉及的知識點較多,學生間編程素養存在較大差異,在項目要求層面分為普及版和提高版,學生可以根據自身的能力情況自主選擇。同時,提供知識點微課(視頻),幫助學生達成項目學習目標。
【課時安排】第1課時掌握自定義函數和字符串切片,第2、3課時涉及文件操作和字典運用。學生有3節課的時間完成該項目,能力較弱的學生可僅完成普及版。
植根生活,尋找項目素材——解密身份證。身份證是大家非常熟悉的、有生活經驗的素材,而且,身份證在編碼過程中有明確的規則,如地區、生日、性別等,這些可以通過Python的字符串操作輕松獲得相關信息,對此可以身份證研究為項目主體,將 Python中的三種程序設計結構(順序、分支、循環)、模塊化編程(函數)、簡單數據結構(字符串、列表、字典)、文件操作等融合其中。在完成這個案例的同時,相關知識點均得到了實際運用,這才是有意義的深度學習。在整個學習過程中,學生經歷了“總—分—總”的邏輯思維過程,首先鍛煉了分析、解構問題的能力,其次在完成子功能的過程中相關知識點得到了運用,最后將子模塊整合在一起,最終實現項目的完整功能。
(一)植根生活,需求分析
本項目分為普及版和提高版,分別具有以下功能。
【普及版】輸入一個18位身份證號,能夠顯示出生地、生日、性別。
【提高版】批量讀取某年級學生的身份證信息,批量顯示出生地、生日、性別、生肖、統計全年級男女生人數、江蘇籍或非江蘇籍人數、高一年級十大姓氏。
(二)分析建模,解構問題
要實現以上功能,需先進行問題分解和知識點運用梳理。
(三)迭代優化,逐步求精
身份證研究項目從最簡單的單個身份證號處理開始,能夠顯示出生地、生日、性別,這是普及版的項目需求,在此基礎上,逐步求精,拓展功能。
迭代優化1:處理單個身份證號—批處理身份證號
處理單個身份證:s=input("請輸入你的身份證(18位)")
批處理身份證號:f=open("nstu.txt") #nstu.txt中存放單個學生信息01,114010101,王君鑫,物化生,32058520070517xx24
for s in f:
......
f.close()
迭代優化2:新增顯示生肖功能
def sx(s):
l='鼠牛虎兔龍蛇馬羊猴雞狗豬' #將12生肖存儲在字符串l中,也可以用列表存放
x=int(s[-13:-9])
r=(x-1900)%12
return(l[r])
迭代優化3:統計全年級男女生人數、統計全年級江蘇籍/非江蘇籍人數
nl={"男":0,"女":0} #nl男女字典初始化
d={"江蘇":0,"非江蘇":0}? ?#d江蘇省非江蘇省字典初始化
def xb(s):
x=int(s[-3:-2])
if x%2==0:
nl["女"]=nl["女"]+1 #女生加1
return "女"
else:
nl["男"]=nl["男"]+1 # 男生加1
return "男"
def dq(s):
p=s.rfind(',')
x=s[p+1:p+7]
f=open("shudi.txt")? ?#出生地列表:110 000=北京市
for l in f:
if x in l:
if l[7:10]=="江蘇省":
d["江蘇"]=d["江蘇"]+1? ? ? ? # 江蘇省加1
else:
d["非江蘇"]=d["非江蘇"]+1? ? ? ? ? ? ? # 非江蘇省加1
return(l[7:10])
break
f.close()
迭代優化4:統計高一年級十大姓氏
xs_reverse = sorted(xs.items(), key=lambda x: x[1], reverse=True)
print("高一十大姓氏:")
for x in xs_reverse[:10]:
print(x)
在此案例中,綜合運用了Python編程中的基礎知識點,并將這些知識靈活整合到一個案例中,既具有趣味性,又具有技術性,學生的學習興趣高漲,特別是能力比較強的學生,真切體會到了編程解決生活問題的樂趣。這個案例,隨著我們學習內容的深入,還能繼續迭代優化,進行功能拓展。
綜上,編程學習是高一信息技術教學的難點,如何讓編程教學優質高增效是一線教師一直探索的課題。在教學內容方面,教師要在科學性和趣味性之間尋找平衡點,要有大單元視角,從知識體系的全局出發,從生活中尋找主題和素材,讓學生在解決生活問題的過程中掌握編程技巧,提升信息素養。