首页 > 范文大全 > 正文

面向软件工程专业的《算法设计与分析》课程教学思考

开篇:润墨网以专业的文秘视角,为您筛选了一篇面向软件工程专业的《算法设计与分析》课程教学思考范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:算法设计与分析是计算机相关专业一门重要的专业基础课程。在分析传统教学方法特点的基础上,针对软件工程专业培养目标和学生特点,探讨了如何针对软件工程专业学生开展算法设计与分析课程,以培养学生的算法设计能力为目标,并充分运用任务驱动教学和案例教学。实践表明该方法能有效激发学生自主学习潜能。

关键词:算法课程;教学方法;课堂教学;教学改革;软件工程专业

中图分类号:G642 文献标志码:A 文章编号:1002-2589(2013)18-0302-02

算法设计与分析是软件工程、计算机科学及相关专业的一门重要的专业基础课程和关键性核心课程[1],其主要培养目标是使学生掌握软件设计中常用的算法设计分析方法,培养学生分析问题和解决问题的能力,为学生从事软件系统开发及相关领域的研究工作奠定坚实的基础。但是,由于算法涉及了社会应用中各个领域,其知识覆盖面广、难度大,数学公式和理论推导复杂,并且传统教学方法过于强调算法复杂性的分析与证明,而软件工程专业学生的理论分析和数学基础较弱,导致该专业学生学习积极性不高,缺乏主动性,教学效果不理想,这与软件工程专业的能力目标定位相违背。针对这些问题,我们从分析软件工程专业学生的特点出发,以培养学生算法设计能力为目标,有针对性地减少算法理论分析的公式推导过程和数学证明分析过程,并将任务驱动教学和案例教学应用于课程教学中,有力地提高了软件工程学生的学习积极性和主动性,有效激发了学生的自主学习热情,取得了较好的教学效果。

一、软件工程专业学生特点与传统教学方法分析

目前,国家每年对高级软件人才的需求总量至少在几十万人以上,而每年的毕业生远远超过这个数字,但依然形成了高级软件人才紧缺的现状[2]。我们认为,导致形成这种现象的关键原因在于高校的软件工程专业的专业定位与教学内容和方法之间存在着某些偏差。当前,只有部分高校设置了独立的软件学院,独立培养软件工程专业学生,而大多数高校的软件工程专业是在计算机科学与技术专业的基础上发展起来的[3]。因此,大多数高校的软件工程专业的教学方法和教学内容仍沿用计算机科学与技术专业的教学方法和内容,从而导致当前高校所培养出的软件工程专业学生的知识结构偏向计算机理论基础、实际动手编程和系统设计能力、创新能力较差等弱点。其次,算法设计与分析课程是一门理论性与实践性相结合的课程,而当前软件工程专业的算法课程教学往往过于强调算法的时间复杂度分析,教学内容中涉及了较多的公式推导和数学证明,这不符合软件工程专业学生的特点。软件工程专业学生的数学基础和数学分析应用能力较差,在课程学习中尤其对公式推导等数学理论不感兴趣,直接导致软件工程专业学生的学习算法课程的积极性和主动性较差。另外,教师在算法教学中选取了太多的案例,使得教学重点不突出,加重了学生负担。目前经典算法的典型例子丰富,大部分教材均提供了大量生动的算法案例和课后习题。但是,如果教师在课堂教学中讲解较多案例,反而使得教学内容分散,并且容易导致学生吸收和理解困难,形成“造成教师讲的越多,学生感觉越难”的现象,进一步打击了学生的学习兴趣。

二、激发学生学习的主动性和积极性

兴趣是最好的老师,是培养学生主动性学习的根本,也是教学成功的保障。在教学实践中我们主要从以下三个方面提高软件工程专业学生的学习主动性和积极性。

(一)避免公式推导和数学证明

鱼和熊掌不可兼得。针对软件工程专业学生的数学基础差,对公式推导和数学证明等理解困难,兴趣较低的特点,我们在课堂教学中通常不进行公式推导,而是通过形象直观地解释并直接给出时间复杂度公式的方式,有时采用图形、图表等直观方式给出结果。虽然这种教学方式降低了对学生数学推理能力的培养,但是它不会使学生对繁琐的数学公式推导过程望而生畏。另外,避免公式推导和数学证明节省了教师大量教学时间,所节省的时间主要用于问题的分析和相应算法来龙去脉的讲解,这往往是软件工程专业学生更为感兴趣的内容,对软件工程专业学生来讲可谓扬长避短。

(二)阶段性和针对性教学

首先,针对当前算法案例丰富,算法教材的例题、习题较多的特点,为了把一个算法策略讲解透彻,我们有针对性地选取部分典型案例和典型问题,而不是采用“满堂灌”方式讲解教材的所有例题。例如,在讲解“动态规划”算法策略过程中,教材中提供了“数塔问题”、“资源分配问题”、“n个矩阵连乘问题”和“最长公共子序列问题”等多个案例[4]。我们从中选取了“数塔问题”和“n个矩阵连乘问题”这两个典型案例,首先利用“数塔问题”介绍和引入动态规划算法策略,然后利用“n个矩阵连乘问题”进一步讲解利用动态规划算法策略解决问题的思路;此外,为了便于学生课下学习另外两个案例,在课堂教学中我们会简略地讲解这些问题的求解思路,详细地理解和解决仍然需要学生课下学习。

其次,针对软件工程专业定位更偏重培养学生动手能力的特点,我们在课堂教学中通过多种方式培养学生的问题解决能力、实际动手能力和科研能力。

1.以阶段性教学方式训练和培养学生实际问题的分析解决能力。算法是程序设计的灵魂。在讲解实际问题时,我们会着重突出问题的分析过程和算法的设计步骤,使学生能够理解、掌握、运用和设计相应算法解决实际问题。通常情况下,我们讲解一种新算法策略的步骤如下:首先,选取一个典型问题,深入分析该问题,并把该问题的所有已知条件、数据、约束条件和求解目标等分析清楚,然后以数学公式或图表等方式把上述数据或条件抽象描述表达,并让学生充分思考讨论,“如何采用以前学过的哪种方法可以求解该问题?相应的算法复杂度如何?”接着,提示学生一种新的算法策略,并讲解该策略解决问题的步骤;最后,大家分析该算法的复杂度,并与之前的算法进行对比和总结。

阶段性教学方式突出了由简单到复杂的讲解过程。在讲解一个特定算法的过程中,为了突出算法的特点和算法的中心思想,我们会主动忽略算法的一些细节,如数据存储和优化问题。比如在讲解“数塔问题”时,由于解决该问题的动态规划算法的重点在于如何根据数塔下层节点的数据计算本层节点的数据,依次类推,直到第一层时得出原问题的解,因此,我们将原问题简化和抽象,将原数塔问题中求解最长路径问题转换为求最长路径的长度的问题,从而更能抓住动态规划算法策略的本质,使得动态规划算法策略的求解步骤更清晰,更便于学生理解。在得到最长路径长度后,我们重新将如何根据路径最大值求解相应路径的问题抛给学生,由学生思考和讨论。采用这种分阶段抽象解决问题的思路,有助于抓住问题和算法本质,使得教学重点突出,不会导致“跑题”现象,从而吸引学生兴趣。

2.补充最新科研成果,充实教学内容,激发学生学习和研究兴趣。由于我们采用精选案例的教学方法,节省了较多的教学时间。为了进一步激发学生学习和科研兴趣,我们从目前现有问题出发,有针对性地补充算法研究中最新成果,扩充教材内容,激发学生学习兴趣。我们在教学过程中补充讲解了概率算法、人工智能算法(如遗传算法、蚁群算法和粒子群算法)和并行算法等新型算法,使学生了解最新科研进展和算法研究发展方向。

3.鼓励学生参与实际科研项目。科研项目既可以训练学生的科研能力,又极好地锻炼学生的实际动手能力,是算法课程学习的有力补充和延伸[5]。我校针对本科生的科研项目种类多,主要有大学生创新性实验项目、勤助研实验项目、创新创业项目和教师自己的科研项目;科研项目资助范围广,主要资助大二和大三的本科生。我校软件工程专业学生大二第一学期学习《数据结构》和《算法设计与分析》课程,因此从大二第二学期就具备了从事一般科研项目研究的基础。为此,我们在教学过程中采取多种方式鼓励学生积极提早准备科研项目,首先专门抽出时间讲解一般科研项目书的申请以及科研论文的撰写,然后通过实际问题讲解如何在专业数据库(如中国期刊网)中搜索相关论文,并组织科研项目心得交流会,邀请已申请项目的高年级学生交流做科研的心得体会,激发学生科研兴趣。

(三)考核方式多样化

传统教学往往以纸质答卷来评判学生成绩,难以考核学生的问题分析能力、算法设计能力和团队合作能力等实践性相关的能力。因此,针对我校目前算法设计与分析课程为软件工程专业的专业限定选修课的特点,我们设计了灵活多样的考核方式,即:课堂表现成绩+实验成绩+大作业成绩+考试成绩。“课堂表现成绩”主要来源于课堂提问和平时点名。为了减缓学生的抵触情绪,我们提前声明允许每位同学3次请假机会,不计入平时成绩。每一堂课开始时,我们都会以提问形式回顾上一节课内容,按照问题难易程度及学生的回答情况产生平时成绩,其所占比重为20%。“实验成绩”来源于两次课后算法实验,根据学生实验报告产生分数,所占比重为20%。“大作业”是我们精心设计的算法相关,学生组队完成,2-4人一组,需进行算法讲解、演示(主要是培养学生的沟通交流能力),并提交软件及相关设计文档,所占比重为60%。“考试”即传统的纸质答卷问答方式,所占比重在60%。“大作业”和“考试”学生可二选一,如果“大作业”成绩合格,可以不参加“考试”。由于“考试”存在理论试题,而软件工程专业学生更愿意接受实践性的考查和挑战,因此绝大部分选择“大作业”方式。此外,针对特别优秀的学生,鼓励他们参加ACM、挑战杯、华为数据编程大赛等编程类比赛,其成绩可相应补充课堂表现成绩和实验成绩。

三、结论

针对当前软件工程专业学生的特点和传统算法设计与分析课程教学方法,我们从提高软件工程专业学生的算法设计能力出发,在课堂教学中避免数学公式推导,并从分析问题解决问题能力的角度,讲解精选案例,补充最新算法研究成果,鼓励学生参与科研项目。最后,通过多样化的考核方式激发学生不断动手实践,并培养团队合作能力,为后续课程学习、研究深造和工作实践打下良好基础。

参考文献:

[1]胡峰,王国胤.“算法分析与设计”教学模式探索[J].当代教育理论与实践,2011,(12).

[2]郭东恩,张哲.软件工程专业学生创新能力培养[J].计算机教育,2012,(14).

[3]张志刚.财经类院校软件工程专业存在的问题及发展对策[J].教育理论与实践,2009,(8).

[4]吕国英,任瑞征,钱宇华.算法设计与分析(第二版)[M].北京:清华大学出版社,2009.

[5]彭雷,戴光明,王茂才.3R科研式教学法在算法基础课程教学中的应用与实践[J].中国教育信息化,2012,(1).