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 编程和计算机科学基础
② 15-121 数据结构简介
程序设计和分析过程的延续,面向具有一定编程经验(函数、循环和数组,不一定使用 Java)的学生。本课程强化了 Java 中的面向对象编程技术,涵盖了数据聚合、数据结构(例如,链表、堆栈、队列、树和图),以及对在这些数据结构上运行的算法的分析的介绍。
先修课程: 15-112 编程和计算机科学基础
学习地址: 15-121 数据结构简介
③ 15-122 命令式计算原理
适合对编程(变量、表达式、循环、数组、函数)有基本了解的学生。教授命令式编程和确保程序正确性的方法。学生将学习从算法的高级描述到正确的命令式实现所需的过程和概念,以及对基本数据结构和算法的具体应用。
先修课程: 15-112 编程和计算机科学基础
学习地址: 15-122 命令式计算原理
④ 15-131 计算机科学家的伟大实用思想
本课程只对 CS 大一新生开放。在卡内基梅隆大学作为计算机科学家的整个教育过程中,您将学习编程、理论思想、逻辑、系统等课程。随着您的进步,您将学习所谓的“交易工具”。本课程旨在帮助您以友好、低压力、高支持的方式学习您需要了解的内容。我们将讨论 UNIX、LaTeX、调试和许多其他基本工具。
先修课程: 无先修课程
学习地址: 15-131 计算机科学家的伟大实用思想
⑤ 15-150 函数式编程原理
基于“功能”计算模型的编程介绍。函数模型是代数的自然概括,其中程序是根据输入和#8212 描述计算输出的公式;即作为函数。但是,函数模型不仅限于实值或复值函数,而是将代数视图扩展到非常丰富的数据类型类别,不仅包括从其他类型构建的聚合,还包括作为值的函数本身。本课程是对编程的介绍,侧重于函数和类型的核心概念。一个主要主题是逐步建立的归纳类型之间的相互作用。递归函数,通过分解计算归纳类型;并通过结构归纳证明,用于证明递归函数的正确性和时间复杂度。另一个主要主题是类型在将大型程序构建成单独的模块中的作用,以及通过引入其值可能在计算期间更改的数据类型来集成命令式编程。
先修课程: 15-121 数据结构简介、15-151 计算机科学的数学基础
学习地址: 15-150 函数式编程原理
⑥ 15-151 计算机科学的数学基础
本课程面向即将入学的计算机科学新生,重点介绍计算机科学特别感兴趣的数学基本概念,例如逻辑、集合、归纳、函数和组合。这些主题被用作学生学习使用数学证明方法形式化论证的背景。本课程使用实验和协作作为更好地理解材料的方法。仅对 CS 新生开放。注意:学生必须达到 C 或更高才能使用本课程来满足任何后续计算机科学课程的先决条件。
先修课程: 无先修课程
学习地址: 15-151 计算机科学的数学基础
⑦ 15-210 并行和顺序数据结构和算法
了解算法设计中的各种技术,包括分治法、收缩法、随机化、贪心法、蛮力法、归约法和动态规划;了解并行技术,例如扫描(前缀和) 将问题抽象为正式定义的能力;给定定义设计新算法和数据结构的能力;了解渐近分析并解决各种递归;理解纯函数式算法。
先修课程: 15-150 函数式编程原理、15-122 命令式计算原理
学习地址: 15-210 并行和顺序数据结构和算法
⑧ 15-213 计算机系统概论
本课程提供程序员对计算机系统如何执行程序、存储信息和通信的看法。它使学生成为更有效的程序员,特别是在处理性能、可移植性和健壮性问题方面。它还作为编译器、网络、操作系统和计算机体系结构课程的基础,这些课程需要对系统级问题有更深入的了解。涵盖的主题包括:机器级代码及其通过优化编译器生成的代码、性能评估和优化、计算机算术、内存组织和管理、网络技术和协议,以及支持并发计算。
先修课程: 15-122 命令式计算原理
学习地址: 15-213 计算机系统概论
⑨ 15-214 软件构建原理:对象、设计和并发
今天的软件工程师不太可能从头开始设计数据结构和算法,而更有可能从库和框架组件构建系统。在本课程中,学生在对数据结构、算法、程序结构和计算机结构的基本构建块的理解的基础上,参与与大规模软件系统构建相关的概念。该课程涵盖四个领域的技术主题:(1)复杂系统的设计概念,(2)面向对象的编程, (3)程序的静态和动态分析,以及(4)并发和分布式软件。学生作业涉及使用复杂的软件,例如分布式大型多人游戏系统和图形用户交互框架。
先修课程: 15-121 数据结构简介、 15-122 命令式计算原理、 15-151 计算机科学的数学基础
学习地址: 15-214 软件构建原理:对象、设计和并发
⑩ 15-251 理论计算机科学的伟大思想
学分本课程是关于如何使用理论思想来制定和解决计算机科学中的问题。它将数学材料与一般问题解决技术和计算机科学应用相结合。示例来自算法、复杂性理论、博弈论、概率论、图论、自动机理论、代数、密码学和组合学。作业涉及数学证明和编程。
先修课程: 15-121 数据结构简介、 15-122 命令式计算原理、 15-151 计算机科学的数学基 础
学习地址: 15-251 理论计算机科学的伟大思想
⑪ 15-312 编程语言基础
学分本课程深入讨论了现代编程语言的设计、定义、实现和使用的许多概念。定义语法和语义的正式方法用于描述编程语言的基本概念。涵盖了各种编程范式,例如命令式、函数式、逻辑和并发编程。除了正式的研究之外,使用语言编程的经验被用来说明不同的设计目标如何导致完全不同的语言和计算模型。
先修课程: 15-150 函数式编程原理、15-251 理论计算机科学的伟大思想
学习地址: 15-312 编程语言基础
⑫ 15-313 软件工程基础
学生接触现代软件工程的基础知识。这包括核心 CS 技术知识和将这些知识应用于复杂软件的实际工程的方法。与软件工件相关的主题包括设计模型、模式、编码、静态和动态分析、测试和检查、测量以及软件架构和框架。与软件过程相关的主题包括建 模、需求工程、过程模型和评估、团队开发以及包括外包和开源在内的供应链问题。本课程具有很强的技术重点,将包括书面和编程作业。学生将获得使用现代软件工程工具的经验。
先修课程: 15-214 软件构建原理:对象、设计和并发
学习地址: 15-313 软件工程基础
⑬ 15-319 云计算
云计算,即通过网络提供计算即服务,分布式资源由最终用户作为公用事业租用而不是拥有。学生将学习其支持技术、构建模块,并通过利用公共云基础设施的项目获得实践经验。本课程将介绍云并涵盖数据中心、软件堆栈、虚拟化、软件定义的网络和存储、云存储和编程模型等主题。我们将首先讨论云的激励因素、好处、挑战、服务模型、SLA 和安全性。我们将描述数据中心设计和管理背后的几个概念,这使云范式的经济和技术优势成为可能。
先修课程: 15-213 计算机系统概论
学习地址: 15-319 云计算