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