大多伦多留学资讯网
加拿大最有影响力的留学专业资讯网站
文章15008浏览42935263

美国斯坦福大学计算机专业的本科教育

个人微信二维码

成立于1965年的斯坦福大学计算机系,迄今已有50年的历史。现该系大名鼎鼎,已成为世界顶尖的计算机系之一。该系一直拥有强大的教授队伍,比如人们熟知的高德纳(Donald Knuth)、乔佛里·厄尔曼(Jeffrey Ullman)、约翰·麦卡锡(John McCarthy)等都曾在此任教。此外,一些著名高科技公司的创始人也毕业于此,如著名的谷歌创始人拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)。20世纪90年代曾经如日中天的太阳计算机系统(Sun Microsystems),其名称就来自斯坦福大学网络。斯坦福大学计算机系每年都会向各大科技公司和高校输送优秀毕业生,几乎所有学生都有能力在毕业后获得一个10万美元年薪起薪的职位。旧金山湾区(San Francisco Bay Area)不断涌现出的各类科技创业公司的年轻创业者中,也有大量来自于斯坦福计算机专业的本科生。

本科生是大学里的主要群体,本科教育是一所大学的教育基础,也是考察一所大学教育成功与否的重要标准。笔者通过个人经历和调研访问,考察了斯坦福大学计算机专业的本科教育,旨在通过对斯坦福大学整体本科教育体系与计算机专业教育概况的介绍,让读者大致了解这所世界顶尖名校的教育制度和教学方式,汲取其可以借鉴的经验,有助于我们更好地完善国内大学的计算机教育。

招生形式
美国大学本科的招生形式是申请制。申请的材料很简单,包括美国学术能力评估测试(Scholastic Assessment Test, SAT)成绩、高中成绩单、两位老师的评语以及学校推荐信。有些大学还设置了面试环节,不过斯坦福大学没有。全美大多数大学在招收本科生的时候是不分专业的,斯坦福大学也是如此,学生不需要像国内一样在报考大学时就决定在本科阶段要选择什么专业。

值得一提的是,美国一些学生在上大学之前就会自行组织一些计算机相关的俱乐部(有些俱乐部可以获得学校的资金支持)或活动,比如几个人合作编写一个服务器或者参加一些与编程有关的趣味夏令营和竞赛,多数是出于个人兴趣。而国内在青少年计算机趣味的培养上略有欠缺,首先与计算机相关的趣味性活动较少,其次高中生由于课业压力很少能去自发探索一些简单的编程项目。国内高中生参与最多的就是全国青少年信息学奥林匹克联赛(NOIP)。在我本科母校上海交通大学的计算机系里,那些在上本科以前就有编程基础的学生大多数是因为参加过NOIP。

课程安排

课程与专业
斯坦福大学采取学季制度(Quarter),即一个学年分为秋、冬、春、夏四个学期。夏季学期的课程比较少,因此多数学生会选择在夏季学期实习,上课主要集中在秋、冬、春三个学期。斯坦福大学要求本科学生毕业时修满180个学分,平均每年修45个学分,一个学期修15个学分,这意味着每人每学期要上3~4门课程。

学校几乎所有课程都向本科生开放,所以学生可以在本科阶段自由地选择喜欢的课程。专业的选择须在本科第二年结束之前完成,因此本科生前两年如何选课对专业选择起着重要作用。假设有一个学生计划以后选择计算机作为自己的专业,那么他就可以在前两年集中去修计算机科学相关的课程,了解这个专业的基础及具体的研究方向,在充分了解的前提下判断自己是否适合该专业;同时,他也可以在前两年去尝试其他学科及领域,看自己是否对计算机科学以外的专业更感兴趣。

专业选择与计算机专业课程要求
斯坦福大学本科的专业和国内专业的概念有些不同。计算机专业叫“CS Major”,CS Major下设不同的Track,类似于国内的“方向”。专业本身不设置人数限制,可以自由选择,一个学生可以选修一个或多个专业,只要修满符合该专业毕业要求的课程即可。学生还可以随时改变专业,改修其他专业的课程。计算机专业近些年愈加热门,2012~2013年度斯坦福大学有273名学生选择了计算机作为本科专业,而每年该校本科新生的总人数约为1600人。

计算机专业的学生需要修3门核心课程、3门理论课程、26个学分的方向课程及选修课程。选修课既包括本方向的课程,也包括其他方向的课程,难度亦有所区别。其中核心课程包括Programing Abstraction、Computer Organization and Systems、Principles of Computer Systems;理论课程包括Mathematical Foundations of Computing、Introduction to Probability for Computer Scientists、Data Structures and Algorithms。计算机专业的方向有人工智能、生物计算、计算机工程、图形学、人机交互、信息学、计算机系统和计算机理论。斯坦福大学计算机系要求每个方向的学生须完成4~5门方向课程,不过很多课程的深度各有不同,学生可以根据自己的能力和需求选择。

课号安排及课程介绍
高质量的课程和自由的选课制度是斯坦福大学本科教育的特点。学校是根据课程的深度给课程排号的。如计算机系的课号是CS0到CS599,其中:0~99号是服务性课程,适合非技术性专业的学生选择;100~199号是本科生基础课程;200~299号是高级本科生课程/初级研究生课程;300~399号是高级研究生课程;后边的课号代表实验和讨论班。首位数字为2的课程既是本科生课程,也是研究生课程,比如我做助教讲的是CS261 (Optimization and Algorithmic Paradigms),选修这门课程的学生中,本科生和研究生各占一半。有兴趣和能力的本科生也可以选修首位数字为3的高级研究生课程。

斯坦福大学计算机专业的大多数基础课程由讲师(专门负责授课,不做科研)授课,比如CS106 B/X Programing Abstraction、CS107 Computer Organization and Systems、CS110 Principles of Computer Systems,这3门核心课程都是由讲师授课。教授则主要讲授与自己研究相关的高级课程。

CS106是计算机专业比较重要的一门课程,分为CS106A、CS106B和CS106X三个难度级别。CS106A比较简单,不属于本专业核心课程,适合无基础的学生学习基本编程,有利于学生毕业后找工作这也是这门课程成为本专业热门课程的主要原因。作为核心课程的CS106B和CS106X,在课程内容上是一样的,涵盖了程序设计(C++)、基本算法、数据结构、面向对象编程,但是后者在授课和作业方面的难度更大一点。在2015~2016年秋季学期中,选修CS106A课程的学生有673人,选修CS106B课程的有368人,选修CS106X课程的有95人。

难易有别的课程安排以及较为自由的选课制度使得学生可以根据个人需求来选修课程。一些应用型或浅显的课程,适合计划本科毕业后从事编程工作的学生,比如CS106B、CS142 Web Applications、CS193A Android Programming、CS193P iPhone and iPad Application Programming等;而一些理论型或较深奥的课程,则适合计划本科毕业后继续从事研究工作的学生选修,如CS261 Optimization and Algorithmic Paradigms、CS254 Computational Complexity Theory等。计算机专业还有很多课程既是从事科学研究的必备基础,又让学生在企业有用武之地,比如近年来成为热门课程的CS229 Machine Learning,每学期选修这门课的学生有近800人,已经超过了CS106A;再如CS255 Introduction to Cryptography,这种有一定理论深度的课程,每年有150人左右选修。

斯坦福大学计算机专业的课程设置合理,并且课程质量很高,这些高质量的课程是斯坦福大学计算机专业本科教育的核心部分。

CS140 Operating Systems课程项目的要求是编写一个可以在8086架构上运行的操作系统,支持基本的多线程、用户态程序、虚拟内存、文件系统。尽管是从Pintos框架上进行的拓展,但学生仍需要具备很好的C语言编程基础,并且对操作系统原理、CPU架构有正确的理解才能完成。CS144 Introduction to Computer Networking的课程项目是编写一个路由器程序,支持路由器的基本功能,能在真实的网络中运行,最后在Amazon EC2的虚拟网络上进行测试。这些课程项目不仅有机器考核,还有助教对每个学生进行代码可读性评价,纠正学生编程习惯上的一些问题。上述课程的理论内容同国内相应课程区别不大,但课程项目部分难度大很多。好在它们都不是必修课程,选修该课程的一般是以系统为方向或者对其感兴趣的学生,课程虽难但往往能够达到较好的授课效果。CS229 Machine Learning也有一个期末课程项目,代替了考试。这个项目只要和机器学习相关就可以,理论和应用皆可,学生们在这个项目上总能“脑洞大开”,可大胆发挥想象力和创造力。例如,2014年有组学生用强化学习的方法训练计算机玩Flappy Birds,有组学生用强化学习加深度神经网络训练计算机玩Pacman,还有学生做音乐自动创作,效果都不错。

作业与考核
斯坦福大学的每门课程都设置了作业时间,通常一门3学分的课程,要求学生每周花费3小时上课,外加6个小时做作业,可见学校对于学生作业还是比较重视的。

计算机专业课程的作业题通常由授课教师和助教共同编写,几乎都是原创的新题。作业每1~2周安排一次,学生上交的作业由助教负责批改和发放。助教多由研究生担任,除了批改作业外,助教还须随时回答学生的提问。由于选修的学生人数众多,计算机专业的课程一般一门课会设置多名助教。为了辅助学生完成课程和作业,授课教师和每位助教被要求每周至少提供1.5~2个小时的互动时间(office hour),学生可以在此期间咨询与课程内容或作业相关的问题。

课程作业一般都比较难,比如我曾经担任过助教的CS265 Randomized Algorithms and Probabilistic Analysis和CS261 Optimization and Algorithmic Paradigms两门课的作业,每周花6小时通常是完成不了的。

而计算机专业的期中、期末考试则非常简单,考试成绩一般只占这门课最终成绩的25%~50%,因此学生会在每周的听课、讨论和作业上投入很多精力,而对考试只投入较少的时间。

学分学时与毕业要求
与国内大学不同,斯坦福大学本科生与硕士研究生的界限并不分明,学位的获得是由学生修读的学分来决定的。学生如果在本科阶段修满硕士毕业要求的学分,便可取得硕士学位,一般专业“本硕连读”只需4~5年。折算成课程的话,计算机专业的学生只要保证每学期能选修4~5门课,就可以在4年内同时拿到学士学位和硕士学位。

取得计算机专业本科学士学位须达到学校、工程学院和计算机系的学分要求。首先,学校要求所有本科生要修满180个学分,涵盖外语、写作、思维方式/行为方式及思考四个方面;其次,工程学院要求学生必修ENGR40 Introductory Electronics课程、两门数学专业指定的选修课程、两门微积分选修课程、1门力学课程、1门电磁学课程以及1~2门科学类选修课程、1门工程类选修课程、1门科学与社会类选修课程;第三,计算机系要求学生修10门左右计算机专业课程。

由此可见,尽管美国大学的选课相比国内大学自由许多,但还是有一些硬性规定。有意思的是,斯坦福大学计算机专业还开设了一些设置精巧的课程,成为计算机专业本科生的最爱。其中的翘楚就是CS181 Computers, Ethics, and Public Policy,选修该课可以同时满足写作、思维方式、科学与社会类课程三项毕业要求,由于每学期选修的学生过多,这门课不得不限制上课人数,并让大学四年级学生优先选择。

发表论文不是计算机专业本科生毕业的强制要求,但是他们需要完成一个类似于我国毕业设计的高级项目(senior project)。完成方法一般有三种,分别为三门课程:第一门是CS194,学生需要组队完成一个有意义的编程应用,很多创业公司就是从这个课程里走出来的;第二门是CS210,学生组队在两个学期的时间里解决企业(如Facebook、Yahoo!、Microsoft、BMW)提出的挑战性问题;第三门是CS191,学生跟随学校的一位教授进行一个学期的科研,最后完成一篇可发表的论文。

课外项目与创业愿望
美国大学本科教育比较成功的一方面是大多数本科生在上学阶段就会对毕业后的工作有较明确的规划。学生比较普遍地能选择自己喜欢的专业,并能在毕业后找到与之相关的工作。这与大学本科阶段可以自由选择专业的制度不无关系。计算机作为美国整体就业率最高的专业,在这一点上显得尤为突出。而作为斯坦福大学计算机专业毕业的本科学生,在未来职业规划上还多了一项选择,那便是创业。

近些年,“创业”一词几乎成为斯坦福大学的标签。相比于其他理工类高校,斯坦福大学的高创业率主要得益于周边的高科技环境——地处硅谷,计算机专业的学生自然成为湾区创业的主力军。

学校周围相对丰富的高科技企业资源,为斯坦福在校本科生提供了大量的资金和理念支持,是推动本科生发挥自主创新能力的极大动力。比如课程CS210既是一个毕业设计项目,也是一个与企业合作,为其解决技术难题的机会,其结果有的可以直接应用于企业并成为其产品。

每年有数以百计的想法在大量斯坦福本科生与高科技企业之间互换,学生除了可以参加很多创造性课程,还可以在企业带给斯坦福的创新气氛的影响下自主进行项目产品的开发。计算机系几乎所有的本科生都会在四年中的某个时间与三五好友一起做一个项目,比如一个网站、一个手机App等。不要小看这些学生自主完成的项目,很多创业公司就是从此开始的,比如雅虎的前身Jerry and David’s Guide to the World Wide Web就是其创始人杨致远(Jerry Yang)在校期间与同学大卫·费罗(David Filo)共同创建的。再如Snapchat——阅后即焚聊天软件的鼻祖,也是由三名斯坦福大学的本科生开发的,其创始人之一伊万·斯皮格(Evan Spiegel)是一名产品设计专业的学生,Snapchat是他向一门设计课程提交的课程作业,2014年时Snapchat的用户平均每天会发送7亿个图片和视频。

每年9月底,斯坦福大学计算机系都会组织大规模的校园招聘活动,大量的IT公司会走进校园招聘全职员工和暑期实习生。从大一到大四,只要是对做产品感兴趣的本科生都可以参加。以前大一的学生(刚入学两周)由于经验和知识的欠缺,很难进入谷歌、微软、脸谱(脸书)等大公司实习,现在这些公司都有专门针对低年级学生的项目,在暑期对他们进行专门的培养。一般软件工程师暑期实习的起薪是5000美元/月,薪资会随着实习生年级的增长而增加。企业的实习经验可以帮助本科生对一些行业和职位有初步的了解,对学生工作能力的培养和就业指导也有很大帮助。

参加项目和实习还可以使本科生认识到自己在专业方面的不足。同时,出于设计自己的项目或完成实习工作的目的去选修一些课程,也能促使学生选修更具针对性和应用性的课程。

斯坦福学校内部也设置了一些针对本科生的科研培养项目,如CURIS就是一个专门针对本科生的暑期实习项目,目的是鼓励学生参与计算机学科的科研。在这个项目中,教授需要提供课题供学生选择,学生会在整个暑期(10周)跟随一位教授和他的团队进行科研,同时会获得一定的生活补助,2015年暑期补助为6400美元。

斯坦福大学一直致力于培养学生的自由性和创造性,得天独厚的环境也与其教育理念相辅相成。斯坦福计算机系自由的培养模式给予学生最少的束缚,实用而高效的课程给予学生所需的专业训练,加上整个硅谷的创业环境,使学生的创造力能够充分地释放,进而培养出了一批企业界和学术界的领军人物。

小红书二维码
  • 版权声明:本网站文章除了邹庆专栏内容以外,其它内容的版权属于原作者。
上一篇:
下一篇:
隐藏边栏