0 引 言
计算机专业是一个十分重视理论与实践结合的专业。在计算机专业人才培养过程中,实践类课程是不可或缺的培养环节。计算机专业实践类课程的目标是通过实践练习训练学生将理论与实践相结合,将其应用于实际问题的解决。因此,对计算机专业实践类课程开展合理的训练内容设计是教师教好课程的前提;同时,优秀的实践训练内容也是学生能够学好课程的重要基础。
1 课程内容设计原则
学习过程是一种认知的过程,遵循认知的客观规律。计算机专业实践类课程训练内容的设计也需要围绕认知规律,从学生“学的会、记得住、能理解、会应用”的角度出发,结合计算机专业的领域特点,有针对性地开展设计。
1)主线牵引,任务连贯。
对于任何一门课程来说,授课内容的完整性与连贯性都是课程设计须首要考虑的问题。好的教学内容一定是在具有严谨逻辑递进关系的同时,又能在整体上实现对某一知识体系的传授。对于计算机专业实践类课程来说,需要学习或训练的知识点通常较多,在训练内容设计上很难用一个任务将所有待学习的知识都涵盖进来。因此,将训练内容划分为多个任务通常是计算机专业实践类课程的常见设计模式。基于这种设计思路,就需要在课程内容的整体性、教学环节的连贯性上进行深入的思考和设计,在保证课程训练任务独立性的同时尽可能将多个训练环节连贯起来。
计算机专业的实践任务通常体现为对软硬件系统的设计、开发、测试等任务。这类任务从专业上可以被划分为多个独立的子任务,且子任务间存在逻辑关系。例如,对于某个软件开发任务来说,可以将其分为需求、设计、开发、测试等多个阶段,每个阶段的目标独立,多个阶段任务又是为实现最终软件服务的。因此,可以充分利用计算机专业实践任务的这一特性,在课程整体性与任务连贯性上开展设计。任务划分思路可以包括:①分阶段任务设计思路:将训练内容划分为多个阶段,每个阶段完成相对独立的任务,多个阶段配合完成一个整体任务;②分模块任务设计思路:将训练内容划分为多个模块,每个模块相对独立,模块和模块间相互调用,协同完成整体任务;③分任务协同/对抗设计思路:将训练内容划分为多个独立的子任务,子任务之间存在协同或对抗关系,任务的整体目标就是实现多个子任务的协同或对抗;④增量式任务设计思路:训练内容围绕一个主线任务展开,任务主体要求维持不变,外围功能或任务细节不断扩充,从而形成多个递增式独立子任务。
2)由易到难,循序渐进。
认知理论显示知识的学习是渐进的[1]。由易到难、由基础到综合的学习方式符合人类的认知规律。考虑到多任务模式是计算机专业实践类课程的常见内容设计模式,在进行该类课程的训练内容设计时可以充分利用这一特点,采用由易到难、循序渐进的方式开展设计,避免难度过高的任务将学生过早“劝退”。
在实际开展设计时,可以考虑以下几种难度梯度的设计方法。
(1)通过任务规模进行难度递进设计:对于由多个模块组成的软件开发任务,可以在前期安排较简单模块的开发任务,后期安排较复杂模块的开发任务。在实际训练内容设计过程中,任务的规模比较容易从模块数量、代码行数、逻辑复杂性等角度进行度量,因此该方法可以比较直接地实现对任务难度的划分和递进。
(2)利用知识本身难度递进特点开展设计:很多知识本身就具备难度递进特征。以数组为例,从数据维度角度来说,可以从最简单的一维数组递进到学习、理解和实操难度都更高的二维数组和高维数组。因此,可以充分利用知识本身的难度递进特性,在前期任务中训练难度较低的知识点,在后期的任务中训练难度更高的知识点,从而实现难度梯度的递进设计。
(3)利用软硬件的变更实现难度递进设计:现实中软硬件系统的变更和升级是一个常见的现象,随着软硬件的升级,系统实现难度通常会不断增加。因此,可以在前期任务中仅对任务作简单要求,然后在后续任务中不断对前期要求进行扩展、升级,从而使任务难度逐级递增,实现对训练内容的难度梯度设计。
3)样例学习、举一反三。
模仿是学习的重要形式之一。模仿学习是一种基于既有样例的迁移学习方法。学习样例能够使学生快速了解知识点的使用方法、应用技巧、易出错方式等内容,提高学生对知识的认知水平[2]。对于计算机专业实践类课程来说,需要学习或训练的知识点通常较多,采用样例模仿学习的方式可以大大提高学生的学习效率。
在开展样例设计时,可以考虑将样例融合在任务中,采用先具体后抽象的方式,对前期任务提出具体明确要求,任务完成的每一步均给出具体说明和要求,引导学生按照规范步骤完成任务;然后在后期任务中逐渐降低要求的具体性,采用较为宏观的要求对任务进行描述,增加任务的自主性,引导学生在前期任务的基础上主动思考、自由发挥,以前期样例为参考实现对知识的融会贯通。
从样例类型来看,可以从两方面考虑样例的设计。第一类是思想、思路类样例。计算机专业涉及很多的思想、思路类的知识,如程序设计思想、算法思路等。这类样例可以采用专业技术手段对思想、思路进行表示,并编制样例,如程序流程图、系统架构图、数据流图、思维导图、文档大纲等。第二类是细节类样例,如某一个具体的知识点应用方式、某一个具体函数的用法等。细节类样例通常需要通过具体的样例程序进行展示,或通过代码片段、伪代码、实操文案等方式给出。
此外,还可以通过正样例和负样例的方式开展样例设计。学生通过对错误样例的直观感知,学习和理解知识点的应用模式。某些情况下,一些典型的错误样例反而让学生的印象更深,更能加深学生对知识的理解。
4)反复迭代、强化训练。
在多个任务中对同一知识点的反复训练,可以不断强化学生对知识点的认知,使学生达到将知识内化并全面掌握的目的。
知识迭代方式有多种,可以结合知识特点和训练目标灵活使用:①连续式短程迭代:针对理解和掌握难度较低的知识点,在连续的两个或多个任务中反复训练同一知识点;②间歇式长程迭代:针对一些使用频率不高但又非常重要的知识点,在课程的多个任务中每隔若干任务,开展一次对知识点的练习;③贯穿式持续迭代:针对课程核心知识,在课程的多个任务中从始至终开展知识点的练习。
在强化方式上,可以采用不同的强化训练手段。例如,在编程训练中反复要求对同一知识点展开练习,或在交付文档中对同一知识点提出反复论述要求。
5)灵活变化、因材施教。
任何课程均会面临授课对象的学情问题。学生在知识基础、专业理解能力、前序课程掌握程度等方面会各不相同。因此,如何让课程训练兼顾不同特点的学生,避免基础好的学生“吃不饱”、基础差的学生“嚼不动”等问题,就成为训练内容设计时需要着重考虑的问题[3]。
解决这一问题的思路是将课程授课对象划分为不同的层次,为不同层级的学生制订差异化的课程学习目标。在任务层面上,可以考虑增加一些具有挑战性的选作任务供基础好、能力强的学生选做;也可以制订最低任务完成标准,划出课程的基础水平线,为基础差的同学指明课程最低要求。此外,还可以采用分组的形式,任务以小组形式完成并对小组成员进行明确的角色划分,为不同角色制订不同的工作内容并通过对角色工作内容的不同设计实现对任务层次的划分。
课程内容设计是一个系统性的工程,对授课教师来说掌握有效的设计原则可以使设计工作变的事半功倍,为后续教学奠定良好的基础。当然,对于不同的课程来说,其课程目标、待训练的知识点、授课对象的学情、课程约束等情况各不相同。因此,开展实际课程内容设计时需要从课程本身出发,充分分析课程特点,围绕如何实现知识的有效传递、如何培养学生对知识的运用能力等方面开展设计。
2 课程内容设计实例
程序设计基础训练课程面向计算机专业大一下学期本科生开设,是一门实践性质的专业基础必修课。作为C语言程序设计课程的后续课程,该课程以集中训练的形式,强化学生对C语言程序设计理论的理解和掌握,训练学生熟悉软件开发过程,同时培养学生的相关综合能力。表1列出了课程的训练内容涵盖范围,课程需要围绕这些训练内容设计相应实验环节。
首先,课程遵循“主线牵引、任务连贯”的设计原则,采用一个电梯仿真任务作为课程整体训练任务。该任务由3个程序组成,如图1所示。数据文件生成程序负责生成一个数据文件,用于模拟电梯用户在不同时刻从不同楼层对电梯发出的请求;电梯仿真程序负责加载用户请求,根据用户请求模拟电梯的响应运行过程并将结果输出到仿真结果文件;仿真控制程序负责自动化地调用数据文件生成程序生成一系列用户请求,然后调用电梯仿真程序完成仿真。
围绕这一核心任务,课程将训练环节划分为9个实验。
(1)实验1首先给出两个含有逻辑错误的程序样例,要求学生通过断点调试、内存监视和单步执行等技术手段对程序逻辑错误进行识别和改正。该实验不要求学生进行程序编写,对于学生来说上手较为容易。
(2)实验2要求学生完成一个简单的数据文件生成程序。实验2除了对数据文件格式、程序需处理的命令行参数逻辑等程序功能进行了简单要求外,没有提更多的实验要求。实验2程序整体规模较小,便于学生快速进入训练状态。实验2要求生成文件的格式与电梯请求数据文件格式一致,从而使代码在后续训练中具有可复用性。
(3)实验3在实验2的基础上给出了一个包含详细输入有效性判断逻辑的程序流程图,要求学生按流程图实现程序,强化学生对程序健壮性的理解。实验3引入了配置文件结构体变量,引导学生理解程序设计时的参数组织方式。此外,实验3还对程序工程化组织、模块划分和多源程序设计进行了明确的要求,对多模块程序开发技术开展了强化训练。
(4)实验4在实验3的基础上,要求程序能够从配置文件中读取参数并存入相应结构体变量,要求使用动态内存分配技术动态申请和使用结构体数组空间,同时实验3还重点练习了文件的二进制读写技术。
实验2—4围绕电梯仿真任务的数据文件生成程序展开训练,程序实现难度阶梯上升,训练的知识点和技术点不断增多,训练内容循序渐进,对C语言程序设计的基本知识和基础技术实现了反复练习,达到了复习巩固、理解强化的目的。
(5)实验5要求调用实验4程序生成数据文件,然后读取生成的数据文件并对文件内容进行展示,着重练习使用不同的数据容器进行数据存取操作。
(6)实验6在实验5的基础上增加了排序和函数指针训练内容,引导学生体会在模块化程序设计思想指导下,如何设计具备灵活性和可扩展性的程序,以适应程序功能的扩展。
(7)实验7以实验5、6为基础,要求学生调用实验4程序生成电梯请求数据文件,然后读取电梯请求并实现电梯仿真。实验7通过解决电梯仿真这样的复杂问题,引导学生理解和体会C语言程序设计知识在解决实际问题过程中的应用方式。
(8)实验8在实验7的基础上要求学生将原有的仿真步进时间间隔取消,电梯仿真数据直接按指定格式输出到仿真结果文件中,实现电梯仿真的自动化。
实验5—8围绕电梯仿真任务的电梯仿真程序展开训练,同时兼顾了对仿真控制程序的练习。实验5、6对链表、排序、qsort函数、函数指针、外部程序调用等新增知识点和技术点进行了训练,为这些知识点、技术点在后续实验7中的综合利用奠定了基础。实验7、8实现电梯仿真逻辑,程序规模大,涉及复杂的电梯响应、处理、运行逻辑,强调利用已学习的知识解决实际问题,实现了对学生的综合能力训练。
实验5—8的4个实验之间训练难度呈波浪分布。实验5要求在学习新知识的基础上完成训练内容,难度较之前训练环节有较大提高;实验7要求学生综合利用前序实验的知识实现复杂的电梯仿真逻辑,难度和工作量最大;实验6和实验8仅在各自前序实验的基础上作了较小的功能改动,新增训练技术点较少,难度较各自前序实验有所降低。由于实验5—8在难度和工作量上较上一环节均有较大的提高,故采用具有轻重缓急的波浪式难度设计,使学生在完成一个难度较大的实验后能够稍作调整,消化和吸收一下新的知识,达到巩固与强化的训练目的,但从总体趋势而言,任务难度仍是递增的。
(9)实验9要求学生按照电梯仿真任务的整体架构对实验2—8进行必要的改造和调整,使用调整后的程序开展电梯运行逻辑验证实验、电梯响应性能实验和大规模电梯仿真实验,通过仿真实验引导学生了解科研实验的基本思路和实验分析的方式方法。
实验9实现了电梯仿真任务的完整内容,是对整个课程训练环节的完整体现。学生完成实验9后可以回过头来反思整个实验过程,了解实验各个环节的设计思路,思考并尝试理解C语言程序设计中的各个知识点、技术点在解决实际问题过程中的应用方式和使用技巧。
表2列出了课程知识点、技术点与训练环节的覆盖关系,从中可以直观反映出进行训练内容设计时采用的“由易到难,循序渐进”和“反复迭代、强化训练”设计思路。
同时,针对“样例学习、举一反三”这一设计要求,课程在开展训练内容设计时也进行了有针对性的设计。例如,实验1给出了样例代码供学生阅读学习;实验3在要求学生于提交的作业中绘制流程图之前,先在实验材料中给出流程图的样例,并以参考资料的形式将流程图源文件提供给学生参考;实验5在要求学生编制程序设计文档前,以附件的形式给出了详细的文档模板及样例内容。此外,课程还编制了样例程序,供授课教师开展样例教学。这些样例使学生能够快速对相关知识建立理解,并在模仿的过程中不断深化对知识的掌握。
在开展课程教学时,考虑到不同学生对前序课程知识的掌握水平会有差别,因此课程在实验完成度要求上进行了灵活性设计,对不同知识、能力水平的学生提出不同的要求,将课程划分为3个训练单元:实验1—4、实验5—6和实验7—9。假设学生对前序课程知识的掌握程度呈正态分布,对于少部分基础薄弱的同学,要求其完成第一单元的训练,同时尽力开展第二单元的训练和学习,达到本课程对基础知识强化训练的基本目标。对于大部分基础扎实的同学,要求其完成前两个单元的训练,并努力开展第三单元的练习,确保实现对大部分同学综合程序设计能力的培养。对于个别学有余力的同学,第三单元的挑战性能够更好地激发学生的学习兴趣,快速提升其各方面综合能力。
课程的实验学时和分值划分见表3。通过这样的分值设计,在确保课程基础目标达成的基础上,使大部分认真完成训练内容的学生可以得到较为优良的成绩评定,同时鼓励学生向优秀发起挑战。课程完整实验内容材料可参见课程网站相关页面:http://insis.bjtu.edu.cn/course2_projects.html。
3 结 语
计算机专业实践类课程是计算机专业人才培养的重要环节,“主线牵引,任务连贯”“由易到难,循序渐进”“样例学习、举一反三”“反复迭代、强化训练”“灵活变化、因材施教”这5条课程内容设计原则,从本质上来说仍然是秉承马克思主义原理,遵循学习和认知的客观规律,从学生如何开展有效的学习、如何调动学生积极性角度出发,以人为本开展课程内容设计工作的思想。当然,在实际教育教学工作中,仍需要根据不同课程的课程特点、课程目标、课程约束、学生学情、课程开展的实际情况等因素,通过积累、梳理、反思、凝练,不断对课程内容进行迭代和优化,从而使课程适应不断变化的教学环境和不断发展的育人目标。相信无论是谁,只要专注于教学工作,认真思考、总结,反复迭代、持续改进,一定能够在课程内容设计和实际教学效果上取得良好的成绩。
参考文献:
[1] 叶霞, 罗蓉, 李海龙. 基于认知规律的数据库课程教学设计[J]. 计算机教育, 2017(1): 95-98.
[2] 曲婷婷. 样例学习研究的综述[J]. 吉林省教育学院学报, 2011, 27(3): 44-46
[3] 邓定胜. 以C语言程序设计为试点, 因材施教, 分层教学的探索[J]. 电脑知识与技术, 2020, 16(16): 185-186, 190.
第一作者简介:韩升,男,北京交通大学讲师,研究方向为强化学习与智能系统,shhan@bjtu.edu.cn。
引文格式:韩 升,田 媚,贾彩燕,等. 计算机专业实践类课程内容设计方法探索 [J].计算机教育,2023(1):105-110.
转自:“计算机教育”微信公众号
如有侵权,请联系本站删除!