课内外融合的计算机程序设计实践教学模式
2020-07-09郭卫斌罗勇军杨建国
郭卫斌,罗勇军,杨建国
(华东理工大学 计算机科学与工程系,上海 200237)
0 引 言
程序是计算机实现问题求解最基本的方式,程序设计是指设计、编制、调试程序的方法和过程,包括数据建模、算法分析与设计、代码编写、编译调试、制作文档等不同阶段,内容涉及相关基本概念、工具、技术、方法学等不同领域,是一项复杂的创造性的思维活动,其过程贯穿着阅读判断、逻辑思维、抽象表达、工具利用、综合创造等多项技能。程序设计能力,特别是问题的分析解决能力、语言和开发环境的综合应用能力,是各专业本科生最基本的能力,在其知识体系中占据重要的核心地位[1]。
对理工科高校各专业而言,开设程序设计类课程,不但可培养学生的程序设计能力,帮助学生建立计算思维和创新思维,而且对于算法设计与分析、系统分析、开发与应用等其他学科基本能力的培养,都将奠定良好的基础。
针对工科各专业实践教学中存在的问题,应构建科学的实践教学体系,将程序设计能力的培养从课堂延伸至课外,从实验室延伸至实验室之外,从课堂学习—课外训练—综合应用3 个维度,建立一个跨越时间、空间的立体化开放式的程序设计能力培养体系,实现知识传授与能力培养的课内外贯穿融合,形成程序设计能力培养的量化反馈和持续改进。
1 实践教学中存在的主要问题
前期,通过对国内本科生程序设计课程的实践教学情况进行调查研究,发现目前国内高校相关课程的教学中普遍存在如下问题[2-4]。
(1)缺乏对“设计”的正确认识。许多高校都在大学一年级就开设了高级语言程序设计课程(如C 语言程序设计),但大多数教师在教学中过分强调特定语言的语法细节介绍,而忽视了更重要的理论、算法等问题,导致出现学生简单地将“编程”看做翻译,“程序设计”变成了“一种高级语言的程序编写”的现象。
(2)缺乏运用知识解决实际问题的能力。教师不重视问题分析与求解过程的逻辑思维训练以及综合应用能力训练,重理论学习,轻实践训练,重课内集中讲授,轻课外自主学习,课内外教学相脱节。学生在学习时未能养成良好的习惯,往往盲目提笔“编程”,导致错误百出,久而久之感到“编程”非常困难,甚至无从下手。
(3)缺乏设计性、综合性实践项目和实践调试能力。实践教学体系设置不合理,实践环节多以验证性实验为主,不能充分调动学生参与程序设计的积极性。学生能够编写代码,但是缺少调试能力。
(4)缺乏科学的能力测评体系和持续改进机制。评价方式单一,不能客观、量化评价学生实际的程序设计能力。现有反馈渠道和反馈方式无法形成程序设计能力培养的持续改进机制。
因此,开展本科生计算机程序设计实践教学体系和教学方法改革与实践,具有较好的理论意义与应用价值。
2 课内外融合的计算机程序设计实践教学体系
计算机程序设计课内课外相融合的开放式实践教学体系(如图1 所示),是一种以课内实验和实践为主体,以双创训练和学科竞赛为辅助,多元并举,以练促学、以赛代练,“学—练—用”互动的程序设计实践能力培养体系。该体系基于问题求解方式,通过设计有趣的工程或科学问题,在问题求解过程中循序渐进培养学生掌握程序设计思想、方法及技术。
该培养体系将实践教学体系分为课内实践、课外实践及学科竞赛两大模块,每个模块的实践分为设计实验、课程设计和综合实践3 个层次,形成了以问题求解为驱动的多元化开放式的实践能力培养体系,全方位培养学生的程序设计能力[5-10]。其中,第1 层次的实践从认识熟悉实验环境开始,经过验证型实验,逐步增加设计型实验,使学生具备一定的实验能力和初步的程序设计能力;第2 层次的实践包括课程设计、兴趣小组活动、科技俱乐部活动等环节,开设综合型、创新型实践,培养学生专业知识的综合应用能力和创新意识;第3 层次包括毕业设计、毕业实习、计算机系统综合实践、科研实践、学科竞赛、创新创业训练活动等,培养学生的研究能力、工程创新能力。
2.1 将竞赛融入课内实验和课外训练
以学科竞赛为切入点,将课程教学与竞赛相结合,推动教学改革,积极鼓励学生参加程序设计类竞赛,形成学生自觉参加实践活动的机制:①从学科竞赛中抽取一些典型案例应用到理论教学中,或作为课内实验、课程设计或综合实践的题目,加深学生对相关概念及理论的理解;②课外实践采用自主训练或小组合作方式,学生通过在线程序自动评判系统完成编码和调试、提交和评判;③创建在线比赛或虚拟比赛,进行实时反馈并给出即时排名,形成学生自觉参加实践活动的机制,实现常态化的实践训练,培养学生在压力下的问题解决能力和团队意识与合作精神[3];④选拔优秀学生进入各类集训队,开展集中训练并参加程序设计竞赛;⑤开设ACM 国际大学生程序设计选修课程,教授学生常用算法的基本原理,并进行编程训练。
图1 课内外融合的大学生程序设计能力实践教学体系
2.2 依托双创平台培养跨界综合能力
以创新创业训练平台为依托,培养综合实践能力。以国家级、上海市级、校级和学院级创新创业平台为依托,根据学生兴趣爱好,采取个人和团队相结合的方式,通过综合性项目实战演练,结合问题分析、总体结构设计、用户界面设计、代码设计等一系列过程,循序渐进培养学生的理解问题能力、归纳程序能力、设计数据结构与算法能力、用程序设计语言实现算法描述能力、编译与调试能力以及测试程序能力。项目类型方面,注意验证型、设计型和综合型实践的合理比例。对综合性项目,强调与“企业”与“科研”的结合,注重培养和提高学生的独立工作、合作研究、协同开发大型软件能力以及跨界综合能力。
此外,还应建设完成创新创业案例库、习题库、在线答疑与训练等课外学习实践资源,提供课件、习题解答、在线训练、资料下载等功能,开发程序设计辅助教学APP,用以进行信息查询、发布通知通告、布置实践任务、代码自评等。
3 实践教学方法与考核机制
3.1 实践教学方法创新
以需求为导向、以问题求解为主线的实践教学方法改革如下。
(1)改革实践教学方法。通过分组讨论、头脑风暴、逆向思考等形式,有意识地引导学生学习和掌握程序思维方法,重视计算思维、工程思维、系统思维、创新思维、“互联网+”思维的理解和掌握,强化对计算机程序设计一般方法和技术的演练,突出创新能力与综合能力的训练[11]。
(2)以问题求解为驱动。教授学生进行问题分析、算法设计、代码编写并学会程序的运行与调试,且能分析程序的运行结果,实现问题的最终解决。
(3)开展全方位讨论。围绕实践内容,讲解一些知识点的关键原理,帮助学生理解难点问题,巩固基础知识;利用启发式提问以及重点分析的方式进行引导,引导学生深度思考,举一反三,鼓励学生进行发散性思考,培养学生的探索能力。
(4)实施跨学科协同合作学习。创建虚拟学习环境,将合作或协作学习策略整合到课程实践中,鼓励创建学习社区,重视不同学科教师和学生参与实践过程,激发学生与教师的积极讨论[12]。
3.2 注重能力的综合评价
(1)突出综合能力的考核。建立先进的综合能力考核与评价机制,改革考核方式与考试内容,减少客观题型,增加有利于能力提高的主观设计类题目的比例,重视对学生综合素质的评价,通过多元方式对学生的程序设计能力进行考核和评价。
(2)引入自动评判系统实时评价代码质量。积极鼓励学生参加程序设计类竞赛,建立专门的在线测试与程序自动评判系统,对学生的程序设计能力进行科学评价,并给予及时反馈[13]。
(3)基于量化评价和反馈机制的持续改进。建立课内学生评教、教师评学、课程达成度评价机制,以及课外评价兴趣小组、科技俱乐部、创新创业实践活动评价机制,实现课内、课外的评价融合,并将评价结果融入教学评价指标体系之中。其中,课程的达成度计算以支撑该课程的所有考核材料作为评价依据,对其达成毕业要求的情况进行评价,逐次计算出单项指标点、单个毕业要求和总体毕业要求的达成度评价结果。
4 教学效果
实践能力培养体系在华东理工大学各专业本科生教学中实施,每年修读学生超过3 000 人,使不同专业学生在各自层面上学习、理解和掌握了程序设计语言、程序设计与实现、程序测试、数据结构构造、算法设计与分析等方面的理论、方法和技术。应用结果表明,学生参与程序设计的积极性及能力得到了很大提高。每年有超过300 名学生参加程序设计类集训,学生在ACM国际大学生程序设计竞赛、中国大学生程序设计竞赛、蓝桥杯、上海市大学生计算机应用能力大赛等竞赛中成绩优异,年均获得国家级、省部级奖项100 余项。华东理工大学计算机程序设计教学团队近年来也先后获得上海市级教学成果一等奖2 项、二等奖3 项,完成或正在进行国家级、市级大学生创新创业训练计划项目21 项,出版了实践教材1 本。
该体系有利于培养学生发现问题、分析问题和解决问题的跨界综合能力,实现课内课外实践活动的良好衔接,使绝大部分学生能在本科阶段得到工程教育、创新能力与科学研究的良好训练。这种改革思路和方法对于其他学科专业学生实践能力的培养具有较好的借鉴意义和推广价值。