程序设计类课程如何达成饱满的代码量

2018-01-31 07:49曾庆森
计算机教育 2018年1期
关键词:程序设计代码习题

卢 玲,陈 媛,曾庆森

(重庆理工大学 计算机科学与工程学院,重庆 400050)

0 引 言

程序设计类课程(如程序设计基础、C语言程序设计、Java语言程序设计等)普遍开设于普通高校本科一年级。目前,随着人工智能等应用的快速发展,培养既有特定工程背景,又有程序设计、计算思维[1]能力的人才,已逐渐成为各应用领域的普遍需要。因此,普通高校计算机类、信息类、理工科非计算机类、文科类各专业的学生都需学习程序设计类课程,接受不同程度的程序设计能力培养,运用程序设计思想和方法来解决实际问题[2],课程受众十分广泛。

程序设计课程的教学目标取决于人才培养方案,各专业存在一定差异,但由于在各应用领域的研究及实践中,都普遍将程序视为一种工具,因此,如何培养学生在实践环节自然地、无门槛地运用编程语言,解决实际问题,是受到普遍关注的问题。

目前,许多学生在学习程序设计时,存在听得懂、看得懂、会分析、会设计,却无法自如地运用程序设计语言[3],顺利地将设计思路转换为程序代码的问题,难以逾越理论与实践间的鸿沟。针对这一现象,教育工作者在改进教学方法、教学内容方面做了很多尝试。

1 以代码量为核心的教学设计

编码能力是程序设计类课程需培养的多种能力之一,也是学生观察、验证其所思所想的极其重要的环节。学生编码能力的培养需经过逻辑思维锻炼及程序设计理论的学习,由于编码具有实践性的特点,因此,还需通过科学的实践,将系统的编程能力[4]训练贯穿于教学始终。在编码时,学生需将“小明和小红交换了座位”理解为“内存中的两个数据交换了存储空间”,这是学生的计算思维借助计算机系统的存储及运行来体现的过程,大量的编码实践可以促使这种理解成为自然。可见,与人们掌握任何一种实践技能的过程一样,编码能力的培养是一个“从量变到质变”的过程,因此,“饱满的代码量”是达成程序设计类课程教学目标的必备条件。

以重庆理工大学开设在大学一年级第一学期的FP课程为例,该课程主要依托C程序设计语言让学生学习程序设计理论,接触初步的算法设计及分析方法,为学习编写高性能程序及其他计算机系统理论知识打下基础。依据该校授课教师多年的教学经验、学生的能力特点及课程的教学目标,在FP课程教学期内,学生应完成代码量为人均5 000行,该校以此为核心进行了课程的教学设计,如图1所示。

由图1可知,为实现“饱满的代码量”需3大因素配合,一是规划实践内容,实践内容应丰富、富有层次性;二是设计评价方法,评价方法应是科学公正的、多元的;三是需一定的教学平台支撑,使规划的实践内容及设计的评价方法易于开展。

图1 以代码量为核心的教学设计

2 实践内容规划及设计

2.1 代码量规划

合理定义代码量的“饱满性”是准确达成课程教学目标的基础,其定义依据是课程教学大纲。首先根据教学大纲设定的教学内容、教学目标,结合学生的特点,进行代码总量设定;再根据课程大纲拟达成的具体能力点要求,结合大纲对课程重点、难点的描述,对各知识点进行代码量分项设定。重庆理工大学FP课程先将代码总量定义为人均5 000行,再根据课程大纲的重、难点知识分布,对各知识点的代码量估算,具体规划如图2所示。

课程教学以“循环结构”为分界点,在“循环结构”前是语法基础及3大基本结构,“循环结构”后是复杂数据类型及程序框架。因此,“循环结构”是课程知识点综合应用的第一阶段,需进行大量验证性、设计性实验的练习,为此,设计的代码量为850行。假设单个程序代码长度平均为25行(含注释行),由此估算“循环结构”需完成题目数约34个,其他各章也依此方法规划代码及习题数量。图2所示的设计主要用于对教学进行指导,以促成代码量达成,实际执行时,还需根据教学情况进行调整。图2中“综合应用”规划代码量为600行,估计题目数为24个,实际上该阶段的程序具有复杂的调用框架,单个程序代码远超过25行,因此,实际完成题目数远低于24个。从教学实践看,由于在“综合应用”结束后,课程将进入课程设计环节,学生面临又一轮代码编写的高峰,因此,在“综合应用”中适当减少题目数,对学生调整学习节奏是有利的。

2.2 实践内容设计

饱满的代码量,不仅指数量多,还需要精准,以突出能力的培养。教育者们在程序设计类课程长期的建设过程中对实验内容的设计积累并贡献了非常多的优质资源,但仍需仔细筛选、整理,使习题与教学大纲高度吻合,尤其应突出重、难点,进行难度分层,以形成正确的学习导向。

首先,为培养问题分析和设计能力,习题应在编程语言与编程方法间把握平衡,实现两者相长。选题时需注意语法练习与程序结构练习的比例,避免过于注重语法细节,只见树木,不见森林。重庆理工大学的FP课程尤其强调对程序设计方法及程序结构的把握,为避免学生将主要精力投入于语法细节,课程的实验有针对性地减少了对C语言的某些运算符,如自增、自减、逗号运算符的操作;强调文件读、写操作,并减少复杂的输入、输出格式控制练习等。从课程的期中、期末等测试结果看,大部分学生对试卷的“编程题”完成较好,从一定程度表明学生对程序结构的运用能力普遍较强,这种学习导向的效果十分明显。其次,为加深学生对数据存储的理解,需强调对各种数据类型的灵活运用。许多学生由于无法灵活操作结构类型、数组等复杂数据类型,在解决小型应用问题时,存在强烈的畏难情绪。针对该问题,实践中需重点选取与数据类型、复杂数据类型操作相关的题目。

图2 各知识点代码量及题目数规划示例

由于预设了代码量,可能使学习者陷入预定框架,认为学习缺乏自由度,有压力而没有动力。因此,在实验内容上应提供分级习题,如提供必做、选做题或者基础、进阶题;在题目数量、题目难度方面体现差异,如以5 000行代码量的30%为基础题,即基础题总量约1 500行代码,进阶题约为3 500行代码。由此,学生在练习过程中就能由浅入深,根据自身的情况调整学习节奏。

3 评价方法设计

为使设定的代码量能被优质、高效地完成,需对所完成代码给出科学、合理的评价。课程的评价体系依课程教学目标而定,应是多元、科学、公正的,其设计以形成良好的学习导向为原则,使不同特点的学生都受到科学评价,意识到自己的特长被认可,同时找到努力的方向。其中,最重要的是加大实践环节的分数比重,提高学生对实践能力、操作能力的重视程度。如重庆理工大学的FP课程将全部预设的实践习题安排为课外练习,为保证代码被按时完成,安排多次阶段性上机测试,全部上机测试题目均从实践习题中抽取,直接或经修改后用于上机测试。上机测试题按比例抽取基础题和进阶题,以反映实践习题层次性的特点,保证课外练习的量及知识覆盖面。

另外,由于侧重考查问题分析能力和程序编写能力,采取课程理论考试与实践环节分数比例为6:4,并在闭卷理论考试中增加编程题比例,编程题、程序阅读题、其他题目比例为4:2:4,考察程序分析、编码能力的导向性十分明显。在各次上机测试中,选取基础题、进阶题的比例为4:6,仅完成基础题的学生,其上机测试评价就会比较低。对基本概念掌握准确、分析能力较好,但程序调试技能较弱的学生,多数可获得“中等”或“良好”的评价;对程序调试技能熟练,但不喜欢进行问题分析和设计的学生,多数可获“中等”评价;只有两者兼备的学生才能获得“优秀”的评价。

4 教学平台支撑

大规模的代码及评价方法的多元化,将大幅增加教师的工作量。为使教师从繁重的批改作业、统计分数的工作中摆脱出来,集中精力解决教学问题,提高教学研究的积极性,需借助易用的代码评阅和管理平台。重庆理工大学的FP课程就选用学校自主设计实现的程序设计在线测试平台来减轻相关教师的负担,任课教师通过在线平台就可以安排课外作业,进行上机测试;利用平台的自动评阅功能,可促使、帮助学生课外自主完成预设的习题,任课教师只需将注意力集中到教学平台的资源建设、维护上,这有利于教师对学生代码的完成量、学生的能力达成度进行深入、细致地观测和分析。

5 结 语

上述对程序设计类课程如何达成饱满的代码量的分析,是结合程序设计基础课程的教学实践提出的,是对帮助教学双方以科学、高效的方法度过程序入门关的有益尝试,旨在帮助学生跨越程序设计理论与实践之间的鸿沟。分析重庆理工大学近3年计算机专业程序设计基础课程的理论试卷,从各知识点的能力达成度看,学生的程序编写能力普遍较好。在辅以程序阅读专项练习之后,学生的程序阅读水平显著提升,这与注重教学的导向性是密切相关的。近年来,该校计算机专业有更多的学生经过程序设计类课程的学习后,进入机器人、大数据实验室及其他应用系统开发项目组,参与研究性或工程项目的开发实践,也从一定程度验证了程序设计基础课程的教学效果。

当然,一种教学目标的达成是多种因素共同作用的结果。文章中的方法只着眼于编码能力的达成,希望以此促使学生程序设计及计算思维能力的整体提升,后续还将在如何设计好的综合性实验案例方面,展开进一步的研究。

[1]高枚, 龚沛曾, 孙丽君. 构建多层次思维培养的C/C++程序设计教学[J]. 计算机教育, 2016(1): 81-83.

[2]张钢, 冉娟, 朱鹏飞, 等. 以“计算思维”为导向的程序设计入门类课程改革探索[J]. 计算机教育, 2016(8): 106-109, 114.

[3]文艾, 陈卫卫. 高效程序设计的七个习惯[J].计算机教育, 2017(4): 41-42, 46.

[4]苏小红, 赵玲玲, 邱景, 等. CS2013指导下的程序设计课程实践教学实施方案设计与翻转实验教学实践[J]. 中国大学教学,2016(5): 55-60, 69.

猜你喜欢
程序设计代码习题
医学专业“Python程序设计”课程教学改革总结与思考
基于Visual Studio Code的C语言程序设计实践教学探索
一道课本习题“链式反应”
从细节入手,谈PLC程序设计技巧
精心设计习题 构建高效课堂
创世代码
创世代码
创世代码
创世代码
对一道习题的多角度思考与拓展