曹阳+李慧+张金区+王兴芳
摘 要:针对教学目标和学生特点,介绍如何设计根据作业要求、数量和时间分层的编程类作业以及开放性、创造性的主题性作业,并针对不同类型的作业提出多元化的形成性评价方法;具体介绍在高级语言程序设计和移动应用开发课程中进行基于形成性评价的作业设计实践,并说明教学效果。
关键词:形成性评价;程序开发;作业设计
0 引 言
形成性评价,又称过程评价,是一种典型的反映学习过程的评价方式[1]1。教师可以通过有效运用形成性评价教学策略,从学生的活动中收集“以评价为根据的证据”,并参考这些证据做出适当决策,即时调整教学[2]。程序开发课程的教学是一种导向性的教学行为,在教学过程中重视形成性评价的运用,可以将学习的目标、过程和本质视为一个整体来考虑,从而达到提高学生编程能力的目的。
从教学评价的角度看,教师在教学过程的各个时段,针对教学目标与学习过程布置的各类学生作业,既是教学过程的重要环节,也是形成性评价的具体操作方式[1]1。通过把程序开发作业作为形成性评价的工具加以利用,教师结合课程教学目标,优化作业设计,可以充分发挥形成性评价的效能,有效實现教学目标。
1 程序开发作业的设计原则
形成性评价理论指导下的程序开发作业设计是指根据课程教学目标和学生特点,对作业内容进行筛选和编制,设计作业的形式和评价反馈方案。为了提高作业效果、实现教学目标,程序开发作业的设计应该遵循以下几个原则。
(1)增强作业设计的目标针对性和作业内容的关联度。教师应该根据教学目标,确定作业涉及的知识点、重点和难点,作业内容实现与课堂教学进度关联,帮助学生巩固课堂上所学的知识。作业设计应该充分考虑学生已有的知识水平和能力,让不同学习水平的学生都能参与作业活动,体验学习成功的快乐。
(2)处理好作业的难度与数量,设计多种形式的作业。作业设计尽量结合现实问题,由易到难、由浅入深,既要有针对性又要层次分明、体现梯度。通过设计形式不同、内容丰富的作业,提高作业的吸引力,激发学生的学习兴趣,形成良好的学习动机。
(3)优化作业评价方式,形成深层次反馈循环模式。形成性评价是一种关注学生学习过程的持续性评价。通过改进作业评价方式来全面关注学生,帮助教师及时发现学生作业中的亮点和问题,便于教师改进教学策略,提高教学效果。此外,通过作业讲评和反馈活动也可以帮助学生监控自己的学习,改进学习过程,营造一种积极向上的学习氛围。
2 作业类型的设计
2.1 分层的编程类作业
施良方教授在《教学理论:课堂教学的原理、策略与研究》一书中明确指出:对于不同的学生要求设计有差异的课外作业[3]。分层作业有利于因材施教,促进不同层次学生的提高和发展。在程序开发课程中,笔者主要针对日常课后的编程类作业进行作业要求、数量和上交时间方面的分层设计。
1)作业要求分层。
根据课程知识点的要求和不同学生的学习能力,教师对同一个编程题目设计不同的作业要求。例如高级语言程序设计课程中的“判定素数”编程作业,基础性要求是使用循环和试除法判断一个整数是否为素数;扩展性要求是通过递归实现素数的判定算法;创新性要求是求解n以内素数,当n的数量级很大时,如何改进算法提高编程效率。移动应用开发课程中的“利用ListView组件实现多个文本组件滚屏显示”的作业,基础性要求是结合ArrayAdapter和ListView实现文本列表;扩展性要求是使用SimpleAdapter实现带图片的列表;创新性要求是自定义适配器实现对列表选项中按钮的响应。
对于学习困难的学生,让他们完成基础性、模仿性的作业,能够通过练习掌握课程要求的基础知识点,为下一步学习做好铺垫。对于学有余力、善于探索的学生,通过扩展性和创新性的作业要求,引导他们努力完成更高层次的编程任务,在加深知识的理解和运用的同时,培养他们的创新精神和探究意识。
2)作业数量分层。
在布置作业时,适当减少学习困难学生的作业量,尤其是降低难度大的作业量,但夯实基础、提升编程基本技能的作业是不能减少的。因此,教师在布置编程作业时,往往分必做题和选做题两种。学有余力的学生可以自由选择完成拓展性的选做题,例如,高级语言程序设计中的选做题“猜数游戏”“求两个矩阵的乘积”“在屏幕上动画显示一个数字式时钟”等;移动应用开发课程中的选做题“背景音乐播放器”“来电归属地查询软件”“贪吃蛇游戏”等。这些选做题可以提高学生的学习兴趣,在加深基础知识的理解和应用的基础上,开拓学生的思路,提高创新能力。
3)上交作业时间分层。
由于学生对知识的掌握程度不一样,在作业完成的时间上也会有所不同。教师可根据具体情况宽限部分学生提交作业的时间,允许一些学习困难的学生晚交作业,但时间上要有一定的限制,并要求学生保质保量地完成作业。这种方式有利于形成良性的循环,鼓励学生通过作业巩固所学知识。
2.2 开放的主题性作业
编程类作业主要保障学生对基础知识点的掌握以及课后的深化学习,而主题性作业重在培养学生综合运用编程方法解决实际问题的能力。
主题性作业就是把作业活动与研究、解决实际问题结合在一起,并要求学生在一定的情境中完成[4]39。开放的主题性作业则让学生在“多种方案”或“多种信息”中灵活运用所学知识思考问题和解决问题。这种类型的程序开发作业可以充分发挥学生的主动性,引导学生积极思维,探究解决问题的方案,切实体会一个完整系统的开发过程。
针对不同内容和层次的程序开发课程,可以给出相应的主题性作业设计。例如高级语言程序设计课程的主题性作业“学生通讯录管理系统”,实现的数据结构可以是数组或链表,采用单文件结构或多文件结构,运用基于过程或面向对象的程序设计方法等。移动应用开发课程的主题性作业由教师提供可选题目,例如运动健康类APP、移动定位服务类APP等。学生也可以根据自己的兴趣,自己设计项目题目和内容,但是技术难度和工作量要与主题性作业的要求相匹配,并得到教师的认可和批准。
主题性作业一般采用小组合作的方式,作业成果由学生合作展示,这样可以促进学生间的交流,培养团队合作能力。由于学生在课堂上的知识储备有限,为了完成主题性作业,需要广泛查阅资料,从而激发学习兴趣,拓展知识面和视野。
3 作业评价方法的设计
作业评价是形成性评价的主要手段。如何更好地运用多元化的作业评价方式,在全面评价学生的同时,更好地促进学生发展是作业评价的根本目的[4]11。在教学过程中,针对不同类型的作业,形成性评价的方法也不尽相同。下面针对上述分层作业和主题性作业,介绍相应的评价方法,强调评价信息的及时反馈,注重对学习过程的指导和改进。
3.1 分层作业的批改
作业评价不是用来鉴别好坏的筛子,而是激励学生思维的“泵”[5]。分层作业的评价应该以鼓励为主,根据学生的不同层次水平采用不同的评价标准,从而使尖子生能够在高标准、高要求下追求更高层次的目标,而学习困难的学生也有被认同和赞许的机会。
参照教学设计理论中的良构与劣构问题理论[6],编程类作业以劣构型作业为主,即布置类似于标准化测验中的主观题,学生对这类作业的解答通常是比较自由且富有个性和创造性。即便是正确的程序,有的简洁高效,有的冗长繁杂,所以需要区别化对待,有针对性、深入地反馈教师的批改意见。对于学习基础较弱的学生,编程类作业评价的重点在于学生对语法知识与编程技能的掌握程度,对于错误的作业要分析错误产生的原因,提出修改意见,并在课堂上呈现修改示范。对于学习优异的学生,作业评价反馈的重点在于指导和培养学生优秀的编程风格和创造性的解题思路。通过因人而异的作业评价方案设计,教师对学生不同时间内的学习情况实施形成性评价,让学生对习得情况有自我了解,也让教师对自己的教学方案进行整理反思。
课堂上的作业代码讲评是形成性评价中深层反馈的重要环节。在课堂上,采用轻量级代码评审方法讲解学生的作业代码,引导学生发现问题并提出改进意见,同时强调编程风格和计算思维的培养,对不同层次的学生都有促进作用,可以激励学生不断改进,培养编写高质量代码的能力。
3.2 主题性作业的分阶段答辩和评审
主题性程序开发作业是围绕一个项目主题设计的系列性开发作业。学生在完成作业的过程中,既要查阅资料,又要设计编程,作业完成周期相对较长,有的作业甚至跨越半个或整个学期。因此,主题性作业的实施划分为前期计划、阶段实施、过程评价、中间反馈和成果展示5个阶段,作业的评价方式主要采用项目的分阶段答辩和评审。
在主题性作业的前期计划中,教师将根据教学进度和课时对开发任务进行分割,设定不同阶段评审的时间节点。在每个阶段结束后,教师组织学生进行阶段答辩和评审。学生对本组已经完成的工作进行介绍讲解,同时回答教师和其他小组学生的提问,由教师和学生对各小组的阶段性成果进行评价和打分,最后由教师进行项目讲评。讲评的内容包括各小组的主要成绩、存在的主要问题、改进意见和建议等。
采用分阶段答辩和评审的方式可以让教师随时了解各项目组的开发进度,及时纠正学生在开发过程中出现的错误和偏差,避免问题的积累和扩大,同时增加学生对项目开发的积极性和参与程度,让学生能够了解其他小组在开发中存在的各种问题,增加项目开发的经验和能力。
对学生各阶段的表现进行评价,涉及多个方面的考核指标,例如学生的开发能力、技术水平、项目参与程度、团队合作能力等。因此,设计合理的考核指标和评价标准是全面、客观地评价学生学习情况的前提和基础。表1给出移动应用开发课程的分阶段任务和答辩评分标准的示例。
4 教学实践和效果
2015—2016学年,笔者在计算机专业的高级语言程序设计和移动应用开发课程中进行了基于形成性评价的程序开发作业实践,取得了较好的效果。
分层的编程类作业方面,高级语言程序设计课程中基础性要求的作业完成率达到100%,而扩展性要求的作业完成率达到40%以上。通过课堂上的作业讲评和代码评审,学生认识到易犯的编程错误,例如整除归零、数值溢出、指针出界等问题,学习了良好的编程风格,例如代码缩进、命名约定、指针初始化等。移动应用开发课程的实验课中,约1/3的学生可以在课堂上完成教师布置的开发任务,剩余的学生也可以在课后规定的时间内提交作业。课堂上的作业讲评和代码评审也进一步强调了开发中需要注意的问题和解决方案,例如 Android 6.0版本以上的运行时权限处理问题等。
开放的主题性作业方面,高级语言程序设计课程中,15个小组完成了“学生通讯录管理系统”的项目开发,其中部分小组实现了Windows的窗口界面和双语言版本的系统;有6个小组完成了选做项目“排序动画程序”开发任务。移动应用开发课程中,学生完成了“健康报时”“课堂速签”“快递侦探”“畅行”等26份优秀作品,其中几个项目还参加了2016年的校园杯软件设计大赛和课外科研立项。通过开放性的作业和评价方式的创新,学生在项目开发过程中存在的问题得到了及时解决,学生的创造性也得到了更大的发挥。
5 结 语
在程序开发课程的教学中,基于形成性评价的作业及时反映了教与学的情况,有利于教师对教学效果进行及时检验,了解学生学习过程中存在的问题,并相应地调整教学内容和进度。学生通过形成性评价,可以自我检测对编程方法和技术的掌握程度,发挥学习的主动性。这种有效的调节,有利于形成“自我檢测修定体系”,提高教学效果和质量。
参考文献:
[1] 刘占红. 形成性评价视野下的科学作业设计策略研究[D]. 宁波: 宁波大学, 2014.
[2] 孙立坤. 提升高中数学教师形成性评价教学技能的设计研究[D]. 上海: 华东师范大学, 2014.
[3] 施良方, 崔允漷. 教学理论: 课堂教学的原理、策略与研究[M]. 上海: 华东师范大学出版社, 1998: 1-443.
[4] 高茜. 基于形成性评价的小学英语作业设计研究[D]. 天津: 天津师范大学, 2013.
[5] 刘冬乔. 高二化学形成性作业的设计与评价反馈研究[D]. 桂林: 广西师范大学, 2014.
[6] 张雪莉, 张会会, 马蓉, 等. 运用基于SCIT的形成性评价改进劣构型作业批改绩效的个案研究[J]. 电化教育研究, 2016(4): 49-54, 61.
(编辑:孙怡铭)