MIT 计算机科学与工程
麻省理工MIT既是世界顶级名校,在计算机方面也是四大CS名校之一。它的计算机专业隶属于电子工程与计算机学院Electrical Engineering and Computer Science。由于MIT在开放课程上一直做得比较优秀,Syllabus课程表、Readings教材与参考资料、Slides课件、Code代码、video课程视频以及Lab实验课等等都十分齐全,因此十分推荐大家学习MIT CS的课程。
课程说明
MIT在2023年春,更新了计算机专业所有课程的编号,比如6.004这门课更改为6.1910,考虑到对外开放的课程资源都是几年前的,而新编号也就是2023年新出的课程基本都没有公开的资源,同时尽管课程编号修改了,课程原本的新官网也会备注以前的编号,所以这里仍然使用老编号方便大家查阅。
MIT 计算机相关的专业有两个,电气工程和计算机科学(Electrical Engineering and Computer Science,EECS)以及计算机科学工程(Computer Science and Engineering,CSE),本学习路线只以CSE为主。
相比于EECS,CSE不需要学习电路与电子,信号处理,信号、系统和推断,电磁波与应用,电磁场、力和运动,纳米电子系和计算系统等课程。国内不少计算机专业由于EECS和CSE没有严格区分,导致不少计算机专业仍然需要学习大量EE相关的课程,即便是强如MIT的计算机专业CSE也对EE部分没有要求,所以不推荐国内计算机专业的学生学习大学物理、电子等EE课程。
课程体系
计算机专业涵盖算法与理论、软件工程、编程语言、计算机系统、人机交互与图形学、人工智能与机器学习等广泛领域。在2022年,MIT对计算机科学与工程的课程要求进行了一系列更新,分为2017年课程要求和2022年课程要求。
2017年课程要求
以下是MIT 计算机科学与工程专业本科的课程学习路线图,非常详细的列出了该专业本科毕业生应该学习哪些课程,课程分为导论课、基础课、头部课和进阶课。
2022年课程要求
2022年相比于2017年,增加了一门基础编程技能课,也就是C语言和汇编语言相关课程;人工智能和机 器学习不再是必修,而是选修。
- 两门编程技能课:6.0001 Python计算机科学编程导论(新编号为6.100A),6.100L(本课是6.0001的全学期版本,覆盖的材料是一样的,但速度减慢了,因此学6.0001即可)以及 6.0004(新编号为6.1900,这是一门主讲C语言和汇编语言的课程,目前没有对外开放,可以去学习普林斯顿COS217 编程系统导论、 CS 107 计算机组成与系统等课程)
- **三门数学课:**其中必修离散数学MIT 6.042 计算机科学中的数学,以及选择两门数学课(推荐MATH 18.05和18.06,这两门课的先修课都需要掌握MATH 18.01、18。02)
- 三门基础课程:6.009 编程基础、6.006 算法概论、6.004 计算架构
- **三门必修核心课程:**必修6.031 软件构建要素、6.033 计算机系统工程以及从 6.046 算法设计与分析和
- **6门选修课:**包括2门CS学习路线的课程,两门人工智能、CS或EE的课程,两门EECS的课程;
必修推荐课程
① 6.0001 Python计算机科学编程导论
为很少或没有编程经验的学生介绍计算机科学和编程。培养学生编程和使用计算技术解决问题的技能。主题包括计算、Python、简单算法和数据结构、测试和调试以及算法复杂性的概念。建议和6.0002计算思维和数据科学导论一起学习。
先修课程: 零基础可学,无先修课程
学习地址: 6.0001 Python计算机科学编程导论
② 6.042 计算机科学中的数学
用于科学和工程的基本离散数学,重点是在计算机科学中有用的数学工具和证明技术。主题包括逻辑符号、集合、关系、基本图论、状态机和不变量、矛盾归纳和证明、递归、渐近符号、算法的基本分析、基本数论和密码学、排列和组合、计数工具和离散概率.
先修课程: MIT 18.01 单变量微积分
学习地址: 6.042 计算机科学中的数学
③ 6.004 计算架构
介绍了数字系统和计算机体系结构的设计。强调用高级硬件语言表达所有硬件设计并综合设计。主题包括组合和时序电路、可编程硬件的指令集抽象、单周期和流水线处理器实现、多级内存层次结构、虚拟内存、异常和 I/O 以及并行系统。
先修课程: 大学物理 II (这里就不介绍了)以及6.0001 Python计算机科学编程导论
学习地址: 6.004 计算架构
④ 6.006 算法概论
介绍计算问题的数学建模,以及用于解决这些问题的常用算法、算法范式和数据结构。强调算法和编程之间的关系,并介绍这些问题的基本性能测量和分析技术。注册可能会受到限制。
先修课程: 6.042 计算机科学中的数学、6.0001 Python计算机科学编程导论、6.009 编程基础
学习地址: 6.006 算法概论
⑤ 6.009 编程基础
介绍编程的基本概念。旨在培养将基本方法从编程语言应用于抽象问题的技能。主题包括编程和 Python 基础、计算概念、软件工程、算法技术、数据类型和递归。实验室组件包括软件设计、构建和设计实施。注册可能会受到限制。
先修课程: 6.0001 Python计算机科学编程导论
学习地址: 6.009 编程基础
⑥ 6.031 软件构建要素
介绍了软件开发的基本原则和技术:如何编写没有错误、易于理解和随时可以更改的软件。主题包括规范和不变量;测试、测试用例生成和覆盖;抽象数据类型和表示独立性;面向对象编程的设计模式;并发编程,包括消息传递和共享内存并发,以及防止竞争和死锁;以及具有不可变数据和高阶函数的函数式编程。包括每周编程练习和更大的小组编程项目。