自学计算机科学的九门课
真正决定软件工程师上限的,不是会多少工具,而是对计算机科学基础的理解深度。工具会不断变化,但底层原理决定了一个人是否能够解决新的、复杂的问题。
| 课程 | 为什么要学? | 推荐书籍 | 推荐视频课程 |
|---|---|---|---|
| 编程 | 不要成为那种始终没有真正理解某个基础概念的人。 | Structure and Interpretation of Computer Programs,SICP | Brian Harvey 的 Berkeley CS 61A |
| 计算机体系结构 | 如果没有对计算机实际工作原理建立扎实的心智模型,你所依赖的各种高级抽象都会缺乏坚实基础。 | Computer Systems: A Programmer's Perspective,CS:APP | Berkeley CS 61C |
| 算法与数据结构 | 如果不了解栈、队列、树、图等常用数据结构,就很难解决具有挑战性的实际问题。 | The Algorithm Design Manual | Steven Skiena 的课程 |
| 计算机科学数学基础 | 计算机科学本质上可以看作应用数学不断发展的一个重要分支,因此扎实的数学基础会成为你的竞争优势。 | Mathematics for Computer Science | MIT 6.042J(Tom Leighton) |
| 操作系统 | 你编写的大多数程序最终都运行在操作系统之上,因此应该理解程序与操作系统之间是如何协同工作的。 | Operating Systems: Three Easy Pieces | Berkeley CS 162 |
| 计算机网络 | 互联网已经成为现代计算最重要的基础设施之一,理解其工作原理,才能真正发挥它的全部潜力。 | Computer Networking: A Top-Down Approach | Stanford CS 144 |
| 数据库 | 数据是绝大多数重要软件系统的核心,但真正理解数据库系统内部工作机制的人并不多。 | Readings in Database Systems | Joe Hellerstein 的 Berkeley CS 186 |
| 编程语言与编译器 | 理解编程语言和编译器的内部原理,不仅能写出更好的代码,也能更快掌握新的编程语言。 | Crafting Interpreters | Alex Aiken 的 edX 课程 |
| 分布式系统 | 如今,大多数大型软件系统都是分布式系统,因此这是现代软件工程的一项核心知识。 | Designing Data-Intensive Applications | MIT 6.824 |