我怎么讲好“程序设计基础”这门课

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

中国大学教学 2011年第12期

10 吴文虎,清华大学计算机系教授。

我怎么讲好“程序设计基础”这门课

吴文虎

一、教育理念至关重要

“程序设计基础”属于基础课。实践告诉我,在信息化时代,在有了“人类通用智力工具”的条件下,用编程手段来解决人们遇到的各式各样问题的时候,需要一种新的思维方式——计算思维。

为了培养计算思维能力,课程重点放在讲思路,讲如何对问题进行抽象,还要介绍一些基础算法和数据结构。当然,一些重要的语句及程序结构也需要讲解,但不宜多,更不宜喧宾夺主。

对问题进行符合逻辑的科学分析,找出解决问题的形式化方法,并抽象到数学层次上去,这是最基础和最具本质的教学目标。学生如果没有这种能力是写不出程序来的。

我认为“干粮和猎枪”的比喻既形象又深刻。课程再多如果不具内涵,充其量不过是大袋干粮。一颗孕育着生命的种子,在雨露、阳光、营养物质的滋养下长成参天大树,根系、枝干和树叶作为有机的整体在发展,决非堆砌而成。教学生在学知识和长技能的同时获得经验和感悟,形成科学的世界观和掌握科学的方法论,这是最为重要的基础,是真正的“猎枪”。就像当年教我们的老师那样,通过言传身教,让学生在学习知识的同时,去体验和感悟做人和做学问的真谛,才是最为重要的。

这十年我把教书育人和我所承担的精品课建设任务结合起来,考虑通过课程的教学设计使学生在学科能力上、在思想方法上和在行为规范上能够有所长进。在教学目标上写了如下3条:(1)借助程序设计的知识载体,传授基本问题的求解过程和基本思路;(2)建立算法意识,培养良好的思维习惯和求真务实的优良学风;(3)从学科方法论上打基础,培养计算思维能力和分析问题、解决问题的能力。

比如在上第一堂课时讲到“清零”。这是针对绝大多数同学以当地最高分考入清华的现状,结合自身在清华50年的教学经验,给他们讲为什么先要摘掉光环,从零开始的道理。继而向学生介绍科学的学习方法和怎样才能学得主动的经验。针对计算机学科是实践性极强的学科,告诉学生“你不是听会的,也不是看会的,而是动脑动手自己上机练会的”。

再如,为了改变中国学生不敢发言、不愿提问题的现状,在课堂上我经常说:“你站起来发言,如果打分,先打99分,那1分仅只是对或错,完善或不完善的问题。”谁站起来发言,我就让大家给他鼓掌。鼓励学生敢于标新立异,只要发现学生有不同于我的新思路,我就请他上讲台,讲给大家听。

作风是训练出来的,是习得的。我对同学们说:敬业精神是通过上课听讲、做作业和上机编写程序等每一个环节来培养的,需要“从我做起,从现在做起”。纸上谈兵是兵家大忌,不是清华的学风。行胜于言,实践才能收获真知灼见。告诉学生理性思维和理性实践是我们的导学要求。理性是创新的基础,不浮躁、不虚夸,求真务实是清华学风中最为重要的传家宝。在课堂上我多次说过:“尽管我比你们大50岁,但我和你们在研究与讨论问题时是平等的。讲错了,讲得不好,你帮我纠正,我还要谢谢你。”

作为教师要把学生当作自己的孩子,教书育人不仅要考虑现在,还要顾及长远。一个“生物人”通过学校教育和社会教育成为一个既能生存又能发展的“社会人”,知识、能力和素养的综合提高是至关重要的。专业能力(专业知识和专门技能)、方法能力(工作方法和学习方法)和社会能力(融入社会的行为规范和价值观念)三要素的整合是我们应该给学生打下的基础。

按照可持续发展的教育观,“程序设计基础”课程应处理好知识、能力和素质三者的辩证关系。一个具有较强能力和良好素质的人必须掌握丰富的知识,程序设计基础领域的知识是由程序设计的基本概念和程序设计艺术(技巧)组成的,要掌握这些基本概念和设计艺术,必须立足于理性化的学习和实践。对程序设计而言,编程能力是计算思维和技能化知识的综合体现;只记住若干语句而不会解决实际问题,不能说具备了编程能力。计算思维是否正确,必须通过实践检验。因此上机让程

序调试通过且能正确运行,并得出预想的结果,是理性思维和理性实践相互结合的必不可少的过程。

事实证明,实践是编程能力赖以生长的土壤,也是这门课化难为易的“金钥匙”。

更为重要的是,这样的教学要求,有利于倡导理论联系实际的优良学风,对学生形成科学的唯物主义的世界观和脚踏实地实事求是的科学精神大有裨益。

素质教育是以尊重学生的主体作用、主动精神,注重开发人的潜能,形成人的健全人格为根本特征的教育。在课程安排中怎样体现素质教育?我认为素质是知识和能力的升华,素质教育要求学生在学校里学会“怎样做人,怎样做事,怎样求知,怎样健体”。虽然我们不是思想教育课,但是我们也可以在一些教学环节中发挥“教书育人”的作用。比如在课程中,我们提出“养成良好的编程习惯”这个教学要求,强调程序的可读性和规范性,让学生在作业中严格遵守下述原则:程序构思要有说明,变量要注释,程序要符合规范,严谨、认真、一丝不苟。把学生的敬业精神和良好的职业素养纳入日常的教学要求中来。

二、突破难点,切入点很重要

教学是需要设计的,切入点很重要。“兴趣是最好的老师”,在教学设计时要用心揣摩初学编程者的感受,认真研究难点究竟在哪儿,深入思考怎样做才能让学生感兴趣,而不被那些深奥晦涩的语句和语法弄得眼花缭乱,一头雾水,兴趣索然。我就想:能不能打破原来的框架?

教学设计要针对教学对象、教学目标、教学内容、教学策略、教学进度、教学评估等等来进行。教学设计要有教学理念的指导,要采取先进的教学模式。最重要的一个原则应该是要估计学生原有基础,还要符合学生的认知规律。在20年前有关程序设计语言的教材,大多是翻译过来的,冗长难懂,被初学者视为“天书”;有的甚至就是某种语言使用说明书的翻版,让人望而生畏,望而却步。

引发兴趣是第一要素。我认为好的教学设计应该有利于调动学习者的积极性,在设计每一章、每一节时都要做到激发兴趣,引人入胜。比如,我在讲关系运算和逻辑运算符时就精心设计了两个例子。

第一个例子:清华附中有4位同学中的1位做了好事不留名,表扬信来了之后,校长问这4位是谁做的好事。

A说:不是我;B说:是C;C说:是D;D说:他说得不对。

已知3个人说的是真话,一个人说的是假话。现在根据这些信息,编程找出做了好事的人。

学生对这个例子很感兴趣,急于想知道计算机怎么解?于是,我在教材中顺势引出如下4个方面的内容:(1)介绍关系运算与关系表达式;

(2)介绍枚举法的解题思路;

(3)为了枚举引出程序的循环结构;

(4)为了判断和裁决引出程序的分支结构。

学生在学这段很基本又很重要的内容时觉得顺理成章,有的放矢,没有感到枯燥。相反,觉得蛮有趣味。

接着我又举了第二个例子——疑案分析:某地刑警大队对ABCDEF 6个嫌疑人进行作案与否的排查,存在如下6条线索。

(1)A、B至少有1人作案;(2)A、E、F 3人中至少有2人参与作案;(3)A、D不可能是同案犯;(4)B、C 或同时作案,或与本案无关;(5)C、D中有且仅有1人作案;(6)如果D没有参与作案,则E也不可能参与作案。

请编程,找出作案人。

为了解这道题,就要研究逻辑运算符和逻辑表达式。借这个题目讲怎样将上述6句话语,转换成逻辑表达式,并归纳写出破案综合判断条件。之后为加深对枚举法的认识,给出用6重循环来枚举和判定6个人哪几个是案犯。

通过对这两个例题的分析,让学生掌握解题的重要一步是将人的想法转换成机器能够处理的表达式或操作步骤,要用关系运算符和逻辑运算符,写出数学运算式,此其一。其二是用计算机解题往往需要从多种可能性中去寻找其中的一种或几种,因此,最容易想到的就是“枚举法”。要用枚举法就会遇到大量的重复计算,自然而然地引出程序的循环结构。其三是分支是计算思维的一个重要方式。借这些例题就把设计程序结构的基本概念和方法教给了学生。

全部课程内容都采用了这种任务驱动的方式,引出基本概念和基本方法,再归纳总结上升为一般规律。学生反映这种讲法符合他们的认知规律,十分爱听也容易听懂。

把实际问题形式化为机器能够处理的表达式对初学者来说是最为困难的,在课程中我们需要从这里切入,来教他们如何思考和用什么方法破题,并用例题和大量的习题来训练他们的这种思维能力。

三、以人为本,强化实践

教育,最重要的是要唤醒学生的力量,培养其自我性、主动性、抽象的归纳力和理解力。高级语言程序设计传统教法效果欠佳的主要原因是:过于注重语句语法,满脑子都是语句,却不能自主编出一个程序,使人感到乏味,难以调动学生学习的积极性。怎样做才能唤醒学生的力量,提高学习的积极性,是该课能否成功的一个关键。

我认为,一方面要在教学的理念上下工夫,研究怎

11

相关文档
最新文档