APP下载

计算机本科人才程序设计能力培养研究

2014-08-08邓沌华

关键词:数据结构C语言程序设计

邓沌华,石 黎

(湖北经济学院法商学院,湖北 武汉 430205)

计算机本科人才程序设计能力培养研究

邓沌华,石 黎

(湖北经济学院法商学院,湖北 武汉 430205)

针对程序设计类课程教学现状及存在的问题,结合多年教学经验,从相关课程的教学目标及定位,核心课程的教学思路、方法,实践教学体系的构建,学科竞赛的组织等方面就如何培养计算机本科人才的程序设计能力作出探讨。

计算机本科人才;程序设计;实践教学;学科竞赛

程序(Program)是为用计算机解决特定问题而编制的计算机指令的有序集合。程序设计(Programming)是以某种程序设计语言为工具,给出该语言描述下的程序的过程,是一项目标明确的智力活动。在软件研究领域,由于程序是软件的主体,程序的质量直接体现了软件的质量,程序设计工作非常重要性。

程序设计的过程通常分为数据建模,算法分析与设计,代码编写,编译调试以及制作文档等不同阶段,内容涉及到相关基本概念、工具、方法以及方法学等不同领域,对于从事者来说,是一项复杂的创造性的思维活动,其过程贯穿着阅读判断、逻辑思维、抽象表达、工具利用、综合创造等多项技能的应用。

程序设计能力是计算机学科最基本的能力,在计算机学科知识体系中占据着重要的核心地位。对计算机本科人才而言,程序设计能力不仅是专业技能的反映,更是自身综合素质的集中体现。计算机学科软件教育的基础必须以程序设计为中心。

如何有效提高计算机本科人才的程序设计能力,一直是工作在相关课程教学一线的教师们思考与探索的课题。本文遵循“理论教学不放松,实践教学要加强”的宗旨,针对程序设计类课程教学活动现状及存在的问题,从课程的开设、安排,核心课程的教学方法,程序设计类竞赛活动的组织参与等方面做出探讨。

一、程序设计类课程教学现状及存在的问题

计算机专业学生的程序设计能力从根本上反映了学生专业基础知识是否扎实,实践动手能力是否过硬,并直接影响到学生专业兴趣的培养及后续课程的学习效果。[1]高校在计算机专业本科生培养方案中一般会开设7到8门程序设计类相关课程,其重要性也得到了普遍的认可,但是教学效果往往不太理想,存在的问题有:

(一)学生缺乏学习的动力和积极性,容易被困难吓倒

程序设计类课程理论性、专业性和实践性较强,对学生数学和英语的要求较高。初学习时,学生存在着从现实客观世界到逻辑思维空间的转换适应过程,往往觉得无所适从,产生畏难心理,失去学习的兴趣,间接影响了专业思想的形成与培养。

(二)高级语言类课程教学方法有待改进

教学过程仍旧以教师的单向传输为主,过于重视理论教学,追求语法细节,以通过考试为目标,作业主要是对相关语句的反复验证和练习,从而忽略了程序设计思想和实践动手能力的培养。学生常感觉在解决实际问题时,脑海里有众多语句,却无从下手。

(三)实践性教学力度不够

单元实验多以验证性实验为主,经常是对教材上已有的代码实例编辑、调试,几乎沦为打字练习课;设计型综合型实验项目较少,强调力度不够,考核不严,未能充分调动学生学习的主动性;课程设计与设计型综合型实验难度界限划分不明,层次模糊,未能达到预期效果。[2][4]

二、调整培养方案,保证程序设计类课程的持续性和递进性

我院经过对本科生培养方案的多次修订,最终确定在大学前4个学期开设5门程序设计类课程及两门相关课程设计,有效的保证了学生程序设计能力培养的持续性,以及教学内容、难度、范围的递进性。具体开设课程有:

(一)C语言程序设计

主要讲解C语言的基本语法,介绍结构化程序设计和模块化程序设计方法,顺序、选择和循环三种基本结构、函数、指针、数组、结构和文件等。通过本课程的学习,使学生掌握C语言的语法和程序设计的基本方法,以及程序开发的基本技术,培养学生的实际动手能力。

(二)程序设计基础

主要讲解计算机逻辑判断表述、递归技术、分治法、链表设计、蒙特卡罗算法初步、贪心算法、高精确度计算、字符处理, 动态规划的思想原理和应用解决问题的基本步骤、回溯技术及应用、图形处理的基本技术,帮助学生形成理论、抽象、设计的理念,为后续课程的学习和解决相关问题打下良好的基础。

(三)数据结构

主要讲解各种常用的数据结构类型,包括线性表、栈、队列、串、数组、广义表、树形结构和网状结构;讨论各种类型的数据结构的定义、特点、在计算机存储器中的表示、建立在该结构上的相关算法(C语言描述)及算法分析评价、数据结构的应用实现,培养学生逻辑思维能力,掌握程序设计的基本技巧和方法。

(四)C++语言程序设计

主要讲解C++语言的基本语法,介绍面向对象程序设计的基本概念和基本方法。课程内容主要包括C++在非面向对象方面对C语言的扩充和改进,抽象、封装、继承、多态等内容。通过本课程的学习,培养学生运用面向对象思想分析问题的基本能力,增强学生的实践动手能力。

(五)算法设计与分析

主要以算法设计策略为知识单元,系统地介绍计算机算法的设计方法与分析技巧,以期为学生提供广泛而坚实的计算机算法基础知识。

(六)程序设计课程设计

(七)数据结构课程设计

课程开设的具体情况如表1所示。

三、重视核心课程的教学实践,狠抓教学质量

在程序设计类相关课程中,数据结构的地位可谓举足轻重。该课程不仅为用计算机语言进行程序设计提供了方法性的指导,还在一个更高的层次上总结了程序设计的常见方法和常用技巧,是程序设计人员的必修课程。该课程的学习直接关乎学生程序设计能力的培养,必须高度重视。笔者在多年从事该课程的教学活动中发现:学生普遍感觉该课程理论抽象,难以理解,更难以应用于实践;课程内容繁多,难以把握要点等等。基于此,我院数据结构课程教学小组的老师们在教学活动中一直致力于教学内容、教学方法、教学手段的探索与改革,收获颇丰。

表1:程序设计类课程开设情况

(一)做好与C语言程序设计课的衔接工作,平滑过渡,避免断层

数据结构得开课时间较早,一般在第2或第3个学期。学生对计算机认识不深,专业视野与专业素养不深,逻辑思维能力有限,对C语言中的指针、结构体、函数等掌握不足。然而数据结构的任何一个算法的描述都离不开C语言中的这些知识点,实践表明C函数的设计和传值调用、指针成为数据结构学习和实践的瓶颈。因此必须将以上所论及内容做系统回顾,可集中讲授,也可在章节学习中穿插进行,尽量做到知识的循序渐进,避免学生产生畏难情绪,从一开始就失去学习的兴趣。[3]

(二)将团队情境教学融入日常教学,攻克学习难点

目前我院数据结构课使用的教材是清华大学严蔚敏教授主编的《数据结构(C语言版)》,该书概念表述清楚,逻辑推理严密,体系完整,结构严谨,一直被奉为经典以及考研必备教材,但是书中的伪代码过于强调结构而忽略细节,对编码能力弱的学生有一定难度。很多学生只是泛泛阅读伪码,而不去亲自动手实现之,往往使学习流于表面。为此,我们在日常教学中尝试了团队情境教学,效果良好。具体做法:

1.将学生5至6人一组,随机分组,指定组长一人;

2.每组任选一个章节,用C语言实现该章节中描述的抽象数据类型,并完整解决一个课内问题。例如关于栈的部分,要求学生完整实现教材上描述的栈结构,并基于该描述实现迷宫问题;

3.组长指定一人制作PPT,用于验收时在全班面前宣讲本组成果及设计思想;

4.组长指定一人验收时宣讲及接受同学和老师的提问;

5.组长指定一人撰写设计报告;

6.组长撰写对本组成员工作态度、工作内容、工作成果的客观评估报告;

7.各组成果全班共享。

在团队工作过程中,成员之间增强了团队协作、沟通、交流能力,同时彼此激励与监督,各负其责,使得那些不愿动手编写代码的同学也必须努力为之,这样于无形中带动了一批程序设计能力较弱的学生,在收获成果时的成就感也极大的激发了他们的学习兴趣。经过此一过程,严版教材中的伪码被学生亲手改写实现,加深了对教材的深入理解,也锻炼了实践动手能力。

(三)构建数据结构多层次渐进式实践教学体系

实践教学作为课堂理论教学延伸和补充,能帮助学生巩固和深化理论知识,为课堂教学提供支持,同时也是培养学生的程序设计能力,实践与创新能力的有效手段。为此,我们提出构建以验证性实验,设计型综合型实验以及课程设计为主体的多层次渐进式实践教学体系,全方位服务于学生的程序设计能力的培养。

在理论教学配套的单元验证性实验中,主要完成对特定数据结构的各种基本运算上机编程实现,或采用指定测试数据验证算法的正确性。为节省学生输入、编辑代码时间,同时不影响对基本算法的学习,可由教师在实验指导书中给出完整的源代码,但是采用程序填空、程序改错、问题思考等形式促使学生去读、理解、调试源代码,直至能正确运行。这样做还为学生留下了一个相对规范的代码范本,供学生在完成下一步的设计型综合型式实验时选择性的模仿、借鉴。[5][6]

设计型实验要求学生能利用学过的一个或几个知识点解决一个相对实际的问题,是验证性实验的直接升级。实验一般在一种类型数据结构(线性结构、树形结构和图状结构)的理论学习结束后进行,实验题目针对性明显,问题中所涉及数据的逻辑结构比较明显,实验重点就在于考察学生能否选择合适的存储结构,设计正确的算法,并对算法的时间效率和空间效率做出评价。

课程设计环节要求学生综合应用整门课程的知识点、原理、技术甚至精髓去解决更接近于实际的问题,范畴更广,难度更甚,一般安排在数据结构开课学期的下一个学期集中进行。课程设计选题规模大而复杂,初步体现工程化、过程化,代码量多在500行以上,甚至超过1000行。课程设计环节主要对学生进行软件设计的综合训练,要求学生能够提炼出问题中涉及的数据,分析数据间的关系,选择合适的逻辑结构,确定存储结构,设计正确的算法,对算法做出时空性能评价。通过分析、设计、编码、调试等各环节的训练,培养学生软件设计的全局视野,实践操作能力,良好的程序设计技能,同时掌握软件工作规范,树立严谨的工作作风。

要明确各实验环节的教学目标,相互之间的区别与联系,从实验指导书的编写、实验课时安排、实验题目的选择与要求等方面从严把关,落到实处。[2]

四、通过各种程序设计类竞赛锻炼优秀的程序设计人才

我院近年来不断改革教学方法、改进教学手段、修订培养方案,以加强学生专业能力,尤其是核心能力——程序设计能力。通过组织学生参加各种程序设计类竞赛以锻炼、培养优秀的程序设计人才是我们采用的重要举措之一。除了一年一度的湖北经济学院程序设计竞赛,我们还先后参加了全国信息技术应用水平大赛、“正保教育杯”全国ITAT教育工程就业技能大赛、“国信蓝点杯”全国软件专业人才设计与开发大赛、ACM-ICPC国际大学生程序设计竞赛等。我们多次获得优秀竞赛组织单位奖,百余人次在各赛事中获奖。

2014年5月31日,我院学生在“第五届蓝桥杯全国软件和信息技术专业人才大赛”全国总决赛中夺得1个全国二等奖、6个全国三等奖和2个全国优秀奖,创历史新高。在2014年5月26日落幕的"第四届全国大学生计算机应用能力与信息素养大赛"全国总决赛中,我校学子获一等奖1人,获三等奖7人。这些成绩的取得极大的鼓舞了全院学生的学习热情,在全院上下形成了一股程序设计的热潮。

为了搞好这些学科竞赛活动,我院成立了相应的领导小组,软件工程系也在相关课程的教学过程进行了改革,更加注重学生专业能力的培养,并组织了有关教师对参赛学生进行暑期集训。这些学生毕业后,受到用人单位的一致好评,在企业里担任重要工作,突显了我们的办学特色,为国家的经济建设作出了应有的贡献。

五、结语

计算机本科人才必须具备扎实过硬的程序设计能力,我们程序设计类课程教学的最终目的和趋势就是培养软件工具应用者的程序设计能力和程序设计思维。在以往的教学中,教师往往陷入一个误区:过于注重语句、语法等程序设计语言所涉及基本概念的讲解,忽视在构建程序过程中应用于分析、解决问题的一种逻辑思维的训练,忽视对整体知识综合应用能力的训练。综上所述,在计算机本科人才程序设计能力培养的过程中应注重把握两个方面的平衡:

(一)专业技能培养目标要清晰

教学不仅要注重单项知识的讲解练习,更要加大对应用整体知识的能力训练及解决问题的思维训练。

(二)专业技能教学要与职业关键能力培养有机结合

在教学组织形式上,汲纳软件企业的工作模式应用于教学;在教学设计上,应把持知识的整体与局部关系,灵活应用各种教学方法和手段来优化课堂教学。学生在学习、实践的双环节中,完善自身知识结构,构建自主工作行为。

(注:本文系湖北省教育科学“十二五”规划课题《计算机本科人才程序设计与创新能力培养研究》,项目编号:2012B458)

[1]涂立,贾丽媛.本科生程序设计能力培养的探索与研究[J].科技资讯,2014,(7):192-193.

[2]邓沌华,李源.数据结构多层次渐进式实践教学体系构建[J].计算机教育,2012(24):72-73.

[3]邓沌华.数据结构课程教学活动的几点探索[J].华中师范大学学报(自然科学版教学与研究卷),2007,(3):10-13.

[4]韩建民,王丽侠.大学生程序设计能力的层次化培养模式[J].计算机教育,2012,(2):15-16.

[5]张晓孪,王西锋.计算机专业大学生程序设计能力培养模式的探索[J].信息技术,2011,(10):43-46.

[6]赵越,章小莉.数据结构实践教学模式的设计与探索[J].计算机教育,2009,(13):194-196.

猜你喜欢

数据结构C语言程序设计
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
PLC梯形图程序设计技巧及应用
论子函数在C语言数据格式输出中的应用
TRIZ理论在“数据结构”多媒体教学中的应用
《数据结构》教学方法创新探讨