曹永存 王鈞懿 丁少龍 陳娟 李潛



DOI:10.19850/j.cnki.2096-4706.2021.08.054
摘? 要:隨著互聯網的發展,編程教育越來越受到各國的重視,通過對編程教育在國內外的發展歷程和目前中小學常用編程軟件的調查,探討如何把程序教學法應用于編程教育。由于編程教育的研究處于初期階段,沒有相關的文件推動和規范編程教育的發展,文章將討論編程教育相關培養方式和教學方法,即將斯金納的程序教學法與編程教育結合應用。
關鍵詞:編程教育;程序教學法;教學方法
中圖分類號:TP312.2-4;G642? ? ? 文獻標識碼:A 文章編號:2096-4706(2021)08-0191-05
Application of Programmed Teaching Method in Programming Education
CAO Yongcun1,WANG Junyi1,DING Shaolong2,CHEN Juan3,LI Qian1
(1.School of Information Engineering,Minzu University of China,Beijing? 100081,China;
2.Huadi Computer Group Co.,Ltd.,Beijing? 100195,China;3.Taiji Computer Corporation Limited,Beijing? 100102,China)
Abstract:With the development of the internet,programming education has been paid more and more attention by all countries. Through the investigation of the development process of programming education at home and abroad and the current commonly used programming software in primary and secondary schools,this paper explores how to apply the programmed teaching method to programming education. Because the research of programming education is in the initial stage,there are no relevant documents to promote and standardize the development of programming education. This paper will discuss the related training methods and teaching methods of programming education,that is,combining application of Skinner's programmed teaching method and programming education.
Keywords:programming education;programmed teaching method;teaching method
0? 引? 言
隨著K12教育和創客教育的發展,越來越多人開始重視STEM教育。其中STEM中的兒童編程教育受到更大的重視。人們認為對編程能力的培養不再只是為未來的工作做準備,更想通過編程教育培養孩子的計算思維和創新能力。根據目前市場上已有的編程教育的等級量化標準,探討學習編程教育的教學方法,研究運用程序教學法與編程教育相結合的教學方法。使學生學習編程內容的興趣更高,了解編程,訓練學生編程思維。
1? 程序教學法的概念
程序教學法是由斯金納建立的,他認為教學過程是塑造行為的過程,教學者首先確定教學的終點和學生水平的起點,然后像程序一樣,從開始到結束的每一步,通過各種手段,如教師演講、學生小組活動以及完成課堂作業等。讓學生根據步驟,按照程序完成所安排的學習內容,并及時反饋學生的每個問題。
筆者認為斯金納的程序教學法很適合編程教育。例如,把學習Python語言的過程分為兩大部分,分別為基礎理論學習和實際操作能力訓練。把整個Python的基礎理論學習分成8個小部分,分別為數據類型、列表、元組、字典、if語句、while循環、函數、類;根據基礎理論學習設計實操練習。把每個小部分的知識點分解成若干個小步子,在完成一個小步子后才能繼續做下一個。在完成每個小部分的練習后再進行下一個部分的練習。在接下來的文章中,筆者會做詳細的舉例。
2? 編程教育的發展狀況
2.1? 編程教育的培養目標
2011年,美國計算機科學教師協會(CSTA)和計算機協會(ACM)開發了《CTSA K-12計算機科學標準》定義了編程教育兩個層面的內涵,如圖1所示。一是培養計算思維;二是計算實踐和編程。其目的是通過學習編程語言來培養學習者的計算思維能力,從而提高批判性思維和解決問題的能力,最終目的是培養學習者的創新和創造能力。
日本在2012年將編程作為中小學的學習課程進行教授。美國在2013年,前總統奧巴馬提出“面向所有人的計算機科學”,并且開展了“編程一小時”的活動,引發了美國全國中小學計算機編程教育運動的興起。2014年在愛爾蘭、意大利等11個歐洲國家將編程教育納入中小學課堂。新加坡在2017年將編程考試加入中小學考試科目。2019年聯合國教科文組織發布《北京共識——人工智能與教育》,建議將人工智能相關技能納入中小學學校課程。
我國2017年7月8日國務院發布的《新一代人工智能發展規劃》,指出人工智能已成為一個新的國際競爭的焦點,要發展智能教育項目,在中小學課程中開設人工智能相關課程。教育部辦公廳在2019年3月13日通知關于印發《2019年教育信息化和網絡安全工作要點》中說明,在中小學校開設人工智能相關課程,逐步促進并推廣編程教育;與此同時,大數據、虛擬現實、人工智能等新技術將進一步應用于教育教學。
除了國家政策層面以外,各省市也在加大“編程教育”的實踐推進工作,以浙江為首,將往年高考的“6選3”,改為“6+1選3”,而這里所指的“+1”就是信息技術(含編程),編程正式成為了高中必學科目。江蘇省印發了《江蘇省STEM教育項目學校建設指導意見(試行)》,并公布了243所STEM教育項目試點學校。同時各大高校也在進行“編程教育”的研究工作,筆者通過對中國知網(CNKI)以“編程教育”為關鍵詞搜索,如圖2所示,發現自2017年國務院發布人工智能發展規劃下,編程教育在國家的推廣下越來越受到重視。
2.2? 編程教育現有的培養方式
我國的編程教育的培養方式,如圖3所示,主要是依靠校企合作的方式,國家引導,高校與企業合作,在發達地區學校進行試點推行,各省市進行試點工作。目前,各國都在為促進編程教育發展做各種努力,而我國的編程教育主要以校外培訓機構為主的,例如現在的編程貓,童程童美等。
2.3? 中小學編程教育的主要學習軟件
現在中小學中的編程教育中大多是以Scratch和Python為主。
2.3.1? 少兒編程軟件Scratch
1968年美國麻省理工學院的Papert教授發明了第一套專為兒童設計的計算機編程語言——LOGO語言。隨著研究的發展,分別研發了針對8歲以上少兒設計的Scratch語言以及研發了針對5~7歲兒童的ScratchJr。Scratch作為少兒編程軟件使用最多,因為Scratch是不需要兒童去編寫代碼的,兒童像“搭積木”一樣按照規范把需要的功能模塊拖曳出來組裝在一起,這種編程方式降低了學習編程的門檻還增加了學習的樂趣,體現了皮亞杰所倡導的“建構主義”即在制作和建造中學習。兒童可以利用Scratch創設情境或者角色扮演,體驗到游戲性和教育性,符合了兒童愛玩的天性,順應了其心理特點。
ScratchJr是針對學齡前兒童特點開發的,還增添了錄制聲音,拍攝自己的照片功能,讓幼兒將各個編程的積木組合起來,就可以自由操作舞臺上的角色移動、跳躍和唱歌,讓自己心目中的角色動起來。
2.3.2? Python
Python是由荷蘭人Guido van Rossum在20世紀90年代初期開發的開源、跨平臺移植的編程語言。目前,Python已經成為最受歡迎的程序設計語言之一,由于該編程語言的簡潔性、易讀性,以及可擴展性,受到各大學校和企業的重視。Python還配備了內容豐富、實用性強的第三方標準庫,與C,C++和Java相比,Python降低了編程的復雜程度,更適合中小學生學習,進入中學課堂。
2.4? 編程教育現有的等級量化標準
目前主要的編程等級考試有NCT全國青少年編程能力等級測試和全國青少年軟件編程等級考試。
NCT分級考試分為圖形化分級考試和Python分級考試如表1和表2所示。
全國青少年軟件編程登記考試,如表3所示。
3? 基于程序教學法的編程教育
3.1? 基于程序教學法的教學基本原則
斯金納的程序法教學需要遵循以下四個基本原則:積極反應原則,小步子原則,及時反饋原則和自定步調原則。將這四個原則與編程教育相結合,體現在編程教學的過程中。
3.1.1? 編程教育的積極反應原則
學生學習編程后點擊運行按鈕,編寫正確,程序得到運轉;編程錯誤,程序會報錯。學生每次編寫正確后看到程序運轉就會增加學生對編程的積極性。編程教育的學習內容和傳統的信息技術課堂的學習內容是不同的,傳統的信息技術課堂多是理論知識,內容枯燥無味。而增添了編程教育的信息技術課程的教學內容不僅是基礎理論知識的學習,還有計算思維和實踐操作能力的培養?;诔绦蚪虒W法的編程教育能很好地培養學生編程語言使用和邏輯思維能力,使學生一直處于積極學習的狀態。
3.1.2? 編程教育的小步子原則
把看起來很復雜的程序設計語言分成一個個“一小步”,每完成一步再進行下一步,克服了學生的心理負擔。幫助學生理清學習程序設計語言的思路,層層遞進,后一步的學習是建立在前一步的學習基礎上的。讓學生更清晰的掌握編程的步驟,在整個學習中不斷建立自信。
3.1.3? 編程教育的及時反饋原則
學生能通過程序的運行及時反饋得到編程程序的正確與錯誤。教師能及時關注學生每一步學習的效果,詳細了解每一步的學習情況,同時給予及時的糾正和指導。
3.1.4? 編程教育的自定步調原則
每個學生的學習能力是不同的,學生可以根據自己的學習能力選擇每天的學習任務量。合理分配任務量,讓學生勞逸結合。
3.2? 基于程序教學法的編程教育教學設計
針對Python教育,下面提出將程序教學法與編程教育相結合,并以Python中的“列表”為例,把“列表”的學習步驟詳細分為了十一個小步子,教師演示操作,學生練習操作。
3.2.1? 第一步
首先要讓學生認識Python中的列表是什么([]和list()),教師演示“列表”表示的兩種方式,學生認識后,自己動手模仿輸入列表,復現代碼,正確進行下一步學習,錯誤返回認識列表再重新模仿輸入列表。教師演示內容為:
列表[]:
message=['hello', 'world', 'python']
print(message)
列表list[]:
message=list(['hello', 'world', 'python'])
print(message)
3.2.2? 第二步
學生認識列表后,學習用索引方式,在列表中提取單個元素,教師演示操作過程,學生練習索引自己創建的列表。教師演示內容為:
message=['hello', 'world', 'python']
print(message[0])
print(message[-1])
3.2.3? 第三步
學生學習用index函數索引列表,搜索元素在列表中的位置。教師演示內容為:
message=['hello', 'world', 'python']
print(message.index('world'))
3.2.4? 第四步
前三個步驟學習了單個元素的索引方法,在第四步中學習用切片的方式獲取多個元素(列表[start:stop:step])。教師演示內容為:
list= [10, 20, 30, 40, 50, 60]
print(list[1:6:1])
默認步長為1,將下面兩個就進行對比
list= [10, 20, 30, 40, 50, 60]
print(list[1:6:1])
list= [10, 20, 30, 40, 50, 60]
print(list[1:6])
設置題目進行測試,學生練習內容為:
(1)當step為2,start為2,stop為5;
(2)省略start,切片為[:6:];
(3)省略stop,切片為[0::2]。
當索引為負數時:
(1)當step為1,start為-6,stop為5;
(2)省略start,切片為[:-1:];
(3)省略stop,切片為[0::-2]。
3.2.5? 第五步
學生學習運用關鍵詞in和not in判斷元素是否在列表中。教師演示內容為:
list=[10, 20, 'hello world', 'python']
print(10 in list )
print(20 not in list)
3.2.6? 第六步
學生學習用for循環語句遍歷列表,并練習使用for in循環列表。教師演示內容為:
list=[10, 20, 'hello world', 'python']
for item in list:
print(item)
3.2.7? 第七步
學生學習運用append(),extend(),insert()函數和切片的方法在列表中添加元素,對比append,extend,insert三個增加函數以及切片增加元素的不同,并用自己創建的函數進行不同增加函數的練習。教師演示內容為:
(1)運用append()函數:
list1=[10,20,30]
list2=['hello','world']
list1.append(list2)
print(list1)
(2)運用extend()函數:
list1=[10,20,30]
list2=['hello','world']
list1.extend(list2)
print(list1)
(3)運用insert()函數:
list1=[10,20,30]
list2=['hello','world']
list1.insert(1,list2)
print(list1)
(4)利用切片的方法增加元素:
list=[10,20,30]
list2=['hello','world']
list[1:]=list2
print(list)
3.2.8? 第八步
學生學習運用remove(),pop(),clear(),del()和切片方法在列表中刪除元素,對比remove,pop,clear,del四個刪除函數以及切片刪除元素的不同,并用自己創建的函數進行不同增加函數的練習。教師演示內容為:
(1)運用remove()函數:
list=[10,20,30,40,50,60]
list.remove(20)
print(list)
(2)運用pop()函數:
list=[10,20,30,40,50,60]
list.pop(1)
print(list)
(3)運用clear()函數:
list=[10,20,30,40,50,60]
list.clear()
print(list)
(4)運用del()函數:
list=[10,20,30,40,50,60]
del list
print(list)
(5)用切片刪除元素:
list=[10,20,30,40,50,60]
list_new=list[1:3]
print(list_new)
3.2.9? 第九步
學生學習運用sort()和reverse()對列表進行排序,練習sort和reverse函數以及切片刪除元素的不同,并用自己創建的函數進行不同增加函數的練習。教師演示內容為:
(1)升序:
list=[11,68,79,63,22]
list.sort()
print(list)
(2)降序:
list.sort(reverse=True)
print(list)
3.2.10? 第十步
學生學習運用max(),min(),len()和sum()函數對列表進行最大值,最小值,長度和求和的練習。教師演示內容為:
list=[10,20,30,40,50,60]
print(max(list))
print(min(list))
print(len(list))
print(sum(list))
3.2.11? 課堂總結
設計一個綜合內容,讓學生練習本堂課所學知識,為:
第一題:學生自己創建一個新的列表,列表名為favorite_food,在列表中添加6個以上的元素,元素內容為你最愛吃的6樣菜。先遍歷列表,打印出你喜歡的6樣菜。然后用兩種索引方法,檢索出你最喜歡的菜。接著在favorite_food列表中添加2個你媽媽喜歡的菜,刪除掉1個你喜歡的菜。最后用in和not in看看你的列表里有沒有你爸爸喜歡的菜。
第二題:學生創建一個新列表,favorite_number,在列表中添加7個自己喜歡的1 000以內的數字。先對列表進行升序和降序的排列。再用函數輸出列表的最大值,最小值,長度和數的和。最后利用切片的方法增加和刪除元素。
分析在“列表”這一課的學習中,如果只是按照往常的教學方式,教師直接講解,學生在聽完整堂課后再課下練習,這樣會無法掌握每個學生在課堂上對知識點的吸收情況。但是如果在課堂是已經把一個大的知識點分解成了若干個小步,那么學生每完成一步我們能實時地知道,這樣更榮譽讓學習室知道自己的學習情況。
4? 結? 論
編程教育是隨時代的發展孕育出的新事物,國家會對培養學生計算機思維的編程教育越來越重視,編程教育將會像外語一樣,是每個人未來必須掌握的學科,可能在未來會把編程教育納入中高考必考科目。現在各國都在努力爭取走在人工智能的前端,而加快人工智能的教育,那么把人工智能納入義務教育是必不可少的。為了加快編程教育的發展,國家應該給予政策性支持;高校應該加大與中小學合作,加強試點工作;中小學加強對信息技術課程的重視,把信息技術納入學業水平測試中。同時,中小學還要加快促進信息技術的課程教學改革。
筆者認為程序教學法與編程教育結合很適合納入信息技術中的編程課程的教學,因為編程課程具有較強的邏輯性和實操性很適合劃分成一小步,一小步。但是由于程序設計課程的難度增加,課程按小步子原則進行設計的難度增大,需要老師具有較強的計算機基礎能力和計算思維,需要更多的信息技術教育研究者一起更進一步的研究。
參考文獻:
[1] 陳琦,劉儒德.教育心理學:第2版 [M].北京:高等教育出版社,2011.
[2] 王彥才,郭翠菊.教育學 [M].北京:北京師范大學出版社,2010.
[3] 李寧,李文昊,田玉賀.編程教育浪潮來襲 [J].上海教育,2016(2):16-19.
[4] 李玉閣,劉軍.國內中小學編程教育研究現狀分析 [J].中國現代教育裝備,2018(8):26-29.
[5] 錢筱陽,付詩佳,吳子昊,等.Scratch少兒編程教育探索與實踐 [J].科教導刊(上旬刊),2019(22):134-135.
[6] 馮艷艷.擁抱智能時代探索教育發展新路徑 [J].中小學信息技術教育,2019(6):9-12.
[7] 中國知網.編程教育 [EB/OL].[2021-03-15].https://kns.cnki.net/kcms/detail/knetsearch.aspx?sfield=kw&skey=%E7%BC%96%E7%A8%8B%E6%95%99%E8%82%B2&code=&v=MhOsZj3CPeQvmDYgbK17dM53SyaSeSe1NEg17%mmd2BHjRgKfG%mmd2FOboj7HUAgLUq0LZutQ.
[8] 李崇智.基于Scratch軟件的兒童編程研究 [J].中國教育信息化,2019(20):33-35.
[9] 碼高少兒編程.Python趣味編程與精彩實例 [M].北京:機械工業出版社,2020.
[10] 青少年編程能力等級測試.考試介紹 [EB/OL].[2021-03-15].https://www.nct-test.com/exam-introduction/level-standards.
[11] 百度百科.全國青少年軟件編程等級考試 [EB/OL].[2021-03-15].https://baike.baidu.com/item/全國青少年軟件編程等級考試/23572558?fr=aladdin.
作者簡介:曹永存(1962—),男,蒙古族,內蒙古赤峰人,教授,學士學位,研究方向:大數據分析,軟件工程,智能教育。
收稿日期:2021-03-16