Berkeley 电子工程与计算机科学

EECS-Club大约 65 分钟

课程主页

Berkeley 电子工程与计算机科学

作为四大CS名校之一,伯克利在计算机领域的研究对计算机科学的实际应用产生过重大影响,比如和乔布斯创建苹果的天才程序员Steve Wozniak,伯克利UNIX、INGRES数据库系统、精简指令集RISC、计算复杂度理论等等。而且伯克利CS课程的资料非常新而且全,非常推荐大家来学习。

课程说明

计算机科学知识并不仅限于计算机专业的学生来学习,如果你是非工程领域(比如数学、统计、物理、英语、经济学、商业、音乐等)专业的学生想双修计算机,或者你只想专注于CS但是对EE课程不感兴趣,或者你是其他专业想学习计算机科学知识,伯克利有专门的计算机Arts学位,不过本学习路线以工程学院EECS内容为主,所以难度深度会偏大一些。

伯克利计算机属于EECS学院,以下为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 计算机程序的结构和解释open in new window

② CS61B 数据结构

基本的动态数据结构,包括线性列表、队列、树和其他链接结构;数组字符串和哈希表。存储管理。软件工程的基本原理。抽象数据类型。排序和搜索的算法。Java 编程语言简介。

先修课程: CS61A 计算机程序的结构和解释open in new window、微积分

学习地址: CS61B 数据结构open in new window

③ CS61C 计算机组成原理

数字计算机的内部组织和操作。机器架构,支持高级语言(逻辑、算术、指令排序)和操作系统(I/O、中断、内存管理、进程切换)。计算机逻辑设计的要素。基本架构设计决策中涉及的权衡。

先修课程: CS61A 计算机程序的结构和解释open in new windowCS61B 数据结构open in new window

学习地址: CS61C 计算机组成原理open in new window

④ CS152/252 计算机体系结构与工程

目录说明:指令集体系结构、微编码、流水线(简单和复杂)。内存层次结构和虚拟内存。处理器并行性:VLIW、向量、多线程。多处理器。

先修课程:CS61C 计算机组成原理open in new window

学习地址:CS61C 计算机组成原理open in new window

⑤ CS160 用户界面设计和开发

用户界面的设计、实现和评估。以用户为中心的设计和任务分析。概念模型和界面隐喻。可用性检查和评估方法。分析用户研究数据。输入法(键盘、指向、触摸、有形)和输入模型。视觉设计原则。接口原型设计和实现方法和工具。学生将为团队中的特定任务和目标用户组开发用户界面。

先修课程: CS61B 数据结构open in new window

学习地址: CS160 用户界面设计和开发open in new window

⑥ CS161 计算机安全

计算机安全简介。密码学,包括加密、身份验证、散列函数、密码协议和应用程序。操作系统安全,访问控制。网络安全、防火墙、病毒和蠕虫。软件安全、防御性编程和基于语言的安全。来自真实世界系统的案例研究。

先修课程: CS61C 计算机组成原理open in new windowCS70 离散数学和概率论open in new window

学习地址: CS161 计算机安全open in new window

⑦ CS162 操作系统和系统编程

操作系统和系统编程的基本概念。实用程序、子系统、多程序系统。进程、进程间通信和同步。内存分配、分段、分页。加载和链接,库。资源分配、调度、绩效评估。文件系统、存储设备、I/O 系统。保护、安全和隐私。

先修课程: CS61B 数据结构open in new windowCS61C 计算机组成原理open in new windowCS70 离散数学和概率论open in new window

学习地址: CS162 操作系统和系统编程open in new window

⑧ CS164 编程语言和编译器

编程语言调查。现代编程语言的设计。扫描、解析、语义分析和代码生成的原理和技术。编译器、解释器和汇编器的实现。运行时组织和错误处理概述。

先修课程: CS61B 数据结构open in new windowCS61C 计算机组成原理open in new window

学习地址: CS164 编程语言和编译器open in new window

⑨ CS168 互联网简介:架构和协议

本课程是对 Internet 架构的介绍。我们将专注于有助于 Internet 的可扩展性和稳健性的概念和基本设计原则,并调查该架构中使用的各种协议和算法。主题包括分层、寻址、域内路由、域间路由、可靠传递、拥塞控制和核心协议(例如,TCP、UDP、IP、DNS 和 HTTP)和网络技术(例如,以太网、无线)。

先修课程: CS61B 数据结构open in new windowCS162 操作系统和系统编程open in new window

学习地址: CS168 互联网简介:架构和协议open in new window

⑩ CS169A/L 软件工程

设计、开发和修改大型软件系统的想法和技术。面向功能和面向对象的模块化设计技术,旨在实现可重用性和可维护性。规范和文档。验证和确认。成本和质量指标和估计。项目团队的组织和管理。学生将在一个重要的编程项目中团队合作。

先修课程: CS61B 数据结构open in new windowCS61C 计算机组成原理open in new windowCS70 离散数学和概率论open in new window

学习地址: CS169A/L 软件工程open in new window

⑪ CS170 高效算法和棘手问题

算法设计和分析中的概念和基本技术;计算模型;下限;优化搜索树、平衡树和 UNION-FIND 算法的算法;数值和代数算法;组合算法。图灵机,如何计算步数,确定性和非确定性图灵机,NP 完备性。无法解决和难以解决的问题。

先修课程: CS61B 数据结构open in new windowCS70 离散数学和概率论open in new window

学习地址: CS170 高效算法和棘手问题open in new window

⑫ CS172 可计算性和复杂性

有限自动机、图灵机和 RAM。不可判定、指数和多项式时间问题。所有合理计算模型的多项式时间等价。非确定性图灵机。NP-完全性理论:库克定理,基本问题的NP-完全性。语言理论、复杂性和随机性方面的选定主题。

先修课程: CS170 高效算法和棘手问题open in new window

学习地址: CS172 可计算性和复杂性open in new window

⑬ CS186 数据库系统简介

方便数据访问的访问方法和文件系统。分层、网络、关系和面向对象的数据模型。模型的查询语言。在编程语言中嵌入查询语言。数据库服务,包括保护、完整性控制和数据的替代视图。高级接口,包括应用程序生成器、浏览器和报告编写器。事务处理简介。数据库系统实施将作为学期项目完成。

先修课程: CS61B 数据结构open in new windowCS61C 计算机组成原理open in new window

学习地址: CS186 数据库系统简介open in new window

推荐选修课

① CS184. 计算机图形学基础

用于计算机渲染的对象建模技术:边界表示、构造实体几何、分层场景描述。曲线和曲面表示的数学技术。计算机图形渲染管道的基本要素;现代图形显示设备的体系结构。几何变换,例如旋转、缩放、平移及其矩阵表示。齐次坐标、投影和透视变换。裁剪、隐藏表面去除、光栅化和抗锯齿的算法。基于扫描线和基于射线的渲染算法。反射、折射、透明度的照明模型。

先修课程: CS61B 数据结构open in new window以及C、C++、Java等编程语言

学习地址: CS184. 计算机图形学基础open in new window

专业选课表


Harvard 计算机科学专业

哈佛大学虽然不在四大CS名校之列,不过由于师资力量强大,因此有不少神课,比如CS50系列课程,风靡全校乃至全美,而且有比尔盖茨、扎克伯格等一众知名校友。就图灵奖获得者所在的大学排名,哈佛大学在斯坦福、MIT、伯克利、普林斯顿之后,在CMU之前,位列第5。除此以外,哈佛大学的学生可以交叉学习MIT的课程。

课程说明

哈佛大学计算机专业将毕业要求氛围基础与荣誉等级别,其中基础毕业要求除了需要掌握微积分、线性代数、概率统计外,还需要围绕编程(编程1和编程2)、形式推理、计算机系统、计算与世界(计算与世界之间的交互,如人工智能)、高级计算机科学来选择至少9门课,其中编程课至少2门,形式推理至少要包含离散数学(如CS20)、可计算性和复杂性理论与算法(如CS120、CS121、CS124),计算机系统至少1门、计算与世界至少1门、高级计算机科学至少4门。

而荣誉毕业要求,至少要掌握11门计算机科学的核心课,增加了对人工智能的硬件要求,以及高级计算机科学至少5门。

① 推荐课程安排

哈佛大学对各年级的大学生推荐了一个比较基础的课程安排计划,大致如下:

  • 大一上学期:CS 50(计算机科学导论)、微积分、线性代数,如果你之前编程经验丰富,你可以直接去学CS 61(系统编程与计算机组成原理) 或 CS120/CS121(形式推理)
  • 大一下学期:CS32(计算思维与解决问题)、CS51(计算中的抽象与设计)、CS20(离散数学),如果你数学基础可以好,可以直接跳过 CS20(离散数学)而去学习 CS121(算法、可计算和复杂性导论)
  • 大二上学期:CS121 或CS120(算法、可计算和复杂性导论),概率统计、CS61(计算机系统)
  • 大二下学期:CS124(数据结构与算法)

大三、大四你可以根据你自己的兴趣来安排、选修课程。

② 编程1和编程2

学习编程1和编程2,必须要掌握重要的软件构建和良好的工程实践能力

  • CS32 计算思维和问题解决
  • CS50 计算机科学导论
  • CS107/CS207 计算科学的系统开发
  • CS109A 数据科学1:数据科学概论
  • CS109B 数据科学 2:数据科学高级主题
  • CS51 计算中的抽象与设计
  • CS61 系统编程和计算机组成原理
  • CS153 编译器
  • CS161 操作系统
  • CS165 数据系统

③ 形式推理

形式推理课程向学生灌输的是计算机科学学术里至关重要的形式思维习惯,主要包括可计算性和复杂性理论、数据结构与算法、算法分析等课程。

  • CS120 算法、可计算性和复杂性导论
  • CS124 数据结构和算法
  • CS222 网络、数据传输和搜索引擎的算法
  • CS223 概率分析和算法
  • CS224 高级算法
  • MIT 6.854 高级算法

④ 计算机系统

计算机系统主要是围绕计算机的软件和硬件的交互和适应来展开,这些课程要求学生能够自己或组队完成广泛的编程以及计算机系统开发方面的作业,需要设计软件以及硬件的组件,同时要关注性能、稳定性、安全性等(以下列表排除了和编程类、形式推理类重复的课程)。

  • CS141 计算硬件
  • CS145 / CS245 大规模网络
  • CS146 计算机架构
  • CS242 大规模计算
  • CS243 高级计算机网络
  • CS246 高级计算机体系结构
  • CS247R 计算机体系结构高级主题
  • CS261 操作系统研究课题
  • CS262 分布式计算简介
  • CS263 系统安全
  • CS265 大数据系统
  • PHY123b / ES153 实验室电子
  • MIT6.172 软件系统性能工程
  • MIT6.858 比较系统安全

推荐学习课程

① CS50 计算机科学导论

介绍计算机科学和编程艺术的智力企业。本课程教学生如何通过算法思考并有效地解决问题。主题包括抽象、算法、数据结构、封装、资源管理、安全、软件工程和网络编程。语言包括 C、Python 和 SQL 以及 HTML、CSS 和 JavaScript。受艺术、人文、社会科学和科学启发的问题集。课程以最终项目告终。专为集中器和非集中器设计,无论是否有编程经验。

先修课程: 零基础可学,无先修课程

学习地址: CS50 计算机科学导论open in new window

② CS51 计算中的抽象与设计

计算机程序设计中的基本概念,强调抽象的关键作用。本课程的目标是让学生深入了解编程和编程之间的区别。为了强调表达编程解决方案的不同方法,您将学习以各种范式进行编程——包括函数式、命令式和面向对象。来自软件工程和计算模型的重要思想将为这些不同的编程观点提供信息。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS51 计算中的抽象与设计open in new window

③ CS61 系统编程和计算机组成原理

计算机系统编程、机器组织和性能调整的基础知识。本课程提供扎实的系统编程背景以及对低级机器组织和设计的深刻理解。主题包括 C 和汇编语言编程、程序优化、内存层次结构和缓存、虚拟内存和动态内存管理、并发、线程和同步。

先修课程: CS50 计算机科学导论open in new windowCS51 计算中的抽象与设计open in new window

学习地址: CS61 系统编程和计算机组成原理open in new window

④ CS107 计算科学的系统开发

这是一门基于项目的课程,强调为科学计算和数据科学设计、构建、测试、维护和修改软件。学生将分组参与多个项目,从小型数据转换实用程序到大型系统。学生将学习使用各种工具和语言,以及各种组织团队的技巧。最重要的是,学生将学会适应基本工具和方法来解决学术或工业环境中的计算问题。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS107 计算科学的系统开发open in new window

⑤ CS120 算法、可计算性和复杂性导论

理论计算机科学的入门课程,旨在让学生有能力使用数学抽象和严格的证明来理解计算。如此装备后,学生将能够设计和使用适用于各种计算问题的算法,并对算法的正确性和效率充满信心,并能够识别问题何时可能没有算法解决方案。同时,他们将欣赏美丽的计算数学理论,该理论独立于(实际上早于)实现它的技术。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS120 算法、可计算性和复杂性导论open in new window

⑥ CS121 理论计算机科学导论

计算发生在各种基质上,包括硅、神经元、DNA、股票市场、蜂群等等。在本课程中,我们将研究计算的基本能力和局限性,包括普遍现象以及代码和数据的二元性。我们将涉及的一些问题包括:是否存在无法计算的函数?是否存在无法证明的真实数学陈述?是否存在无法破解的加密方案?随机性对计算有用吗?我们可以利用量子力学的怪癖来加速计算吗?

先修课程: CS20 计算机科学中的离散数学open in new window

学习地址: CS121 理论计算机科学导论open in new window

⑦ CS124 数据结构和算法

设计和分析高效的算法和数据结构。涵盖了算法设计方法、图形算法、近似算法和随机算法。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS124 数据结构和算法open in new window

⑧ CS141 计算硬件

本课程介绍设计和构建与现实世界交互的现代信息设备和系统的基础知识。它侧重于数字设备和系统,并补充了 ENG-SCI 152,后者侧重于使用模拟电子设备的设备和系统。主题包括:组合逻辑和时序逻辑;计算机架构; 机器码;以及构成 MIPS 处理器的基础设施和计算框架。在设计中考虑了硬件和软件系统之间的交互。学生将为嵌入式系统设计专用硬件

先修课程: CS50 计算机科学导论open in new window

学习地址: CS141 计算硬件open in new window

⑩ CS146 计算机体系结构

回顾现代处理器设计中的基本结构。主题包括计算机组织、内存系统设计、流水线和其他利用并行性的技术。在时间允许的情况下讨论现代主题,包括 GPU 架构、数据中心架构、移动/嵌入式 SoC 架构和机器学习加速。强调设计备选方案的定量评估以及对性能和能耗问题的理解。

先修课程: CS141 计算硬件open in new window

学习地址: CS146 计算体系结构open in new window

⑪ CS152 编程语言

全面介绍传统和现代编程语言的主要特征和总体设计,包括语法、形式语义、抽象机制、模块化、类型系统、命名、多态性、闭包、延续和并发。提供设计、评估、选择和使用编程语言所需的智能工具。

先修课程: CS51 计算中的抽象与设计open in new windowCS121 理论计算机科学导论open in new window

学习地址: CS152 编程语言open in new window

⑫ CS153 编译器

为编程语言实现高效的解释器和编译器。相关的算法和语用问题。强调实际应用,包括那些在适当的编程语言之外的应用。还展示了与编程语言理论和设计的关系。参与者构建一个工作编译器,包括词法分析、解析、类型检查、代码生成和寄存器分配。暴露于运行时问题和优化。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS153 编译器open in new window

⑬ CS161 操作系统

本课程侧重于现代操作系统的设计和实现。本课程讨论线程、进程、虚拟内存、调度程序以及操作系统用来表示活动计算的其他基本原语。系统调用接口的探索解释了应用程序如何与硬件和其他同时执行的程序进行交互。流行文件系统的案例研究揭示了操作系统如何在崩溃和意外重启的情况下提高 IO 的效率和稳健性。学生还将了解虚拟化如何允许物理机将其资源分配到多个虚拟机中。课堂主题通过一系列使用真实操作系统的密集编程作业得到强化。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS161 操作系统open in new window

⑭ CS165 数据系统

本课程是对现代数据系统的全面介绍。本课程的主要重点是目前正在塑造数据管理行业的现代趋势:列存储和混合系统、无共享架构、缓存意识算法、硬件/软件协同设计、主内存系统、自适应索引、流处理、科学数据管理和键值存储。我们还研究数据系统的历史、传统和开创性的概念和思想,例如关系模型、行存储数据库系统、优化、索引、并发控制、恢复和 SQL。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS165 数据系统open in new window

推荐选修课程

① CS109 数据科学概论

该课程将侧重于分析杂乱的现实生活数据,以使用统计和机器学习方法进行预测。涵盖的材料将使用数据整合调查的五个关键方面:(1)数据收集 - 数据整理、清理和采样以获得合适的数据集;(2) 数据管理——快速可靠地访问数据;(3) 探索性数据分析——产生假设和建立直觉;(4) 预测或统计学习;(5) 交流——通过可视化、故事和可解释的摘要来总结结果。

先修课程: CS50 计算机科学导论open in new window

学习地址: CS109 数据科学概论open in new window

专业选课表


MIT 计算机科学与工程

麻省理工MIT既是世界顶级名校,在计算机方面也是四大CS名校之一。它的计算机专业隶属于电子工程与计算机学院Electrical Engineering and Computer Science。由于MIT在开放课程上一直做得比较优秀,Syllabus课程表、Readings教材与参考资料、Slides课件、Code代码、video课程视频以及Lab实验课等等都十分齐全,因此十分推荐大家学习MIT CS的课程。

课程说明

MIT很多课程几年就更新一次,可以尽可能选择最新的,我在整理的过程中也会尽量把最新的开放课程放在课程地址的最前面。有些课程标有“sc”,如“6.00SC”,这个指的是专门为公开课提供的自学课程

MIT 计算机相关的专业有两个,电气工程和计算机科学(Electrical Engineering and Computer Science,EECS)以及计算机科学工程(Computer Science and Engineering,CSE),本学习路线只以CSE为主。

相比于EECS,CSE不需要学习电路与电子,信号处理,信号、系统和推断,电磁波与应用,电磁场、力和运动,纳米电子系和计算系统等课程。国内不少计算机专业由于EECS和CSE没有严格区分,导致不少计算机专业仍然需要学习大量EE相关的课程,即便是强如MIT的计算机专业CSE也对EE部分没有要求,所以不推荐国内计算机专业的学生学习大学物理、电子等EE课程。

课程体系

以下是MIT 计算机科学与工程专业本科的课程学习路线图,非常详细的列出了该专业本科毕业生应该学习哪些课程,课程分为导论课、基础课、头部课和进阶课。

MIT ALL路线图下载open in new window

MIT CS路线图下载open in new window

first yearopen in new window

MIT CS 路线图
MIT CS 路线图

必修推荐课程

① 6.0001 Python计算机科学编程导论

为很少或没有编程经验的学生介绍计算机科学和编程。培养学生编程和使用计算技术解决问题的技能。主题包括计算、Python、简单算法和数据结构、测试和调试以及算法复杂性的概念。建议和6.0002计算思维和数据科学导论一起学习。

先修课程: 零基础可学,无先修课程
学习地址: 6.0001 Python计算机科学编程导论open in new window

② 6.042 计算机科学中的数学

用于科学和工程的基本离散数学,重点是在计算机科学中有用的数学工具和证明技术。主题包括逻辑符号、集合、关系、基本图论、状态机和不变量、矛盾归纳和证明、递归、渐近符号、算法的基本分析、基本数论和密码学、排列和组合、计数工具和离散概率.

先修课程: MIT 18.01 单变量微积分open in new window
学习地址: 6.042 计算机科学中的数学open in new window

③ 6.004 计算架构

介绍了数字系统和计算机体系结构的设计。强调用高级硬件语言表达所有硬件设计并综合设计。主题包括组合和时序电路、可编程硬件的指令集抽象、单周期和流水线处理器实现、多级内存层次结构、虚拟内存、异常和 I/O 以及并行系统。

先修课程: 大学物理 II (这里就不介绍了)以及6.0001 Python计算机科学编程导论open in new window

学习地址: 6.004 计算架构open in new window

④ 6.006 算法概论

介绍计算问题的数学建模,以及用于解决这些问题的常用算法、算法范式和数据结构。强调算法和编程之间的关系,并介绍这些问题的基本性能测量和分析技术。注册可能会受到限制。

先修课程: 6.042 计算机科学中的数学open in new window6.0001 Python计算机科学编程导论open in new window6.009 编程基础open in new window

学习地址: 6.006 算法概论open in new window

⑤ 6.009 编程基础

介绍编程的基本概念。旨在培养将基本方法从编程语言应用于抽象问题的技能。主题包括编程和 Python 基础、计算概念、软件工程、算法技术、数据类型和递归。实验室组件包括软件设计、构建和设计实施。注册可能会受到限制。

先修课程: 6.0001 Python计算机科学编程导论open in new window

学习地址: 6.009 编程基础open in new window

⑥ 6.031 软件构建要素

介绍了软件开发的基本原则和技术:如何编写没有错误、易于理解和随时可以更改的软件。主题包括规范和不变量;测试、测试用例生成和覆盖;抽象数据类型和表示独立性;面向对象编程的设计模式;并发编程,包括消息传递和共享内存并发,以及防止竞争和死锁;以及具有不可变数据和高阶函数的函数式编程。包括每周编程练习和更大的小组编程项目。

先修课程: 6.009 编程基础open in new window

学习地址: 6.031 软件构建要素open in new window

⑦ 6.033 计算机系统工程

计算机软件和硬件系统工程的主题:控制复杂性的技术;使用客户端-服务器设计、操作系统的强大模块化;性能、网络;命名;安全和隐私;容错系统、并发活动的原子性和协调性以及恢复;计算机系统对社会的影响。工作系统的案例研究和当前文献中的读物提供了比较和对比。包括一个为期一学期的设计项目。学生进行广泛的书面交流练习。注册可能会受到限制。

先修课程: 6.004 计算架构open in new window6.009 编程基础open in new window

学习地址: 6.033 计算机系统工程open in new window

⑧ 6.046 算法设计与分析

设计和分析有效算法的技术,强调在实践中有用的方法。主题包括排序;搜索树、堆和散列;分而治之;动态规划;贪心算法;摊销分析;图算法;和最短路径。高级主题可能包括网络流;计算几何;数论算法;多项式和矩阵计算;缓存;和并行计算。

先修课程: 6.006 算法概论open in new window

学习地址: 6.046 算法设计与分析open in new window

进阶推荐课程

① 6.824 分布式系统

本课程介绍分布式系统设计的抽象和实现技术。主题包括:服务器设计、网络编程、命名、存储系统、安全性和容错能力。

先修课程: 6.033 计算机系统工程open in new window

学习地址: 6.824 分布式系统open in new window

② 6.828 操作系统工程

操作系统工程中的基本设计和实现问题。讲座基于对 UNIX 版本 6 的对称多处理器版本和研究论文的研究。主题包括虚拟内存;文件系统; 线程;上下文切换;内核;中断;系统调用;进程间通信;软件和硬件之间的协调和交互。个人实验室任务累积在最小操作系统(用于基于 x86 的个人计算机)的构建中,该操作系统实现了基本的操作系统抽象和外壳。具备 C 语言编程知识是先决条件。

先修课程: 6.031 软件构建要素open in new window6.033 计算机系统工程open in new window

学习地址: 6.828 操作系统工程open in new window

③ 6.829 计算机网络

关于网络协议和架构的工程和分析的主题,包括设计异构网络的架构原则;传输协议;互联网路由;路由器设计;拥塞控制和网络资源管理;无线网络; 网络安全; 命名;覆盖和对等网络。原始研究论文的读数。为期一个学期的项目和论文。

先修课程: 6.033 计算机系统工程open in new window

学习地址: 6.829 计算机网络open in new window

④ 6.830 数据库系统

与数据库系统的工程和设计相关的主题,包括数据模型;数据库和模式设计;模式规范化和完整性约束;查询处理;查询优化和成本估算;交易;恢复; 并发控制;隔离和一致性;分布式、并行和异构数据库;自适应数据库;触发系统;发布-订阅系统;半结构化数据和 XML 查询。

先修课程: 6.033 计算机系统工程open in new window6.006 算法概论open in new window6.046 算法设计与分析open in new window

学习地址: 6.830 数据库系统open in new window

专业选课表


Stanford 计算机科学专业

说到硅谷则必提及斯坦福,斯坦福大学为硅谷的形成与发展奠定了坚实的基础,培养了众多高科技公司、创始人(如惠普、雅虎、谷歌、WhatsApp、Netflix等)与优秀工程师,同时也是图灵奖得主最多的高校。斯坦福大学的课程不仅紧随一线企业的发展需求,还起到引领作用,国内高校的课程则往往落后企业发展十数年之久。

课程说明

斯坦福大学计算机专业的学生需要掌握的课程可以分为工程学院基础要求的课程、6门计算机核心课程,学完了之后,你可以再去选择一个赛道深入研究(这里简称为赛道课程)。

斯坦福大学计算机专业的课程可以直接通过它的课程编号知道它的难易程度以及所属领域,比如深度学习的课程cs231n,这里的编号2指的是二年级,300-399是大三,而0-99则是没有基础的。斯坦福大学也给高中生AP课程或大一零基础的新生准备的零基础导论课或实践课,这些课程都不是必修课程;如果你是高考刚结束,或者大一上学期的学生,可以学习这些课程。

① 工程学院基础要求

斯坦福大学计算机专业隶属于工程学院,所以学生也要满足工程学院基本要求的课程(含必修以及选修),这些课程可以分为数学类、科学类、工程基础类、社会技术类,是所有工程学院的学生都需要学习的。

1、数学类

  • 数学核心课,计算机专业的学生必须掌握微积分;
  • 计算机科学中的数学,本科需要掌握两门计算机数学课程,计算数学基础(CS103) 和 计算机科学家概率概论(CS109)
  • 数学选修课,计算机专业的学生必须再选择两门数学选修课

2、科学类

计算机专业的学生必须同时学习力学课程(PHYSICS21、PHYSICS41、PHYSICS61)和电学和磁学类(PHYSICS23、PHYSICS43、PHYSICS63),计算机专业不需要学习物理实验课。当然你也可以去学习机械、机电学院大一的物理课作为替代。

同时你需要选择一门或两门科学选修课,让科学类的总学分至少为11门,至于科学选修课推荐选修的课程,可以参考你选择的赛道课程的推荐

3、工程基础类

  • 编程抽象(CS106B 或 CS106X),CS106X 涵盖与 CS106B 相同的主题,但覆盖更深入,你也可以在学完CS106A 之后再学 CS106X(而不是 CS106B)。即使你有大量的编程经验,也强烈建议学习 CS106X,特别是如果您不懂 C++。这将确保您为以后的 CS 课程中预期的更高级的工作奠定必要的基础。
  • 电子学导论(ENGR40A),电子学导论是电子工程系关于电子学的入门课程。该课程每周有习题集、实验、期中考试和期末考试。
  • 工程基础选修课, 你需要从工程学院工程基础列表中选择另一门课,不过你也可以用你选择的赛道课程来替代这门选修课

4、社会技术类

比如和老师在暑假一起做垂直赛道的研究,比如组织有利于工程学院或促进工程协会目标的活动,或者出国去学习海外课程(大约有一半的学生会出国学习海外课程)。海外课程包括为期10周的学制季度课程、为期3到5周的短期学术课程。

② 6门计算机核心课程

核心课程包含系统部分和理论部分,这些课程是计算机专业的学生需要认真学习的基础课程,也是很多专业方向的先修课。

1、核心系统课

  • 程序的抽象概念(CS106B或CS106X),主要是C++基础、递归、数据抽象、基础的算法
  • 计算机组成与系统(CS107),基于Unix操作系统,从底层硬件到代码,主题包含计算机结构、内存模型、编译以及基础的并发;
  • 计算机系统原理(CS110):如何使用操作系统和网络抽象构建大型系统;

2、核心理论课

  • 计算的数学基础(CS103):数学归纳法、逻辑、集合、函数、关系、DFA's, NFA's、线性回归、图灵机、NP
  • 计算机科学家的概率论(CS109)
  • 数据结构与算法(CS161)

③ 赛道必修与选修课

学生需要选择一个赛道,并在该赛道学习4-5 门课程来达到专业级别的深度。学生必须完成任何一个赛道方向的要求,通常包括1-2门必修课,1-2门高度相关的课程以及你可以选择一些更广泛的选修课。

斯坦福大学当前赛道分为人工智能、计算理论、计算机系统、人机交互、图形学、信息学、生物计算(以及其他非专业和个性化自主设计的赛道)。

斯坦福大学计算机专业学习路线图
斯坦福大学计算机专业学习路线图

推荐学习课程

① CS 103 计算的数学基础

计算能力的理论极限是什么?计算机能解决哪些问题?哪些不能?我们如何以数学上的确定性来推理这些问题的答案?本课程探讨这些问题的答案,并作为离散数学、可计算性理论和复杂性理论的介绍。课程完成后,学生将能够轻松编写数学证明、推理离散结构、阅读和编写一阶逻辑语句,以及使用计算设备的数学模型。在整个课程中,学生将接触到 19 世纪末和 20 世纪最激动人心的数学和哲学思想。

先修课程: 零基础可学,无先修课程

学习地址: CS 103 计算的数学基础open in new window

② CS106a 编程方法

计算机应用工程简介,强调现代软件工程原理:程序设计、分解、封装、抽象和测试。重点是良好的编程风格和各自语言的内置设施。使用 Python 编程语言。

先修课程: 零基础可学,无先修课程

学习地址: CS106a 编程方法open in new window

③ CS 106B/106X 编程抽象

抽象及其与编程的关系。数据抽象和模块化的软件工程原理。面向对象编程、基本数据结构(如堆栈、队列、集合)和数据导向设计。递归和递归数据结构(链表、树、图)。时间和空间复杂度分析简介。使用涵盖其基本功能的编程语言 C++。

先修课程: CS106a 编程方法open in new window

学习地址: CS106B/CS106X 程序抽象open in new window

④ CS 107 计算机组成与系统

介绍计算机系统的基本概念。探索计算机系统如何执行程序和操作数据,从 C 编程语言到微处理器。涵盖的主题包括:C 编程语言、数据表示、机器级代码、计算机算术、代码编译元素、内存组织和管理,以及性能评估和优化。

先修课程: CS106B/CS106X 程序抽象open in new window

学习地址: CS 107 计算机组成与系统open in new window

⑤ CS 108 面向对象的系统设计

大型 OOP 库环境中的软件设计和构建。用 Java 授课。主题:OOP 设计、设计模式、测试、图形用户界面 (GUI) OOP 库、软件工程策略、团队编程方法

先修课程: CS 107 计算机组成与系统open in new window

学习地址: CS 108 面向对象的系统设计open in new window

⑥ CS 109 计算机科学家的概率论

主题包括:计数和组合、随机变量、条件概率、独立性、分布、期望、点估计和极限定理。概率在计算机科学中的应用,包括机器学习和在算法分析中使用概率。配套教材是《概率论基础教程》。

先修课程: CS 103 计算的数学基础open in new windowCS106B/CS106X 程序抽象open in new window

学习地址: 暂未收录

⑦ CS 110 计算机系统原理

计算机软硬件系统工程原理与实践. 主题包括:控制复杂性的技术;使用客户端-服务器设计、虚拟内存和线程的强大模块化;网络;并行活动的原子性和协调性。

先修课程: CS 107 计算机组成与系统open in new window

学习地址: CS 110 计算机系统原理open in new window

⑧ CS 140 操作系统

通过操作系统设计和实现的镜头涵盖计算机系统中的关键概念。主题包括线程、调度、n 进程、虚拟内存、同步、多核架构、n 内存一致性、硬件原子、内存分配器、链接、I/O、n 文件系统和虚拟机。Pintos 操作系统中的四核编程项目强化了这些概念。

先修课程: CS 107 计算机组成与系统open in new window

学习地址: CS 140 操作系统open in new window

⑨ CS 143 编译器

编译器和解释器的设计和实现的原则和实践。主题:词法分析;解析理论;符号表;类型系统;范围; 语义分析;中间表示;运行时环境;代码生成;和基本的程序分析和优化。学生在课程编程项目中为简单的面向对象语言构建编译器。

先修课程: CS 103 计算的数学基础open in new windowCS 107 计算机组成与系统open in new window

学习地址: CS 143 编译器open in new window

⑩ CS 144 计算机网络

原则与实践。计算机网络的结构和组件,重点是互联网。分组交换、分层和路由。传输和 TCP:通过不可靠的网络进行可靠传递、流量控制、拥塞控制。网络名称、地址和以太网交换。包括重要的 C/C++ 编程组件;学生构建互联网 TCP/IP 软件的一部分。

先修课程: CS 110 计算机系统原理open in new window

学习地址: CS 144 计算机网络open in new window

⑪ CS145 数据管理和数据系统

介绍数据库和数据密集型系统的使用、设计和实现,包括数据模型;架构设计;数据存储; 查询处理、查询优化和成本估算;并发控制、事务和故障恢复;分布式和并行执行;半结构化数据库;和数据系统支持高级分析和机器学习。

先修课程: CS 103 计算的数学基础open in new windowCS 107 计算机组成与系统open in new window

学习地址: CS145 数据管理和数据系统open in new window

⑫ CS 161 算法的设计与分析

最差和平均情况分析。递归和渐近线。用于排序、搜索和选择的高效算法。数据结构:二叉搜索树、堆、哈希表。算法设计技术:分治法、动态规划、贪心算法、随机化。基本图问题的算法:最小成本生成树、连通分量、拓扑排序和最短路径。可能的附加主题:网络流、字符串搜索、摊销分析、稳定匹配和近似算法。

先修课程: CS 103 计算的数学基础open in new window 和 CS 109 计算机科学家的概率论

学习地址: CS 161 算法的设计与分析open in new window

⑬ CS 166 数据结构

本课程深入探讨数据结构的设计、分析、实现和理论。在本季度中,我们将探索数据结构设计中的基本技术(等距、定名、随机化等),并探索对开发新数据结构有用的观点和直觉。我们将通过调查经典数据结构(如 Fibonacci 堆和后缀树)以及更现代的数据结构(如 count-min 草图和 Range Minimum查询)来做到这一点。到我们完成时,我们将看到一些真正漂亮的有效解决问题的策略。

先修课程: CS 107 计算机组成与系统open in new windowCS 161 算法的设计与分析open in new window

学习地址: CS 166 数据结构open in new window

⑭ CS 244B 分布式系统

分布式操作系统和应用问题,强调高级协议和分布式状态共享作为关键技术。主题:分布式共享内存、面向对象的分布式系统设计、分布式目录服务、原子事务和时间同步、应用程序足够的一致性、文件访问、进程调度、进程迁移以及关于分布式、规模、健壮性的存储/通信抽象面对失败和安全。

先修课程: CS 144 计算机网络open in new window

学习地址: CS 244B 分布式系统open in new window

⑮ CS 245 数据密集型系统的原理

最重要的计算机应用程序必须可靠地管理和操作数据集。本课程涵盖现代数据存储和处理系统的架构,包括关系数据库、集群计算框架、流系统和机器学习系统。主题包括存储管理、查询优化、事务、并发、故障恢复和并行处理,重点关注跨多种类型的数据密集型系统共享的关键设计思想。

先修课程: CS145 数据管理和数据系统open in new windowCS 161 算法的设计与分析open in new window

学习地址: CS 245 数据密集型系统的原理open in new window

专业选课表


CMU 计算机科学专业

卡内基梅隆大学CMU号称自己是世界上第一个开设计算机专业的学校(开设于1965年,另有说是普渡大学1962年),CMU的计算机堪称可以载入史册的化石级。
计算机科学可以说是CMU之魂,有点“全民CS”的味道。对于其他很多学校来说,计算机可能只是一个系,而CMU则有独立的计算机学院。不仅如此,它的其它学院如艺术学院、理工学院、商学院、科学院等都有一定数量的计算机方面的课程。

课程说明

计算机专业的学生毕业后应该掌握哪些技能?CMU对毕业生的要求也反映在它们的课程安排上:

  • 识别、使用、设计、开发和分析适当的抽象和算法来解决问题,同时能够在各种指标(例如,时间、空间、并行与顺序实现、可计算性)上证明算法的性能和正确性。
  • 在人工智能、图形和声音、软件工程和人机交互等领域实施问题的解决方案,通过应用这些领域的基础知识来创建当前问题的解决方案,同时接触技术发展前沿,使解决方案能够适应技术的变化。
  • 用不同的编程语言和编程范式来推理并实现程序;
  • 具备设计与开发高性能、低资源要求的大型开放式软件系统;
  • 能够向技术人员和非技术人员来传达技术材料;
  • 能够胜任个人和团队的工作

数学课方面,计算机专业的学生掌握CS-151 计算机科学的数学基础(离散数学)、微积分、多重积分、线性代数以及概率统计约50个学分的数学课,而专业课以及选修课方面则需要掌握至少300个学分。专业课分必修核心课以及多个维度的选修课,课程如下所示:

① 计算机科学核心课程

以下所有的课程都必须要掌握:

  • 15-122 命令式编程原理,在此前需学完15-112的课程,10学分
  • 15-150 函数式编程原理,10学分
  • 15-210 并行和顺序数据结构和算法,12学分
  • 15-213 计算机系统概论,12学分
  • 15-251 理论计算机科学的伟大思想,12学分
  • 15-451 算法设计与分析,12学分

② 人工智能选修课

必须要要选择一门一门人工智能选修课(最少9个学分):

  • 10-315 机器学习简介,12学分
  • 11-411 自然语言处理,12学分
  • 11-485 深度学习简介,9学分
  • 15-281 人工智能:表示和解决问题,12学分
  • 15-386 神经计算,9学分
  • 16-384 机器人运动学和动力学,12学分
  • 16-385 计算机视觉,12学分

③ 跨领域选修课

至少要学习一个跨领域选修课(最少9学分):

  • 02-251 计算生物学的伟大想法,12学分
  • 05-391 设计以人为本的软件,12学分
  • 15-322 电脑音乐概论,9学分
  • 15-330 计算机安全概论,12学分
  • 15-455 复杂性理论(本科),9学分
  • 15-462 计算机图形学,12学分
  • 17-313 软件工程基础,12学分

④ 逻辑、编程语言课

至少要学习一门逻辑/语言选修课(最少9学分):

  • 15-312 编程语言基础,12学分
  • 15-314 编程语言语义,12学分
  • 15-316 软件的安全与隐私基础,9学分
  • 15-317 构造性逻辑,9学分
  • 15-414 Bug捕获:自动程序验证,9学分
  • 15-424 网络物理系统的逻辑基础,12学分
  • 17-355 程序分析,12学分
  • 80-413 范畴论

⑤ 软件系统选修课

至少要学习一门软件系统的选修课(至少12学分):

  • 15-410 操作系统设计与实现,15学分
  • 15-411 编译器设计,15学分
  • 15-418 并行计算机体系结构和编程,12学分
  • 15-440 分布式系统,12学分
  • 15-441 计算机网络,12学分
  • 15-445 数据库系统,12学分

推荐学习课程

① 15-112 编程和计算机科学基础

对编程基础知识的技术介绍,重点是使用自上而下的设计、非正式分析以及有效的测试和调试来生成清晰、健壮和合理高效的代码。从第一原则开始,我们将介绍 Python 编程语言的一个大子集,包括它的标准库和编程范式。我们还将针对大量部署场景,包括独立程序、shell 脚本和基于 Web 的应用程序。本课程假设没有任何编程经验。

先修课程: 入门第一课,无先修课程

学习地址: 15-112 编程和计算机科学基础open in new window

② 15-121 数据结构简介

程序设计和分析过程的延续,面向具有一定编程经验(函数、循环和数组,不一定使用 Java)的学生。本课程强化了 Java 中的面向对象编程技术,涵盖了数据聚合、数据结构(例如,链表、堆栈、队列、树和图),以及对在这些数据结构上运行的算法的分析的介绍。

先修课程: 15-112 编程和计算机科学基础open in new window

学习地址: 15-121 数据结构简介open in new window

③ 15-122 命令式计算原理

适合对编程(变量、表达式、循环、数组、函数)有基本了解的学生。教授命令式编程和确保程序正确性的方法。学生将学习从算法的高级描述到正确的命令式实现所需的过程和概念,以及对基本数据结构和算法的具体应用。

先修课程: 15-112 编程和计算机科学基础open in new window

学习地址: 15-122 命令式计算原理open in new window

④ 15-131 计算机科学家的伟大实用思想

本课程只对 CS 大一新生开放。在卡内基梅隆大学作为计算机科学家的整个教育过程中,您将学习编程、理论思想、逻辑、系统等课程。随着您的进步,您将学习所谓的“交易工具”。本课程旨在帮助您以友好、低压力、高支持的方式学习您需要了解的内容。我们将讨论 UNIX、LaTex、调试和许多其他基本工具。

先修课程: 无先修课程

学习地址: 15-131 计算机科学家的伟大实用思想open in new window

⑤ 15-150 函数式编程原理

基于“功能”计算模型的编程介绍。函数模型是代数的自然概括,其中程序是根据输入和#8212 描述计算输出的公式;即作为函数。但是,函数模型不仅限于实值或复值函数,而是将代数视图扩展到非常丰富的数据类型类别,不仅包括从其他类型构建的聚合,还包括作为值的函数本身。本课程是对编程的介绍,侧重于函数和类型的核心概念。一个主要主题是逐步建立的归纳类型之间的相互作用。递归函数,通过分解计算归纳类型;并通过结构归纳证明,用于证明递归函数的正确性和时间复杂度。另一个主要主题是类型在将大型程序构建成单独的模块中的作用,以及通过引入其值可能在计算期间更改的数据类型来集成命令式编程。

先修课程: 15-121 数据结构简介open in new window15-151 计算机科学的数学基础open in new window

学习地址: 15-150 函数式编程原理open in new window

⑥ 15-151 计算机科学的数学基础

本课程面向即将入学的计算机科学新生,重点介绍计算机科学特别感兴趣的数学基本概念,例如逻辑、集合、归纳、函数和组合。这些主题被用作学生学习使用数学证明方法形式化论证的背景。本课程使用实验和协作作为更好地理解材料的方法。仅对 CS 新生开放。注意:学生必须达到 C 或更高才能使用本课程来满足任何后续计算机科学课程的先决条件。

先修课程: 无先修课程

学习地址: 15-151 计算机科学的数学基础open in new window

⑦ 15-210 并行和顺序数据结构和算法

了解算法设计中的各种技术,包括分治法、收缩法、随机化、贪心法、蛮力法、归约法和动态规划;了解并行技术,例如扫描(前缀和) 将问题抽象为正式定义的能力;给定定义设计新算法和数据结构的能力;了解渐近分析并解决各种递归;理解纯函数式算法。

先修课程: 15-150 函数式编程原理open in new window15-122 命令式计算原理open in new window

学习地址: 15-210 并行和顺序数据结构和算法open in new window

⑧ 15-213 计算机系统概论

本课程提供程序员对计算机系统如何执行程序、存储信息和通信的看法。它使学生​​成为更有效的程序员,特别是在处理性能、可移植性和健壮性问题方面。它还作为编译器、网络、操作系统和计算机体系结构课程的基础,这些课程需要对系统级问题有更深入的了解。涵盖的主题包括:机器级代码及其通过优化编译器生成的代码、性能评估和优化、计算机算术、内存组织和管理、网络技术和协议,以及支持并发计算。

先修课程: 15-122 命令式计算原理open in new window

学习地址: 15-213 计算机系统概论open in new window

⑨ 15-214 软件构建原理:对象、设计和并发

今天的软件工程师不太可能从头开始设计数据结构和算法,而更有可能从库和框架组件构建系统。在本课程中,学生在对数据结构、算法、程序结构和计算机结构的基本构建块的理解的基础上,参与与大规模软件系统构建相关的概念。该课程涵盖四个领域的技术主题:(1)复杂系统的设计概念,(2)面向对象的编程,(3)程序的静态和动态分析,以及(4)并发和分布式软件。学生作业涉及使用复杂的软件,例如分布式大型多人游戏系统和图形用户交互框架。

先修课程: 15-121 数据结构简介open in new window15-122 命令式计算原理open in new window15-151 计算机科学的数学基础open in new window

学习地址: 15-214 软件构建原理:对象、设计和并发open in new window

⑩ 15-251 理论计算机科学的伟大思想

学分本课程是关于如何使用理论思想来制定和解决计算机科学中的问题。它将数学材料与一般问题解决技术和计算机科学应用相结合。示例来自算法、复杂性理论、博弈论、概率论、图论、自动机理论、代数、密码学和组合学。作业涉及数学证明和编程。

先修课程: 15-121 数据结构简介open in new window15-122 命令式计算原理open in new window15-151 计算机科学的数学基础open in new window

学习地址: 15-251 理论计算机科学的伟大思想open in new window

⑪ 15-312 编程语言基础

学分本课程深入讨论了现代编程语言的设计、定义、实现和使用的许多概念。定义语法和语义的正式方法用于描述编程语言的基本概念。涵盖了各种编程范式,例如命令式、函数式、逻辑和并发编程。除了正式的研究之外,使用语言编程的经验被用来说明不同的设计目标如何导致完全不同的语言和计算模型。

先修课程: 15-150 函数式编程原理open in new window15-251 理论计算机科学的伟大思想open in new window

学习地址: 15-312 编程语言基础open in new window

⑫ 15-313 软件工程基础

学生接触现代软件工程的基础知识。这包括核心 CS 技术知识和将这些知识应用于复杂软件的实际工程的方法。与软件工件相关的主题包括设计模型、模式、编码、静态和动态分析、测试和检查、测量以及软件架构和框架。与软件过程相关的主题包括建模、需求工程、过程模型和评估、团队开发以及包括外包和开源在内的供应链问题。本课程具有很强的技术重点,将包括书面和编程作业。学生将获得使用现代软件工程工具的经验。

先修课程: 15-214 软件构建原理:对象、设计和并发open in new window

学习地址: 15-313 软件工程基础open in new window

⑬ 15-319 云计算

云计算,即通过网络提供计算即服务,分布式资源由最终用户作为公用事业租用而不是拥有。学生将学习其支持技术、构建模块,并通过利用公共云基础设施的项目获得实践经验。本课程将介绍云并涵盖数据中心、软件堆栈、虚拟化、软件定义的网络和存储、云存储和编程模型等主题。我们将首先讨论云的激励因素、好处、挑战、服务模型、SLA 和安全性。我们将描述数据中心设计和管理背后的几个概念,这使云范式的经济和技术优势成为可能。

先修课程: 15-213 计算机系统概论open in new window

学习地址: 15-319 云计算open in new window

⑭ 15-440 分布式系统

本课程的目标有两个:首先,让学生了解分布式系统设计背后的原理和技术,例如锁定、并发、调度和跨网络通信。其次,让学生获得设计、实现和调试真实分布式系统的实践经验。本课程将教授的主要主题包括稀缺性、调度、并发和并发编程、命名、抽象和模块化、不完善的通信和其他类型的故障、防止意外和恶意伤害、乐观以及仪器和监控和调试工具的使用在解决问题。由于软件系统的创建和管理是任何本科系统课程的基本目标,学生将设计、实施、并调试大型编程项目。因此,需要具备 C 和 Java 编程语言的能力。

先修课程: 15-213 计算机系统概论open in new window

学习地址: 15-440 分布式系统open in new window

⑮ 15-441 计算机网络

学分 本课程的重点是计算机网络设计和实施中的基本性能和工程权衡。为了使问题更具体,该课程包括几个需要大量设计和实施的为期数周的项目。目标是让学生不仅了解计算机网络是什么以及它们今天的工作方式,还了解它们为什么要按现在的方式设计以及它们未来可能如何发展。我们将主要从 Internet 中提取示例。涵盖的主题包括:网络架构、路由、拥塞/流量/错误控制、命名和寻址、点对点和网络、互联网络和网络安全。

先修课程: 15-213 计算机系统概论open in new window

学习地址: 15-441 计算机网络open in new window

⑯ 15-445 数据库系统

学分 本课程是关于数据库管理系统的设计和实施。主题包括数据模型(关系、文档、键/值)、存储模型(n-ary、分解)、查询语言(SQL、存储过程)、存储架构(堆、日志结构)、索引(顺序保留树、哈希表)、事务处理(ACID、并发控制)、恢复(日志记录、检查点)、查询处理(连接、排序、聚合、优化)和并行架构(多核、分布式)。开源和商业数据库系统的案例研究将用于说明这些技术和权衡。该课程适合具有强大系统编程技能的学生。

先修课程: 15-213 计算机系统概论open in new window

学习地址: 15-445 数据库系统open in new window

⑰ 15-451 算法设计与分析

学分本课程是关于算法的设计和分析。我们研究各种问题的特定算法,以及通用设计和分析技术。具体主题包括搜索、排序、图问题算法、高效数据结构、下界和 NP 完备性。教师可酌情涵盖各种其他主题。这些包括并行算法、随机算法、几何算法、用于高效编程的低级技术、密码学和密码协议。

先修课程: 15-210 并行和顺序数据结构和算法open in new window

学习地址: 15-451 算法设计与分析open in new window

专业选课表


Princeton 计算机科学专业

普林斯顿大学以优质而严苛的本科生教育闻名,计算机科学和人工智能之父图灵、现代计算机之父冯诺依曼都曾在普林斯顿大学求学和工作过。普林斯顿计算机专业对数学有着比较严格的要求。

课程说明

普林斯顿大学计算机专业课程分为基础课、必修课、选修课,学生需要学完所有基础课程,至少8门必修课以及至少3门选修课(必须是COS300开头或更高的COS课程,其中COS500为研究生课程)。

基础课包含数学类微积分(上、下)、线性代数以及工程导论,除此以外还需要学习计算机COS126(计算机科学:跨学科方法 )、COS217(编程系统导论)和COS226(算法与数据结构)以及COS340 计算推理这四门课程必须在大三结束前学完。

和其他计算机专业一样,普林斯顿开始将计算机专业的必修课程分为4类:研究计算机硬件和软件设计的计算机系统、使用数学来严格发展研究领域的基础理论课、人工智能和机器学习以及比较宽泛的应用课程(比如函数式编程、图形学、信息安全、人机交互等)。

从普林斯顿最新的课程安排来看,物理、化学等理科课程逐渐被排除在计算机专业之外,而人工智能和机器学习则被纳入到计算机专业必修课程之中。

学生需要从以下4类专业课程中都选择一门课程作为必修,同时你至少从以下课程里要选择8门必修课,以及3门选修课(选修课也可以是COS500开头的研究生课),也就是说建议你从下列课程里选择11门课。

① 计算机系统

  • COS375 (Computer Architecture and Organization)
  • COS318 (Operating Systems)
  • COS418 (Distributed Systems)
  • COS461 (Computer Networks)

② 人工智能与机器学习

  • COS324 (Introduction to Machine Learning)
  • COS424 (Fundamentals of Machine Learning)
  • COS429 (Computer Vision)
  • COS484 (Natural Language Processing)

③ 理论课程

  • COS423 (Theory of Algorithms)
  • COS433 (Cryptography)
  • COS445 (Networks, Economics, and Computing)
  • COS487 (Theory of Computation)

③ 应用课程

  • COS326 (Functional Programming)
  • COS333 (Advanced Programming Techniques)
  • COS343 (Algorithms for Computational Biology)
  • COS426 (Computer Graphics)
  • COS432 (Information Security)
  • COS436 (Human-Computer Interface Technology)
  • COS448 (Innovating across Technology, Business, and Markets)

推荐学习课程

① COS126 计算机科学:跨学科方法

在科学、工程和商业应用的背景下介绍计算机科学。本课程的目标是讲解计算机科学的基本原理和如何解决实际问题,同时帮助学生有效地使用计算机在计算机科学、物理、生物、化学、工程和其他学科中的应用。所涉及的主题包括:计算机硬件和软件系统;用Java编程;算法和数据结构;计算的基本原理;科学计算,包括模拟、优化和数据分析。

先修课程: 零基础可学,无先修课程

学习地址: COS126 计算机科学:跨学科方法open in new window

② COS217 编程系统导论

主要包括模块化编程、高级程序设计、编程风格、测试、调试和性能调优;机器语言和汇编语言;和使用系统调用服务。

先修课程: COS126 计算机科学:跨学科方法open in new window

学习地址: COS217 编程系统导论open in new window

③ COS226 算法和数据结构

本课程调查当今计算机上使用的最重要的算法和数据结构。特别强调用于排序、搜索和字符串处理的算法。还涵盖了许多其他领域的基本算法,包括几何算法、图形算法和一些数值算法。

先修课程: COS126 计算机科学:跨学科方法open in new window

学习地址: COS226 算法和数据结构open in new window

④ COS240 计算推理

介绍与计算机科学相关的数学主题。组合数学、概率和图论将在计算机科学应用的背景下进行介绍。本课程将介绍一种计算机科学方法来思考和建模。将向学生介绍从高效计算的世界观中产生的基本概念,例如 NP 完整性和密码学。

先修课程: COS126 计算机科学:跨学科方法open in new windowCOS226 算法和数据结构open in new window 以及 线性代数

学习地址: COS240 计算推理open in new window

⑤ COS316 计算机系统设计原理

本课程教授学生计算机系统的设计、实现和评估,包括操作系统、网络和分布式系统。该课程将教授学生评估性能并研究现有系统的设计选择。学生还将学习支持模块化、性能和安全性设计目标的通用系统概念。学生将应用在讲座和阅读中学到的材料来设计、构建和评估新的系统组件。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS316 计算机系统设计原理open in new window

⑥ COS318 操作系统

操作系统的设计和分析的研究。主题包括:进程、互斥、同步、信号量、监视器、死锁预防和检测、内存管理、虚拟内存、处理器调度、磁盘管理、文件系统、安全、保护、分布式系统。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS318 操作系统open in new window

⑦ COS320 编译技术

了解编译器的设计和构造。概念包括语法分析、语义、代码生成、优化和运行时系统。将研究命令式语言(如 C)、函数式语言(如 ML)和面向对象语言(如 Java)的编译。学生将为一种小语言实现一个完整的编译器。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS318 操作系统open in new window

⑧ COS326 函数式编程

类型化函数式编程原理的介绍。对结构化数据类型的递归函数进行编程,并通过归纳这些函数的正确性进行非正式推理。函数式算法和数据结构。模块化编程、类型抽象、表示不变量和表示独立性的原则。并行函数式编程、算法和应用。

先修课程: COS226 算法和数据结构open in new window

学习地址: COS326 函数式编程open in new window

⑨ COS333 高级编程技术

这是一门关于编程实践的课程。编程不仅仅是写代码。程序员还必须权衡利弊,在备选设计方案中进行选择,调试和测试,提高性能,并维护自己和他人编写的软件。同时,他们必须在满足规范的同时关注兼容性、稳健性和可靠性。学生将有机会通过编写自己的代码和参加小组项目来培养这些技能。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS333 高级编程技术open in new window

⑩ COS375 计算机体系结构和组织

计算机体系结构和组织简介。指令集设计;基本的处理器实现技术;绩效管理;缓存和虚拟内存;流水线处理器设计;成本、性能和复杂性之间的设计权衡。

先修课程: COS217 编程系统导论open in new window

学习地址: COS375 计算机体系结构和组织open in new window

⑪ COS418 分布式系统

本课程涵盖分布式系统的设计和实现。学生将了解现代、可靠和高性能分布式系统设计背后的原则和技术。主题包括服务器设计、网络编程、命名、并发和锁定、一致性模型和技术、安全和容错。一些最大的互联网站点(例如,谷歌、Facebook、亚马逊)采用的现代技术和系统也将包括在内。

先修课程: COS217 编程系统导论open in new windowCOS318 操作系统open in new windowCOS333 高级编程技术open in new window

学习地址: COS418 分布式系统open in new window

⑫ COS423 算法导论

设计和分析高效的数据结构和算法。构建和分析算法的一般技术。NP完全性简介。

先修课程: COS226 算法和数据结构open in new windowCOS340 计算推理open in new window

学习地址: COS423 算法导论open in new window

⑬ COS425 数据库和信息管理系统

用于访问和管理半结构化信息(例如,Web 信息库)的数据库系统和系统的理论和实践方面。主题包括:关系和 XML 模型、存储和索引结构、查询表达式和评估、并发和事务管理、搜索有效性。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS425 数据库和信息管理系统open in new window

⑭ COS432 信息安全

计算、通信和电子商务中的安全问题。目标和弱点;法律和道德问题;基本密码学;私人和经过身份验证的通信;电子商务; 软件安全;病毒和其他恶意代码;操作系统保护;可信系统设计;网络安全; 防火墙;政策、行政和程序;审计;人身安全;灾难恢复; 可靠性; 内容保护;隐私。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS432 信息安全open in new window

⑮ COS461 - 计算机网络

本课程研究计算机网络以及在其上运行的应用程序和服务。该课程涵盖网络概念,包括:分组交换;互联网路由和业务关系;IPv4 和 IPv6 寻址;域名系统(DNS)、路由器、交换机和中间盒设计;网络安全; 内容分发网络;无线网络; 和网络应用程序,例如流媒体视频。该课程还将包括几个编程任务,从客户端-服务器编程到网络测量、分析和推理

先修课程: COS217 编程系统导论open in new window

学习地址: COS461 - 计算机网络open in new window

推荐选修

① COS426 计算机图形学

计算机图形学导论。主题包括图像合成、3D 建模、图像处理和动画。鼓励亲身体验。

先修课程: COS217 编程系统导论open in new windowCOS226 算法和数据结构open in new window

学习地址: COS426 计算机图形学open in new window

② COS433 密码学

计算机图形学导论。主题包括图像合成、3D 建模、图像处理和动画。鼓励亲身体验。

先修课程: COS226 算法和数据结构open in new window

学习地址: COS433 密码学open in new window

③ COS436 人机交互

创造适合人们日常生活的技术不仅仅涉及拥有技术上复杂的算法、系统和基础设施。它涉及了解人们如何思考和行为以及如何使用这些信息。设计面向用户的界面,以增强和增强人类的能力。您将了解人机交互领域以及指导对人进行研究的工具、技术和原则。设计和实施面向用户的系统,为用户带来欢乐而不是挫败感,并在涉及创建交互系统的为期一学期的小组项目中将这些技能付诸实践。

先修课程: COS217 编程系统导论open in new window

学习地址: COS436 人机交互open in new window

专业选课表

上次编辑于:
贡献者: loliyes