基于产出导向程序设计课程计算思维的培养探讨

2022-11-13 21:24王若龙
中国管理信息化 2022年4期
关键词:程序设计编程程序

王若龙

(濮阳市食品药品信息中心,河南 濮阳 457000)

0 引言

程序设计是计算机类专业的重要课程之一,以程序设计为主要目标,涵盖数据存储、编程软件的运用及程序实现等内容。对于计算机科学,计算思维是基本素养。从程序设计课程教学中可知,计算思维是关键能力。结合计算机技术及应用,了解和掌握计算机的思维方式,对于设计高质量的软件程序至关重要。所谓计算思维,可以解释为运用计算机科学来求解问题、设计系统和理解人类的行为。产出导向理念(Outcome Based Education,OBE)打破传统教学“重知识、轻能力”格局,关注学生自主学习意识的激发,引入工程教育专业认证体系,注重学生间的合作与交流,变革教法,启发学生的计算思维,面向科学评价,持续提升课程教学质量。为此,计算机专业学科教育要重视学生计算思维的培养,指向计算思维,运用产出导向理念,改革现有程序设计课程教学模式,促进高校工程教育质量的全面提升。

1 计算思维在程序设计课程中的应用必要性

1.1 计算思维

周以真教授认为,计算思维是一种借助于约简、嵌入、转化、仿真等方法,将看似难以解决的问题,重新阐述为能够被解决的一种思维方法。计算思维,关键在于抽象和自动化,提炼重要内容,删去不重要的细节,借助于计算机自动化运作系统,解决实际复杂问题。教育部高等教育司《关于开展新工科研究与实践的通知》(教高司函〔2017〕6 号)中,将“工程教育”理念作为新工科课程改革的指导新思想。计算思维以科学计算为指导,重视逻辑、抽象、推理、综合。

1.2 程序设计课程中的计算思维

在程序设计课程体系中,计算思维具有不同的层级特点。在计算表示层,主要完成对数据的存储方式、数据的描述与表示,如字符集、数据类型、变量、数组、指针、类或对象等;在计算处理层,主要实现程序的控制与数据的操作,包括程序设计的基本规则和方法;在计算分析层,主要包括算法分析、结构化程序设计,面向对象设计思想等;在计算实现层,主要包括对算法的实现、算法程序的表示,调适与验证程序的稳定性等;在计算优化层,通过时间复杂度分析、空间复杂度分析,优化程序设计流程和方法。在计算思维与程序设计课程融合中,要把握适度原则,避免过度强调程序设计的繁杂语法和规则、限制学生思维的主动性和能动性。培养计算思维要结合课程内容,启发学生关注复杂问题的分解与解决,提高学生综合素养和程序设计专业能力。

2 计算思维在程序设计课程教学中的实施关键点

程序设计课程作为计算机专业基础课,包括数据存储、数据表示、数据处理、程序设计、程序实现和程序优化等内容。因此,强调产出导向理念与计算思维的培养,在程序设计课程教学中需要把握3 个方面。

2.1 强调学生个性差异,把握任务设计分层性

知识灌输、一刀切的无差别育人模式,既会抑制学生的创新意识和创造力,又不利于计算思维的培养。结合学情,了解学生的认知、起点、学习需求,强调“因材施教、能者多学”原则,设置分层次、有梯度的学习任务,让每个学生的能力都能够获得提升。

2.2 突出学科特点,强调任务设计真实性

在程序设计课程中,要明晰课程特点,体现学生专业技能的培养。增加实践性课时,特别是引入真实项目或任务,鼓励学生分工协作、合作探究、归纳总结,提升其程序设计综合能力。

2.3 强调能力养成,关注评价的科学

传统教学目标以“了解”“理解”“熟悉”“掌握”等为要求,考核学生的能力缺乏量化,导致教学效果不理想。据调研,很多高校程序设计课程缺乏明晰、准确、完善的考核评价体系。应立足计算思维,细化评价内容,着力培养学生利用计算机程序设计解决实际问题的能力。在评价上,要启发学生发现、分析问题,寻求不同算法,激活学生思维;通过算法比较,增强学生自觉意识。鼓励重构问题,培养学生思维的深度。

3 产出导向下计算思维融入程序设计课程教学的措施

落实工程教育专业认证培养理念,以学生为中心,以产出为导向,从人才职业需求和必备能力方面“反向设计”课程教学模式,突出基本知识、专业技能、综合素质的协调发展。

3.1 确立工程教育认证,明晰程序设计课程目标

在产出导向理念下,对于程序设计课程育人目标的设定,要明晰“具备解决复杂软件工程能力”的人才定位。程序设计本身具有多种学科交叉、综合性特征,对数学、自然科学等知识的学习,要体现学生计算思维的培养,能够结合程序设计具体实践问题,优化程序设计语言的表示方法,顺应程序设计模块结构特点,通过抽象、归纳、递归、回溯等算法设计,获得自上向下的程序设计思路。计算思维的培养,通过对程序设计目标、程序编写过程、程序执行、验证与调适分析,解决具体问题。注重程序语言规范、程序算法的表示、程序设计方法的掌握,更要能够衔接软件工程领域,提高学生在编程中养成必备的职业素养,如合作意识、团队精神,具备多学科背景下的程序设计编程能力,能够结合编程项目,展开自主学习、自主探究,适应软件行业人才发展需要。教师在关注程序设计课程教学时,要确立“具备解决复杂软件工程能力”的人才目标,以产出导向为指引,对教学各个环节进行优化和变革,提升软件人才综合素养。

3.2 树立自主学习意识,提高学生计算表示与处理能力

程序设计课程涵盖的知识点、程序设计规则与算法较多。要想实现正确的程序输出,就需要做好数据的表示和处理。在教学中,针对过多的讲解程序规则、算法等内容,学生反而会被这些知识点所束缚,导致计算思维受限。程序设计课程可以让学生自主认识相关规则和算法,自主体认程序设计的数据表示和处理方式,培养学生的计算思维。要将自主学习融入程序设计各个环节,要强化学生自主学习意识和能力。例如对于常量、变量的讨论,与数据二进制存储有关,如果围绕二进制展开知识点讲授,学生依然存在搞混现象,教学效果不理想。应给予学生自主学习的机会,让学生自己去探索和感知二进制补码存储的规律。教师通过有效的引导,化解学生学习中的疑难问题。参照产出导向理念,根据程序设计教学目标,要引领和启发学生主动进行自主学习,如在任务设计与布置中,结合学情,鼓励学生自主学习。针对结构体知识的讲解,安排学生在课下学习“共同体”“枚举类型”,引入作业,让学生对自己的学习成效进行考核。程序设计课程非常适宜学生半自主学习,由师生协同,整合课程学习资源,鼓励学生持续改进自主学习模式。随着学生学习能力的提高,教师要减少干预与监控。同样,注重因材施教,结合学生自身学习兴趣、方向,拓展其知识面,提升学生解决复杂工程问题的学科能力。

3.3 突出协作与交流,增强学生计算分析能力

程序设计课程教学中有结构化分析方法、面向对象分析方法等。考虑到程序设计的教学效率,教师要注重学生间的合作与交流,鼓励学生以团队形式参与分组讨论,共同提升计算分析能力。一般情况下,团队教学模式有三种。第一种是以分块协作为主,将一项复杂的程序设计任务分解为若干模块,团队各成员相互协作,各自完成相应的模块。第二种是主辅协作,由能力强的学生与能力弱的学生合作,对任务进行难易度划分,各负其责。第三种是结对协作,围绕程序设计任务,引入角色互换方式完成合作。不同协作方式的应用要与课程实际相联系。每个人在面对程序设计任务时,其思维意识、思维能力是有限的。引入小组合作,发挥团队的力量,有助于学生从思维碰撞中形成计算思维与分析能力。比如,对于一个数,通过素数因子乘积的方式来表示这个数。很多学生在分解该数时,会采用双重循环程序结构来实现。利用外循环,穷举因子;利用内循环,判断该数是否为素数。这一设计思路,看似没有纰漏,但少数学生在对素数因子进行分解时,无须再判断其是否为素数。也就是说,利用单循环结构即可解决该问题。通过学生分组探讨,能够开阔学生计算思维的视野,在遇到程序设计等问题时,多鼓励学生团队协作,从不同想法的碰撞中激发计算思维,提高学生程序计算分析能力。

3.4 善用启发教学,提高学生计算能力

计算思维的培养,要强调学生计算实现能力的获得。在教学过程中,教师要善用启发式教学,引领学生展开思维训练。在程序设计课程中,针对知识型问题,可以将知识嵌入程序设计,分析程序,体认知识。比如,对逻辑运算符的使用,很多学生在程序设计时,易犯错误集中在逻辑与左侧表达式值为“0”,或者逻辑或左侧表达式值为“1”时,右侧表达式不再执行。教师利用具体程序,让学生通过执行程序,对比执行结果,反思该知识点,促进学生对逻辑运算符的正确理解。对于分析型问题,教师要突出学生思维的发散。对程序流程的控制,程序设计的流程,有顺序结构、选择结构、循环结构等。对于顺序结构,在不使用中间变量条件,交换两个数的方法。形如“a=a+b;b=a-b;a=a-b”。运用编程语句,如何来交换两个数,启发学生去体会顺序结构的数据流向,帮助学生掌握顺序结构的编程方法。同样,对于选择结构,可以从最大公约数的求解方法中来验证。对循环结构,可以通过除法运算实例,加深学生对程序流程的控制。计算思维在培养中,要注重问题的递进性。例如“百钱百鸡”问题,利用三重循环,将公鸡、母鸡、小鸡的数量控制在“0~100”之间,每次累进“1”,穷举所有情况。对于该设计思路,请同学们思考:是否需要对三重循环的常量都设定为“0~100”,是否需要每次都累进“1”,是否必须用“三重循环”来实现。鼓励学生拓展思维,优化程序设计算法,以便提高程序运算效率。在计算思维培养中,学科知识的交叉与融合,面对程序设计任务,不能孤立地看待问题,要结合多种学科知识,强调学生数学思维分析能力的养成。数学思维为计算思维创造基础,程序设计中的计算思维很多情况需要转换为数学方式来完成,如合数的分解,从“2”开始,直到合数的平方根结束,作为循环判断的是否整除的条件。

3.5 重视实践编程,提升计算验证与优化能力

产出导向下,程序设计课程教学要归结于对实际问题的解决。结合程序设计课程,引入具体的编程项目,让学生能够参与编程,对程序进行验证、优化,提高程序设计的正确性、可行性、高效性。在程序设计中,对所编程序需要进行调试、验证。如何选择调试工具,如何验证程序的合理性,如何结合错误提示来改进和纠正程序内容,如何设置程序运行断点,如何利用单步执行来分析程序中变量的合理性等等。通过编程实践,对程序进行输出结果调适,再反过来优化编程方法,如对于“N 个字符串有序输出”任务,需要明晰字符串的存储方式,设定字符串的排序过程。对于不同字符串,根据其长度不同,可以选择不同的存储方式,如静态数组,需要预先定义数组的大小;对于引入多个变量来存储字符串,可能影响程序的可读性。对字符串的排序,从字符串大小比较、交换位置中,可能会带来运算效率问题。因此,引导学生利用指针数组,利用交换数组元素,而不交换字符串,能够实现算法的优化,提高学生编程设计优化能力。

4 结语

计算思维的培养具有长期性、渐进性特点,要融入程序设计课程教学全过程。重视产出导向理念的指导,从程序设计基础知识、编程项目实例开发中,完善教学评价,增强学生自主学习、团队协作能力。将计算思维与数据分析处理能力协同起来,让学生能够融入计算思维,关注问题的解决过程,为后续课程学习奠定基础。

猜你喜欢
程序设计编程程序
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
基于Visual Studio Code的C语言程序设计实践教学探索
纺织机上诞生的编程
从细节入手,谈PLC程序设计技巧
试论我国未决羁押程序的立法完善
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
高职高专院校C语言程序设计教学改革探索