加州大学伯克利分校是如何培养计算机学生的
加州大学伯克利分校电子工程和计算机科学系(EECS)是世界知名的院系,计算机领域在2020 USNews排名第一。EECS的使命是
教育
、创新
和服务社会
。自创建以来,为社会培养了大批人才,诞生7位图灵奖得主。EECS认为,其成功的背后,是强大的合作传统、与工业界紧密联系和互助的文化。
像这样的顶尖大学,本文无法面面俱到,而是从计算机专业培养入手,结合课程
、研究中心实验室
等角度总结其培养学生的特点,为CS领域或想转行CS的小伙伴提供可借鉴的方法和参考。
课程
命名约定
课程采用编号+课程名
表示,比如很出名的CS 61A: The Structure & Interpretation of Computer Programs
,61A是课程的编号,字母A表示系列(下面会介绍),后面跟着名字。关于编号有如下约定:
- 0xy (e.g., 16, 61, 70) - lower-division courses,默认0是省略的,表示核心课程
- 1xy (e.g. 105) - upper-division courses,高阶课程
- 15x - Computer Architecture,计算机体系结构类课程
- 16x - Software,软件类课程
- 17x - CS Theory,计算机理论类课程
- 18x - CS Applications,计算机应用类课程
- 11x - Electromagnetics/Optics,电磁学或光学类课程
- 12x - Information Processing and Communication,信息处理和通信类课程
- 13x - Physical Electronics,物理电子类课程
- 14x - Integrated Circuits and Embedded Systems,集成电路和嵌入式系统类课程
- 19x - Special Topics, Directed Studies,特殊主题课程,指导学习
不同编号序列按照如下约定:
- 1xy,1开头为本科课程
- 2xyA is the mezzanine-level course room-shared with 1xy,和1xy课程共享教室,但内容层次更高
- 2xyB,研究生课程
- 2xyC, 2xyD...,2xy后面跟C、D...表示后续课程
从上面可以总结出,0xy是核心课程,1xy是本科课程,2xy是研究生课程。总体分为EE和CS两大类,层次分明。
0xy核心课程
核心课程:
- CS61A 计算机程序的构造和解释
- CS61B 数据结构
- CS61C 计算机结构
- CS70 离散数学和概率论
0xy系列课程重点培养学生的计算机基础、计算机科学素养和数学能力。
1xy本科生课程
本科生CS课程:
- CS 161 计算机安全
- CS 162 操作系统与系统编程
- CS 164 编程语言与编译器
- CS 169 软件工程
- CS 170 高效算法与难题
- CS 172 可计算性与复杂性
- CS 174 组合数学与离散概率
- CS 182 设计、可视化和理解深度神经网络
- CS 186 数据库系统概论
- CS 188 人工智能导论
- CS 189 机器学习导论
- CS C191 量子信息科学与技术
面向本科生的1xy系列课程和0xy系列核心课程有明显区别,0xy是核心基础课,1xy则针对CS不同方向开课。
2xy研究生课程
研究生CS课程:
- CS 252 研究生计算机体系结构
- CS 261 计算机系统安全
- CS 261A 因特网与网络安全
- CS 262A 计算机系统高级主题
- CS 262B 计算机系统高级主题,对262A的延续,高级话题一门课讲不完...
- CS 263 编程语言设计
- CS 264 编程语言实现
- CS 265 编译器优化与代码生成
- CS 268 计算机网络
- CS 270 组合算法与数据结构
- CS 285 Deep Reinforcement Learning, Decision Making, and Control
- CS 286A 数据库系统导论
- CS 286B 数据库系统实现
- CS 288 自然语言处理
- CS 289A 机器学习导论
- CS 294-162 机器学习系统
- CS 298-015 BAIR First-year Proseminar
- CS 299 个人研究
2xy系列是面向研究生的课程,部分课程名和本科课程相同,为了区别会在前面加上Graduate
(研究生)或Advanced Topics
(高级主题),比如CS 252. Graduate Computer Architecture
。为了培养研究生论文阅读、交流讨论等能力,还开设了研讨会课程(CS 298-015 BAIR First-year Proseminar)。
课程总结
下图是笔者总结的CS课程架构图,可以看到特点鲜明:分类合理、层次分明、层层递进。红色部分是核心课程,也是其它课程的基础,然后将课程分为软件、硬件、理论、应用等方向。有些课程本科和研究生阶段都会开设,但研究生课程偏向高级主题、注重研究。
ucb cs课程体系EECS信息化程度很高,上文提到的课程都有对应的官网资源,读者可以浏览EECS Course WEB Sites选择自己感兴趣的课程。
培养方案
本科
伯克利是公立大学,招收的学生数量比哈佛、斯坦福要多很多,因此对于本科生来说有三个特点:宽进严出、竞争激烈和丰富多彩。在学位上,CS方向为本科生主要提供两个选择:
- 由文理学院(Letters & Science)提供的CS专业项目,毕业后授予Bachelor of Arts
- 由工学院(College of Engineering)提供的EECS专业项目,毕业后授予Bachelor of Science
两个学位CS课程内容是一样的,不同点在于选修课上,文理学院提供更丰富的课程选择,工学院的选修课侧重EECS领域。想修双学位可以选择前者,希望专注于计算机、STEAM选择后者,详情参考EECS/CS Program Comparison Chart。
研究生
伯克利的研究生有两种,面向工业(Industry-Oriented Degree Programs)和面向研究(Research-Oriented Degree Programs),类似国内的专业/工程硕士和学术硕士。
专业硕士有两个培养方案:
- Master of Engineering(M.Eng.):工程硕士,教授毕业后进入工业界所需的技能,重点培养学生的技术基础和领导力。主要计算机相关课程是Data Science and Systems和Visual Computing and Computer Graphics,学制为1年。
- 5th Year M.S. Program:和M.Eng.类似,不过该项目只面向UC Berkeley自己的CS本科生,和国内的本硕连读类似。
研究型硕士有三个培养方案:
- Master of Science:学制为2年,是比较小的研究型项目,读完后可以申请博士或者进入工业界做研发。
- Doctor of Philosophy:博士项目,培养学术人才,学制本科生要读5-6年,硕士读要3-5年。
- Both (M.S./Ph.D.):硕博连读,学制5-6年。
研究型项目着重培养学生的研究能力和教学能力,页面Graduate Research Program Admissions详细列出了研究型CS(Computer Science)专业主要研究方向:
- Artificial Intelligence (AI)
- Operating Systems & Networking (OSNT)
- Database Management Systems (DBMS)
- Graphics (GR)
- Human-Computer Interaction (HCI)
- Programming Systems (PS)
- Scientific Computing (SCI)
- Security (SEC)
- Theory (THY)
- Education (EDUC)
每个研究领域都有详细的介绍,并且列出了主要研究者、开设的课程等,方便学生了解和选择。
硬件条件
地理位置
imageUCB地理位置优越,地处湾区(Bay Aarea),附近比较出名的城市还有旧金山,奥克兰,硅谷等。硅谷大量的创业公司和科技公司为学生实习提供的便利。也为伯克利与工业界紧密合作提供了条件。
图书馆
伯克利图书馆系统包括三个主要图书馆、18个学科专业图书馆和11个具有特殊藏书的附属图书馆,藏书超过1000万册,北美地区排名第四。在校园里,平均每步行5分钟,都会遇到一个图书馆。
研究中心和实验室
由于EECS是两个体系,所以研究中心和实验室大方向上包括EE方向和CS方向,这里主要讲CS方向,说两个业界出名的实验室。
伯克利人工智能研究实验室(BAIR),开发Caffe和PyTorch的大神贾扬清就来自这个实验室。该研究中心包含约30名教师和超过200名研究生、博士后。研究领域包括计算机视觉
、机器学习
、自然语言处理
、规划
和机器人
。该中心开发了很多业界出名的工具,包括大数据处理框架Spark中的GraphX、CycleGAN等,详细页面见BAIR SOFTWARE。
RISELab,该实验室前身是AMPLab,两者都是为期5年的针对特定主题的实验室。AMPLab研究周期为2011-2016,为业界贡献了Mesos集群管理框架、Spark大数据引擎、Alluxio虚拟分布式存储等知名框架,为行业作出卓越贡献。新的5年研究项目由RISELab承担,RISELab实验室研究领域聚焦在Real-time Intelligence with Secure Explainable decisions,即开发实时、智能、安全、可解释的决策系统,围绕这一理念,RISELab已经研究开发了Ray、Clipper、confluo等软件,并开源的。Ray已经在很多公司开始使用,国内知名科技金融公司蚂蚁金服就在使用。
伯克利EECS的研究中心非常多,这里只列举两个,详细信息请浏览EECS-Research Centers and Labs。从这两个实验室可以一窥伯克利CS研究生的培养方式:学生会在导师所在实验室做研究,和工业界保持紧密的联系与合作。好的软件会和业界分享,在GitHub上开放源代码,与各界共同开发。
总结
在本科阶段,伯克利EECS很重视学生的基础知识,课程理论与实践相结合,课程的Project有难度需要编写很多代码,以培养学生的计算机科学思维为主,编程能力为辅。研究生阶段,重点培养学生的研究能力、教学能力,学生通过参加学术会议、开源项目等和学术界、工业界保持紧密的联系。
伯克利对于学生的培养方案是值得我们借鉴和学习的,但因人而异,以笔者个人经验来说,给出以下不成熟的建议:
- 在CS领域,计算机基础知识至关重要!
- 对于想转专业到计算机的本科学生:
- 可以学习CS的核心课程CS 61A 61B打基础
- 然后学习一门语言课(推荐Python,适合初学者)
- 再学习OS、Network等课程
- 最后要重视实践,多编写代码和参与开源项目
- 接着去找实习在公司中锻炼自己,最后应该可以找到一个满意的工作
- 本身就是CS专业的本科生:CS专业应该具备相关知识了,这时可以根据自己感兴趣的CS课程
- 工作1-3年的程序员:工作和实际编程中可以发现自己的不足,针对不足选择相关课程重点加强
- 其它情况超出笔者的能力和经验了,可以结合本文自行决定