Harvard 计算机科学专业
哈佛大学虽然不在四大CS名校之列,不过由于师资力量强大,因此有不少神课,比如CS50系列课程,风靡全校乃至全美,而且有比尔盖茨、扎克伯格等一众知名校友。就图灵奖获得者所在的大学排名,哈佛大学在斯坦福、MIT、伯克利、普林斯顿之后,在CMU之前,位列第5。除此以外,哈佛大学的学生可以交叉学习MIT的课程。
课程说明
哈佛大学计算机专业将毕业要求氛围基础与荣誉等级别,其中基础毕业要求除了需要掌握微积分、线性代数、概率统计外,还需要围绕编程(编程1和编程2)、形式推理、计算机系统、计算与世界(计算与世界之间的交互,如人工智能)、高级计算机科学来选择至少9门课,其中编程课至少2门,形式推理至少要包含离散数学(如CS20)、可计算性和复杂性理论与算法(如CS120、CS121、CS124),计算机系统至少1门、计算与世界至少1门、高级计算机科学至少4门。
而荣誉毕业要求,至少要掌握11门计算机科学的核心课,增加了对人工智能的硬件要求,以及高级计算机科学至少5门。
① 大一推荐课程安排
哈佛大学对各年级的大学生推荐了一个比较基础的课程安排计划,以下内容为哈佛CS专业官方推荐的一个课程安排,针对大一新生
大一上学期
- CS 50:计算机科学导论是我们对计算机科学专业的介绍。这是集中学习者和非集中学习者中很受欢迎的课程。三分之二的 CS 50 学生以前从未学过 CS。
- CS 61:系统编程和机器组织,一些学生可能已经具备跳过 CS 50 的背景,而 CS 61 是一门很棒的系统编程课程。本课程满足编程 2 和系统标签。
- CS 120:算法简介及其局限性主要由大二学生学习,但也有一些已经做好数学准备并对 CS 的更多理论方面感兴趣的一年级学生学习。本课程满足计算机科学形式推理要求的计算限制标签和算法标签。
- CS 121:理论计算机科学概论主要由二年级学生学习,但也有一些已经做好数学准备并对计算机科学的更多理论方面感兴趣的一年级学生学习。
大一下学期
- CS 32:计算思维和问题解决是 CS 50 的替代课程。CS 32 采用计算机科学问题解决方法,并使用一种编程语言 Python。本课程适合秋季学期无法参加 CS 50 或想要了解计算机科学的不同入门课程的学生。
- CS 51:计算机科学抽象与设计是 CS 50 之后常见的下一门课程(尽管学生可以参加 CS 61;他们也可以参加 CS 50、51 和 61 的全部三门课程)。
- CS 20:计算机科学离散数学是计算机一年级学生的一门非常常见的课程,满足形式推理的离散数学要求。
- CS 124:数据结构和算法主要由二年级学生学习,但有时由具有证明/离散数学背景的一年级学生学习。
数学要求
数学是计算机科学许多领域的基础,无论是线性代数、概率和微积分在机器学习、图形和优化中的使用,图形在算法设计中的使用,逻辑在编程语言中的使用等等。因此,计算机科学专业的学生需要扎实的数学基础才能取得成功。由于数学课程往往是许多其他更高级课程的先决条件,因此我们强烈鼓励所有计算机科学学生不要推迟学习数学课程。最好在大一秋季就开始满足数学要求。如果您想考虑其他有数学要求的专业,例如工程、应用数学、统计学、经济学等,这也可以让您保持选择余地。
- 线性代数:线性代数要求可以通过多种不同的方式来满足,包括Math 21b/22a/23a/25a/55a 。我们注意到多元微积分不是计算机科学专业所必需的。我们建议想要同时学习线性代数和多元微积分的学生在秋季学期选择线性代数序列。
- 概率:满足概率要求的最常见方法是采用Statistics 110
- 证明和离散数学:一些计算机科学课程,包括 CS 120、CS 121 和 CS 124,需要证明和离散数学背景
大三、大四你可以根据你自己的兴趣来安排、选修课程。
② 编程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 计算机科学导论
② CS51 计算中的抽象与设计
计算机程序设计中的基本概念,强调抽象的关键作用。本课程的目标是让学生深入了解编程和编程之间的区别。为了强调表达编程解决方案的不同方法,您将学习以 各种范式进行编程——包括函数式、命令式和面向对象。来自软件工程和计算模型的重要思想将为这些不同的编程观点提供信息。
先修课程: CS50 计算机科学导论
学习地址: CS51 计算中的抽象与设计
③ CS61 系统编程和计算机组成原理
计算机系统编程、机器组织和性能调整的基础知识。本课程提供扎实的系统编程背景以及对低级机器组织和设计的深刻理解。主题包括 C 和汇编语言编程、程序优化、内存层次结构和缓存、虚拟内存和动态内存管理、并发、线程和同步。
先修课程: CS50 计算机科学导论、CS51 计算中的抽象与设计
学习地址: CS61 系统编程和计算机组成原理