查看原文
其他

如何自学CS?

非主流 AI科技大本营 2018-12-16


整理 | 非主流

出品 | AI科技大本营


哪个行业的平均工资最高?


计算机。


国家统计局的数据显示,2016 年信息传输、软件和信息技术服务业年平均工资为 122478 元,首超金融行业,并于 2017 年再次夺魁。


在互联网和人工智能浪潮的推动下,一大批年轻人选择了 CS(计算机科学) 专业,这里面还包括各种转专业的学生。


此前营长也给大家推荐过很多学习资源,但是大多都是单个资源,比较零散。其实,很多读者需要的是建议,而不仅仅是资源。


特别是对于自学的小伙伴来说,为什么要学习 CS?应该学习什么?如何选择教材或者视频课程?都是让人困扰的问题。


现在,营长特意为这些小伙伴准备了一套大餐,希望能帮你厘清方向,消除困惑。



为什么要学好 CS?


首先,为什么要学习 CS?


我们知道,任何行业的从业人员的专业水平都是参差不齐的。有人将软件工程师也分成了两类:一类是对 CS 这门学科理解透彻,可以胜任各种挑战性和创新性的工作;另一类则仅仅是对一些高级工具比较熟悉而已。


虽然两者都自称为软件工程师,而且一开始的起薪都差不多,但是第一类工程师显然有更大的发展空间。


比如 WhatsApp 一天要处理 420 亿条信息(2016 年 2 月),但当时 WhatsApp 只有 57 名工程师,要完成这个挑战靠第二种类型的工程师是不太可能的。


     

因此,如果你想成为第一种类型的软件工程师,踏踏实实学好 CS 才是正途。



怎样学好 CS?


在回答了为什么要学习 CS 这个问题之后,接下来要怎么学?


其实 CS 不只是编程,还涉及到很多知识。本文将重点介绍编程、计算机架构、算法和数据结构、数学、操作系统、计算机网络、数据库、计算机语言和编译器、以及分布式系统。接下来我们一一分析。



编程


大多数的 CS 本科课程都是从介绍计算机编程开始的。营长推荐 Structure and Interpretation of Computer Programs 这本书。


视频则推荐伯克利大学 Brian Harvey 的 SICP 课程。建议至少学完 SICP 的前三章,并把练习题做完。如果你觉得 SICP 的课程太难,可以选择 How to Design Programs。


传送门:

https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html

https://archive.org/details/ucberkeley-webcast-PL3E89002AA9B9879E?sort=titleSorter

http://www.htdp.org/


计算机系统结构


计算机系统结构是最容易被自学者忽略的,但是它其实非常重要。营长推荐 The Elements of Computing Systems 这本书,建议至少看完前 6 章并完成相应的作业。不过这本书并不是完全免费,因此也可以选择伯克利大学的 CS61C 课程:Great Ideas in Computer Architecture,而且可以下载之前的讲义。


传送门:

https://www.nand2tetris.org/

http://inst.eecs.berkeley.edu/~cs61c/sp15/



算法和数据结构


学好算法和数据结构,将有助于培养你解决问题的能力。营长推荐  The Algorithm Design Manual  这本书,但是真的很贵。不过,这本书的作者很慷慨把这本书的配套视频免费共享到了网上。如果你想练练手,则可以选择刷 Leetcode。


传送门:

http://www3.cs.stonybrook.edu/~algorith/video-lectures/

https://leetcode.com/



数学


虽然很多人对畏惧数学,但是“计算机之父”冯·诺依曼曾经说过:如果人们不相信数学有多简单,那是因为他们没意识到生活有多复杂。


     图片来源:AZ QUOTES


跟计算机最相关的数学知识当属“离散数学”以及“线性代数”。


如果你想学好离散数学,可以阅读匈牙利的数学家 László Lovász 关于离散数学的课程讲义。如果你还想更进一步,则可以选择麻省理工的 Mathematics for Computer Science,而且有配套的视频课程。


至于线性代数,则建议从 Essence of linear algebra 视频系列开始,然后是麻省理工的相关视频课程。


传送门:

http://www.cs.elte.hu/~lovasz/dmbook.ps

https://courses.csail.mit.edu/6.042/spring17/mcs.pdf

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/video-lectures/

https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab

https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/


操作系统


关于操作系统有很多经典书籍,比如 Operating System Concepts 和 Modern Operating Systems,但是都价格昂贵,这里营长给大家推荐一本免费的作为替代:Three Easy Pieces。


传送门:

http://pages.cs.wisc.edu/~remzi/OSTEP/


计算机网络


计算机网络是 CS 学科里最有价值的领域之一。营长推荐 Computer Networking: A Top-Down Approach 这本书以及搭配的练习题,不过这本书实在太贵。你也可以选择斯坦福的在线课程:Introduction to Computer Networking。想要学好计算机网络,最重要的是多做项目。


传送门:

http://www-net.cs.umass.edu/wireshark-labs/

https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about


数据库


自学数据库还是比较难的。营长建议自学者不要直接看教材,而是通过在线视频来学习,比如伯克利的 CS168 课程。那些想了解 RDBMS(关系型数据库管理系统)的读者,一定要看一下 Architecture of a Database System 这篇论文。此外,Readings in Database Systems 也值得一读。


传送门:

https://archive.org/details/UCBerkeley_Course_Computer_Science_186

http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf

http://www.redbook.io/


计算机语言和编译器


对于自学者,营长推荐斯坦福的在线课程:Compilers。关于练手项目,营长建议你从 Make a Lisp 开始。


传送门:

https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about

https://github.com/kanaka/mal


分布式系统


分布式系统的教材可以选择 Distributed Systems, 3rd Edition,而且是免费的。同时你也可以选择麻省理工的在线课程:6.824。而且营长还准备了一份论文清单,供你参考。


传送门:

https://www.distributed-systems.net/index.php/books/distributed-systems-3rd-edition-2017/

https://www.youtube.com/watch?v=hBWfjkGKRas&list=PLkcQbKbegkMqiWf7nF8apfMRL4P4sw8UL

http://dsrg.pdos.csail.mit.edu/papers/


其他


现在 AI 确实很火,营长以往也给大家推荐过不少学习资源,今天再给大家推荐几个:


  • 人工智能:伯克利的 Intro to AI 在线课程,以及教材 Artificial Intelligence: A Modern Approach(很贵)。

  • 机器学习:吴恩达的机器学习和深度学习课程。(《感动!有人将吴恩达的视频课程做成了文字版》)

  • 计算机图形学:伯克利的 CS184 在线课程。


传送门:

http://ai.berkeley.edu/

http://inst.eecs.berkeley.edu/~cs184/fa12/onlinelectures.html



写在最后


有人可能会问,应该从那一门开始学起?然而这并不是最重要的,克服拖延症,行动起来才是关键,而且每一门都需要全身心投入至少 100~200 小时的时间。


2018 即将过去,大家共勉。


参考链接:

https://teachyourselfcs.com/#languages


公开课预告

文本分类


文本分类问题是企业在NLP领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类,那么针对于这个需求我们就需要使用到文本分类的相关模型和算法进行处理。在文本分类领域中的模型和算法有很多。


本次演讲就是从这个角度入手,通过对比来阐述不同的算法、模型在实际的应用过程中的区别,以及在文本分类实践中所遇到的各种坑。


主题:精讲文本分类在企业中的应用实践

时间:12月13日20:00-21:00

讲师:黄鸿波



推荐阅读

谁说程序员不懂浪漫?献给女儿的书—《TensorFlow内核剖析》

关于CVPR 2019投稿的一些感想

11月最佳机器学习开源项目Top10!

通证简史|从日进斗金到夹缝求存, 细数Token的前世今生

想让马云成为你的老大?揭秘阿里面试情景

用 Python 分析了 10000 场吃鸡数据,原来吃鸡要这么玩!

名企程序员被裁实录:早上还在改 Bug,晚上就成下岗工

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存