程序设计基础课教学内容及模式改革

2013-04-29 00:44李军曹记东林勇郭天印
计算机教育 2013年8期
关键词:教学改革

李军 曹记东 林勇 郭天印

摘要:分析传统的以程序设计语言知识体系为脉络的程序设计基础课程教学的弊端,结合陕西理工学院程序设计基础课程教学改革与实践经验,提出以语言知识为基础和以问题求解方法为主线的课程教学模式,确立程序设计基础课程面向应用,让学生学会分析问题、设计算法、运用语言知识编写程序的教学基本原则,并给出课程内容及实践环节的教学改革方案。

关键词:程序设计基础课;问题求解方法;教学改革

程序设计基础主要培养学生运用程序设计语言求解问题的基本能力,包括让学生了解高级程序设计语言的结构、掌握计算机问题求解的基本思想方法以及基本的程序设计过程和技巧、熟悉并适应计算机的问题求解模式,从提出问题、模型建立、数据表示、算法设计到编写程序代码、测试和调试程序、分析结果的过程中,培养学生将问题抽象化、设计与选择解决方案的能力,以及用程序设计语言实现方案并进行测试和评价的能力。

程序设计基础课程在大学一年级开设,是大学生认识和应用计算机的入门课程,是计算机及相关专业的一门重要基础课程,对后续课程的学习乃至学生的整个职业生涯都有至关重要的作用;而如何讲好这门课程,更需要广大计算机专业教师不断地探索、改革和创新。

1、课程改革的必然性

目前,国内程序设计基础课程名称较多,如C语言程序设计、高级语言程序设计、程序设计基础等。纵观这些课程的开设情况,我们可以发现教学内容大多都是以某个具体的程序设计语言(如C语言)知识及其自身体系为脉络,教学模式以课堂讲解和学生上机练习为主。按照这一模式组织教学,产生的副作用主要有以下几个方面。

(1)学生在课程学习过程中,面对程序设计语言中繁杂的语法规则,会产生严重的厌学情绪,使得课堂逃课率较高;还有不少学生通过抄袭他人作业或考试作弊的方式完成课程学习。

(2)一些能够完成课程学习的学生自认为掌握了程序设计方法,但是在解决实际问题时却发现对问题求解毫无头绪,由此产生心理落差,严重挫伤学习热情,没有学习成就感。

(3)另外一些能够完成课程学习的学生认为他们满怀希望来学习,但没有从该课程的学习中获得编程的愉快感。

这种模式在我国计算机教育事业中曾经发挥过极其重要的作用,但它是从“狭义工具论”的思想出发,过于注重语句、语法等语言细节的教学,没有把问题求解方法和计算思维能力培养置于首要位置,对于如何分析问题和解决问题的思路讲得很少,对学生编程能力的训练不够。这一模式没有很好地为课程开设目标服务,课程的开设只能起到事倍功半的效果,同时也成为制约计算机及相关专业教学质量提高的一个瓶颈。

2、更新课程教学理念

理念更新是教学改革的思想保证,正确合理的课程教学理念是课程改革成败的关键。为了破除“狭义工具论”的课程建设观念,秉承“授之以鱼不如授之以渔”的理念,我们将以语言知识为主线的教学模式转变为以语言知识为基础、以问题求解方法为主线的教学模式,确立了程序设计基础课程面向应用,让学生学会分析问题、设计算法、运用语言知识编写程序的教学基本原则,而不是让学生一味地研究语言本身。按照这一思想,陕西理工学院将传统的C语言程序设计课程更名为程序设计基础,并确立以下教学理念。

(1)淡化语言,强化程序设计方法,帮助学生树立正确的程序设计观念和思想方法。

(2)淡化编码,强化算法运用与分析,训练学生的抽象思维及建模能力。

(3)案例驱动,强化实践,引导学生获取正确的问题解决方案。

(4)由易到难,贯通案例,满足学生的学习成就感,激发学生的学习兴趣。

3、课程教学改革方案

3.1 课程内容的优化安排

依据程序设计基础课程的开设目标和根本任务,课程内容应包含问题求解的基本方法和实现这些方法的计算机语言基础知识等,因此课程内容的优化安排原则是以语言知识为基础,以程序设计的基本理论和基本方法(含问题求解方法)为核心。据此原则,课程教学组对课程内容按照程序设计的应用需求进行合理取舍,将知识点分成门槛跨越、体系拓展、创新应用3个部分。

(1)门槛跨越主要解决的是程序设计入门必需的语言知识学习问题。教师通过讲解语言体系核心集合,让学生在很短的时间内完成语言知识的学习并将其应用于实践,学生学习语言知识获得的成就感与愉悦感能够激发并延长学生的学习热情。

(2)体系拓展主要是在门槛跨越的基础上围绕程序设计的基本方法展开。教师通过一些常用且典型的算法,让学生初步掌握算法的基本知识,并为后续的教学埋下伏笔,以激发学生的求知欲。

(3)创新应用是在前2个体系基础上实现的以问题为中心的阶段性实践训练。此处的问题规模较大,程序代码有相应要求,学生通过多人合作完成对问题的分析、建模及程序实现。

3.2 课程教学策略

要实现知识点3个部分所达到的教学目标,教师必须采用适当的教学策略,综合应用课堂讲授、案例穿插、启发诱导等多种教学方法;从程序设计的角度出发,按照分析建模、算法设计、程序编码、测试与维护等环节,培养学生从能够遵守程序设计准则到习惯成自然地按照程序设计准则完成创新应用问题的程序设计。此外,教师还需在教学过程中针对教学内容的组织处理好以下关系。

(1)处理好该课程与后续课程的关系。程序设计基础不仅是一门独立的课程,而且是后续课程的基础,因此教学内容的安排既要考虑对后续课程的铺垫作用,又不能过多涉及算法与数据结构的内容,避免超出课程的内容范围。

(2)突出重点,分散难点,淡化细节。教师对于语言基础知识的教学应以应用为目的,对于一些语言细节可一带而过。例如,指针既是结构化程序设计语言的难点,又是后续课程的一个应用重点,教师可避免像传统教学那样集中讲解指针的概念,而是将这些难点提前并分散到相关章节进行处理,以逐步降低指针内容的难度并减少学生的心理压力。

(3)程序设计方法的讲解主要通过案例来实现。例如,教师在讲解C语言基础知识各章节内容时,可以“快递运费计价问题”为例,逐步扩展,加入条件,从分析问题、建立模型、设计算法、进行程序设计等方面进行讲解,贴近实际,不断激发学生对知识的探索欲望。

(4)以常用算法为纽带,实现逻辑思维与程序设计方法的有效融合。例如,针对递推法、倒退法、迭代法、穷举法可以不同的有趣实例,如兔子繁殖问题、猴子吃桃问题、牛顿迭代法解方程、鸡兔同笼问题、逻辑问题等,对其进行总结和应用,让学生体验程序设计的实现过程,既反映问题的难度及求解规模的变化,又彰显知识和求解方法的多样性。

4、课程实践环节建设

程序设计是高强度的脑力劳动,不是听会的,也不是看会的,而是练会的。只有让学生动手,学生才会有成就感,进而对课程产生兴趣,学起来才比较从容。在“狭义工具论”思想指导下,传统的实践环节内容比较单一,以课程实验为主,内容基本上是程序设计语言的语法验证,实验项目与实际应用问题结合不紧密,学生做完实验没有成就感。因此,课程的实践教学应遵循以应用为目的,以任务驱动,循序渐进。我们将课程完整的实践环节分为课程实验、课程实训和课程设计3大部分。

4.1 课程实验

课程实验由基础实验和综合实验组成。基础实验与课程讲授内容同步,形成配套的实验项目,加深学生对相关语言知识及某个主题领域知识的理解和应用;综合实验主要是针对多个知识点进行综合训练,加强学生对课程内容的整体认识。

1)基础实验。

基础实验项目按照程序跟踪、改错调试、设计实现3个递进层次,从多角度培养学生的程序设计能力。前2个层次的基础实验项目训练学生对语言知识的运用能力,后1个层次的基础实验项目训练学生求解问题的能力。

程序跟踪是依据项目的主题给出完整的程序,让学生利用调试工具跟踪并观察程序的运行结果,并对结果进行分析,回答给定问题,画出程序流程图,这些题目主要是为了加强和巩固学生的语言知识。改错调试是在给定功能的程序中设置几个语法或算法错误,让学生上机进行调试并除错,主要目的是训练学生在理解程序主要功能及整体框架的基础上进行程序调试的能力。设计实现是按照项目的主题给出几个可选的题目,让学生根据自己的能力选择完成。这一层次的题目主要是让学生掌握从提出问题、模型建立、数据表示、算法设计、编写代码到测试调试程序等开发过程和方法,培养学生将问题抽象化、设计与选择解决方案、用程序设计语言实现方案并进行测试和评价的能力。

2)综合实验。

综合实验的目的是使学生综合应用复杂数据类型实现复杂数据处理与存储,培养学生根据给定问题编写具有多个模块程序的能力。实验内容都是一些与实际应用结合紧密且具有较复杂数据结构的问题。

4.2 课程实训

课程实训在课程结束后进行,主要是给出一些典型问题,要求学生运用特定的数据结构及算法编程实现,其综合程度要高于实验项目。例如,针对x∈A、A n B及A u B等集合问题的运算,要求每个学生分别用数组和链表2种数据结构实现,而且对于每种结构都要求用一些指定的编程方法。教师要按照问题实现的方法与步骤,根据学生的语言知识运用情况制订严格的实现要求和标准,按照标准当场对学生编写的程序进行评价并给出成绩。

4.3 课程设计

课程设计安排在课程结束后的下一个学期初,大约2周时间,将3~5人分为一个小组。小组成员在教师的指导下,分工协作完成有较大实际价值的程序设计项目。课程设计重在培养学生对程序设计课程所学知识的创新应用能力,让学生深刻体会软件工程方法,初步掌握大型程序设计思想和开发方法,训练学生的团队协作精神以及集体责任感。

5、课程改革成效

以问题求解为主线的教学改变了程序设计基础课程的教学重点,教学内容强调程序设计思想和方法,摒弃过去以语言知识为主的做法。教学策略的改变强化了学生独立思考和动手的能力,提高了学生的实际程序设计能力。

学生在对课程评价时,认为“老师从多方面对一个问题进行阐述,激发学生的学习兴趣”“老师讲课很好,本来枯燥的语言课在老师的讲述下一下子有了趣味性,给我们留下很大的思考空间,更一步激发我们的学习兴趣”“通过本学期的学习,我学到看书的方法和程序设计思维,深刻地理解‘程序设计=算法+数据结构的思想内涵”。

2008-2011级近4届计算机科学与技术系学生的程序设计基础课程考试成绩逐年提高,其成绩统计如表1所示。

从试卷分析可以看出,学生较以前各届学生程序分析、调试、查错及知识的综合应用能力明显提高;后续课程的主讲教师也反映学生能将该课程中学到的基本方法和技能运用到后续课程的学习中。

由于该课程为学生打好了程序设计的基础,大多数学生程序设计的信心较前有大幅度提升,因此申报校级创新实验项目并获得立项的人数正在逐年增长,参加“挑战杯”大学生课外科技作品竞赛的人数也逐渐增多,并且连续2届计算机科学与技术系的学生在省级“挑战杯”竞赛中获得奖励。

6、结语

以问题求解方法为主线的程序设计基础课程教学内容及模式的建设工作是一项持续化的工作,现在我们才刚刚起步,今后还要在课程的教材建设、学生自主学习及评测平台的建设、师资队伍的建设等方面多下工夫,逐步提升该课程的教学效果,以达到省级精品课程的要求。

猜你喜欢
教学改革
完全学分制下选课管理的思考与实践
金工实习教育对工科院校创客教育影响分析
新形势下小学语文教学方法研究
译林版英语教材的人文特点研究
当前农村学校实施“新教育实验”的研究
构建和改进现代化学校美育工作体系研究
中职学校“生本课堂”的调查研究与实践
高校三维动画课程教学方法研究
基于人才培养的技工学校德育实效性研究
现代信息技术在高职数学教学改革中的应用研究