计算机、编程与计算机科学
前提
至少会一点编程,不然先读这个:faq - learnprogramming
如果是“传统”计算机科学,大概有如下三支主干,九个方面:
- 语言:人、机器的沟通
- 编程语言
- 网络
- 编译原理
- 计算机架构
- 组成原理
- 操作系统
- 分布式系统
- 数据与解决问题的方法
- 数据管理与数据库
- 算法与数据结构
- 数学
近年来 AI 兴起,尤其是生成式 AI 大热。那是另一个话题了。详见AI学习
Reference
Teach Yourself Computer Science的大纲表很不错,译文如下:
科目 | 为何要学? | 最佳书籍 | 最佳视频 |
---|---|---|---|
编程 | 不要做一个“从未完全理解”递归这些概念的程序员。 | 《计算机程序的构造和解释》 | Brian Harvey’s Berkeley CS 61A |
计算机架构 | 如果你没有一个坚实的计算机运作心智模型,其上所有高级概念将变得脆弱 | 《深入理解计算机系统》 | Berkeley CS 61C |
算法与数据结构 | 如果你不懂得如何使用栈、队列、树、图等常见数据结构,遇到有难度的问题时,你将束手无策。 | 《算法设计手册》 | Steven Skiena’s lectures |
数学知识 | 计算机科学基本上是由应用数学的一个分支“跑偏”而来,因此学习数学将带来竞争优势。 | 《计算机科学中的数学》 | Tom Leighton’s MIT 6.042J |
操作系统 | 你所写的代码,基本上都由操作系统来运行,因此你应当了解它们是怎样交互的 | 《操作系统导论》 | Berkeley CS 162 |
网络 | 互联网已然势不可挡:理解其工作原理才能解锁全部潜力。 | 《计算机网络:自顶向下方法》 | Stanford CS 144 |
数据库 | 对于多数重要程序,数据是其核心,然而很少人理解数据库系统的工作原理。 | 《Readings in Database Systems》 (暂无中译本) | Joe Hellerstein’s Berkeley CS 186 |
编程语言与编译器 | 若你懂得编程语言和编译器如何工作,你就能写出更好的代码,更轻松地学习新的编程语言。 | 《Crafting Interpreters》 | Alex Aiken’s course on Lagunita |
分布式系统 | 如今,多数系统都是分布式的。 | 《数据密集型应用系统设计》 | MIT 6.824 |
2023年初补充:算是“古典”计算机科学?