转: 美国大学计算机教育漫谈
为了解国外大学计算机教学情况,2002年春季,清华大学组团到美国进行了一次考察。考察组先后到斯坦福、伯克利、加州理工等著名学府进行了调研,旁听了一些计算机方面的课程,与有关教授、教务管理人员和中国留学生进行了座谈,并参观了学校的图书馆和计算机机房。下文就是我们约请清华大学计算机与信息管理中心副主任王行言教授撰写的考察随笔。
4月9日 斯坦福大学
上午,我们分头听了“数据库”和“编译原理”的课程。数据库为大班课程,本节课主要讲ER图和ER模型。授课方式是“黑板+粉笔”,6块黑板来回切换。教室有电视和录像设备,电视跟踪和放大黑板内容,所以无论坐在哪个角落,都能看到黑板的内容。教室后有制作室,可以对课堂教学当场录制。课上同学提问题很踊跃,老师也不时地提出问题,回答最好的几乎都是中国留学生。
中午饭后,我们参观计算中心和图书馆,两处都有学生上机的环境。学生来去匆匆,多半都是上网看一下课程通知或下载、打印几页文档资料。
我们在浏览网页时,看到上午的数据库课程已制作成视频课件(不到半天时间)。学生可以自主选择听老师的某段讲解,或看某页的板书。在斯坦福,有专门制作人员(并有学生参与)对部分课程进行录制加工,并及时放到网上,供学生下课复习。这些课件还有一个重要的目的,就是用于继续教育,为学校周围的在职人员学习提供方便。
在计算中心入口处的通知栏上,我们看到了白板上公布的一些课外讲座,如UNIX操作系统使用、Office工具软件的使用等,此外还有一些编程语言的入门课程。
下午我们又听了一门“程序设计”课程,估计教室可容纳四、五百人。学生进教室时,每人在门口拿一份本节课的讲义。很多老师在上课时都习惯准备随堂使用的讲义,内容包括补充的素材和本节课布置的习题。本课程由斯坦福大学计算机系副主任Eric S. Roberts教授主讲,他就是IEEE和ACM推出的“Computing Curricula 2001”的主要执笔人。这节课他主要是讲解算法设计(树搜索,迷宫等)和程序调试。Roberts教授使用笔记本电脑及大屏幕投影授课,屏幕上显示的是讲课用到的代码及程序调试环境,但他大部分时间是坐在讲台上,面向学生滔滔不绝地讲解。程序设计课程使用的教材是Roberts教授写的两本书:“The Art and Science of C”和“Programming Abstractions in C”。这两本教材在美国被多所大学所采用。
4月10日 斯坦福大学
上午,我们与计算机系副系主任Eric S. Roberts教授座谈,请他谈一下斯坦福大学的计算机教育(包括非计算机专业的计算机教育)。他饶有兴趣地谈到了斯坦福大学计算机系的发展和计算机课程的设置情况。
他说,与大多数专业相比,计算机科学是一个非同寻常的领域。当100年前斯坦福大学成立之际,大多数学科就已经有了一定的历史。50年后,才发明了世界第一台计算机。又过了25年,计算机科学才成为一个独立的学科。斯坦福计算机科学系成立于1965年,并一直保持世界前4名的位置。
在最近25年中,计算机科学飞速发展,并极大地推动了社会的进步。计算机科学将继续成为一个令人兴奋的领域。
在斯坦福,大多数学生愿意学习计算机科学的主修课程。在CS主修课程中,学生可以追踪很多不同的领域:程序语言、图形学、数据库、计算理论、人机交互、机器人学、人工智能、数值分析等。随着近年来需求的变化,CS主修课更加灵活并满足大多数学生的需求。
在斯坦福大学,新生入校时不分专业,学生的专业要根据个人选修课程的情况到高年级才逐步明朗。当然,在入校时,学生还是有自己的意向。学校为每位想学计算机的同学都提供一份指导性文件,说明在斯坦福学习计算机的几种途径。除CS之外,还有五种其他选择供学生考虑:
1.C omputer Science Minor(CS辅修专业)
该辅修专业提供 CS主修课中本科的核心课程(见图1),由6-8门课组成,安排在两年中学完。
完成辅修课后,学生将获得很强的编程基础,并进入计算机科学的某个理论分支。进而,学生可以在自己感兴趣的领域学习更多更深入的课程。
图1是辅修专业的课程设置。
2. Computer Systems Engineering (CSE)
CSE是跨计算机科学和电子工程两个系的交叉学科。
CSE的主修课类似于计算机科学系,但一些偏理论的计算机课程被电子工程方面的课程所代替(如数字设计与电路分析)。
3. Electrical Engineering (EE)
适合于对计算机科学、特别是对硬件更感兴趣的同学选修。除了侧重硬件外,EE学位和其他学位的主要不同是侧重于工程。
4. Mathematical and Computational Sciences (Math/CS)
计算机科学和纯数学的结合。学位课包括计算机科学基础核心课以及各种数学课。除这些核心课程外,学生还侧重计算机或数学选一些课。
5. Symbolic System
是交叉学科,结合了计算机科学、心理学、社会学、以及语言学,研究人-机的认知。将人和计算机视为符号处理系统。
Roberts教授还讲到,由于计算机技术的发展,可以用计算机解决更复杂的问题,并且可以不需要编程,起码不是传统意义上的编程。所以计算机系和计算中心还面向全校开设了一些更侧重于应用的课程(包括各种语言与工具类课程),主要是满足全校非计算机专业学生自己学习计算机和应用计算机的需求。其中一些课程的内容就类似于我们计算机文化基础课的内容。这些课程包括:
CS1I—Using the Internet
CS193D—C++ and Object-Oriented Programming
CS193I—Internet Programming
CS193J—Programming in Java
CS193U—Software Engineering in C
CS193W—Microsoft Windows Programming
如何开始学习计算机课程呢?Roberts教授给我们画了一张图(见图2)。
Roberts教授指出,如果要从技术的角度(而不是从文化的角度)学习计算机,CS106A(即程序设计)是第一门必修的基础课。学完CS106A后,如果想继续深入学习编程的知识,可选修CS106B。对那些在中学就已具有一定编程能力的学生,如果想学习C语言或想进一步提高编程水平,可选修一学期的CS106X(浓缩两门课的快班)。学完CS106B后,学生就有了比较明确的意向,如果想进计算机专业,就可开始系统学习计算机专业的课程。而不想选择计算机专业的同学,可以选修计算机系等单位为非计算机专业开设的其他 课程。
CS106课程采用的教学语言是C语言,Roberts教授解释说:C语言广泛应用于工业界,而且是学习更先进语言的基础(C++ 和Java)。
我们向Roberts教授提出一个问题:如果学生自己选专业,会不会有很多学生都选计算机专业?计算机系如何接纳这么多学生?Roberts教授说,的确新生中有很多人想学计算机,但学过1、2门计算机课程之后,不少同学就感到计算机专业不适合自己。经过多年操作,选择计算机系的人数已经趋于稳定。另外,美国的学生不见得都喜欢计算机,觉得整天坐在计算机前没有意思,而对于考古、地质等野外作业觉得更富有挑战性。
4月11日斯坦福大学
今天与计算机系教务座谈。系教务对我们讲,每个教授每年都要开一门核心课(研究生课程也算核心课)。教师的教学工作量要够一定点数,大课点数多,小课点数少。系里有一套评价体系,学生给系主任和教师本人打分,这些对教师的评级有影响。新生提前一周到校,招生办公室根据学生兴趣分派导师指导学生选课。每个学生都有一个导师帮助选课(一名导师负责若干名学生)。学校设有注册办公室,管理各种教学资源。
随后我们参观了硬件实验室。硬件实验普遍采用模拟软件,控制盒里有关键芯片。
下午我们听了一节毕业设计课,该节课的安排是请IBM公司的工程师讲解正在研究的一些新技术。根据我们的感觉,学校和公司的联系很密切。
下午我们和一位在斯坦福半导体研究所长期任教的清华老师进行了座谈。针对我们提的一些问题,这位老师说了一些自己的观点:对于硬件实验,电的教学、电路课做一些实验,单板机也有,但不是重点(有些爱动手的学生选修)。斯坦福大学还是偏软的多,同学出去主要是搞设计,搞算法。例如利用spice软件,10个星期设计一个芯片。硅谷对半导体人才需求很明确,学会三门电路设计课就要。斯坦福实验室很少,偏专门化的课就外聘教师。而基础的物理、化学都是大牌教授。美国毕业生专门化很突出,工作中就做自己专业的事,不管别的杂七杂八的事,否则是浪费人才、时间。计算机各行各业都在用,但要懂多少,并不见得很多,硬件结构、软件OS、C语言、数值分析、专业用软件等。计算机能力强,表现在把计算机作为工具,会算法、数据分析,自己专业算法强。光会计算机编程是中等人才,最有价值是专业的东西。
之后,我们又与部分中国留学生举行了座谈。在座谈过程中,不时有人进进出出,有的刚下课,有的要去上辅导课(助教),大家显得都很忙碌。很多同学是在网上看到要和国内来的大学老师座谈,就主动赶来参加,即使只能参加一会儿也要来。同学们见到我们都非常兴奋,也谈了很多在这里学习、生活的情况。他们说,这里的房东最喜欢租房子给中国学生,因为他们早出晚归。在美国念书,作业负担很重,每学期课的门数不多,但课程的强度非常大,例如程序设计,一周就有两到三次大课。斯坦福不太重视文章,没有文章要求。但学校中的研究气氛很浓,很多低年级的学生就自动组织起来,找一些具有挑战性的课题来做。
4月13日加州理工
今天主要是与留学生座谈,我们谈的范围很广,以下是我们聊的一些感兴趣的内容。
同学们说,这里系的差别不是很大,天文、物理、数学,无论是什么系,都要上一大堆公共课,本科是通才教育。教师与学生的比例是1∶3 ,TA与学生的比例是1∶20。编程的课主要是上TA的课。学校每学期为10周,课程强度高,难度大,每学期学5门课已经很吃力了。同学们异口同声地说,作业又多又难,交作业时间卡的很死,作业有时做到第二天天亮。作业绝对不能抄,在成绩中所占比例也很大。
我们问了一些有关计算机教育的问题,他们说,计算机系主要是讲理论。非计算机系的学生选一些计算机理论课,可以扩展知识面。他们感到计算机的哪门课都是数学课。各系并没有强迫学生选什么计算机的课,但聪明的学生会选一些计算机课。根据他们接触的情况,专业老师用计算机,学生就会学计算机。各系教师交流很密切,教授用计算机,会带动计算机教学。各领域的权威、教授应该知道学生在计算机方面需要用到什么。计算机教学不要与其他教学分开,用的时候就会学。他们认为,计算机的基础是程序设计。计算机教学分理论(计算机系开)和应用(与各专业结合,各系可开)。
同学们还告诉我们,期末考试时,监考老师一般站在教室外面,有问题再进到教室解决,以此表示对同学的信任。有的考试干脆让同学把卷子拿回去做,规定1到2天内交卷。我们问,那如果互相抄袭怎么办?同学说基本没有抄袭,因为学生自我约束很严,非常看重诚信二字。他们讲了正在发生的一件事情:一个同学将公共场所的一把椅子私自搬到了自己的宿舍里,学生委员会正在对此事进行处理(据说是要开除),学生委员会做出的决定,学校也不得不认真考虑。
4月18日 伯克利分校
今天安排和一个留学生座谈,因为他在美国念了多年的书,拿了一个硕士学位,两个博士学位,至今还没有离开学校之意。他向我们讲述了自己的一些感受和建议。
他说,国内有些大学把理论和市场对立起来是不对的。我们可以培训出非常好的程序员(写一个软件),但没有独到见解,没有算法。计算机理论,图论、线性代数等都是非常有用的。美国学校很重视数学怎么用到实际问题。学到一点数学,就知道用到哪,就有成就感,而不重视技巧。美国学生做东西比较深入,想得深。最出色的是美国学生。
美国研究生主动性很强,自发组织在一起,找题目研究(如人工智能、机器学习等)。新生进校后,学生会就组织学生参观专业,引发他们对专业的兴趣。国内的学生要脱俗,胆子要大一些。
在考察的过程中,我们也浏览了各校的一些主页,其中印象最深的是各校在使用网络教学环境时比较讲究实效,花样不多但内容丰富、规范。例如,几乎每门课程都有自己的主页,老师的一些讲稿也放在网上。课程主页一般包括以下栏目:
l 课程内容概要
l 授课人员(列出讲师、TA的名单及他们的电话和email地址)
l 上课时间/地点(一门课周学时一般为150分钟,75*2 或50*3)
l 答疑安排(时间、地点、答疑老师姓名)
l 课程先修要求(不是必须)
l 教材,参考书(一些参考书就是公司的产品文档,如Oracle documents)
l 考核方式(书面作业、上机实验、Project、期中、期末考试等安排和所占分数)
l 纪律规定(抄袭作业的处罚、如何保护知识产权,网上资源引用的规定和限制等)
以上是我们出国考察了解到的一些情况,写出来与大家分享与借鉴。
附:几个学校的课程网址:
http://www.stanford.edu/class/cs106斯坦福课程主页(以cs106课程为例)
http://www.cs.Berkeley.edu伯克利
http://www.schedule.berkeley.edu伯克利
http://www.cs.Caltech.edu/courses.html加州理工