软件工程硕士“算法与算法复杂性分析”的教学思考与实践
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件工程硕士“算法与算法复杂性分析”的教学思考与实践
本文针对软件工程硕士计算机专业基础差的实际状况,讨论打破专业限制,开展算法与算法复杂性课程教学的探索和实践体会。
关键词:算法;算法复杂性;软件工程硕士
我校2002年成立软件学院,制定软件工程硕士培养方案,将《算法与算法复杂性分析》纳入课程体系。下面的表1和表2是部分在读指挥类工程硕士的统计情况。他们全部从参加全国工程硕士资格考试(GCT)的考生中招收。由于对参加GCT考试考生的本科专业没有什么限制,并且GCT成绩的高低也很难反映考生的专业水平,因此,很难根据GCT成绩来衡量一个考生的专业基础。另外,参加GCT考试所录取的学员的工作年限大多在3~9年之间(表格4)。表格3很明显地反映了指挥类工程硕士考生专业十分分散的现象。这种分散给课程设置和开课造成了极大的困难。
算法是具有一定难度的课程,计算机专业学生都常常发怵。面对这样的教学对象,如何开展算法教学是一个新的课题。为此我们进行了一些探索实践。我们探索的基本出发点是:第一,不能假定学生必须具备什么前提才能开始算法学习。跨专业培养是形势发展的必然要求,况且,严格地说,硕士为期一年的课程,在体系上也不可能建立“纵深”,预设过强的前提条件只能使得课程不可能开设。第二,所有学生已经具备接受了一轮完整的高等教育的基础。这应该成为施教的前提。
我们的探索主要包括以下5个方面:
1明确教学目的
设置算法课程基于两点考虑:第一,算法本身是计算学科的核心内容,软件工程硕士的知识与能力体系中应该体现良好的算法养成。第二,对于从非计算机专业学生进入软件工程领域,并且未来将软件当作职业的人,应该补上算法的课。
基于这种认识,我们在内容选取上,还是以算法的设计与算法的分析作为教学的重点。注重教给学生算法设计和分析的一些技术、方法,同时教给学生一些常用的算法。对于一些理论性相对较强的内容,如NP完全理论等,着重于思想方法和结论的介绍。我们认为,这样处理内容,与工学硕士以及博士生的复杂性理论和算法高级专题等课程的内容区别开来,同时体现了软件工程硕士以“用”
算法为主的需要。
2充分注意学生计算机方面基础薄弱的现实
注意到学生计算机基础缺乏的实际,我们一开始总是强调,算法就是求解问题的步骤,算法这门课程研究的内容就是针对给定问题,设计求解的步骤,证明设计的正确性,分析执行这些步骤花费的时间,并设法简化之。执行算法的装置可以是计算机,要让计算机执行一个算法,必须用一种计算机可以理解的语言精确描述算法,这就是程序设计。执行算法的装置也可以是人,要让人执行一个算法,必须给执行动作的人将问题交代清楚。
一些项目管理中例子,不同的策略导致执行周期长短的不同,会经常被拿来比较,甚至一个最简单的问题经常提出:一到八层楼住着8个不同年级学生,现在需要各个年级学生按照楼层居住,问如何调整?在计算机里面这是排序问题,在现实中是典型的管理问题。
有了这些讲述以后,学生理解“算法是一个有穷规则的有序集合。这些规则确定了解决某一类问题的一个运算序列,对于该类问题的任何初始输入,它能机械地一步一步地计算,并在有限步后终止计算,产生输出”这样的定义就容易了,更重要的是,在开始学习的时候,将学生不熟悉的内容进行了抽象和剥离,学生驾驭知识的自信心一下得到增强。
3注入激情,将快乐引入教学
快乐教学就是有效激发教学热情的一种理念。在实践中,我们尝试着把老师的激情传递给学生。对于一些难于理解的知识,尽量采用通俗易懂的语言和直观的形式,通过形象生动的比喻和举例,把大的说小,把难的说易,从而消除学员的畏难情绪。比如:NP完全理论是学术界公认的大难题,我们实际讲授时坚持由易到难,由浅入深,循序渐进,先讲直观的整体思想,再讲严格的形式证明,不知不觉中把学员带到了顶峰。教学过程中我们还不时地提出一些悬而未决的挑战性问题让学员们思考,引起学员的注意,激发他们加倍努力。
激发学生激情的另一种努力是让学生在学习中有创造、有成就感。所以,我们有时在提出一个问题后,故意不讲解决方法,而让学员独立思考一段时间,这样学员在听讲时可以比较自己的想法与我们的解法,促使学员积极主动地思考;有时我们又故意留下漏洞,留出问题让学员自己去思考,进而得出结论,使学员
体验成功,以学习为乐事,从而使学员乐于学习,效果良好。
4改革方法,加强互动
首先,以问题为主线开展教学。授课前,我们坚持精心设计课堂提问,并使提问符合学员的实际且有一定的趣味性,通过双向提问,活跃气氛,引导学员思考;同时注意保护学员提问的积极性,启发学员即使面对陌生的领域也要敢于提问、善于提问,从而不断拓宽自己的知识面。特别要注意从学员“错误”的回答中找到闪光点,并予以肯定,从而使学员勇于回答问题,形成积极提问题、踊跃答问题的良好课堂氛围。第二,把内容讲精、讲深、讲透。授课时注意安排教学内容的先后顺序,把握各知识点的来龙去脉与内在的逻辑体系,按系统的观点,使学员看到整体、看到主线、看到联系。对重点反复讲,对难点深入浅出地讲。并注意归纳总结,抓住关键,讲出精华,入木三分。第三,综合运用多种教学手段。充分发挥各种教学手段的长处,使教学手段既赏心悦目,又符合教学过程,提高单位时间的信息量。
互动的结果是学生积极的思考。总是有学生不断提出新观点、新算法,我鼓励他们写成文章。有些影响甚至远远超出我的预期。例如,从算法单个动作的时间耗费累积构成算法时间复杂性得到启示,有学生研究掏枪、卧倒、射击——一个典型的单兵组合动作,发现使动作可以更加快速完成的组合优化方案。
5加强实践
为了加强学生对于算法的理解,我们在教学中注意加强实践环节。工程硕士的实践动手能力一开始的时候,大部分很差,很多人的程序设计几乎是空白。我们的做法是,首先,提出明确的目标和要求。既要求学员有扎实的基础、创新的理念,又必须通过工程实践进行锻炼。其次,给条件创环境。为此,我给学生建立上机实践的必须的环境。第三,对实习题进行分类,按照难易程度建立渐进阶梯。第四,精心作好指导,特别是开始的时候,精心指导。第五,鼓励学生挑战极限,互相之间比试技艺。
以上是我们在教学一门课程中的一些尝试。课程是整个培养方案的基石,真正上好一门课,使学生各有收获,是一件不容易的事情,需要不断的探索和实践。