2.9 KiB
2.9 KiB
自学计算机科学
如果你是一个自学成才的工程师,或者从编程培训班毕业,那么你很有必要学习计算机科学。幸运的是,不必为此花上数年光阴和不菲费用去攻读一个学位:仅仅依靠自己,你就可以获得世界一流水平的教育💸。
互联网上,到处都有许多的学习资源,然而精华与糟粕并存。你所需要的的,不是一个诸如“200+免费在线课程”的清单,而是以下问题的答案:
- 你应当学习哪些科目,为什么?
- 对于这些科目,最好的书籍或者视频课程是什么?
在这份指引中,我们尝试对这些问题做出确定的回答。
简而言之
大致按照列出的顺序,借助我们所建议的教材或者视频课程(但是最好二者兼用),学习如下的九门科目。目标是先花100到200个小时学习完每一个科目,然后在你职业生涯中,不时温习其中的精髓🚀。
| 科目 | 为何要学? | 最佳书籍 | 最佳视频 |
|---|---|---|---|
| 编程 | 不要做一个“永远没彻底搞懂”诸如递归等概念的程序员。 | 《计算机程序的构造和解释》 | 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 |
| 编程语言与编译器 | 若你懂得编程语言和编译器如何工作,你就能写出更好的代码,更轻松地学习新的编程语言。 | 《编译原理》 | Alex Aiken’s course on Lagunita |
| 分布式系统 | 如今,多数 系统都是分布式的。 | 《分布式系统原理与范型》,第三版 Maarten van Steen著 | 🤷 |