核心素养视域下程序设计教学模式的探索与实践
2021-07-27张远平
张远平
摘 要:针对程序设计课程的特点和教学过程中存在的问题,在教学实践中,文章围绕发展学生核心素养这个目标,从培养学生的学习意识出发,通过激发学习需求、提高代码阅读能力、培养分享成果意识和提升编程素养等方法,探索有效提高程序设计教学质量的新模式。从实践效果来看,通过优化案例开发、场景模拟、方法对比、代码跟踪和实例拓展等教学环节,对传统教学模式进行创新变革,符合信息技术学科的教学规律,能启发学生的思维,提升学生的专业核心素养和提高程序设计教学的效果。
关键词:核心素养;程序设计;教学模式;探索与实践
中图分类号:G424 文献标志码:A 文章编号:1673-8454(2021)12-0080-05
一、引言
程序设计课程是计算机专业的核心课程之一。近年来, 随着信息技术和计算机语言的不断发展,程序设计的相关课程也越来越受到学校和程序设计爱好者的重视。传统的C++、Java、PHP等语言方兴未艾,新兴的编程语言也受到了追捧,如Phython语言以其简洁、高效、易学的优点赢得了大量编程爱好者的青睐。但是从实际情况来看,程序设计课程的教学效果并不尽如人意。程序设计是一门逻辑性相对较强、难度相对较大的课程,对学习者的兴趣和自律性要求较高,能潜下心来坚持深度学习的学生并不多。[1]同时,教学思想固化、教学模式落后也是造成当前程序设计教学没有达到预期效果的主要原因之一。多数教师在程序设计教学的过程中只重视知识的单向传递,而没有解决提升教学效果的核心问题,即提升学生信息技术的核心素养,驱动学生求知与深度学习的源动力,从而使教学良性互动发展。2018年1月,教育部颁布了《信息技术学科标准(2017版)》,提出以项目整合教学内容,落实核心素养在教学中的渗透。[2]这说明核心素养的研究也逐渐由理论探讨转向课堂教学研究。[3]因此,如何在实际教学中,从培养学生的专业核心素养入手,紧扣课程的特点、深化和创新教学模式、因势利导地提升教学效能,是程序设计教师必须思考和解决的问题。
二、当前程序设计教学在核心素养层面上存在的问题
1.教材编写理念落后,课程规划没有兼顾学生的核心素养
受早期计算机教材编写风格的影响,计算机程序设计教材的编写风格大多偏向严谨,注重理论性,文字表达专业性强,但同质化情况严重,表述抽象晦涩,教学内容跟时代脱节,缺乏吸引力,很难使学生对教材产生阅读的兴趣。[4]此外,计算机语言类教材的配套电子资源较少,教师备课的时间成本相对较高,同时也不利于教师和学生通过电子教学资源的应用提高信息技术素养。由于核心素养理念经历了演变和不断完善的阶段,因此在课程的具体规划方面也存在不足之处。《新课程方案和课程标准》基于学科核心素养制定了新的质量标准内容,并明确学生学习该学科课程后应达成的正确价值观念、必备品格和关键能力。[5]但目前的程序设计课程的整体规划相对滞后,往往只重视教学表层的知识传递,而没有兼顾学生核心素养的提高。在学科思维上,还没有从学生的身心发展和所处的生活环境出发,不能体现对学生整体性培养的具体要求和内容。例如,现行的课程规划多数没有重视程序设计知识的连贯性和关联性,各种计算机语言相关的课程缺乏有机的衔接,不利于学生对编程思想融会贯通,反而产生相互干扰的情形,使学生学习程序设计时无所适从,导致编程基础不扎实的后果。
2.教学模式落后,教学观念固化,教学过程缺少提升核心素养的设计
发展学生的核心素养需要通过教学实践使其思想和行为发生变化。但是在程序设计教学中,很多教师还没找到转变教学模式的立足点,或者说教学观念已经固化,缺乏创新思维,核心素养在程序设计的课堂教学中没有得到转化与落实。例如,教学活动中的案例设计陈旧,不注重实用性和趣味性,使学习程序设计变成一件乏味的事情,因而大大打击了学生的主观能动性。核心素养理念强调发展学生适应社会的必备品格和关键能力。但是很多程序设计教师在教学过程中只重视语法教学,不重视学习态度、思维方式和价值观的指导,以致学用分离,缺乏进阶学习,学生的知识建构能力只能停留在核心素养内涵的“双基”层。[6]显然,凡此种种的教学过程没有体现出计算机程序设计的学科价值,教学质量很难达到如期的效果,更谈不上全面提升学生的核心素养。
3.程序设计教师对核心素养的理解和实施能力仍有待提高
程序设计作为解决综合问题的专业技术类课程,是计算思维素养和创新思维素养培养的高层次需求。在学生的编程学习从入门到形成核心素养的转化过程中,教师发挥着关键作用。[7]遗憾的是,当前很多教师对核心素养的理解还存在偏差,课堂上实施核心素养教学的效果很有限。主要表現在:①缺乏把培养学生核心素养作为教学导向的意识。②不注重继续学习,忽视对计算机前沿技术和理念的追赶,知识结构已经落后于时代。③对核心素养背景下的课程改革准备不足,教学中仍然采用老一套的办法。这样的教师教出来的学生最多只是行业内的“软件蓝领”,而不是“能力+创新”型的技术人才。
三、基于核心素养的程序设计教学模式的创新策略
1.从培养学生的信息意识抓起,激发学生学习程序设计课程的内在动力
程序设计教学要注重学生个体的内在需求和发展规律。教育心理学研究表明,兴趣来源于认识和需要。要唤醒学生的求知欲望,最根本的办法是让他们知道学习的知识是有用的。从当前社会教育的情况来看,重视培养孩子思维能力的现状凸显了程序设计知识的优势和潜力。例如,少儿编程的广泛宣传、机器人竞赛的积极开展,都表明程序设计教学是信息技术教育的热点之一。为什么要学习程序设计、学习程序设计有什么作用等等,这一系列问题都跟信息意识有关。教师首先要让学生明白,程序设计是一门逻辑性较强的学科。学习编程技术,可以锻炼学生的思维能力,促进大脑发育,提高智商,并能解决很多实际问题。通过计算机语言,我们可以与计算机对话,让计算机更好地为人类服务。学习程序设计,可以让我们更好地探索世界、认知世界。在引导学生产生学习兴趣的过程中,教师也可以通过游戏设计、机器人与人类下棋等案例,帮助学生培养程序设计的兴趣,激发他们学习的内在动力,同时也为学生树立正确的世界观、科学观打下基础。
2.以优质教学案例的设计作为发展学科素养的突破口,打开程序设计学习之门
当前,程序教学中的案例多数以解决语法教学为主,很少案例能理论联系实际,把学生的上机实操与具体的实践结合起来,体现编程教育在生活中的应用。[8]必须明确,程序设计的目的是以计算机语言为工具,使用一定的算法,用自己的理念和方法去解决实际问题。因此,要发展学生的程序设计素养,设计以解决问题为导向的案例就显得尤为关键。结合传统的案例教学法,优质的程序设计教学案例应符合以下原则:①实用性。案例应该是日常生活中我们可以接触或了解到的场景,具备一定操作流程的体验,学生能较快地理解问题的实质,把握程序的需求。②趣味性。案例设计能体现一定的趣味性,活跃学生的思维,为学生的编程学习提供一定的创作空间。③可扩展性。案例既是独立的,又可以延伸和拓展。学生能够在编程解决一个问题的同时,掌握解决多个问题的方法。④可模拟性。案例是对日常事物的模拟,能调动学生的探索精神,发挥他们的模仿能力,同时这也是学习程序设计成就感的来源之一。根据以上原则,下面表1列举了几个可供参考的教学案例。
3.重视提高学生对计算机程序的阅读能力,激活学生对程序设计学科的领悟能力
传统的计算机程序教学较为重视培养学生“编写”程序的能力,而往往忽视学生“阅读”程序的能力。实际上,程序就是运用计算机语言解决问题的过程描述,具有一定的可读性。和语文教学中重视阅读的理念一样,计算机程序的阅读能力也是学生核心素养的有效反映。随着学生对语法的逐步熟练和理解能力的增强,可以要求学生阅读一些经典的源代码,理解别人解决问题的思路,这样既可以借鉴到各种编程思想,又可以提高调试程序的纠错能力,促进学生计算思维的形成和发展。华南师范大学的钟柏昌教授认为,程序设计教育的重点不是教会学生编写代码,也不是学习未来成为程序员的专业性极强的知识,而是要理解与计算机进行交流的方式,并获得利用计算机解决问题的基本思维。[9]因此,教师可以为学生提供一些经典的算法作为阅读素材,如洗牌算法(Fisher–Yates shuffle)、分治算法(divide and conquer)等,使学生体会到经典代码的精妙之处,激活他们学习的悟性。
4.鼓励学生对创作成果进行分享和改进,促使学生持续深度学习
传统的程序设计教学中,教師通常要求学生把完成的程序以作业的形式提交,从而作为完成任务的依据。其实,计算机程序可以说是一个“作品”或者“产品”,甚至可以说是一件“艺术品”,具备应用和可推广的属性。美国教育家布鲁纳认为,学习就是认知结构的重新组织。与之类比,计算机程序就是可以迭代式发展的软件产品,它可以在产品的更新中不断重构,因而完成一个程序作品并不是学习过程的完结。信息技术核心素养中的创新学习理念倡导学生在完成学习任务的基础上,通过自主学习、持续学习、协同工作实现知识分享与创新创造。学生在创造价值的过程中,必然会体会到乐趣和成就感,产生进一步加强学习的动力。[10]教师可以为学生建立程序作品库,并提供下载、评价和推荐等功能,使每一位学生的程序作品都能体现其应用的价值。支持和鼓励学生为他们的程序划分版本,引导他们通过应用效果带动深度探究的开展,这也是培养学生学科核心素养的一个有效途径。
四、发展核心素养的程序设计教学实践——以循环结构的教学为例
循环结构语句是计算机程序设计教学的难点之一。通常,按课程的安排,在学习了顺序结构和分支结构之后,就会进入循环结构语句的内容。对编程初学者来说,循环语句的掌握情况往往会成为学习兴趣的分水岭。一方面循环语句相对比较抽象,要求学生有一定的理解能力和知识迁移能力;另一方面使用循环语句解决的问题也相对复杂,通常既包含顺序结构,又涉及条件判断,要求学生有解决问题的意识和良好的思维习惯。因此,循环结构在计算机程序教学中最能体现学生信息技术素养的水平。根据以往的经验,很多学生从学习循环语句开始,就逐渐失去了学习编程的兴趣。客观地说,学生在学习循环语句时容易产生挫折感,同时也容易产生倦怠的情绪。对教师而言,如何把循环语句的知识点讲述清楚、让学生顺利跨过循环语句这道坎并且提高他们学习的积极性是教学的难点。这就需要教师在教学过程中加强雕琢,把发展学生核心素养的理念渗透到每一个知识点的讲解中,赋予循环语句教学新的活力。[11]具体来说,就是抓住循环结构教与学的痛点,化解学生学习过程中的困惑、不解、无聊和放弃等情绪,使循环结构的教学“活”起来。实践证明,通过分析学生的特点,融合培养学生核心素养的理念,设计以“案例引入→对比教学→代码跟踪→成果分享和评价→知识拓展”为主线的流程,确定符合程序设计教学规律的学习主线,能有效提高循环结构教学的效果。其具体设计如表2所示。
1.案例引入
在程序设计教学中,案例引入是发展学生信息技术素养的起点。通过优选案例,启发学生的逻辑思维,引导学生将课程学习与实际应用相结合,帮助学生创设案例场景。[12]循环结构简单来说,就是重复执行某种操作,这在日常生活和工作中并不鲜见。教师可以列举学生认知范围内感兴趣的案例,提高他们对循环结构的感性认识,从而形成思维迁移,加快知识建构的进程。例如:跳高比赛中,运动员在每个高度都有3次试跳的机会,若3次均不成功则被淘汰。或者以青蛙跳楼梯的游戏作为例子,描述青蛙一级一级地跳上楼梯的动作也是循环执行的过程。这些案例,或紧扣生活,或容易想象,既浅显,又有代入感,比起枯燥无味的语法陈述,更能引起学生的关注和联想。
2.对比教学
从顺序结构进入循环结构的学习,并不纯粹是语法教学的进阶,还包含着思维方式的提升。循环语句可以使代码更加简洁、精炼和高效,发挥计算机高速运算的强大优势。在循环语句的教学中,运用对比的教学策略,能促使学生对循环语句的作用有更深层次的理解。下面以使用Python语言编程求解“1+2+……+100”的和为例,对比顺序结构与循环结构解决问题的语法。
(1)顺序结构语句:
s=0
s=s+1
s=s+2
……
s=s+100;
显然,顺序结构实现加法求和的效率是低下的,这不应该成为利用计算机解决问题的最优方法。
(2)循环结构语句:
s=0
for i in range(1,101)
s=s+i
对比(1)和(2),循环语句明显比顺序语句简洁高效,最重要的是在解决复杂问题的时候,循环结构往往更能发挥巨大的作用。最明显的变化就是节省了时间和空间,凸显循环结构语法上的优势,而对比教学最直接的影响则是使学生在循环语句的认识上有更直观的体会,推动他们进一步学习。以上用例虽然简单,但细微之处显真章,真正要让核心素养渗透到教学之中,就要从细微处着手,使学生的探索性思维得到有效启发。
3.代码跟踪
程序执行的过程是对现实世界中解决问题过程的虚拟。在教学中,通过跟踪程序执行的过程,建立程序与实际问题的映射,是非常具有启发性的一个教学环节,因为脱离了实际问题的代码学习是没有生命力的。事实证明,使用学习英语或语文的思维方式学习程序设计,最终的结果是学生什么都没学到。因为学生在学习过程中并没有建立逻辑思维,靠记忆来学习程序设计的遗忘率特别高,很多学生在学习程序设计多年后对学过的内容没有任何印象。因此,学习程序设计需要钻研代码,通过跟踪程序的执行过程进行深度学习,使自己对代码执行的次序、意义有深刻的理解。一种方式是,在教学过程中,可以通过情境模拟和变量监控来实现代码跟踪。所谓情境模拟跟踪,是指根据问题的内涵,构建场景式的环境,演示代码执行的过程。例如在上述连加求和的问题中,可以设计一个小游戏:选一位学生绕着讲台转圈,每次转圈对应一次循环,当经过讲台时拿取相应数量的小物件(如小棍棒),同学提示应拿取的数量,转圈的学生说出已拿取物件的总数,这是现实世界中解决问题的思维过程,非常有直观性。另一种方式,是在研究代码的执行过程时,通过跟踪程序中变量的变化,加深学生对代码的理解。如针对上例,可以用表3的方式跟踪循环次数及变量的变化情况。
学生在编程时,可以在脑海里想象变量的变化过程,或者使用草稿纸以列表方式对变量的值进行记录,重点是监控循环变量和结果的变化。实践证明,通过代码跟踪学习程序设计,能使学生更容易理解算法的思想,提高他们对具体问题的分析能力和想象力。
4.知识扩展
拓展延伸是学科素养发展的升华。程序设计课程是一门应用性学科。培养学生应用计算机语言解決实际问题的能力,同时提升学生的编程素养是课程的核心目标。仅仅通过课堂上的基础教学来提高学生计算机语言的运用能力、培养他们的学科素养是不够的。必须注重知识的拓展延伸,以学生的认知水平、兴趣爱好、生活实际为基点,充分挖掘丰富多彩的教学资源,把课堂教学拓展延伸到每个角落。可以从以下方面入手。
(1)鼓励创新程序设计。通过改进课堂教学实例,在教学拓展环节催生新的实例,促使学生培养自主探索的思维方式,提高独立分析和解决问题的能力。例如把上面连加求和的实例更改为实现“1+2+……+N”求和的问题,使程序的功能更加灵活,有利于拓展学生的应变思维。
(2)通过知识迁移引入新的问题。教学中应尊重学生的个性特点和认知规律,按“认识->实践->迁移”的流程对循环结构语句的应用进行拓展,利用新学到的知识解决学习和生活中遇到的实际问题。[1]例如,有些学生在理解和掌握循环语句的用法后,通过编程解决数学上的鸡兔同笼、数字排序等问题,加深了具体应用与程序设计对接的体验。
五、结语
通过教学实践,可以明确程序设计教学的各个环节都与发展学生的学科核心素养密切相关,在核心素养视域下改革程序设计的教学模式有实际的意义。以发展学生核心素养为目标的程序设计教学,其本质是引导学生形成学科思维,使学生从学科特点的角度观察世界,用学科的思维去思考问题,以持续学习的态度去提升个人能力,从而达到提高学生核心素养的育人目标。[3]教师作为课程的建构者,要树立正确的课程意识,注重案例化、场景化、情感化的教学策略运用,认真对待每一个教学环节,使学科核心素养真正成为核心素养落地的抓手,使学科核心素养成为核心素养的具体化。随着计算机语言的不断更新,程序设计的教学实践需要与学科核心素养理念不断融合。同时,教师也需要积极提高自身的职业核心素养,使核心素养视域下的程序设计教学能在平等、和谐、合作和发展的环境中实现师生共同发展,进一步提升教学的效果。
参考文献:
[1]黄胜,李桥.面向对象程序设计教学研究与实践[J].计算机时代,2016(1):86-87,90.
[2]赵恒斌,米珍美,高攀.基于核心素养的信息技术教学设计研究与应用[J].中国教育信息化,2019(7):32-35,81.
[3]刘丹,黄红亚.核心素养视域下的课堂教学[J].教育观察,2018(11):22-23,29.
[4]孙海龙,李丹,王春艳.工程教育背景下程序设计课程O2O教学模式研究[J].计算机教育,2018(11):132-136.
[5]陈宏艳,徐国庆.职业教育学生核心素养体系构建:背景与思路[J].当代职业教育,2018(1):22-26.
[6]吴红庆.基于计算思维培养的C语言程序设计课程教学探索[J].玉溪师范学院学报,2016,32(12):63-65.
[7]黄斌,王丹妮,刘锐.核心素养视域下的教师专业发展研究——基于“优课”的分析[J].中国教育信息化,2020(7):5-9.
[8]徐建军,尹良泽,陈立前.计算机程序设计教学中问题求解能力的培养探索[J].课程教育研究,2019(13):249-250.
[9]黄蔚.中小学程序设计教育的挑战——访华南师范大学教育信息技术学院钟柏昌教授[DB/OL].http://www.jyb.cn/rmtzgjyb/201905/t20190504_230872.html.
[10]宋荣杰.兴趣激励的VB程序设计教学探索与实践[J].教育教学论坛,2017(49):159-161.
[11]陈文文,于颖.基于核心素养的信息技术课程设计[J].软件导刊,2019(5):212-214,218.
[12]吴绍兵,王昌梅,贾学明等.基于对分课堂的Python语言程序设计教学探索[J].计算机教育,2019(2):53-56.
(编辑:王天鹏)