信通院的桑林副院长希望我写一个交流感受,她想了解下北美的教学方式和中国最大的区别是什么,花了几天时间,趁着离开UCSD没一个月,赶紧把想法记录下来。
UCSD三个月学习感受
我叫夏宇,是北邮通信工程大四的学生,2012年9月到12月,我很幸运参加了北邮和SAF的合作项目来到University of California San Diego,作为UCSD Extension的学生,在UCSD完成了一个quarter的学习。在这短短的三月里,我深刻体会到了中美在Computer Science专业本科教育的差别。
在北邮,我虽然不是计算机专业学生,但我们专业也有一些计算机方面的基础课程,比如c++,数据结构,同时因为我对cs很感兴趣,选修了通信工程专业里所以和计算机相关的课程,比如计算机网络,linux操作系统,数据库概论,还有校任选课,操作系统概论,图论基础等。
我在UCSD选了下面三门课程
Intr/Computer Sci&Obj-Ori:Java CSE-11
Server-side Web Applications CSE-135
Software Engineering CSE-110
其中CSE11是Freshmen level的课程,也就是面向cs专业大一学生开设的课程,CSE135则是面向大四学生开设的课程,而CSE110则是主要面向大三学生开设的课程。
下面我想从几个不同的方面谈下我的体会。
课程形式
就拿CSE11 Java programing和我大一上的C++课程比较。
UCSD的CSE11,课程形式是每周二、周四的早晨8:00到9:20的lecture,周五下午2:00到2:50的Discussion Section。还有Lab hour,在给定的Lab hour里,会有Tutor或Ta帮你解答问题,其他时间也可以去机房,但没有Tutor或Ta。
国内一般是每周会有两次两个小时的课程,中间休息10分钟。大一的时候也有上机时间,也有助教,也可以向助教求助。
另外两门课程的形式
CSE135 Server-side Web Application,同样是每周两次一小时二十分钟的lecture,一次discussion section。没有lab hour
CSE110 Software Engineering,课程形式比较特殊,课程模拟一个软件公司,学生组成不同软件开发团队, 每周两次lecture,周一有一小时Customer meeting,周三有lab,时间不定,一般会花费两个小时以上
分数组成
UCSD的cse11,有5次当堂Quiz,就是小测验,老师出一张小卷子,十五分钟的时间完成,5次总共占10%的分数,10次Programming Homeworks,每周一个,编程作业占40%的比例,期中占20%,期末占30%
CSE-135 Server-side Web Application,三个大作业,占60%的分数,一个期中10%,一个期末30%
CSE110 期中10%,期末30%,项目60%,项目细分的很多,包括lab,出勤,文档,最终演示,每周的customer meeting。
国内的C++, 作业20%,术后习题为主,编程和概念类作业各占一半,期中20%, 期末60%
我的体会
让学生从大一就接触高级知识
北美的课程,尤其是cs的课程,内容更新的很快,非常强调实践,比如java课程,因为这们cse11,是Accelerated Pace课程,是给已经有过编程经验的同学开设的高级入门课程,老师每周都会布置强度很大的作业,作为大一新生,第一次作业就是GUI绘图,在随后的作业里,面向对象设计,多线程比比皆是。 有一次作业是写一个简单的连连看游戏,只给你一周时间,而国内的小学期,也是用c++做游戏,给将近一个月的时间。另外老师非常强调使用正确的工具,比如不允许使用IDE如Eclipse开发,而要求使用VIM,并引入Linux系统作为开发平台,在每次作业的简单题里,都会有关于Linux和VIM使用的小问题。 这个我觉得极为关键,相信现在不少国内的计算机科班的学生,接触Unix和开源文化都是大二大三才开始的,而且很少是从课堂上了解到的,但在北美,大一的老师从第一天上课开始就开始向大家宣传,而且如果你要去lab做作业,你发现所有的主机都是Cent OS的,虽然也有Windows,但上面没有Java的JDK,没法写代码,从代码的编写,到编译,执行都要用最原始的方式进行,不借助于任何自动化工具,老师希望通过这种方式让学生更多的了解程序底层的细节。
向学生介绍最前沿的知识
印象最深的是CSE-135 Server side Application Development的课程内容,老师从java Servelet入手,讲Server-side Application Development的本质,到JSP, Database Design,Security,再到后面Javascript,AJAX,和Web Framework,所有的内容都是和当今业界紧密联系的,实用性非常高,像Ruby On Rails,Html5这些技术都有介绍和展示。 反观我们专业大四上的网络程序设计与开发,内容都是很多年前的了,和当今真正互联网行业使用的技术存在很大距离。这个学期学校还开设了高级软件工程课程,授课的老师带着大家学习Ruby on Rails框架,并在实践中向同学介绍什么是敏捷开发,同时老师还会要求同学们组队完成项目,项目内容自己团队确定,一般都是基于web的一些有意思的工具,比如有一个团队做的Lost and found网站,结合google map,丢东西的人可以把物品描述和物品丢失的可能位置标记出来,捡到东西的同学也可以给物品拍照,并把捡到的位置标出来,供学校学生使用。完成后会将web app部署到云端,通过这种方式,学生在课程中同时也接触了像SaaS等现在非常火的概念。 但在国内,计算机专业学生的软件工程课往往还是做类似于图书馆管理系统,学生管理系统等。内容雷同,而且用的技术也是很多年前的java ee等企业级的传统软件项目。
高素质的学生
来到UCSD以后,另外一点令我感受颇深的是学生的素质。 原来以为美国学生大学party居多,并不很重视学业,但实际上恰恰相反,cse11的java课程一共有180多的学生上学期选了这门课,最后我的排名是67名,总分97分(北美的很多课程有电子的成绩系统,每次作业,每次考试的成绩都会放在上面,系统会自动计算你的排名,你可以看到很多统计数据)有10几个学生的总分超过了100分(每次作业都有bonus额外分数,期中期末考试也有额外分数)80分以上学生占到了95%,每个周末你都能看到很多大一的学生自发组成学习小组,来到机房做作业。 软件工程,我和另外7名同学组成一个小组,为一个当地珠宝商开发一个电商网站,我的组员每个人都主动承担很多工作,文档撰写和coding,有一次我们团队负责前端的同学因为要去旧金山参加面试,耽误了几天时间,但他周末回来后,周六周日两天都泡在机房,最后还是按时完成了他负责的任务。 北美这边自由的选课制度和严格的教学方式使得本科的cs毕业生就具备很强的实践能力,有很多UCSD CS本科生去Facebook,Google实习,拿到全职offer的也是数不胜数。
严格的学术纪律
在UCSD上的三门CS课程,第一节课上来老师都会强调Honor of Scholarship,cs11的老师甚至第二节课让我们打印一份Integrity of Scholarship Agreement,签字交上来,这样才算选上这门课,我有一个东南大学参加SAF交流项目同行的同学,有一次数据库作业快要截止了,但他当时还在写高级数据结构的作业,于是他便从自己中国同学那里要了一份儿代码,改了改变量名就交了上去,但被老师查出来和原来那份有极高的相似度,于是他们两个都被叫到了老师办公室,解释是怎么回事,他们向老师解释因为他们是交换生,刚到这里还不太了解这边的规矩,所以请求老师原谅他们一次,他们很幸运,老师说不会上报给学术委员会,我的同学也老老实实的重写了一遍作业。老师和他们说,这种事情如果被学术委员会裁决为抄袭或舞弊,他们会受到非常严格的惩罚,类似于留校察看或者直接开除。而在北邮,期末考试作弊,会被留校察看,替考会被开除,而平时作业抄袭没有任何处理,这也就导致了很多编程作业,抄袭往届学长作业,团队开发,只有一两个能力强的写代码,其余人傍大腿这种情况。
完善的助教制度
在UCSD的Computer Science and Engineering Department有着非常完善的助教制度,很凑巧,我上的CS11的老师和CS110的老师是专门负责CSE下助教和Tutor事宜的老师。 在UCSD,Ta要求是研究生或博士生,tutor可以是本科生或研究生,拿CS11举例子,180多人的课程,有一个Head TA,还有十多个tutor,Head TA是研究生,在google和facebook都实习过,现在是UCSD的facebook校园大使,她负责管理手下的十多个本科tutor,tutor主要负责lab hour时给同学答疑解惑,每周的discussion课也会有不同的tutor来给大家上,每次的编程作业每个助教会判十几个学生,然后亲自给学生发邮件,并标出每一部分的得分和扣分原因及改进意见。 这些tutor一般都是大三或者大四学生,工作一个quarter,学校会给他们大概1000多刀的工资,每周需要有大概3~4个小时的工作时间。而TA有两种选择,一种是每周工作10个小时,每个月有1000多美元的工资,还有一种是每周工作20小时,每个月有2000多美元的工资,还能减免一半的学期学费。但是TA非常辛苦,每节lecture都要参加,要了解当前课程内容和进度,还要主持discussion lecture,还有判作业改作业,解答学生问题,期中期末监考,老师基本上只负责授课,剩下所有的事情都交给Ta来做。虽然Ta和tutor很辛苦,但吸引他们的并不主要是工资。 这边的很多大公司,比如微软、Facebook、亚马逊、Google等,他们倾向于招募有过Ta或tutor经验的学生,而且作为教授的Ta,教授最后会帮你内推或者考虑接受你作为Phd学生。所以就成为了一种良性循环,大一新生上课后,知道他身边的ta和tutor很多都是在这些大公司实习过的,他们知道主要因为有tutor经历,也有了奋斗的目标,于是他们在老师和ta、tutor的鼓励和帮助下拿到高分,大二被招募回来做tutor,有了这段经历找实习的时候很有竞争力,拿下了大公司的offer,再回来做tutor或ta,帮助更多的学生。但这种模式在中国实施起来难度很大,一方面是学校没有这么多资金支持,另一方面是教育资源有限,老师太少,学生太多。 而且学术纪律和学生素质达不到要求,但我认为这其中有很多值得学习和借鉴的东西。