程序设计课程创新教学模式探索

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序设计课程创新教学模式探索
摘要:以C/C++语言为例,针对程序设计课程的实际情况,提出了创新性的教学模式,鼓励学生积极参与教学环节,增加其学习热情和编程机会,达到提高实际编程能力、改善教学效果的目的。

关键词:程序设计;互动;教学模式
国内计算机相关专业本科教学中,程序设计课程占有相当比重,其中C/C++语言因其具有编程灵活、可移植性好、能直接读写硬件等优良特性,往往被作为本科生的第一门程序设计课程来讲授。

C/C++语言功能强大、应用广泛,但其结构复杂,语法检查机制相对偏弱,对基本没有编程基础的低年级学生来说掌握起来相对较难。

因此,如何指导学生真正掌握这门语言,进而为以后的程序设计课程打下良好的基础,是任课教师的一个重要课题。

在实践中,我们把教学过程分解为四个环节,通过对课程目标合理的设计、对学生学习热情充分的激发、对实践环节有针对性的安排以及对成绩评价体系的革新,达到了教师授课有激情、学生学习有热情的良性循环,在实践中取得了良好的教学效果,本课程的经验对于其他程序设计课程也具有现实意义。

一、合理的目标设定环节
目标设定环节的主角是授课教师,本环节主要包括以下几个内容:教学目标设定、教材选定、授课内容选择、多媒体课件制作以及作业题目、上机实习题目设计等,是课程开讲前的准备工作,准备工作要充分细致,以确保优质教学的顺利完成。

通过对目前C/C++教学现状的调研分析,发现本课程讲授过程中存在一些问题,比如学生认为本课程难度很大,理论与实践衔接不紧密,学完之后仍然不会独立编程等。

因此,本课程教学目标设定为:经过本课程学习后,学生能够比较轻松地独立编写500行左右的一般应用程序,通过查阅资料以及向教师适当咨询,可以编写系统相关的程序,同时树立起独立解决问题的信心,这个目标的实现要经过大量编程练习以及思考总结。

教师在课上给学生演示基于相关知识点的程序实例不少于400个,本课程结束后,学生应完成约4000行练习代码。

目前国内外的相关教材很多,但是没有一本教材完全适合教学。

国外教材内容编排比较新颖,贴近实践,但是对知识的讲授普遍不够系统,连贯性差;国内教材内容安排系统,讲解细致,有助于初学者理解,但是内容更新方面普遍滞后。

因此在教材选择方面,我们提出了不指定教材,而是以多媒体课件为主,以多本推荐参考书为辅的模式,其中课件的内容以国内教材为骨架,以国外教材中比较新颖实际的部分为血肉,取各家之所长,再由教师综合对比、提炼和取舍。

授课时全程采用多媒体课件,以课件为线索,扩展的内容由学生自行从参考书中查阅。

实践证明,这种模式比只采用一本教科书的模式要好。

授课内容的选择是课前准备环节的重要部分,目前国内C/C++授课内容中普遍忽略了对调试、编程规范、多平台下C/C++编程的讲授,而这些在实际编程过程中又具有重要的意义,因此,在课程内容中,增加了Windows平台下使用VC++进行程序调试的内容,以及目前国内主流软件企业的编程规范等相关内容。

当学生对编程已经比较熟悉之后,又增加了Linux平台下使用vi/gcc/gdb/make工具链的内容介绍,同时,取消了不大常用的位运算、共用体等内容。

程序设计语言课程是实践性很强的课程,因此设计了一系列课后作业题目以及上机练习题目,使学生平均每周有200行左右代码的作业练习量,每次上机实验完成200行左右的代码量。

作业题目选择要配合课上讲授内容,同时具备一定的难度,激发学生思考。

二、互动式授课环节
本环节的主角是学生,核心内容是激发学生学习兴趣,保障教学顺利高效完成。

教师授课不能纸上谈兵,尤其是对编程课而言,要注重实践。

在课堂环节中要鼓励提问、培养互动式授课氛围,引导学生多思考,培养学生的自学能力。

教师的一切活动要以学生为中心,教师不但是知识的提供者,而且是学生学习的服务者。

课堂讲授的每一个知识点,都要体现为具体的编程实例。

每一个实例都要现场运行,以及有目的地修改后再运行,要把这一完整的过程展示给学生,让学生在实践中迅速理解相关知识点。

要达到这一效果,需要对多媒体课件进行认真规划,每一个例子都要在课前充分调试运行,授课不应该成为教师的独角戏,教师可以在程序实例中安排一些bug,讲授完相关知识点之后,由学生在课上思考如何排除这些bug,集思广益,给更多学生提供思考空间。

同时,通过学生现场调试,让其他学生看到调试中容易出现的问题,编程最重要的部分在于算法和调试,调试的重要性远大于仅仅把程序写出来,使学生领会多种调试手段不但可以减轻教师的负担,更重要的是可以使学生真正掌握编程的思路和独立解决问题的方法。

例如:在讲到变量时,设置变量未赋值即使用会出现数据错误的bug;讲到数组时,设置数组元素溢出的bug;讲到动态内存分配时,设置内存泄漏的bug 等。

然后由学生来调试解决这些编程错误。

以上方式在实际教学中取得了良好的
效果,学生积极性空前高涨,课堂讨论气氛非常热烈。

兴趣是最好的老师,激发学生的学习兴趣进而使之自主学习要远远好于填鸭式的知识灌输。

在课堂上,通过对一些适合学生年龄的有趣问题的探讨,能够提高学生的学习热情。

例如在讲随机函数的过程中,要求学生编写一个“龟兔赛跑”的程序,利用随机函数生成龟兔赛跑时每一步的步长,在屏幕上打印出龟兔的运行轨迹。

再如当讲到多维数组时,要求学生编写一个翻转棋的小游戏。

通过这些教学方法,可以培养学生的学习兴趣和热情。

在教学中为了鼓励学生勤于思考,教师应该在授课时提高提问的比重,在多媒体课件编制过程中暗藏适量的“陷阱”和问题,需要学生在课上通过思考来发现和回答。

鼓励学生在任何时刻都可以举手提问,某些学生不理解的知识点可能恰好也就是其他学生同样不理解的知识点,通过课上答疑可以极大地提高时间的利用效率。

通过师生的讨论可以加深学生对知识点的理解,使教师更好地掌握学生的接受程度,同时还可以营造出活泼的教学环境和热烈的教学气氛。

在课堂教学中,学生不但是知识的接受者,还应该是知识的发掘者和传授者。

对于一些较容易的知识点,以及一些作业题目解法,可以适当地安排学生在课上用10~15分钟左右来讲解,然后教师点评。

这样不但可以培养学生的自学能力,还可以培养他们的表达能力以及责任感、使命感。

例如在讲到多平台下编程时,会使用到GNU编程工具链,主要包括全屏幕编辑器vi,GNU C/C++编译器gcc、GNU调试器gdb以及自动化编译工具make,在熟悉了Windows平台编程和调试后,学生在教师的指导下已经具备了自学以上GNU编程工具链的能力,因此可以安排不同的学生分别查阅相关资料,然后在课堂上对工具链的各个部分做一个简要介绍,由于Linux系统的安装较Windows系统复杂,而且安装成本相对也比较大,所以以上内容在Windows下的Linux仿真环境cygwin中完成,能够达到同样的效果。

实践证明,学生十分重视和珍惜这种表达机会,都会认真准备,包括查阅资料、准备课件、事先排演等。

学生准备的过程,就是对知识理解的过程;教师讲解的过程,就是知识升华的过程。

因材施教是教师的一大原则,对某些理解能力强的学生,给他们提出特殊的标准和任务,例如指定其完成难度较高的编程题目或者简化后的软件项目,推荐其阅读经典参考书目等。

ANSI C++标准博大精深,给学生留下了广阔的学习空间。

对某些后进学生也要相应地利用答疑时间付出额外的劳动,使他们能够跟上授课进度。

同时,要发挥课程网站的平台作用。

利用课程网站,收集学生的疑难问题,及时做出解答;同时收集学生对课程内容编排、授课方式、理解程度的反馈意见。

一个教学周期过后,通过网站收集学生问题300多条,教学建议40多条,其中很多问题的范围已经扩展到了C/C++课程之外。

充分利用网络资源,能够提高工作效率,促进学生学习,方便教师进一步调整教学方法,提高教学质量。

三、软件工程指导的实践环节
实践环节的主角仍然是学生,教师所有的活动应该以学生是否能够进行充分有效的实际编程训练为中心。

传统的上机实验环节是教师出题目,学生相应地进行编程,单纯采用这种简单的上机模式已经不能适应软件产业化的发展大潮。

当今的软件行业,所谓的编码英雄已经成为历史,任何一个著名的软件产品都需要一个团队来完成。

在产品开发的前期,要进行广泛的市场调研、需求分析、项目规划等;在编码过程中,又要进行完善的文档开发管理、代码测试等步骤。

因此,从编程伊始就逐渐培养学生的软件工程意识是十分重要的。

同时,要让学生们意识到,只有融入集体中,才能发挥出每个人的最大作用。

编程能力固然重要,但是在团队中的沟通能力、协作能力、包容能力同样重要,这些都是一个软件开发工作者的基本职业素养。

基于以上考虑,在本课程的上机实践环节中,前期每次上机安排约200行左右代码的上机练习代码量,部分练习题借鉴了最新的计算机等级考试题目,在课程的后期,学生们已经具备基本的编程能力,把学生划分为若干项目组,选出学生担任项目经理,组内需要分工协作,用较长的时间,共同完成一个较大的课程设计题目。

本环节中,仍然采用互动模式,教师给予项目组一定的指引,在学生进行开发的过程中,随时通过答疑时间、网络答疑论坛、e-mail等手段与教师沟通,教师也可以跟踪某些组的进展情况,多方互动,以使各项目顺利进行。

项目选题可以由学生提出,经教师审定后启动项目,也可由教师对实际项目进行简化,使之难度降低,再由学生来完成。

在学习编程阶段即潜移默化地灌输给学生软件工程思想,尽可能地创造类似于实际项目的开发环境,提供给学生一个实战的模拟场景。

选择的项目应使大部分学生经过思考、查阅资料等努力后可以完成。

例如,在实际上机环节中,指导学生了解GIS的背景资料,查询BMP图形的存储格式,自定义矢量图标准,编写一个从位图到矢量图的转换程序,再如,指导学生查询8250、8251串口控制器的控制字结构,编写一个双机串口通信程序,实现从一台机器到另一台机器的数据传输,不要求每一组都能圆满完成这些任务,但是应该让教师看到每组都做了大量的工作,在资料查询、项目规划、代码编写等方面都做出了很大努力。

项目实施遵循软件工程的流程,采用瀑布模型,分为以下几个阶段。

需求分析阶段:包括使学生了解项目的背景、项目的重要性,根据已有的知识结构,找到进入项目的切入点。

同时,培养学生们的自学能力,使他们能够从多个渠道获得所需信息。

设计阶段:学生根据实际情况对项目进行规划,包括提出完整的进度表、各阶段要完成的具体任务、工作内容分工、设备使用计划、主要模块及接口设计、画出流程图等。

编码阶段:各个小组按照工作计划各自完成自己的编码任务。

本阶段中,要求代码编写符合编程规范、有必要的文档、注释等内容。

测试阶段:测试由学生自查、互查、教师检查等方面组成,以保证程序质量。

评估阶段:由指导教师组织学生进行最后的工作总结、分析各组项目完成情况以及存在的问题、指导学生讨论相应的改进方案,最后完成成绩评定。

实践环节中,在很大程度上抛弃了常规的由学生完成教师指定作业题的模式,创造性地提出了学生分组完成简化项目的方式,并且初步引进了软件工程思想,不但使学生明确了学习C/C++课程的重要现实意义,而且培养了他们的协作精神、团队意识、自学能力和独立解决问题的能力,同时对软件工程的思想留下了感性的认识。

实践结果表明,大部分组都能够完成任务,并且讨论热烈、思维活跃,普遍认为这一模式扩展了他们的知识面、增强了编程自信心。

而且,有部分优秀的学生通过自学C++知识及人工智能领域的算法,独立完成了诸如“黑白棋人机对弈”等软件。

四、综合性成绩评价环节
本课程的成绩评价体系进行了革新,末考试的权重,增加了实践环节的权重,的综合素质,具体如下表所示:大幅降低了期更能体现学生
其中,课后作业和前期上机作业由任课教师和助教抽查,抽查比例不小于50%:实践环节项目组负责人由学生自行推选,其项目完成分数在项目组所有成员中最高;平时成绩包括回答问题积极性、课堂和网络提问积极性、答疑积极性、是否参与了课上学生讲解等。

通过这样一种多重指标成绩评定方法,可以提高学生实际编程能力在最终成绩中的权重,更准确地反映教学效果和学生对知识的真实掌握程度以及运用能力。

通过对教学各个环节的改进与创新,更好地实现了教学目标。

学生在结课时,
熟练掌握了各种开发工具、调试工具的使用,理解了C/C++的基本语言要素,熟悉了一些简单的数据结构与算法,并完成了数千行的代码量,初步形成了软件工程思想。

通过学生编程竞赛、后续课程任课教师反馈意见等多角度得到的信息表明,在与采用传统教学模式的班级横向对比时,新教学模式培养的学生显示出明显的优势。

相关文档
最新文档