APP下载

程序教学法在编程教育中的应用

2021-11-03曹永存王钧懿丁少龙陈娟李潜

现代信息科技 2021年8期
关键词:教学方法

曹永存 王钧懿 丁少龙 陈娟 李潜

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  编程教育的积极反应原则

学生学习编程后点击运行按钮,编写正确,程序得到运转;编程错误,程序会报错。学生每次编写正确后看到程序运转就会增加学生对编程的积极性。编程教育的学习内容和传统的信息技术课堂的学习内容是不同的,传统的信息技术课堂多是理论知识,内容枯燥无味。而增添了编程教育的信息技术课程的教学内容不仅是基础理论知识的学习,还有计算思维和实践操作能力的培养。基于程序教学法的编程教育能很好地培养学生编程语言使用和逻辑思维能力,使学生一直处于积极学习的状态。

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

猜你喜欢

教学方法
融入数学语言的“土木工程材料”课程教学方法探讨
基于gitee的皮肤科教学方法研究
高职院校音乐选修课信息化教学方法与实践探索
以问题为基础的教学方法在冠心病见习教学中应用研究
《计算方法》关于插值法的教学方法研讨
《计算方法》关于插值法的教学方法研讨
探索立体几何的教学方法
探索立体几何的教学方法
小学语文字理教学方法探析
应用数学模型发展生物科学思维的教学方法——以Excel在高中生物学实验教学中应用为例