APP下载

基于能力培养的程序设计基础教学改革和实践

2014-04-29马虹陈玉芳

计算机时代 2014年3期
关键词:能力培养

马虹 陈玉芳

摘 要: 在程序设计基础课程的教学中,采用传统的教学模式和方法已经不能满足软件产业快速发展对高素质软件人才培养的需求。为此,以能力培养为教学目标,对程序设计基础这门课程的教学内容、教学过程、教学模式和方法、考核方式等进行了改革和实践。实践表明,学生的程序设计能力及综合素质均得到了提高。

关键词: 程序设计基础; 高素质软件人才; 能力培养; 程序设计能力

中图分类号:TP312 文献标志码:A 文章编号:1006-8228(2014)03-54-03

0 引言

印度、爱尔兰在软件产业的发展上都取得了巨大成功。究其原因,除了与政府的全方位支持,精准的市场定位,合理的业务选择等因素息息相关以外,更重要的是依赖于源源不断进入软件行业的高素质软件人才。高校培养是这些国家软件人才培养的主要途径之一。其软件教育的共同特点是课程根据软件企业的需求进行设置,重视通过课程使学生接触新技术、新理念,把实际应用培训和综合能力的培养摆在第一位,从而使学生毕业后能快速进入工作角色[1]。中国软件产业近年来也快速崛起,这为软件相关课程的教学带来了无限生机,更带来了巨大挑战。怎样紧跟软件产业快速发展的步伐,怎样在教学过程中提升学生的综合素质和能力,特别是工程应用能力,使他们成为符合我国软件产业发展需要的人才,是每一个软件课程教师都需要面对的问题。

1 程序设计基础教学现状

程序设计基础是软件工程专业的第一门专业基础课。开设这门课程的主要目的是帮助学生初步建立计算思维,掌握程序设计的一般方法,具备基本的程序设计能力;同时加强学生的专业修养,培养学生发现问题、分析问题、解决问题的能力,为后续课程的学习打下坚实基础。然而在该课程的传统教学中存在一些问题。

一是在课程改革、课时压缩的大背景下,学时非常紧张。

二是该课程的理论教学长期以教师讲授为主,学生处于被动听课的学习状态;在理论教学中侧重语法知识、概念地讲解,对算法设计、程序实现过程的讲解不够。因此,学生难以体会程序设计中的挑战和乐趣,缺乏主观能动性,课堂教学效率较低。

三是实训环节侧重解决书后题目,而这些题目大多是书本例题的类题演练,学生往往是依葫芦画瓢,综合能力难以得到真正提高。因此课程结束后,很多学生仍然陷入了“学了程序设计,遇到实际问题却不会灵活运用所学知识进行程序设计,甚至不知道应该如何下手”的怪圈。

四是忽视培养学生良好的编程习惯,为后续学习、工作留下隐患。

五是考核方式单一。目前的考试主要以笔试为主,侧重考核学生对重要知识点的记忆,很难对学生实际编程能力作出客观、全面的评价。

这些问题导致了所培养的学生与我国软件产业实际人才需求产生脱节。要适应软件产业飞速发展对软件人才培养的要求,就必须着力解决上述问题,对现有的教学进行改革。

2 具体改革措施

2.1 转变教学理念

在整个教学过程中,始终以“适应软件产业的发展需要,培养学生综合能力”为教学目标,紧紧抓住“程序设计”这条主线,以学生为主体,以教师为主导,开展教学活动。即,教学内容的选择、教学过程的设计和实施、教学模式和方法的改革、学生考核方式的调整等每一环节都紧紧围绕“能力培养”这一核心。

2.2 精心设计教学

程序设计基础教学包括理论教学和实践教学,二者特点不同,因此,在教学设计上应采取不同的策略。

2.2.1 理论教学改革

我校是以C语言作为程序设计基础的教学语言。C语言的概念多,语法规则复杂。过分强调语法规则和细节,容易让学生感到枯燥无味,失去兴趣;更重要的是,由于课时紧张,教师没有足够的时间剖析编程思路和算法设计,这就容易误导学生舍本逐末,难以掌握程序设计的精髓。因此,必须对教学内容进行合理的裁剪和编排,对理论知识,采用抓“大”放“小”和“精讲多练”的原则,例如:对于格式化输入、输出等知识点,学生完全可以在自学基础上,通过案例、练习逐步掌握。教师只需要在课堂上花很少的时间进行总结、点拨。而循环、函数、指针等内容既是课程的重点又是难点,因此对这些部分教学内容就要进行精心的设计。

对于重点、难点内容的讲解,为激发学生的学习兴趣,可选取恰当的案例,以任务为驱动,讲授程序设计的基本概念和方法。具体做法是,首先提出一个问题或任务,然后和学生一起利用已有知识对问题进行分析。如:明确已知条件;需要解决什么问题;如何将大任务合理地分解为若干小任务;这些小任务之间有什么关联;哪些小任务是运用已有知识和技巧可以解决的;哪些解决不了;整个问题的难点在哪里,应该如何应对,可以采用什么数学模型去处理这个问题,怎样设计C语言程序求解这个数学问题等等。通过这样的方式引导学生一步步地整理出算法并编程实现。在整个过程中,要多设问题,要努力让学生主动思考,使学生成为学习主体,减少教师的单向灌输,仅作必要讲授。讲授时,重点应放在思路、算法分析和程序设计、实现上。只讲解一些最主要的语句,对于细枝末节的语法点少讲,甚至不讲,让学生在阅读或编写程序的过程中逐步去理解和体会。

进一步,在教学过程中培养学生的思维能力和动手能力,鼓励学生探索、研究和创新。例如,对于同一个任务,给出不同设计方案,最好是鼓励学生提出不同的解决思路,再引导学生自己分析对比,找出最佳方案。在教学设计时,还可以在案例中设置一些伏笔,和学生一起对问题进行深入的挖掘和探讨。培养学生发现问题的能力。

另外,在教学的每一个环节,教师要多考虑学生的实际情况,多思考怎样才能有利于调动学生的积极性。特别是对于教学重点、难点,在进行案例的选取,项目(问题)的设计时要由易到难,在教学过程中循序渐进,通过多方位的讲解和训练,找到学生不易掌握的症结,举一反三,反复练习,使学生融会贯通,真正掌握,提升解决问题的能力。

2.2.2 实践教学改革

为了提高学生的实战能力,按照“学中做,做中学”工程教育的理念,精心设计了简单项目模仿、简单实用项目设计、复杂项目进阶设计、课程大作业四种实践形式。采用循序渐进、螺旋上升的实训模式,对重点技能反复训练、强化,逐步培养和提高学生的综合能力。

简单项目模仿。在开课初期,通过对简单案例的模仿,让学生熟悉程序设计、实现、调试的流程。学生通过这个过程可以获得成就感,消除对程序设计的恐惧心理,产生学习兴趣,为后续学习打下坚实的基础。

简单实用项目设计。针对相关教学要求,设计一些源于学习生活的,趣味性强的实用项目,例如:计算器、掷骰子等让学生进行程序设计,通过此类项目训练,可以提高学生抽象思维能力和实际编程能力。

复杂项目进阶设计。指导学生从一个功能非常简单的程序开始,逐渐根据所学新知识进行功能完善,最后形成一个设计较为合理、功能较完善、代码较长的程序。例如学生信息管理系统。这种从小到大、循序渐进的螺旋式程序设计方式可以降低程序设计难度,把握各章节知识之间的前后联系,非常自然地调动学生的参与积极性,树立学生的自信心。从而使学生的程序设计、实现和调试能力逐步提高。

课程大作业。在本课程的设计阶段,将学生分组,每组4~5人,选择一个课程大作业,课程大作业具有一定的难度,必须通过团队合作完成。这种形式不但能提高学生的程序设计能力,还可以锻炼学生自学能力、沟通交流能力和团队合作能力。

在编程的过程中,要求学生养成良好的编程习惯,例如:要求学生对程序构思必须进行详细说明;对变量必须加注释;学会如何调试程序;尽量使程序优化;还要求对程序的运行结果做正确与否的判断和分析。学生在编写大量程序之后,就会由“量”的积累产生“质”的飞跃。

2.3 综合采用多种教学模式

在教学发展进程中,产生了多种教学模式。课堂教学模式是指课堂教学的组织模式[2]。虽然当今的教学模式都是坚持学为导向[3],但是每种教学模式都有它的优势,也存在一些不足,不同的模式适用于不同的教学内容。为了取得更好的教学效果,在程序设计基础课程的教学中我们综合采用了多种教学模式。

基于案例的教学。对于一些比较抽象的内容,可以从学生比较熟悉的案例入手,引入教学内容,驱动教学。采用“任务分析-设计论证-程序实现-代码测试-总结推广”的教学思路,将枯燥知识点的讲解融于案例分析,使抽象知识形象化。

讨论式教学和探究式教学。对于一些深层次,比较深奥难理解,或者是案例中应用性较强,有多种解决方案的内容,可以采用分组讨论和探究相结合的教学方法。学生在积极参与讨论的过程中,就能主动思考,取长补短,集思广益,进行创造性的学习;教师也能根据讨论的情况,发现学生在学习中存在的问题,因势利导,适时做出点评,还可以根据学生讨论的情况,提出一些更深层次的问题,从而把学生的学习引向课外,继续对知识进行更深层次的探索和思考。通过这种训练,让学生学会质疑、学会批判、学会探索,培养主动获取、创造新知识的能力。

启发式教学。对于一些重点、难点,可以从浅显的道理、例子入手,通过多提问,逐步启发的方式,引导学生积极思考,将问题讲清、讲透,使学生能触类旁通,达到教学目的。

分组教学。对于课程大作业,采用分组教学的方式,每小组4~5人,各小组根据选择的题目,进行分析和研究,查阅、自学相关的文献资料,确定解决方案,进行分工,合作完成,最后分组答辩、评分。整个过程以学生独立完成为主,教师只提供必要的辅导。通过这种“做中学”,“学中做”的教学方式,进行实际软件开发模拟演练,进一步激发学生学习兴趣,培养他们分析、解决实际问题的能力,探索创新能力、交流沟通能力和团队合作能力。

“学生教学”的教学方式。教学中还尝试了“学生教学”,即提前将教学任务布置给学生,学生为了把相关内容讲述清楚,必须认真学习书本内、外知识,直到对这部分内容掌握得非常透彻。实践表明,通过这种教学方式能收到良好的教学效果,学生自主学习能力、归纳总结的能力、表达能力得到很大提升。

2.4 采用新的考核方式

配合教学内容、过程、模式的改革,我们建立了一个多元化、完善的考核评价体系,该体系注重对学生学习过程的考核,同时考核重点放在对知识的应用而不是简单记忆。整个考核体系包括三部分。

平时成绩。占30%,主要用来对学生学习过程进行评价。包括出勤率、作业上交情况、平时考试等。增加平时考试可以将学习和教学效果及时反馈给学生和老师,便于教与学的快速调整。

实训成绩。占30%,对于前三种实训方式,按学生的课堂表现及实训作业的完成情况和质量综合打分。对于大作业,则根据学生参与积极性、团队合作能力、沟通交流能力,在项目开发过程中所起作用等,通过答辩、学生自评与互评、老师评价等给出综合成绩。实训总成绩为这两项的加权平均。

期末上机考试成绩。占40%,期末采用机考,内容分三部分:选择题,通过简单程序的阅读,考察学生对基础知识的掌握;程序阅读题,用以考察学生阅读较复杂程序的能力;程序设计题,考察学生程序设计的能力。期末考试不仅仅是考核学生对基本理论、基本知识和基本技能的掌握,更侧重考核学生对知识的融会贯通和灵活运用能力。

对于参加学校承认的竞赛和科研项目,并获得一定成果的学生,奖励额外不超过10分的创新分数(课程综合成绩以100分封顶)。

实践证明,这种评价方式更加注重对学生的学习过程、综合素质和能力的评价,评价结果更公正、合理。

2.5 鼓励学生通过网络等多种渠道自主学习

课堂教学并非教学的终点。大学生已经具备了自主学习的能力。尤其是计算机,完全可以通过自学从实践中获得真知。因此,我们在教学过程中不断给学生推荐国内外优秀的自测练习平台、精品课程网站、ACM网站;另外,也逐步建设资源丰富的课程教学网站,为学生提供教学课件、重难点剖析、参考书籍、自测练习等网络教学资源帮助学生拓展学习空间,满足基础不同的学生个性化学习的需求。

2.6 鼓励学生参加竞赛,利用学科竞赛,促进教学

积极鼓励、指导学生参加ACM程序设计、软件设计大赛、服务外包大赛,使学生通过参加这些高水平比赛与优秀学生同台竞技,开阔自己的眼界,增长见识。教师在指导学生参加比赛的过程中,也会发现教学中存在的一些问题,便于改进教学。

3 结束语

本课程以“适应软件产业的发展需要,培养学生综合能力”为目标,对课程的理论和实践教学内容,以及教学过程进行了重新设计,对教学模式和方法、考核方法进行了改革,对学生的课外学习途径进行了拓展。实践表明,通过改革,这门课程的教学取得了良好的效果,具体表现在①绝大多数学生进行程序设计、实现、调试的能力以及沟通交流、团队合作都得到了显著提高。②学生对程序设计产生了浓厚兴趣,有多名学生入选校ACM集训队,有一名学生获得2012年度和2013年度ACM国际大学生程序设计竞赛亚洲区成都站的铜牌,有五名学生获得校服务外包大赛二等奖。③学生普遍反映,由于该门课程打下的坚实基础,后续课程的学习更轻松。

以“能力培养”为教学目标符合工程人才培养要求,这一思路可为C++、Java等相关程序设计类的课程教学提供有益的参考。

参考文献:

[1] 王哲,武亚兰.印度河爱尔兰服务外包发展模式比较研究及其对中国

的启示[J].时代经贸,2008.8(6):76-77

[2] 郭玉莲.课堂教学模式改革探论[J].教育理论与实践,2012.10(32):

57-60

[3] 王文静.中国教学模式改革的实践探索——“学为导向”综合型课堂

教学模式[J].北京师范大学学报,2012.1:18-24

猜你喜欢

能力培养
先写后教:语文作文教学途径探微
论语文教学中的朗读艺术
培养学生自主探究能力的策略研究
培养学生社会适应能力的策略研究
培养职校生创新思维能力的研究
数学教学中“量感”的教学探究
基于就业视角的中职烹饪专业教学研究
体育教学中学生合作学习能力的培养研究
数学归纳法在高中数学教学中的应用研究
信息技术教学中学生自主探究能力的培养探析