[持续更新] 那些年, 我在伯克利CS上过的神课

自我介绍一下, 12级水比. 大三跟着通信的许都老师了解过一点SDN, 也没入门. 大三下开始在UC Berkeley交流, 上了两个学期的课. 从15年暑假开始, 跟着老板做networking and system方向的research, 一直到现在. 对UCB本科CS绝大多数课有了解, 上过其中 1/ 3. 对于其他MOOC平台上的课也有涉猎. 

UCB作为CS top4的牛校, system方向 更是当之无愧的第一, 其本科教学质量极高, 每门课的内容都包罗万象, 保证让你通过这短短4个月的课, 被虐的不成人形!!
 
由于UCB的课程资源基本上全部开放, 通过我的经验, 其实大家在家里完全可以享受到全部教学资源, 因此向大家推荐.
 
总览: 可以通过一幅图来俯视一下UCB本科课程:
hkn course map
可以看到, 伯克利本科CS入门核心课程只有三个: CS61A, B, C
这三门课属于所有CS本科生前两年必须上完的. 据我了解, 多数同学会在大一上学61A, 大一下61B, 大二的某一个学期学61C. 因为这三门课的workload极重, 因此几乎没人会在一学期上两门.
 
CS61A: PL theory 的入门课, 地位等同于国内的C/C++编程基础. 主要内容有Python, Python在interpreter一层的简单原理, Higher-Order function (函数式编程入门), OOP入门, 数据结构入门 (Python里的dict, list...), delcarative programming入门, parallell programming 入门. 说了这么多, 概括地说, 61A就是什么都讲, 但是什么都只讲一点, 讲到够用的程度, 但是不深究原理. 
值得一提地是, 61A的stuff团队非常厉害. 由于61A / B一般是 1.4k+ 以上人的大课, 不可能使用传统的课堂形式解决问题. 所以61A的stuff为这门课做了一些研究, 效果就是, 不用到课堂上课, 让学生快速掌握全部内容. (其实就是MOOC的idea). 他们开发了一套autograding的程序, 还发了paper.
 
CS61B: 经常逛一亩三分地的同学可能早就了解了, 61B是UCB本科阶段最有用的一门课, 找工作必备. 61B的课程目标是: 上完了我们61B, 你就可以去硅谷当一个幸福的码农了.
主要内容: OOP / Java / data structure / algorithem introduction. 这门课会把OOP / Java各种细节, 各种高级特性讲到, project也通常代码量比较大, 但是比较有趣. 数据结构/算法的部分实践性很强, 基本上会让学生把红黑树/A*等等东西全都写一遍.
 
CS61C: 对于做system的人必备的一门课, 地位相当于国内CS专业的数电 + 计算机体系结构(或嵌入式) . 课程结构是从微观到宏观: 二极管->门电路->数字电路->汇编语言->C语言->操作系统(cache, virtual memory, IO)->并行计算(OpenMP)->Datacenter结构->Hadoop/Spark. 5个project相当虐人 (详情可在homepage里看). 总体感觉就是, 一门61C顶我成电2-3门课...
 
CS162: 操作系统, 个人认为UCB最有挑战性的2门课之一. 这门课的TA基本上都是每届大四最牛的2 3个人. 课程内容涵盖了OS / Networking / distributed system的方方面面. project是stanford的PintOS, 内容是实现一个完整的kernel, 包括threads, processes, scheduler, file system , KVStore (distributed database). 总之, 学好162, system的各个方向就可以进去无障碍读paper / 写code了.
 
CS164: Compilers, 个人觉得, CS多数领域内, 学到最后, 都有compiler的思想(Abstraction和Modularity). 而且parser, lexical analysis在多数大的system design是一定会用到的. 
 
CS170:
 
CS186:

CS188:
 
CS189:
 
CS168: Introduction to Internet. 老板开的课, 我之前也做了project grader. 对于想做networking方向的同学来说, 尽管这是UCB本科唯一一门networking的课, 但是这门课感觉也不是特别有用.
首先, 课程内容偏research, 讲的都是architecture的东西, 基本不涉及实际的network (比如wireless). 对于想做linux kernel networking的人来说, 这个课的project都是python. 总的来说, 这门课就是讲了一大摞design principle, 让你对networking有个整体的认识. (可能network system实在太大, 在intro里面只能见森林不见树木). 但是一些前言的概念, 比如network virtualization, verification, 都有介绍.
 
CS161:
---------------------------------------------- 其他MOOC平台 ----------------------------------------------
MIT opencourseware:
MIT 6.828
 
Coursera:
Stanford Compilers
 
edX:
UCB Software Engineering
UCB introduction to data science 
 
CMU 15-410
 

2 个评论

“短短4个月的课,被虐得不成人形!”我导师给本科生上的那门电路基础课就属于这种!
哈哈, 我感觉他们的教育模式都是, 本科生课压力山大, 研究生课是水水就过. PS 清华X院有一门软件工程, 就是完全照搬UCB CS169!

要回复文章请先登录注册