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 函数式编程原理