出国深造,费用太高?(疫情持续,甚至难以出国?)
自学计算机相关课程又不知道从何入手?
现在,最系统的计算机学习路线图来啦!
9门计算机必学基础学科清单,附斯坦福、伯克利、麻省理工学院等名校视频课程和参考教材,CS成神之路近在眼前。
只要闭眼跟着线路图学,你也能拥有在世界一流大学学习计算机科学的完美体验。
自学教材推荐
来看看,要学习的9门学科中,都有哪些相关资料。(文末附书籍链接)
△ 9门学科教材和视频清单
编程
△ 《计算机程序的构造和解释》作者Alan J. Perlis
关于编程的经典模型和基础计算机术语,这本书基本都有介绍,不少人表示,这本书颠覆了他们对编程的基本认知。
当然,如果不需要对编程深入了解的话,学完书本前三章,基本就了解相关概念了。
配套的视频教学建议是斯坦福开设的SICP课程视频。
计算机系统
△ 《深入理解计算机系统》 作者Randal E.Bryant / David O’Hallaron
如果想要快速了解软件底层视角,这本书是非常不错的推荐。通过这本书的前六章,基本就掌握了软件编写所需要了解的大部分计算机系统的知识。
配套视频讲解是伯克利的 “计算机架构中的伟大思想”课程。
算法与数据结构
△ 《算法设计手册》作者 StevenS.Skiena
如果你已经对大量的公式和定理证明感到厌倦,这本书不失为一个好选择。书中对于算法相关定理和公式讲解的所有目的都是为了解决实际问题。
配套视频是斯坦福的算法设计课程。
数学理论
△ 《计算机科学中的数学》作者 Eric Lehman 等
虽然如今数学理论已经不再是成为程序员的必备知识,但学好数学对于写好代码而言,仍然有着巨大的帮助。
配套视频是麻省理工的同名课程。
操作系统
△ 《操作系统导论》作者 Remzi H. Arpaci-Dusseau 等
相较于更经典的基本操作系统教材而言,这本书最大的优势在于它的易读性。不仅结构清晰,而且习题含金量高,有助于快速理解操作系统的内容。
配套操作系统的教学视频来自伯克利。
计算机网络
△ 《计算机网络:自顶向下方法》作者 James F. Kurose / Keith W. Ross
据说这是所有9门学科中,学后最有成效的一科。无论是计算机行业中相关专业名词术语、还是某些晦涩的协议,在学完这本书后,你的问题都能得到解答。
配套视频教学是斯坦福的计算机网络概论。
数据库
△ 《Readings in Database Systems》作者 Joseph M. Hellerstein等
还在为学习数据库犯愁?别怕,这是一门大多数人都要花点心思的学科,因为相比于其他学科,自学数据库有一定难度。
相比于教材,先从视频课开始学习、并独立完成一个数据库管理系统会是更好的选择。
配套教学是伯克利的数据库视频课。
编程语言与编译器
△ 《编译原理(龙书)》 ,一款经典书籍,不推荐新人自学
学会这门学科,你就拥有了更快适应新一门编程语言的能力。
事实上,更推荐新人学习的是Bob Nystrom 的《Crafting Interpreters》(获取方法见文末)。
配套视频是斯坦福在MOOC平台开设的相关课程。
分布式系统
△ 《数据密集型应用系统设计》 作者 Martin Kleppmann
想要统筹兼顾,让很小的程序也能在多台设备上运行,那么你需要掌握这门学科的相关知识。
配套课程是麻省理工有关分布式系统的视频教学。
当理论遇上现实
尽管从理论上来看,这份学习规划几乎已经无懈可击。
然而,它究竟是否实用呢?
有网友认为,这份学习规划很好,但从教育学的角度来说,可能不太适用。
这份资料清单建议挺不错的。但是,相较于抱着书本和视频死磕1000小时,我认为可以多提供一些学科相关的趣味小项目/练习,反而更能加快他们上手的进度。
也有网友表示,这个清单有点言过其实。在清单介绍里,对软件工程师这一行的现状似乎有什么误解。
照你这意思,目前自学的软件工程师们连「递归」代码都写不出来?
这有点过分了吧。一个能解决实际问题的软件工程师,难道连栈、队列和树都不知道是什么吗?
除此之外,还有一个更现实的问题摆在眼前。
事实上,相较于你的技能而言,老板们可能更看重你的学历(国内外无差)。
哼,学历的压力无处不在。
要求涨薪:「非本科就值这价」
要求升职:「抱歉,这工作要求本科」
换工作:「抱歉,我们已经招了一名本科生」
约会对象:「你本科都没有?」
……
话糙理不糙,技能固然重要,但对于不了解计算机的老板而言,他们也许更看重你的学历。
当然,如果实操能力和学历都不是你发愁的对象,只是你还想更系统地了解行业理论知识的话,这份清单就完全是你的菜了。(可以进收藏夹吃灰了)
作者介绍
△ 作者Ozan Onay
Ozan Onay和Myles Byrne,来自Bradfield School of Computer Science(旧金山)的两位教员,负责软件工程师进修计算机学习的专业指导,旨在帮助软件开发人员生产更持久的高质量软件,成为具有高影响力的工程师。
与此同时,Ozan Onay和Myles Byrne也希望加深学生们对操作系统、计算机体系结构和数据库等基础学科的重视程度。
他们希望能以自己的经验,为刚毕业的学生提供更好的创新动力、以及生产高质量软件的技术指导。
传送门:
资料清单:
https://teachyourselfcs.com/
中文版资料清单:
https://github.com/keithnull/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md
“