《程序设计与问题求解》实验教学方法探讨
2015-12-14缪裕青刘少兵俸皓朱细平杨兵刘洪波
缪裕青+刘少兵+俸皓+朱细平+杨兵+刘洪波
摘要:《程序设计与问题求解》课程强调以实际问题驱动,学生通过大量实验来解决实际问题,从而提高编程能力。在实验方式上,提出以分组完成综合性习题方式训练学生团队协作和实践动手能力;在实验验收上,尝试引入斯坦福大学的Moss系统来甄别实验抄袭,引导学生独立完成实验。通过实际教学效果验证了对该门课程实验教学改革是值得借鉴和推广的。
关键词:C语言;程序设计;实验教学改革;Moss系统
中图分类号:G642.41 文献标志码:A 文章编号:1674-9324(2015)20-0158-02
一、背景
《程序设计与问题求解》(以下简称《求解》)是2007年我校对IEEE/CS和ACM任务组给出CC2005报告和CS2001核心课程进行研究之后为计算机科学与技术等相关专业新开的一门专业基础必修课程,这门课程的前身是《C语言程序设计》[1]。
《求解》课程教学采取实际问题驱动方式,通过大量实例讲授程序设计的基本概念、基本方法,把重点放在解题思路上。即通过针对实际问题进行分析,构建数学模型,设计算法,最后通过C语言编程实现这一过程来训练学生程序设计的能力。
经过6年多的教学实践,取得良好的效果,但发现存在以下问题。
1.学生对理论知识的理解和掌握不够,具体体现在作业完成情况较差,考试成绩不理想(卷面考试成绩不及格率大于15%,勉强及格学生比例高达20%)。
2.不能按要求完成实验内容。过半数的学生不能按时独立完成实验,收获较小。
3.实验抄袭现象严重,导致后续课程学习上的困难。
鉴于上述问题,如果再不对《求解》教学尤其是实验教学进行改革,那么培养出来的学生势必是缺乏竞争力的。任课教师已经发现了这门课程在教学学时、教学内容安排、理论与实验教学的比例分配以及采用什么语言工具进行教学等方面存在的问题,正在探索更加有效合理的方案。
那么,是什么导致了上述问题呢?这是项目组这次研究的主要课题,通过对上面问题的研究,找出问题的症结,探讨方案,讨论和更新教学大纲和实验大纲,更新实验指导书,提出新的教学方式和方法。通过课题组的集体讨论和教学实践,形成一个高效合理的教学方案,具有很紧迫的现实意义。因此改革势在必行。
目前,国内的多所高校已经早于我校开展了《求解》这门课程,但总体上说,对这门课程的教学还都处在实践和探索的阶段,因此,进行《求解》这门课程的教学改革研究,具有更广泛的实际意义。关于《求解》理论教学的方法探讨请参考笔者的第一篇参考文献。本文主要讨论实验教学。
二、实验教学内容改革
当前,计算机软件方面的实验课程大多都已经按照规范文本罗列出了实验目标、实验内容、实验报告等组成元素。采用了教师辅导、学生主导一人一机独立完成实验相结合的方式进行授课,已经得到大家的共识和学生的认可。
但本课题组认为,对待《求解》这门特别强调学生的动手能力的课程,要有更高的要求:那就是学生通过本课程的学习,应该具备有解决综合问题的编程能力。而限于实验学时有限,学生很难在规定的2个小时完成实验内容,从而不能客观地评价学生。这样导致很多实验内容显得知识点单一,考核内容单一,不能充分调动学生的学习积极性,学生最后的动手能力不能得到充分的挖掘和开发。
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:①计算每个学生的总分和平均分;②按总分成绩由高到低排出成绩的名次;③打印出名次表,表格内包括学生编号、各科分数、总分和平均分;④任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
应该说上面的实验题基本满足了对数组知识的学习和实践编程要求。不足之处也是显见的:一方面是考核的知识点单一,主要是数组;二是考核的题目太模型化,学生的建模能力不能得到很好的锻炼;三是不适合小组形式合作完成,学生如果不能完成,但为了拿学分,必然导致抄袭过关;四是题目太少,全班学生做相同的题目,一人做出,全班做出的局面很常见。
为了较好地解决上述不足,课题组提出从函数这一章之后,每次实验的内容至少包含1道综合实验题,一个综合题包括3~4个模块,由一个小组(建议每个小组3~4人)来共同完成。
还是拿数组这一章的实验举例,比如可以引入“验证哥德巴赫猜想”作为一道综合实验题。哥德巴赫猜想的概要流程图可参考文献[2]。
这里可以用数组PrimeList[]来存放生成的素数。用函数CreatPrimeList(int PrimeList[])来生成素数表;用NextPrimeNumber(int p,int PrimeList[])来生成下一个素数;用main()函数来完成主流程编程并对上面两个模块进行调用[2],从而完成实验内容。
这样把一个大的问题分成若干小的模块,该题可以由3个同学协作完成,一人完成一个模块,由于绝对工作量的减少,学生能够在2个小时的实验时间完成;又是团队合作,学生的自信心会明显增强,而在完成任务的过程中的相对工作量和知识点没有减少,不影响知识的学习和应用。
这样的实验内容安排有以下优点:(1)让学生更好地体会“自顶向下,逐步取精”的结构化程序设计方法。(2)题目综合性强,模块化结构明显,适合分工协作。可以讨论共同完成,克服单兵作战的恐惧心理。(3)考核的知识点全面,内容涉及数组、函数、循环、算法等几乎前面所学的所有知识点。(4)综合习题的完成带来更大成就感,从而增强学生的学习兴趣,形成良性循环。(5)培养了大学生之间的协作能力,有效地降低了学生大面积抄袭行为。
具体方法如下:一是合理利用网络资源。C语言已经是除英语、高数、政治理论等课程之外开设最广的一门课程,开设历史悠久,因而相应的资源很容易从网上获得。每一章实验找到3道左右供学生选做的综合题是完全可以实现的;二是实验题目要多,采用学生学号2位尾数(比如除4)求余数的方式做对应的实验题来规避大面积抄袭的风险。比如一次实验的基本题出4道题,那么学号尾数是01、05、09的强制做第一题,学号尾数是10、02、06的强制做第二题,以此类推。
三、实验验收方法:尝试引入斯坦福大学的Moss系统,甄别抄袭现象
1.Moss系统简介。斯坦福大学的Moss(Measure Of Software Similarity)[3]系统是一个简单易用的编程语言雷同检测系统。它主要用于计算C、C++、Java、Pascal、Ada、ML、Lisp等一些形式化语言所编写的程序之间的相似性。哈工大计算机学院已经成功地运用Moss在一些程序设计类课程中检测学生程序之间的雷同[4]。该系统目前只用于教学系统,是一个免费的系统,因此不会增加成本。
2.电子作业抄袭比书面作业抄袭更可怕。当前,作业雷同现象很普遍:“抄袭”会让所有教学手段失去效能。程序拷贝抄袭他人作业比书面抄袭带来的危害更大,通过拷贝方式在抄袭者脑海里所留下的知识点印象更弱,而且拷贝的获取更容易,很容易培养出“惯犯”,从而导致教育的失败。[5]因此,严打雷同作业必须作为实验验收时非常重要的手段来督促学生认真独立地完成实验内容。
引入了Moss系统后,可以采用如下的制度来严打抄袭作业现象[6]:雷同双方当次作业记0分;两次雷同以往作业成绩全部清零;三次以上雷同,所有作业成绩全部清零。所谓“严师出高徒”,通过严打雷同作业,往往会有意想不到的收获。激发潜能:“我”居然能把作业做出来了!为了作业不雷同,“我”想到了一种特别的方法等。维持诚信:这是当今社会正在缺失的特质。
当然,简单的实验作业可能由于巧合存在很多误判雷同的情况,这点需要任课老师区别对待。
四、结论
到完成这篇论文之前,课题组成员已经尝试用上述教学方法进行了实验指导书的部分更新并按照新的实验指导书来指导学生实验。但对于实验作业的雷同部分,限于时间原因,由于要比对雷同作业要将每一批次的作业上传到斯坦福大学网站进行比对而暂时还没有进行。这是本课题组后面要大力积极推进的重点内容。目前已经完成了1个学年的《求解》实验教学任务,表1给出了采用上述教学方法后的实验考试成绩分布,还有通过后续课程教师的反馈来看,基本上比较客观地反映出了这样的教学方法还是值得大家借鉴的。当然,每门课程都有各自的特点,因材施教,因课施教,是不断摸索和积累的过程。
参考文献:
[1]刘少兵,等.《程序设计与问题求解》理论教学方法研讨[J].科学时代,2010,(22):106-107.
[2]罗建军,等.C++程序设计教程[M].第二版.北京:高等教育出版社,2007:187-190.
[3]http://theory.stanford.edu/~aiken/moss/
[4]http://cms.hit.edu.cn/course/view.php?id=44
[5]http://cms.hit.edu.cn/mod/forum/search.php?id=44&search=Moss
[6]http://sunner.cn/lectures/