47 lines
4.6 KiB
Markdown
47 lines
4.6 KiB
Markdown
# 自学计算机科学
|
||
|
||
如果你是一个自学成才的工程师,或者从编程培训班毕业,那么你很有必要学习计算机科学。幸运的是,不必为此花上数年光阴和不菲费用去攻读一个学位:仅仅依靠自己,你就可以获得世界一流水平的教育💸。
|
||
|
||
互联网上,到处都有许多的学习资源,然而精华与糟粕并存。你所需要的的,不是一个诸如“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著 | 🤷 |
|
||
|
||
## 为什么要学习计算机科学?
|
||
|
||
软件工程师分为两种:一种充分理解了计算机科学,从而有能力应对充满挑战的创造性工作;另一种仅仅凭着对一些高级工具的熟悉而勉强应付。
|
||
|
||
这两种人都自称软件工程师,都能在职业生涯早期挣到差不多的工资。然而,随着时间流逝,第一种工程师不断成长,所做的事情将会越来越有意义且更为高薪,不论是有价值的商业工作、突破性的开源项目、技术上的领导力或者高质量的个人贡献。
|
||
|
||
> 全球短信系统每日收发约200亿条信息,而仅仅靠57名工程师,现在的 WhatsApp 每日收发420亿条。
|
||
>
|
||
> — Benedict Evans (@BenedictEvans) [2016年2月2日](https://twitter.com/BenedictEvans/status/694342874729545729)
|
||
|
||
第一种工程师总是寻求深入学习计算机科学的方法,或是通过传统的方法学习,或是在职业生涯中永无止息地学习;第二种工程师
|
||
通常浮于表面,只学习某些特定的工具和技术,而不研究其底层的基本原理,仅仅在技术潮流的风向改变时学习新的技能。
|
||
|
||
如今,涌入计算机行业的人数激增,然而计算机专业的毕业生数量基本上未曾改变。第二种工程师的供过于求正在开始减少他们的工作机会,使他们无法涉足行业内更加有意义的工作。对你而言,不论正在努力成为第一种工程师,还是只想让自己的职业生涯更加安全,学习计算机科学是唯一可靠的途径。
|
||
|
||
> 23333 然而他们... [pic.twitter.com/XVNYlXAHar](https://t.co/XVNYlXAHar)
|
||
>
|
||
> — Jenna Bilotta (@jenna) [2017年3月4日](https://twitter.com/jenna/status/838161631662092289)
|
||
|