GitHub 上这份计算机自学指南火了~
https://github.com/izackwu/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md
你应当学习哪些科目,为什么?
对于这些科目,最好的书籍或者视频课程是什么?
简而言之
大致按照列出的顺序,借助我们所建议的教材或者视频课程(但是最好二者兼用),学习如下的九门科目。目标是先花 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 |
编程语言与编译器 | 若你懂得编程语言和编译器如何工作,你就能写出更好的代码,更轻松地学习新的编程语言。 | 《Crafting Interpreters》 | Alex Aiken’s course on Lagunita |
分布式系统 | 如今,多数 系统都是分布式的。 | 《数据密集型应用系统设计》 | MIT 6.824 |
还是太多?
如果花几年时间自学 9 门科目让人望而却步,我们建议你只专注于两本书:《深入理解计算机系统》 和 《数据密集型应用系统设计》。根据我们的经验,投入到这两本书的时间可以获得极高的回报率,特别适合从事网络应用开发的自学工程师。这两本书也可以作为上面表格中其他科目的纲领。
为什么要学习计算机科学?
全球短信系统每日收发约 200 亿条信息,而仅仅靠 57 名工程师,现在的 WhatsApp 每日收发 420 亿条。 — Benedict Evans (@BenedictEvans) 2016 年 2 月 2 日
23333 然而他们... pic.twitter.com/XVNYlXAHar — Jenna Bilotta (@jenna) 2017 年 3 月 4 日
分科目指引
中文翻译新增:
关于 SICP 国内视频观看地址
MIT 的免费视频课程(中英字幕)
Brian Harvey 开设的 SICP 课程(英文字幕)
Scheme 学习的相关资源参见:https://github.com/DeathKing/Learning-SICP
更详细的补充说明:#3
新版原文删除了对 《Concepts, Techniques, and Models of Computer Programming》 一书的推荐,但这本书对各种编程模型有深入的见解,值得一读。所以译文中依然保留。 — 译者注
硬件是平台。 — Mike Acton, Engine Director at Insomniac Games (观看他在 CppCon 上的演说)
— Richard Hamming
如果人们不相信数学是简单的,那么只能是因为他们没有意识到生活有多么复杂。 — John von Neumann
你无法盯着水晶球预见未来,未来的互联网何去何从取决于社会。 — Bob Kahn
不要做一个只写样板代码的程序员。相反,给用户和其他程序员创造工具。从纺织工业和钢铁工业中学习历史教训:你想制造机器和工具,还是操作这些机器? — Ras Bodik 在他的编译器课程伊始
常见问题解答
人工智能:通过观看视频并完成 Pacman 项目来学习 Berkeley 的 AI 课程。至于教材,使用 Russell 和 Norvig 编写的 《人工智能:一种现代方法》。
机器学习:学习吴恩达在 Coursera 上的课程。耐心学习,先确保理解了基础概念再奔向类如深度学习的诱人新主题。
计算机图形学:学习 Berkeley CS 184 课程的材料,使用《计算机图形学:原理及实践》作为教材。
https://github.com/izackwu/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md