“计算机语言与程序设计”是一门十分重要的基础课程。该课长期沿袭着这样的教学模式:过于注重语句、语法和一些细节,基本上是以高级语言自身的体系为脉络展开的,没有把逻辑与编程解题思路放在主体地位上;对如何分析问题和解决问题讲得不够,对学生编程的能
力、上机解题的能力训练不够。这样就给后续课程及研究生阶段的课题研究留下了缺憾。很多学生在学习这门课时感到枯燥难学,学过之后,不能用来解决实际问题。
我个人的经历有些不同,除了学校给我安排的教学和科研任务之外,20年来我一直指导初中学生、高中学生和大学生参加有关计算机的各种比赛,包括国际信息学奥林匹克和ACM世界大学生程序设计竞赛,通过对这些学生成长道路的反复思考和研究,使我感到很有必要改变我们的课程教学模式,用新的教学理念和方法培养一流人才。对这一问题,我和有关领导谈了自己的想法,他们非常支持。
从2001年9月起,我接受了程序设计基础课程的教学任务,并开始对该课程教学模式进行改革:
以强调动手实践上机编程为切入点;以任务驱动方式,通过实例讲授程序设计的基本概念和基本方法;重点放在思路上,即在C/C语言的环境下,针对问题进行分析,构建数学模型,理出算法并编程实现。同时,要求学生养成良好的编程习惯;在教学过程中培养学生的思维能力和动手能力,鼓励学生探索、研究和创新。
在指导思想上,强调转变观念,以学生为中心,将学生视为教学的主体,安排教学首先考虑培养目标、学生的认知规律和学习特点。在教学的每一个环节,顾及学生的实际情况,多想怎样才能有利于调动学生学习的积极性,引导学生主动学习。具体的改革措施主要针对两个方面:教学模式和对学生学习的评价方式。
对教学模式的改革
提出强化实践。明确告诉学生:程序设计课是高强度的脑力劳动,不是听会的,也不是看会的,而是自己练会的。只有让学生动手,他才会有成就感,进而对课程产生兴趣,学起来才比较从容。因此,我们的基本思想是在理论指导下,让学生动手、动脑,更多地上机实践。学生只有在编写大量程序之后,才能获得真知灼见,感到运用自如。注重学生动手能力的培养是这门课和以往课程最大的不同之处。
提出理性思维和理性实践。按照建构主义的学习理论,学生作为学习的主体在与客观环境(指所学内容)的交互过程中构建自己的知识结构。教师应引导学生在解题编程的实践中探索其中带规律性的认识,将感性认识升华到理性高度,只有这样,学生才能举一反三。
提出授课的原则是要学生“抱西瓜”而不是“捡芝麻”,重点放在思路、算法、编程构思和程序实现上。语句只是表达工具,讲一些最主要的,对细枝末节的东西根本不讲。要求学生在课堂上积极思考,尽量当堂学懂。突出上机训练,在编写程序的过程中,使学生提高利用计算机这个智力工具来分析问题和解决问题的能力。
提出要让学生养成良好的编程习惯。我们在与国内一些软件公司的技术人员座谈时了解到,中国软件之所以上不去的原因之一就有“习惯问题”。印度十个人编程,会编出一样的东西,而我们十个人编程可能会有十种风格。因为我们忽略了一个重要问题,即“顾客”的感受,程序的编写是给别人看的,而不是只给我们自己看的。再者,尽管我们学生模型构思做得很快,但编程的基本功不扎实,往往到了关键的时候,就出问题。
鉴于此,在课上我们强调程序的可读性、规范性;要求变量必须加注释;程序构思要有说明;学会如何调试程序;尽量使程序优化;还要求对程序的运行结果做正确与否的判断和分析。
提出“自学、动手、应用、上网”的学习习惯。我认为在本科阶段就应该注意培养学生的自学能力。很多东西完全是可以自学的,尤其是计算机。计算机是实践性极强的学科,所学的内容和要实践的东西是一个整体,因此可以自己动手来学,书上看不懂的在机器上动手试试,往往就弄懂了。上网是指充分利用网络平台,提高获取信息、处理信息和交流信息的能力。
对学生学习评价方式的改革
考试是检验学生学习效果、评价学生学习业绩的重要环节。考试作为“指挥棒”对教学目标、教学过程有着相当大的影响。我一直在思考如何进行考试改革,如何借助考试环节调动和激发学生自主学习的积极性、创造性等问题。
开学之初,我就向学生宣布考试方式——上机解题,判分也是由计算机来完成,对就是对,错就是错,不纸上谈兵,不考笔试,不考死记硬背的东西。
我们平时比较注意对学生学习方式的引导,让学生明白:理论很重要,要在理论指导下,动手动脑、有条有理地进行实践。实践才能出真知,动手才能学到真本事。
我们还将一些有较好程序设计基础的学生组织起来,因材施教,引导他们进行探索式的研究性学习,让他们继续提高。同时让他们在班上担任“小教员”,帮助同学学习。
我们这样做行不行呢?经过两年的教学实践,这门课取得了很好的教学效果,学生给以很高的评价。
学生点评为:“授课方式独特新颖,深入浅出,启发式教学,激发学生兴趣,调动学生的积极性,有助于学生独立思考能力的提高。”
(引自清华大学2001年下半年教学评估结果查询)
参加“小教员”工作的学生,提高了责任感,培养了敬业精神。他们的水平和能力也有相应的提高,其中三名同学代表清华大学参加了2002年ACM世界大学生程序设计竞赛的分区赛和总决赛,取得了世界总排名第四的好成绩(2300支队伍参加区域赛,60支队伍参加总决赛)。
2002年5月,在北京市高校计算机基础教育研讨会上,我曾应约就此课程的教学改革作了专题报告,受到了与会专家和老师们的好评,他们认为“这是非常好的新的教学范例”。
改革是没有止境的。经过两年的实践,我感到在一些方面还要进一步努力,还有许多工作要做:要进一步加大学生训练环节的力度;要加强对基础较差学生的辅导;要建立一个因材施教的机制,创造条件,让学生能有更广阔的发展空间;要建立平时的督促机制,让每一个学生真正落实动手实践;要考虑与后续课程的衔接。
现在大家看到的这本教材就是在上述的背景下,整理了课上的教案,补充了一些内容写出来的。在教材成文的过程中,我的同事和学生(博士生)起了很大作用。他们提出了很好的建议,对一些算法进行了研究和整理,特别是对全书整体上的结构进行了缜密的推敲。
从一种体系转变为现在的体系是有相当大的难度的,也有风险,学生爱不爱这样学,能不能学到真本事,是不是能够达到预期的教学目标,都会存在问题。但我以为,要改革就要知难而进,不付诸努力就收到良好的教学效果是不可能的。
目前这本教材可能存在很多不足,但是我们有这种思想准备,在教学实践中,多听取学生的反馈意见,不断修改,使之日臻完善。我们相信,恒心与虚心能够成就一本好的教材。
参加本书研究、撰写工作的还有徐明星(参加本书总体策划与章节编排)、邬晓钧(撰写第9、10、13章及附录)和李净(进行教案整理、图文设计),此外,赵强工程师和杨非同学也做了大量的书稿整理和成文工作,吴根清、孙辉、刘建、刘林泉、邓菁、陈德锋、侯启明等同学看了本书的第一稿,提出了宝贵的修改意见。在此一并感谢他们所付出的劳动。
由于时间仓促,作者水平有限,书中难免有纰漏,欢迎读者多提宝贵意见。
吴文虎
2004年7月