“程序设计语言”课程教学方法探讨

时间:2022-10-17 07:37:12

“程序设计语言”课程教学方法探讨

摘要:程序设计语言课程教学应当注重能力培养,以学生能够独立地读写程序为中心目标。课程内容须少而精。上机实践不宜选用算法设计难度大的题目。文中介绍了多种获取学习状况反馈的途径。一个反响良好的措施是要求学生每天读透一个程序示例,并在下一次课上随机抽取学生上台讲解。

关键词:程序设计语言课程;教学方法;能力培养;每天一例

中图分类号:G64 文献标识码:B

文章编号:1672-5913 (2007) 21-0031-03

前言

程序设计语言课程已经成为高等院校的基础课程。它不但是计算机专业学生的必修课程,而且是非计算机专业的必修课程。学好本课程,有利于学生深入地理解和掌握计算机技术,更好地使用计算机。

本文是我在从事程序设计语言教学过程中的经验教训和心得体会的总结。目的是引发一些思考和讨论,从而在程序设计语言课程教学上探索出更有效的手段和方法。

我讲授的是C语言,授课对象是非计算机专业的学生。教材选用的是谭浩强教授编著的《C程序设计(第三版)》。本文给出的观点和方法不限于C语言教学范畴,尽管部分例子采用了C语言编写的程序代码。这些观点和方法可以推广应用至各类程序设计语言课程教学中。

我的观点和方法概括如下:

衡量课程学得好坏的标准有两条:(1) 会读程序;(2) 能写程序解决问题。

课程内容须少而精。

课堂教学要多交待背景、多举例和多提问。

强调课后复习,采取措施进行督促。

强化实践环节,及时解决学生们遇到的问题。

获取反馈,跟踪学生的课程学习状况。

1衡量标准

计算机程序设计课程学得好与坏,就看这个学生能否做到两件事:读程序和写程序。“会读程序”是前提,会写程序并且写出好程序是最终目的。诚如谭浩强教授所言:衡量这门课学习的好坏,不是看你“知不知道”,而是“会不会干”。

会读程序不是一件容易的事。应该要求学生读“透”程序――把程序语句背后的含义读出来。举个例子来说,程序清单1的功能是把一个二维数组行和列互换,存到另一个二维数组中。

程序清单1:

#include

void main() {

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};

int b[3][2], i, j;

printf("数组a: \n");

for(i=0; i

for(j=0; j

printf("%5d", a[i][j]);

b[j][i] = a[i][j];

}

printf("\n");

}

printf("数组b: \n");

for(i=0; i

for(j=0; j

printf("%5d", b[i][j]);

printf("\n");

}

}

上述程序是简单的。读透它不仅仅是给出程序运行结果,而应该读出语句背后的含义。例如以下程序段的含义是把数组a的一行转换成数组b的一列。由此,我们也可以读出变量i代表的是数组a的行号,数组b的列号。行号/列号正是变量i背后的含义。

程序清单2:

for(j=0; j

printf("%5d", a[i][j]);

b[j][i] = a[i][j];

}

能写程序解决问题是更高一层的要求。这一能力必须通过不断的练习来获得。这主要依靠课程实践环节。需要注意的是,写程序前须要求学生复习知识点和多读程序示例,否则学生在上机编程中会遇到相当多的低级错误,效率大打折扣。

2课程内容

课程内容要少而精。课程应当聚焦于基础概念和核心知识点,不宜贪多。讲一门程序设计语言,只要提供学生进一步自学的基础就可以了。

相信很多人认同这个观点,只是操作起来就走样。课程设计者也许是想多塞些知识给学生,或者在他/她眼里任何一个知识点都是那么重要。殊不知这带来以下问题:(1)教师赶进度,减少对隐藏在背后的知识的详细讲解。在“课堂教学方法”一节会提到,这些背后的知识是掌握某些课程知识的前提。(2)学生消化不了。不但多塞的内容掌握不了,连基本的都学得不扎实。(3)给学生造成课程“难”的印象。一旦提不起兴趣,积极性和主动性就得不到发挥。这一后果比少学一点更严重。

授课者应该思考向学生提供什么。举例来讲,C语言课程不见得要逐一讲授众多字符串操作函数和文件操作函数的用法,而应该是举例讲解,进而归结出库函数的使用方法。重要的是掌握在阅读函数原型和有关说明后能够正确使用函数的能力,而不是熟记大量函数的用法。逐一讲解函数的用法既耗时又不能解决根本。

课程内容少而精是合理的。对以后从事计算机专业的学生而言,安排内容再多也不足以应付将来的工作岗位的知识需求。对以后不从事计算机专业的学生而言,内容多了反而是浪费。课程内容多了,学生疲于吞吃新知识,无心也无力形成对计算机程序设计语言的深层次理解,无法做到融会贯通。而融会贯通、学以致用才是课程的真谛。

就《C程序设计(第三版)》而言,如果安排的学时数是48,那么内容应当作较大幅的删减。

3课堂教学方法

课堂教学要多交待背景。其中有的是知识背景,而有的是应用背景。比如,课程开始有必要交待程序编制过程,由此学生们能够认识到源程序和二进制指令的关系。而了解内存的结构模型对于理解变量地址和指针等概念是必需的。更早的课程应该讲解过相关知识,不过在课程开始作一简要回顾还是值得的。介绍应用背景可以引起学生们的思考。比如讲解链表时,恰当的应用背景明显有助于理解。我在课堂上使用的实例是超市货品管理软件维护的库存不足货品列表――一个动态变化的集合。首先分析指出采用静态数组或动态数组来维护库存不足货品列表所存在的问题,接着告诉学生链表是解决问题的好办法。在这一场景下,链表结点、插入操作、删除操作和遍历操作等都是有具体含义的。待全部知识内容讲解完毕,回头再总结问题是如何解决的。如此能够避免抽象和枯燥,使学生更容易接受相关知识,甚至学以致用。

现在有一个不好的倾向,就是教材或课堂过于重视抽象化的知识,忽视应用背景。数据结构的教材是这一倾向的代表。这对入门阶段的学生来讲是不适宜的,因为学生难以走进所涉及的抽象世界,最终表现为不知道在讲什么。所以在课堂上应当交待背景以化抽象为具体,而后通过归纳从具体走向抽象。

对程序设计语言课而言,在课堂上多举例,也就是多展示源程序的示例是好做法。有些概念或知识点,用文字费力描述也达不到效果,用示例代码就容易说清楚。

课堂上应当多提问,随机抽取学生回答问题。这一方面能够促使学生集中注意力;另一方面能够活跃课堂气氛。随机抽取学生回答问题能够提供一些反馈信息,而且大部分学生是不会主动站起来回答的,除非被授课者叫到。

4课后复习

应该要求学生们课后及时复习,巩固每一次课所学的知识内容。因为一旦积累了问题,到后面可能连课都听不懂。不及时复习又会影响到上机实践的效率和效果。

光倡议是不起作用的。我在第一次课就提出了要求,可是学生们动静不大。有必要采取措施来督促学生们做好课后复习工作。我采用的办法是在一次课的前5到10分钟内随机挑选两位学生上讲台讲解与上一次课程内容相关的示例程序。这一措施实施后,收效比较明显。

另一个值得考虑的举措是把班级分组,8到10人一组。每一组推选一名组长,职责是在课余以及上机实验过程中为本组同学解答疑问。期末评分上给予组长适当奖励。

5课程实践

每一位授课者都知道程序设计语言课离不开上机实践。课程进行同时也会安排上机练习时间。要保证既有效率又有效果,须注意以下几点。

制定合适的上机实验计划。实验计划宜与课堂教学进度同步,即把实验任务分成多个组,每一个组分别针对主要的知识体(如分支语句、循环语句和函数)。一个任务组包含由浅至深的程序题。

程序题的难度不宜过高。上机实验的中心目标是掌握程序设计语言的使用。程序题难度主要在于算法复杂程度。难度过高的题目导致学生们花费大量时间去寻求解题思路。这与中心目标不符。提高寻求解题思路的能力应当是其他课程的任务,对程序设计语言课程而言是次要的。当然,程序题也要有一定的挑战性,以及趣味性。

课堂上应该讲解算法是什么和如何写算法。尽管算法不是课程的中心内容,不过学生们在上机实验过程中遇到的大部分问题归因于算法。只要帮助学生理清算法,问题通常迎刃而解。因此,应当利用恰当比例的时间开展必要的算法训练。

督促学生养成良好的编程习惯。这主要涉及两方面。一方面是“先算法后编程”,可以不把算法描述成文,但在心里必须清楚明了。另一方面是注意编程风格,值得强调重点是缩进和取名。可以考虑利用网络论坛公开展示学生写的好程序。

6学习状况跟踪

我在教学过程中获得了一条教训:切忌自我感觉良好。我感觉良好的原因在于:(1)自信能够把课程内容讲清楚;(2)课堂上学生反应颇佳,向大家发出的提问都能得到较满意的答案。这种良好感觉在一次小测验后完全消失。我认识到,我以前的良好感觉是建立在主观性的反馈之上的,甚至加上了自己的倾向。准确了解学生学习状况离不开客观性的反馈。值得借鉴的具体做法是:

向随机挑选的学生提问,并禁止其他同学的“协助”。

批改适当比例的作业。

一两次认真组织的小测验。小测验可以是笔试也可以是机试。这也能让学生了解自己的学习状况。

7总结

本文是我在C语言教学过程中所获得的经验教训和心得体会的总结。它不是一种教学方法的系统论述,而是一些零碎的观点和方法的讨论。我想再一次强调的一个观点是“课程内容须少而精”。课程设计者应当掌握好“度”。就我个人来看,目前课程内容过多是普遍现象,造成学生囫囵吞枣地学习,为考试记忆知识,无法达到融会贯通。这不正是造成“考完了就还给老师”这一状况的原因吗?

收稿日期:2007-06-26

作者简介:叶常春(1974-),男,浙江东阳人,博士毕业,讲师,现就职于国防科学技术大学计算机学院。研究方向:软件工程、程序设计基础和操作系统。

E_mail:

上一篇:培养工程应用型软件人才的可教学化实训体系建... 下一篇:构建以工作过程为导向的高职课程体系