Berkeley 电子工程与计算机科学
作为四大CS名校之一,伯克利在计算机领域的研究对计算机科学的实际应用产生过重大影响,比如和乔布斯创建苹果的天才程序员Steve Wozniak,伯克利UNIX、INGRES数据库系统、精简指令集RISC、计算复杂度理论等等。而且伯克利CS课程的资料非常新而且全,非常推荐大家来学习。
课程说明
计算机科学知识并不仅限于计算机专业的学生来学习,如果你是非工程领域(比如数学、统计、物理、英语、经济学、商业、音乐等)专业的学生想双修计算机,或者你只想专注于CS但是对EE课程不感兴趣,或者你是其他专业想学习计算机科学知识,伯克利有专门的计算机Arts学位,不过本学习路线以工程学院EECS内容为主,所以难度深度会偏大一些。
伯克利计算机属于EECS学院,以下为EECS学院整个的学习路线,可以看到课程被分为电路、硬件、信号/控制、人工智能/机器学习、计算机理论、图形学、设计、计算机架构、计算机系统等多个部分:
而对于计算机专业的学生来说,并不需要学习多少EE类的相关课程,计算机专业的课程可以分为核心课程、硬件、软件、理论以及应用五大类,学习的顺序如下所示:
在伯克利的教学中,编程语言通常都不会纳入到核心课程里面,但是却也是非常重要的课,需要Self-paced也就是自己安排时间和进度去学习,学分是主课的一半。这些编程语言相关的课程,是一些主课的先修课,你可以在学完CS10计算机科学导论之后再去学习。
- CS9A:Matlab,教材为《Mastering Matlab》,自己学
- CS9C:C语言,教材为《实用C语言编程》
- CS9D:Scheme和函数式编程,自己学
- CS9E:Unix环境,教材为《Your UNIX/LINUX: The Ultimate Guide》
- CS9F:C++,教材为《A Computer Science Tapestry》
- CS9G:Java,教材为《Head First Java》
- CS9H:Python,教材为《像计算机科学家一样思考Python》
必修实践课指的是这些课不是主课(Lecture),而是需要你在大三、大四时完成的必修课。伯克利是非常重视实验课,在大一时,你需要先修这些基础的编程语言和linux相关知识,在大三、大四还会必修四种方式的课,
- 一是校外实习CS197,
- 二是根据学生的意愿选择一门编程主题去深入学习CS198;这些编程的主题包括:iOS应用开发、3D建模与动画、Linux嵌入式、React全栈开发、云计算和SaaS、机器人、数据挖掘等诸多当前流行的应用方向;
- 三是自主选择方向学习CS199;
- 四是讨论交流技术对社会的影响CS195
伯克利官方给出了一个选课建议,就是以下课程负担太重,最好不要同时选:
- EECS151 (Digital Systems) 数字系统
- CS 152(Computer Architecture) 计算机体系结构
- CS 162(Operating Systems) 操作系统
- CS 164(Programming Languages and Compilers)程序语言和编译器
- CS 169(Software Engineering) 软件工程
- CS 170(CS Theory) 计算机科学理论
- CS 184(Computer Graphics) 计算机图形学
- CS 189(Machine Learning) 机器学习
推荐学习课程
① CS61A 计算机程序的结构和解释
对编程和计算机科学的介绍,侧重于抽象技术作为管理程序复杂性的手段。技术包括程序抽象;使用递归、高阶函数、生成器和流控制抽象;使用接口、对象、类和通用运算符进行数据抽象;和使用解释器和宏的语言抽象。本课程向学生展示编程范式,包括函数式、面向对象和声明式方法。它包括对算法渐近分析的介绍。有几个重要的编程项目。
先修课程: 零基础可学,无先修课程
学习地址: CS61A 计算机程序的结构和解释
② CS61B 数据结构
基本的动态数据结构,包括线性列表、队列、树和其他链接结构;数组字符串和哈希表。存储管理。软件工程的基本原理。抽象数据类型。排序和搜索的算法。Java 编程语言简介。
先修课程: CS61A 计算机程序的结构和解释、微积分
学习地址: CS61B 数据结构
③ CS61C 计算机组成原理
数字计算机的内部组织和操作。机器架构,支持高级语言(逻辑、算术、指令排序)和操作系统(I/O、中断、内存管理、进程切换)。计算机逻辑设计的要素。基本架构设计决策中涉及的权衡。
先修课程: CS61A 计算机程序的结构和解释、CS61B 数据结构
学习地址: CS61C 计算机组成原理