基于知识与能力导引的程序设计课程作业在线评测系统
2020-06-08赵冯平张翠莲黄镭
赵冯平 张翠莲 黄镭
[摘 要]实践环节是程序设计课程的重要组成部分,文章通过分析、比较相关的程序在线评测网站,结合教学实践,建立了程序设计课程作业在线评测系统网站,系统给学生提供编程练习题,在线提交程序,在线即时评测。系统在习题中融入程序设计知识、编程技巧介绍,有些题目的设计,更是把程序设计的思维及行动过程融入其中,培养学生的抽象思维能力、理解逐步求精设计思想。
[关键词]程序设计课程;实践环节;作业在线评测
[中图分类号]G642;TP311 [文献标识码]A [文章编号]1008-7656(2020)02-0019-05
一、问题的提出及解决思路
程序设计课程的实践环节非常重要,如果把纸面作业、传统的纸面试卷考试作为重点,是很难真正学会编程的。学生上机的机时不足或其他原因造成的实践环节欠缺,程序的设计与程序编辑输入、程序的调试分离等原因,学生学习程序设计感到比较困难;传统教材上的程序例子往往难以表现程序设计、调试的过程,给出的是设计的结果及设计说明;学生和教师在日常生活和传统学科学习中形成的惯性思维,教师往往会侧重于对课本中程序的每一步进行讲解,而学生努力学习规则、理解书中程序例子,最后可能会发现,即使课本内容全明白了,实际的编程问题还是难以下手。
最早的在线评测系统主要应用在高端的编程算法竞赛中,随着互联网的发展、普及,大量的在线程序设计评测系统也应用到了算法设计、数据结构和程序设计的教学领域[1],使学习更富趣味性和挑战性。为此,我们顺应潮流,利用现代的工具方法,借助北京大学的openjudge.cn平台[2],实现一个评测系统,要求系统实现以下目标:与现有的系统相比更加讲求基础性、入门性,更适合基础薄弱的学生学习;系统在题目中融入基础知识、重点难点知识介绍,并以清晰明了的方式去呈现;题目中给出编程方法导引,引导学生把逐步求精设计方法落到实处,引导学生形成正确的思维方式;学习上升进步曲线坡度缓、每一步向上的阶梯小,理论与实践紧密结合。
我们设计的在线作业系统,最终目的是方便学生学习编程,激发学习兴趣,掌握正确的思维和行动方法,以正确的思维去理解和构建复杂的程序系统。
二、研究方法和过程
结构化程序设计(structured programming)是E.W.Dijikstra在1965年提出的,其中包含了采用自顶向下、逐步求精的程序设计方法。逐步求精是程序设计最基本的思想方法和技术,其思想是逐步逐级地把大问题分解成小问题,直至最终能用程序语言表示问题的解决过程。落实逐步求精——把逐步求精思想落实到编程的每一步行动上(包括程序的输入编辑过程),是系统设计要完成的任务。
设计编写程序就是一个逐步填空的过程,首先明确地描述问题,写出C++程序的基本格式框架,并描述问题框架,然后依照分步、分类思想逐步逐级地对大问题分解,并结合C++语言的语法写出进一步细化的格式框架和问题框架,以此作为下一步求精的基础,求精过程不断进行(保证在整个求精过程中程序都能正确编译,程序的测试排错也同时进行),直至最后用C++语言描述整个问题的解决过程。设计是一种在思路上“从总到细”的过程,是从抽象到具体的过程。要学会设计程序,还要学习C/C++语言大量具体的细节知识。学习、理解知识,是从具体到抽象的思维过程。
程序设计课程作业在线评测系统,是基于以上认识设计并实施的。我们介绍的编程语言知识有:顺序程序设计,如何形成逐步求精的程序设计习惯;理解条件分支,并在设计中落实逐步求精思想;理解循环,如何在循环设计中落实逐步求精技术。基本算法有排序、数的进位制及其转换、暴力搜索、打印二维图形、素数检测等。对如何呈现知识和介绍算法,是我们应该反复斟酌、精心打磨的工作。
(一)以强化逐步求精技术为目标的程序设计题目
设计编写程序是一个逐步扩展程序、逐步填空的过程,在此过程中,保证每个阶段程序均能被正确编译。按图1中从左到右的顺序依次输入(保存)、编译,并逐步扩展程序,得到C++程序基本框架。
在编程入门介绍顺序程序设计阶段,本在线评测系统中设计的很多习题都强调按以上方法设计编写程序。
在条件分支程序和循环设计问题中,多次反复强调条件语句框架、循环语句框架书写规则,并在许多题目中按逐步求精思想展现设计过程,算法的设计与程序框架结合,保证在整个逐步求精设计过程中程序都能正确编译,但只是完成部分编程解题过程,由学生按照同样的思路完成整个题目的解答。以这样的导引方式来强化设计程序的思想方法、操作过程,使学生在潜移默化中掌握正确的设计和操作方法。
(二)提升从具体到抽象的思维的能力(即归纳事物本质的能力)的编程问题
设计是一种在思路上“从总到细”的过程,是从抽象到具体的过程、是逐步求精的过程,但是,除了有正确的思想方法,要实现设计,还要学习了解编程语言知识细节,以及掌握许多处理问题的算法框架。聪明的数学家们不会羞于考虑小问题,因为当极端情形(即便它们是平凡的情形)弄得明明白白时,一般的形式就容易理解了[4]。解决小的、具体问题的程序代码实现了,解决一般化的、抽象的问题的代码就容易归纳出来了。学习理解算法框架,我们遵循从具体到抽象的认知过程,设计一些题目使学生能学习体会归纳过程,从而更好地掌握一些算法框架,真正培养创新能力。例如,后面介绍的1310题(见21页图3),就是通过给出顺序执行的具体语句,要求写出抽象的循环语句,以此来训练归纳、抽象能力。类似的问题反复在本在线评测系统的各类题目中出现。
(三)逐步求精程序设计思想的訓练
我们所说的抽象思维究竟是什么呢?让我们回到其基本定义:抽象思维是指“脱离了具体事务的逻辑表达”。这也就是计算机科学家和软件工程师们在建立算法时所试图去做的[3]。运十客机副总设计师程不时说:“设计是一种在思路上‘总到细的过程”。是从抽象到具体的过程,通过大量从具体到抽象的编程问题,使学生掌握了处理问题细节的能力,在此基础上,我们又通过一些问题强调“从总到细”的设计过程,强化逐步求精设计思想,最终目的是使“逐步求精”思想落实的程序设计的思维和行动的每一个步骤。类似图2的题目都是为了强调“逐步求精”过程,在这些题目中,有的给出求精过程的一个步骤,有的给出求精过程的两、三个步骤,让学生真切体念设计过程及操作实施过程,并模仿进行进一步设计,直至完成题目的任务。
(四)嵌入基础知识、编程方法、算法知识介绍,算法设计与程序设计密切配合
平常在教学中总结良好的教学方法、认知方法,巧妙地融入题目中。有相关的题目介绍条件和循环命令等基础知识和重点难点知识;有相关题目总结归纳出通用的算法框架,题目侧重于展现从具体到抽象的思维方法。例如,以下页图3的二进制与十进制转换介绍,就包含了推导过程、朴素证明、手工计算操作方式和程序代码实现,并在此基础上,再辅以上升阶梯小,设计精妙的习题,学生可以逐步掌握。
(五)题目的设计强调入门性、循序渐进性
为了适应基础较差的成年人和小学生学习程序设计技术,我们精心设计题目,如对常用传统的基础入门习题,根据对学生的指导经验以及学生的常见问题,把它拆解成几个更加具体的题目,使学生完成浅显的问题后能自然地解决原来的问题。关于题目的循序渐进性,在许多地方我们都想办法做到更好,使学生按顺序做一套题的过程中毫无困难,并在最后完全掌握相应的知识点。
三、研究结果及分析
以方便、促进学生学习和对基础点、难点、重点知识的介绍为出发点,以突出编程思维和过程的教育为根本,我们建立了《程序设计课程作业在线评测系统》网站(http://gxdd.openjudge.cn/),并在使用测试实践环节中,对系统做了一定的改进和完善工作。系统实现了以下目标。
(一)在线作业、在线提交、实时评测
每个学生都可以在系统上建立自己的账号,按题目要求提交程序,编程过程中,学生要考虑题目的每一个细节和特殊的边界条件,而不是程序大体正确就行,对于培养严谨、周密的程序设计作风极为有效[2]。
(二)引导并强制学生把逐步求精设计方法落实到编程实践的每一步思维和行动上
通过一些习题,有的给出逐步求精设计过程的1个步骤,有的给出2个或3个步骤,由学生去完成余下的设计,这样学生会在潜移默化中掌握逐步求精设计方法。
(三)基础的程序语言知识导引以及算法知识的导引
精心设计的知识表现框架(如上页图4)、图例,使学生能更容易、更快地掌握程序语言知识;从具体到抽象的设计导引,使学生更自然地掌握算法的设计和实现过程;落实逐步求精,从总到细、从抽象到具体的设计导引,目的就是把学生引向正确的设计道路。
(四)提升思维水平,反复通过从具体到抽象、抽象到具体的训练,使学习者达到更高的抽象思维水平
实践表明,该系统确实方便学生学习,提升了学习效率,学生在课后做练习可以少参考课本。作业系统通过系列题目介绍算法,老师对于学生针对某些题目的问题,只需指出应该参考的简单题目就可以了,特别在培养正确的思维和编程习惯上,确实给了学生很大的帮助。
四、总结
实践证明,我们建立的在线评测系统,方便了学生的学习,激发了学生的学习欲望,使学生通过学习能够掌握正确的思维和行动方法,以正确的思维去理解和构建复杂的程序系统。由于使用系统的学生人数样本不多,造成了对系统的测试、评估和改进工作还存在不足,需要后续研究加以改进。
[参考文献]
[1]李文新,郭炜.北京大学程序在线评测系统及其应用[J].吉林大学学报(信息科学版),2005(S2).
[2]李文新,郭炜,余华山.程序设计导引及在线实践[M].北京:清華大学出版社,2007.
[3]Russell L. Shackelford.计算与算法导论[M].章小莉,孙厚琴,汪永好等,译.北京:电子工业出版社,2003.
[4]Ronald L.Graham,Oren Patashnik, Donald E.Knuth.具体数学[M].张明尧,张凡,译.北京:人民邮电出版社,2013.
[责任编辑 何一辉]