讲座:基础课教学的一点体会-北京大学信息科学技术学院 屈婉玲
发布时间:2012-10-16 浏览次数:

讲座人:北京大学信息科学技术学院 屈婉玲

 

感谢教学论坛给我的这个机会,我也非常希望跟在座的各位老师交流,大的题目我也讲不好,只是谈一下基础教学的体会。

基础课教学在北大是非常重要的课题,有非常重要的地位,我今天就以“离散数学”为例,谈一下怎么讲好基础课,应该站在什么样的高度来理解“离散数学”这门课程。我感觉首先要理解这门课在整个学科体系中处在什么位置,如果对这个问题不清晰,就不能通过这个课的教学对学生的培养起到重要的支撑作用。另外也要理解跟其他基础课和专业课的联系,也就是在学科架构中跟其他课程有什么关系。通过这样的分析以后,我们来制定清晰的教学目标,即对学生知识和能力的培养应该有哪些具体的目标,分解下来并落实到教学设计中去。我先谈一下对这门课的理解,然后我再介绍一下教学内容和教学设计。

教学内容,要围绕着传授的知识、学生应该掌握的方法、学生应该掌握什么样的能力,在这三方面来做教学设计。有了这三方面,怎么样实施,需要有具体的教学环节来实现这个设计,所以后面要讲一下实施和组织工作。这是我今天要讲的主要框架,基本就是这样的思路。

如何在课程体系中理解离散数学

下面我们来看一下整个体系,下图是我们国家计算机科学与技术的规范,从CCC2002一直到2006,计算机科学发展的非常快。

以前关注软件怎么开发,当时软件还是很单纯的,但现在网络出现后,发展的非常快,到多媒体、到网络,一直到现在提到的云计算,很多计算模型都有了根本的改变。所以计算机专业培养的人不能是单纯的科学技术概念,我们国内和国际上都关注到这个趋势,在2004年我们国家就提出了计算机培养要分流,分成了4个方向,一个计算机科学,培养研究人才,主要做学术;一个是工程,这是大多数人要做的事情,像公司里也有研究,大多数学生都是做工程,也就是把好的设计思想做出来。我们学校的王选院士一开始是做研究,但后来完全做成了工程,他的那个照排的软件到现在的网上发布系统在国内外起到了非常重要的作用,已经实现了工程的目标。所以工程方向跟计算机科学不一样,有一定的研究工作,但主要是怎么实现出来,需要各种标准、方法等。另外一个是软件工程,软件工程与计算机工程的区别是:前者偏软件,后者偏硬件,因此培养体系中,这两个也不一样。最后一个是信息技术方向,这个方向培养的学生主要做应用,就是不是做底层的研究或开发计算机,而要把现有的计算机技术用到各个应用领域中去,像银行的系统。这个方向的培养需要对计算机有比较深入的了解,但还有对相关的领域有一定的基础,所以这是一种管理与信息技术相结合的交叉学科。在我们国家,做工程和信息技术的是大多数人,而做科学的是少数人,这四个方向学生的定位是不一样的,因此在课程设计上要照顾到不同的学生,培养目标要有一定的灵活性。

下图是一本书上提到的计算机科学的知识体系,就是说计算机科学培养目标要分的方向。他们的知识结构本来就不一样,最上面是软件工程方向的知识体,左上角的是计算机工程的知识体,黄颜色的是信息技术的知识体,下面的是计算机科学的知识体。

所以不同方向的专业课有一部分是重叠的,即便是相同的课程名,所要求的知识块和层次也是有区别的。我现在在计算机系教两门课,一门是本科的主干课,离散数学的第二部分,代数结构和组合数学,实际上是计算机的数学基础;而且这个课有两个系在修,一个是智能科学系,一个是计算机科学与技术系,两个系的要求也是不一样的。因此我们在设计这门课要考虑,这门课在整个学科体系中处于什么样的位置?它在培养学生在后面的专业课学习以及将来从事研究和工程研究能力起到了什么样的作用?这些都是需要认真考虑的事情。

下图是美国的CC2004的标准,就是他们高校的计算机科学与技术所要学的课程,后面是我们国家教育部所提的标准。在这里可以看到对基础课是非常重视的,因为这是对于培养学生的创新能力非常重要。所谓创新,并不仅仅是研究上的,在应用上也需要创新。我们可以看到,国际上的和我们国家的都是把离散数学(美国叫离散结构)安排为学时最多的。现在的计算机系,网络、操作系统、软件、硬件等各种专业课程多得不得了,但没有一门课程像基础课这样多的学时,这么重要的地位。国内的要求72个学时,也是最多的,就是说基础课程在学科体系中起到支撑性的地位。

有人说过这样的话:18世纪英国工业革命的基础是物理学,而物理学的基础就是高等数学,就是数学分析、微积分;那么现代社会中,计算机是重要的基础,而计算机科学靠什么来支撑呢?离散数学在其中就相当于以前工业革命时微积分的作用。在计算机的开发和各种系统软件的开发中,都需要建立数学模型,而这个数学模型是离不开离散数学的。作为一个老师,需要对这门课程的重要性、对这门课在整个学科体系的位置要有一个清晰的理解。

下面再从北大来讲,北大的定位是:能够给学生最好的教育,培养能够在各个行业起到领军作用的顶尖人才。而本科的任务就是:进行大学基础教育,培养基础知识宽厚,创新意识强烈,掌握科学方法,具有基本人文修养、良好自学能力和动手能力,适应力强的高素质人才,而定的方针就是十六个字:“强化基础、淡化专业,因材施教、分流培养”。这是我们学校的定位,是非常明确的思想,所以实行的是大院教基础课,后面再做专业分流。从教学理念来讲,也强调从应试教育到素质教育,从知识传授到能力培养。我感觉能力培养是非常重要的,知识传授是一个过程,也是为能力培养服务的。现在做计算机做的好的,像王选院士、杨芙清院士、石青云院士、何新贵院士,都是学数学的,还有物理系的,我的本科就是北大物理系毕业的。他们当时都没有受到计算机的教育,只是工作中用到,而且计算机技术更新这么快,很多都是在新的环境中慢慢来学的。当时我们班毕业的学生还在做物理的大概只有四分之一,大部分人都转行了。那么为什么能在新的环境下,开拓新的领域,很重要的就是得益于原来的基础。我们大家见面的时候谈起来,给你最大益处的不是专业课内容,而是当时对于思维的训练,包括严谨的治学方法和态度,就是这方面的训练。当时给我们上大课的是沈克琦校长,教实验课,还有丛树桐、赵凯华,余允强等,都是大师级人物上基础课。如果现在说哪个物理定律,我可能连中学生都不如,都忘差不多了,但当时学到的思想让我们在工作中能够起到作用。所以我觉得能力培养非常重要,尤其计算机发展这么快,现在学的软件有可能工作的时候都变了。因此,知识传授是一个过程、一个载体,还是要落实到能力培养。

这是我们学院今年出的一本书,专门做课程体系研究的,这本书提出了三层结构的讲法,包括学院平台课,专业基础课,专业课。这些都是以课程群的方式把相关的课程联系起来,然后把群与群之间关系做了深入的分析。为写这本书,准备了一年,全院老师都参入了,还对国内外的教学进行了调研。另外还提出了能力培养体系,包括创新能力、综合能力、实践能力。

这是我们院里讨论的课程体系,一个是物理的基础,一个是数学的基础,一个是电路的基础,还有程序涉及的基础。这四个是所有专业学生都必须修的,但课程分AB层次,不同的方向会有不同侧重。当然如果一个学生素质特别好,可以都选A。这四个是最底层的,然后是专业基础课,左边是计算机类的基础课,实际上包括两个系,还有智能科学系。右边是电子类专业基础,也有两个系,电子系和微电子系。这些课程,两个系的学生都可以选,大部分主干课的课程都在这个体系。然后是对应上面两个,产生了两个专业课体系。所以,我们的学生可以自己来制定自己的学习计划,可以非常地偏计算机,也可以非常偏智能,或者两个结合起来。这样就形成了:学院平台课、专业基础课、专业课的体系,我教的离散数学在专业基础课这个课程群里面。

然后在能力培养体系,我们也分了三个方面,创新能力、综合能力、实践能力。

创新能力,主要是发现问题、研究问题的原创思想的能力。综合能力,实际上体现的是理论分析、建模的能力,就是拿到一个东西能够把他抽象、建模进行理论分析。实践能力指的是工程、应用,能够把学到的东西应用到实践问题中去。我们院里提供的能力培养,首先是通过基础课教育,在基础课上怎么进行课程设计,实现能力培养。

另外强化实验课程,这并不是简单的跟堂做实验,比如今天讲了程序设计语言,然后留了作业你去做,这只是一部分,小的案例课程。然后,我们要求学生在一个学期内,编出一个操作系统,当然功能比较简单,只是原型系统。这就像公司做项目一样,由课题来带动。这些课题紧跟学科最新的发展,比如做一个搜索引擎,做一个子语言的编译器,或者在网络上实现软件应用。到二年级,三个实验课下来,学生大概写一万行代码的样子,这就很不错了,因为这是他的看家本领,在公司里就是做这个事情的。如果编程只是几百行、一两千行,那根本完不成基本的要求。所以,我们在实验课程上结合实际,给他们开发过程的project让他们做。

然后是科研训练,我们学校有宪政基金、校长基金等,我们院还专门组织了ACM竞赛,这实际上是全世界的竞赛,中国赛区北京站就在我们这。我们有教师专门培训,鼓励对程序有兴趣的同学参赛,这几年的成绩也不错,都出国参赛了。还有电子设计竞赛、挑战杯等项目,我们院的项目很多,各个实验室都有国家课题,863、973等重点课题,这些课题是一个团队,有导师,有博士、硕士生,下面还有本科生。本科生三年级后,一半左右都会进入实验室,参入课题研究,进行科研方面的训练。这样,除了教学以外,还包括各种实验,真正让学生动手做事情。

刚才说的是从整个学科体系来说怎样培养学生,主要是说一门课必须在课程体系中起作用,孤零零的一门课是不够的。我们现在把所有的课程结合成一个合力,一起来协调参入培养的体系。下面具体来看我们这个课程与其他课程有那么沟通、衔接。以前我们对专业课内容是不大关心的,别的学校的老师讲,很多讲离散数学的老师都是数学系的博士毕业,就到那来讲课。所以讲课效果并不好,因为他只是像讲数学课一样,没有跟计算机结合起来。在北大,因为我们时间比较长,而且年轻的老师来,虽然是数学系毕业的,但都从事了几年的计算机研究之后,再开这门课程。这样,对其他的专业课,虽然不是很精,但各门课在那些地方需要离散数学还是很清楚的。所以我们在讲课的时候就能够举出非常好的实例,把专业课的内容与离散数学的内容沟通起来,往下接就是高等数学、数学分析的基础课了。所以我们讲课都不用教科书上的例子,而是来自于其他的课程、来自于学生的项目、来自于博士论文的东西,把这些东西结合起来,都是热点、前沿的问题,所以课程上就能够找出比较好的例子,抽出适当的给大家,这样效果比较好。

我们看到离散数学的位置是这样的。我们学校是对离散数学要求最高的,所以上三个学期。一般的学校上两个学期,还有上一个学期的。最底下是高等代数和数学分析,然后算法和数据结构开的比较早,跟集合论并行。离散数学讲完后,从数学基础上学生可以会更清楚算法中的问题,讲概率统计就有了一定的基础,而其他的专业课也是以离散数学为基础。

教学内容与设计

理解了课程的定位后,就可以对教学目标进行设计了。实际上,我们把课程的教学目标定位成三种,一个是科学型、工程型、应用型。我们的学生有出国的、读研究生的,但读完后还是会去公司。据我们了解,真正做教授或去研究所做深入学术研究的很少,当然还有,有的做的很不错,有一个刚刚得到英国最高的计算机大奖。但这种比例大概只有20%左右,大部分是做工程。因此我们做课程设计的时候就要考虑到以后做工程的情况,我们的设计是模块化的结构,就是以工程和研究为重点设计模块,有的模块是可选的。一个是通过课程体现出来,另外可以发到网上,可以跟同学讨论,但不一定在课上讲。还有一个通过校长基金或者课题,跟特别感兴趣的学生有一些讨论,给他在理论方面更多的培养。

从我们的教学目标来讲,要具有良好的知识结构,这是最基础的,起码为学习其他课程打下基础。对基本的知识清楚了,以后看到这些符号、术语都能够看懂,能够比较容易地看懂种种形式化的表述,这是对所有的学生必须达到的最基本的要求。第二个是掌握离散数学的语言,能对实际问题给出基础的描述(建模),这是对应用能力的最基本要求。我们有时候审博士论文、硕士论文,那些论文做出了一个程序,但开始的建模说的不清楚,里面就能挑出很多毛病来。所以要解决这些问题,我们就对学生的应用能力有一个基本的要求,必须能够把问题描述清楚。第三个是工程实践的能力,就是掌握离散数学的分析方法,针对实际问题设计好的解决方案并加以实施。这是解决问题,刚才只是表述问题,然后对这些性质做一个评价,现在是设计方案解决问题。前面这三个是我们的基本要求。第四个是研究能力,就是培养思维严谨性,提升抽象思考和严格推理能力。我们北大有这方面的要求,像逻辑,别的学校都是讲自然逻辑系统,我们讲公理系统,就是建立非常形式化的系统,跟别的学校讲的差距很大的。国外的学校讲的也比较浅,但好的大学会在别的课程补充,像MIT等。我们学校要跟国际接轨,从这方面提高学生的抽象思维能力,对研究能力,我们希望有50%到60%的学生在这方面受到训练。最后是创新意识,因为现代数学发展的非常快,代数、几何融合地发展,我们希望能够介绍数学新的发展,包括离散数学新的发展和应用,这些就能够给大家一些创新的意识,他们了解了数学是怎么发展的。这就是我们课程的教学目标,当然,对大多数的学生来说,前三个是必须要求的,第四个是一半以上要求的,最后一个就是对较少数的学生要求,因为有的学生对这门课程非常感兴趣,学习就深入一点。我们的课程应该让所有人都有收获,不能只是最好的那几个人有收获,那么很多人就听不懂了;当然也不能针对最低层的人,那么逃课的人就很多了。所以我觉得应该大多数人有收获,而在课下的环节有所差别化。

下面是教学内容,这是我们的知识模块,再细一层就是知识点。第一是离散数学的基础核心知识单元。集合和基本逻辑是最基础的,再上是函数关系和树图,还有基本计数和证明技术。这些是最基础的,所有同学都要掌握的。第二是支撑核心知识单元,这是承接上面来的,上面讲基本计数,这里讲高级计数;上面讲树图,这里讲特殊的图,像环图,带权图等,各种建模的方法图,所以他是下面基本知识的拓展。

代数结构是建立代数模型,一般的离散数学建模是关系模型,数据库就是这样;而代数模型则体现在编码系统,也就是元素之间不仅仅是关系,而是通过运算把他联结起来。所以这部分也是核心内容,是学生必须掌握的。然后在上面是扩展知识单元,像形式系统,完全用公理系统来建立逻辑体系,要求推理是在系统内来建立,这对学生的思维训练是非常必要的。还有像集合基数、计算理论、初等数论,我们讲前两个,计算理论和初等数论开了两个选修课,有兴趣可以去听。我们开的课程很多,学生有很大的菜单可以选择,真对理论感兴趣,后面就可以选这些课。

这是整个一门课程的设计,依据就是教学培养目标,就是让学生达到什么样的能力。进一步,除了把知识模块讲清楚,还要总结出这门课程要教给学生什么样的方法,就是在方法上的要求。我们这个课程主要是“数学的方法”,就是以数学为工具进行计算机科学与技术研究的方法(主要是建模),然后用数学的语言来表达事物的状态、关系和过程,经过推导形成解释和判断。它的特点是高度抽象、高精确、具有普遍意义。

在计算机科学中用到的、离散数学所能教给学生的,我总结有三点。第一是描述方法,就是模型,能够把这个事情说清楚,所以要归纳出来能建立多少种模型,这是用来描述的。第二是描述出来后干什么呢?就是分析方法,一个是变换,通过离散数学就是让他学会变换,把一个模型变成另外一个模型,是否等价,或者谁的能力更强。软件开发实际是变换的过程。上面的描述是很粗的形式化描述,至于具体怎么实现,要一步步把它由粗变细,最后变成机器可以执行的代码。初始的设计只是说软件有什么功能,然后要通过各种工具来进行变换,所以变换的方法是非常重要的。另一个分析方法就是数量化,要把问题定量来分析,这个也要通过我们的教学来对学生进行各方面的培养。第三个方法就是证明的方法,这是人思维上的演绎推理、公理化方法、构造性方法。通过我们教学中不同的模块,都要对这些方法进行训练。我们在教学安排中,除了要让同学掌握哪些知识,还要专门考虑要让同学掌握哪些方法。

“证明的方法”对学生的要求是能力。计算机科学技术人才所需要的能力结构,我也总结出几点。

首先是获取知识的能力:自学能力、信息获取和表达的能力。其次是应用知识能力,包括对事物的整体的系统的认知能力,不能只是对某个细节清楚;还有理论分析能力、实践能力。做工程的人必须有这样的能力,否则就没有办法把握这个系统,不能只是别人把整体设计搞好,你去写代码,这是最低层次的工作,是培训学校的学生干的,而不是我们的学生干的。我们应该培养总架构师,有整体把握的能力,也就是带一个团队去做事,所谓工程上的领军人物就是这样的。再次是创新能力,包括创造性思维能力、创新实验能力、科技开发能力、科学研究能力、对新知识新技术的敏感性等。当然这些能力的实现不是我这门课能做到的,而是应该整个框架性的课程体系来做到的。而且创新能力也不是所有的学生在这方面有比较大的提升,当然我们希望如此。我也教了多少年学了,感觉现在的学生比不上以前的学生那样思维活跃了,可能现在的中学应试教育搞得太厉害了,所以中学生进入大学后并不适应,我们也不适应,教起来挺费劲的,在教学设计中要想好多办法,所以在考试命题中一定不能用中学的方法,甚至有些命题就是建模,拿一个实际问题去建模。方法并不是唯一的,比如一个学生用关系的方式,一个学生用图论的方式。所以要通过教学,让学生有自己的思维、自己的方法,不要老follow你的东西,只知道模式化的东西。而具体离散数学的能力培养目标,不可能完成那么多的能力,主要有:获取知识的能力,系统的认知能力,理论分析能力,还有创造性思维和研究能力,至于实践能力要由其他课程实现。

课程目标之实现

课程设计好了以后,下面需要看如何实现他,这是很重要的事情。我们院一些老教授,组成督导组,进行教学研讨,组织听课,帮助刚开始讲课的老师不断总结经验,他说过:听过一些课以后,感觉年轻老师都很热情,很负责,但在教学安排方面有下面两个问题。

一个是太散,没有重点。因为计算机发展水平很快,而美国还是最高水平的,所以引进了很多原版教材,年轻老师就这个本找一点、那个本找一点,拼了个拼盘就上课了。他非常想把新的东西告诉大家,但没有组成一个体系,没有重点。也就是说讲课的重点非常重要,要是讲十个都没有讲好,不如讲清楚五个,所以一定不能散,组织连成一条线,大家都围绕这条线走。然后,每次讲课都有一次重点,各个点是有关联的。有个重点以后学生看书就能串成一个有结构的东西,这对他后面掌握这门课思想非常有帮助。

第二个就是内容太多。一定要删,别不舍得删,不能说我想告诉你所有最好的东西,最后可能适得其反。所以我讲课的时候,一般讲教材60%的东西,剩下的学生自己看。比如说,相类似的定理,一般推其中一个,不算PPT,指在板书上一步步推。要舍得砍,不要不舍得,往往新的老师这一条没掌握好,因此学生老反映课程体系不好,有些乱,听了一大堆,抓不住核心是什么。另外,要把基本的东西作为主要部分,即基本模块、基本方法、基本能力,把这三个东西作为重点。适当地介绍学科的新进展和开拓性的内容,但别到处引经据典,听到一个新方向就在课上介绍,因为我们这课是基础课,训练目标和定位是不一样的。如果是高年级的专业课,倒可以完全离开教材,展开新东西,但是作为基础课,基本内容要占到讲课的大部分内容。

刚才是教学内容选择上有这些问题,然后教学设计上也有三个问题,这也是督导组教授提出来的。

一个照本宣科,书上定理一,我也定理一,书上定理二,我也定理二,完全把书上内容在课上通过PPT一篇一篇拉下来了,这样效果不好。北大的学生要求也高,如果照本宣科,逃课的一定多。所以一定要把东西讲活,基本内容可以围绕书上讲,但例子可以来源于你的科研实践,来源于学生的论文、课题,不能完全照抄书本。现在数据挖掘很热,就是从成千上万的数据库里提炼出知识来,然后用这个指导客户的投资,选择好的方向。这个方向实际上比计算机还热,我们学生毕业后做这个的比计算机的还多,而且工资高的很,去年一般年薪40万。同学们对这个东西很感兴趣,而这个是基于数学模型的,所以就可以跟我们的课程结合起来,在课上点一下,告诉大家。学生就觉得这个课能结合计算机的热点问题,就会感兴趣。所以,一定不能照本宣科,教材是不可能更新这么快的,课堂的内容当然要以教材基本点为主线,但课堂内容要自己组织,不能完全跟教材一样,这样就讲活了,学生也就爱听。

第二个就是讲的快,没有节奏。因为现在课时很紧,我也觉得紧。这学期更少,16周,48学时,可是计算机新的东西越来越多,但只能采取取舍的方式,不能节奏加快,这样大家分不清主次,反而不好。其实本科四年,他毕业后不见得用你这个东西,所要突出方法、能力的训练,内容倒是可以取舍一部分。

第三个缺少交流。对此我也没有办法,因为我的课太大,一般180人、200人,可以提一些问题,但没法让学生在课上跟你交流,所以我们采用课下的网站、论坛,或者email交流。这个我也找不到好的方法,觉得很遗憾。

这是存在的问题,这些还是很关键的,因为直接关系到如何做教学设计。我们采取的方法有:对于如何能不照本宣科,一个是选择好的例子,一定要跟计算机最新发展的典型实例和热点问题结合起来,另外一个要讲出知识后面的内涵,也就是说研究方法,不要就知识讲知识。这是学生所需要的,也是感兴趣的地方。这样就避免了非常照本宣科的干干巴巴的去念,这样效果不好。在讲授重点方面,突出基础性概念,即基本概念、重要的定理,然后是基本方法。然后也会有一些适当的习题课,穿插一点,因为离散数学的方法跟一般的数学不一样,好多同学刚开始掌握不了这种方法。每个学期会有小测验,完了后会做习题分析,然后给大家讲容易出错的地方,讲解题方法。这些东西还是要讲,靠助教好像不行,因为助教都是研究生,有些东西讲不透,所以还是在课上适当抽出一点时间讲一下这方面的东西。另外就是知识框架方面的总结也要适当有。这些都是书本上没有的,但学生最需要的。

刚才讲的是从教学设计上考虑知识内容的选择和方法,另外一个就是启发性教学。

就是说,真正做研究工作的过程,通过启发性教学就能讲出来。比如说,先有问题、找问题,然后对这个问题怎么建模,把实际问题提出来。我们讲课不是直接定理一、定理二,而是给他问题,然后大家考虑怎么建模。建模后,我们再来讲怎么求解,就把方法和理论引进来了。有了理论以后,再讲在实际例子中的应用。所以讲课就跟实际过程中的思路是一致的,这样同学不但学到了知识、学到了理论,而且学到了研究的方法,会把他用到实际应用中去。

这个是一个例子。我选的是大家学过的递归算法的例子,这用的非常多,就是汉诺塔,很有名的例子。

这个例子是把n个盘子从A移到C,通过B的辅助,每次只能移动一个盘子,而且大盘子不能压住小盘子。这里假定n=3,我们设计一个计算机算法来实现它,我们先假定初始的时候n-1个盘子用同样的方法利用C柱从A移到B,然后第二步,把最后的盘子从A移到C,第三步,把n-1个盘子从B借助A移到C。这个算法大家在数据结构里都学过,但是我要问你:这个算法好不好,有没有办法实现一个效率更高的算法,那么就要引入方程。如果说移动n个盘子用T(n)来表示,第一步是T(n-1),然后加最下面的大盘子+1,然后还有一次T(n-1),所以方程是T(n) =2T(n-1)+1。对这个问题的分析方法就是建立这个方程,然后告诉你这个方程解出来之后是T(n) = 2n-1那么这个在计算机中是否可行,实际中是否适用?如果一秒钟移一个盘子,64个盘子需要多长时间呢?要5000亿年。因此,我们可以看到这个算法实际中是不能用的,虽然现在的计算机一秒钟上亿次的速度,但还是难以接受的。

根据这个例子,大家就会感兴趣,知道自己设计算法的时候,需要做分析来看实际是否能运行,这样他就会对这个理论感兴趣,就要做这样的工作。然后我们再问他,你有没有更好的算法?能不能快一点把盘子移出来?然后我就告诉他,不可能,现在的算法只能设计到这样的程度了,没有更好的算法了。因此通过这个再介绍一些这方面新的进展,把这个问题的变种告诉他,比如Reve难题,是前几年在做的东西。这样,通过具体的例子,是他在其他课程或者编程中实际碰到的问题,引入你这门课的理论,通过这个理论把这个问题解决,解决后再把这个问题推广。这样学生就不会感觉这是一门枯燥的数学课,而是能够跟计算机紧密结合的课。很多学生听了这个课之后,觉得以后做硕士做博士确实会用到这门课,因为讲到了非常有用的东西。回头看这个过程:通过问题引入方程的定义,引入求解方法,然后讲具体的例子,最后推广。大致就是这样的讲法。

刚才讲的几点就是教学设计中的相关问题。

其总体思想就是知识是基础,但一定要突出能力的训练,把能力训练体现在不同的环节,包括课堂讲授、作业和研究性课题--发到网上,有些同学有兴趣可以做。还有测验和考试的命题和评价体系,我不太喜欢那种命题,就是比较死的ABCD式的客观试题,这样学生就变成了考试机器,只是去背或者题海战术,很多同学关心老师有没有题解,或者从师兄师姐那里把考题弄到手,这样还是中学的方法。我们的不一样,考题中有最基本的题,有基本的要求,要不然都不及格怎么办。我们要保证达到基本的要求,就是前面说的前三个要求,基本上就有七八十分。但我们一定有活题,这些题不能靠翻书、做习题集能做出来的,而是来自于相关的资料或者研究中找到的问题,这些问题不见得有标准的答案,但通过这个来考察学生应用、理解的能力。所以在我们这个课,学生们都知道了这样的方式,就不去搞那些死记硬背的东西。我们系其他的课程也在朝这个目标努力。我们有一种评价方法,就是学生提出好的想法,在总评里会给你加分,所以,在测验和考试命题的评价体系中,能够真正实现能力培养目标。另外还有网上教学,就是论坛以及发布信息等。

几个问题

上面是把我们讲学的情况做一个简单的介绍,也希望大家能够提出批评意见和建议,我们也希望我们的教学能够对学生有好的帮助。下面,我自己有几个问题希望请教大家,跟大家讨论。一个是我们也觉得教学与科研的关系很重要,学校一直在说教学放在第一位,但具体执行时,教学的评价是软的。教好一门课真的很花时间,一个是有好的教材,好的知识资料的积累,而且花很多时间跟学生的沟通。这些东西评价体系很多时候体现不出来。科研就比较好办,他是量化的,SCI多少篇,多少经费,这都很好做。这些东西很麻烦,但因为觉得不能对不起这些好的学生,所以教学上还是兢兢业业在做不少的事情。我们无所谓了,是退休的人了,也没有人去审评我们,但对于年轻老师来讲,还是应该有更好的政策来鼓励教学。

另外,就是规范的培养目标和学生个性化发展的关系,这是一对基本的矛盾。我觉得要有基本的要求,但也要给予学生一定的宽松度,就是让学生能够按照自己的方向发展。我们学院也有这样的想法,因为学生很可能将来从事交叉学科,因此学一半的计算机课,学一半的微电子课,将来做芯片设计工作就很有用,而这方面的人才特别缺。因此,不能绑定的特别死,那么在教学设计、在考核内容和评价体制,比如学分的设计就要灵活一点。我们现在确实有灵活的选课菜单让学生选择,还有在教学环境上,有不同方向的人可以讨论。所以这也是非常重要的一点,将来真正能出东西的,交叉学科可能是比较有希望的方向。

第三个是自主学习和老师引导。说老师上课时一定要给学生留有余地,让他有自主探讨的环境和机会,同时要有引导,所以我们一般在课堂上把框架给他,然后课下讨论。

第四个是课程评估。现在评估是学生打分,所以老师比较在乎这个事情。但有一个老师对学生很严,那么课程评估的成绩就不是很高,那对这个事情怎么看?我自己的感觉,认为这是一个好的老师,因为我听那些毕业到外边工作的学生回顾哪门课最管用?他们说有门课,当时他们管那位老师叫“杀手”,因为毙的比较多,但回过头来看,这是最有用的一门课程。所以,课程评估该怎么看?我觉得那些让学生多少年后还会觉得这门课对他有用,这才是对得起学生。因为现在学生非常在意分数,这跟他将来保研、出国以及奖学金等都是挂钩的,所以对分数怎么把握是个很重要的问题。反正我们组的老师是比较严的,考完后有学生来磨分基本上是磨不到的。这个东西,其实真做惯了也没什么,因为你是真心对他们好。

另外还有传统的教学方法和先进教育技术的结合,我们就是把PPT与板书结合起来,上课的时候不仅有PPT,在细致的推导过程或者框架性的介绍方面,还是需要板书的。尤其数学课程,光靠PPT,学生没印象,一张张拉过去了,他可能没有理解到讲课思维过程和数学思想;这一条可能在数学课上更明显。

好的,我今天讲的主要就是这些,非常欢迎大家提出宝贵的意见,谢谢大家!(掌声)

 

讲座问答

问:前几年我也带一些学生做几个项目,就是感觉好像计算机水平、能力很大程度上来源于计算机之外。那些学生,包括北大清华的,有非常出色的能力,一天几百行代码都没问题,但是他们对事物的理解、对模型的理解还是比较差。这个不知您在教学中有什么针对性的讲授?

答:这个是综合素质,包括人文的东西在里面,不是光靠我们的课程能解决的。我们学校强调学生要宽基础,尤其最近有人提出中学不要文理分科,人文教学是很重要的,不单是学会怎么做人,实际上也是有直接用处的。人的思维就两种,一个是抽象的,一个形象的,这两种都需要,真正的大家各方面都强的。很多老教授,我很佩服他们,数学好,物理好,教哪门课都行,但现在的老师教两三门就不错了。所以我觉得学生除了需要学科体系里的训练,还需要人文的训练,才能真正成为有价值的学生。

问:另外,屈老师刚才提到的教学评价问题,你是否认为把教学问题量化,这个思路本身是有问题的?

答:不仅教学,就是科研用量化的方式评价也有不好的地方,就像鞭子式的,赶着这些人在那干活,但要出那种原创性的成果就比较少。不说别的,王选院士的成果可能是中国最产业化的东西了,他是多少年的时间没有发论文、没有出成果。刚开始出来的时候是电子管,焊线有一点问题就不行,那么怎么保证不出毛病呢?就是拿个东西敲,敲了之后没毛病就算可以了,这要敲好多天呢,就是做这些很平凡的工作。王选教授讲他的故事的时候,很多都是平凡的事情。但在那个基础上提出了激光照排,好多年就是做这一件事情。要是按现在的评价体系就不好办了,怎么给他评价呢?

问:学生经常评价一个老师厚道不厚道。如果一个老师管的比较松,要求低一点,比如一些同学迟到早退啊也不在乎,同学就说这个老师很厚道。但我跟同学们说,不能评价老师厚道不厚道,而是要评价这个老师是否认真、是否公平。如果不公平,再厚道也没用,你可以不上课,我给你一百分,但这样好吗?虽然说学生毕业以后可能不这么看,但他们现在的看法直接影响你的教学评估。

答:等到再过几年后,这种评价就会变的。我们也有过调查,我们问的学生都比较好,起码是中层以上,他们就会回忆说还是严一点的老师好。而且我们院现在评价不仅看教学评估的分,还有一个督导组,他们要听课,同行对你的评价。所以有一个老师的评估分不是特别高,但课上的确实好,学院里就认同。今年这个课也上了国家精品课,评价也不错,院里也有一些奖励措施。可以说学院这几年对教学还是比较重视的。

问:我们有一次教学研讨,我说讲普通物理真累,有位领导说讲普通物理不必认真,要有当作业余活动。我当时感觉非常吃惊,因为我每天晚上都耗在这上面了。

答:当年不是这样的,原来教我们课的那些老师都非常好。校长教普物实验,现在谁愿意教普物实验啊,真的不一样了。

问:我是化学院的,您刚才讲的编写课程架构的那本书很有意义。我们也有这样的想法,但不知道怎么去做,您们是院里负责教学的院长亲自来抓,各位老师一起参入吗?您能讲一下具体的情况吗?

答:这也跟我们学院的环境有关,我们系有四个一级学科,别的学院没有这么麻烦。计算机科学与技术是一个,电子学还有物理的一级学科,微电子是另外一个,通讯又是一个,所以课程很乱。院长没办法,说要是不整合,课没法上,而且学校要求上院里的大课。所以院长挂帅,清华出版社资助了6万块钱的研究经费,算是一个研究项目,因为这本书出来之后,会对计算机教学有很大的意义,在社会上会有一定的影响,所以出版社很积极。这样,院长牵头当组长,每个系有一个副主任具体实施,因为本系的教学要作安排,基础部的主任也参入,组织老师讨论,搞了一年。讨论就讨论很长时间,因为每个系之间协调很麻烦。还有调研,国外剑桥、MIT、CMU等顶级学校回来的老师,把他们的教学计划拿来。这个工作确实下了很大工夫,各个组设了个负责人,程序组有,电子组的有,我是理论组的,我们在副主任的领导下讨论,我们还要跟组里的老师讨论,基础理论课那么多,都要讨论。这样来做,还是一稿不行,二稿也不行,改了好多次,最后出版了还发现有些地方有错误。确实下了不少工夫搞这个东西,比自己写东西费劲多了,那本书很厚,整个课程体系,每门课的课程内容都列了一张表在那里。但这个东西对学生的培养,我觉得还是有意义的。

问:这样每门课应该在体系中会有重新定位,也吸引了最新的进展,对吧?

答:是的,我们很多课确实重新定位,有些课做了调整,比如重叠的课归到一个系来上。另外,我们院是个大院,基础课人很多,所以分成ABC班,A班就是可以参加竞赛的标准,最高的,B班则是达到中等要求的标准,还有C班,有些学生就想做应用,不想做理论,可以上C班。这些课程名、课号也不一样。数学课也分数学分析和高度数学,数学分析就是跟数学系的一样,高等数学就跟物理系的走。学生要想保送计算机的,必须学分析,要是不想学,高等数学的学分也可以。这里有一定的奖励机制,有的学生真的特别强,数学学A,物理也学A,程序设计还学A,真的是人才。有的学生则全选B,还有的学生选C,就是想去公司做应用。总的来说,这本书确实整理了很多东西。

===========

本文根据屈婉玲老师在“第三届北大教学论坛”上的讲座编辑整理而成。

讲座时间:2008年12月9日,下午2:40-4:30

编辑整理:鲁鹏一,郭九苓。

讲座视频:rtsp://162.105.14.149/forum/12.rm

 

 

                                                       (来源:北京大学教学促进通讯