如何自学CS?
整理 | 非主流
出品 | 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(很贵)。
机器学习:吴恩达的机器学习和深度学习课程。(《通证简史|从日进斗金到夹缝求存, 细数Token的前世今生
想让马云成为你的老大?揭秘阿里面试情景
用 Python 分析了 10000 场吃鸡数据,原来吃鸡要这么玩!
名企程序员被裁实录:早上还在改 Bug,晚上就成下岗工
相关文章:

oracle 使用nfs挂载的目录不能进行归档
oracle 使用nfs挂载的目录不能进行归档 在做实验时将oracle的归档目录放在nfs服务器上,启动数据库就会死掉,也不能进行归档。在报警日志中发现WARNING:NFS file system /mnt mounted with incorrect options WARNING:Expected NFS mount options: rs…

生产中NFS案例记录---写入权限解决过程
生产中NFS案例记录---写入权限解决过程NFS配置要求:1、 将oracle文件写入到NFS Server端,注意权限要与oracle端一致。2、 Oracle端目录文件所属用户为oracle,uid:500 gid 501。格式约定:命令显示过程 文字说明特别注意…

吴文俊人工智能科学技术奖:陆汝钤院士、百度王海峰等获奖
12月9日上午,被誉为“中国智能科学技术最高奖”的吴文俊人工智能科学技术奖在苏州举行颁奖典礼。本届吴文俊人工智能奖共对70项人工智能成果授奖。其中,中国科学院院士、中国科学院数学与系统科学研究院研究员陆汝钤成为首位吴文俊人工智能最高成就奖获得…

河南科技大学c语言章节作业答案,河南科技大学C语言试题
c语言试题,基本上是题库。上机作业用的。大家好好把握。C程序的运行环境和简单C源程序的调试,实验报告(共 题),用时(127分33秒),成绩(A)1、 有如下程序: #include"stdio.h" main( ) { int a8;printf("%d,%5d,%-5d#…

qinyu.blog.51cto.com里的好文章,比尔盖茨
世纪枭雄比尔盖茨的王者传奇儿时,他便躁动不安,顶着梳不顺的头发,在竞技中缕缕获胜。少年英才没有机会慢慢成长,21岁,他创办了微软,从此走上IT业的颠峰之路,垄断了13年的财富榜首;32…

Clean-Code: 注释
别给糟糕的代码加注释-----------------重新写吧 这是书中的关于注释一章的第一句话,怎么说呢,这句话个人感觉很对,但是实际上却很少这么做, 有几个原因: 糟糕的代码不是自己写的,别人写的代码࿰…

在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...
《程序设计基础》考试试卷三1. 判断下面标识符中哪个是C语言中合法的用户定义标识符:A. a-bB. #abdC. typedefD. _max2. …b?在内存中占个字节,“B”在内存中占个字节。A. 1B. 2C. 3D. 43. 下列表达式的值哪些不等于0?A. 2>>1B. ~a&am…

免费报名 | WPS专家教你文本分类在企业中的应用实践
文本分类问题是企业在 NLP 领域中处理文本数据时经常会遇到的一个问题,很多时候,我们需要将文本信息进行分类,或提相关的接口以供外部进行文本上传,在针对于用户所上传的文档信息就需要进行文档内容的分类,那么针对于这…

[ZT]如何取得客户端的Windows登录用户名?
1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:this.User.Identity.Name (IIS安全設置必須使用集成Windows驗證) 获取客户端电脑名:Page.Request.UserHostName 获取客户端电脑IP…

C#使用WIN32API来高效率的遍历文件和目录(转)
我们有时需要遍历某个目录下的文件和子目录,可以使用System.IO.DirectoryInfo.GetDirectories或 GetFiles来获得目录下的所有的文件和子目录,当这个目录下的内容比较多时,这个操作就比较耗时间,有时我们仅仅需要知道某个目录下是否…

c语言1变A,c语言那些细节之a+1和a+1的区别
首先a是一个数组名,当看到这个a与&a时,一般我们的理解都是这个数组的首地址。没错,如果加上打印的话,确实两个值是一样的。不过&a是整个数组的首地址,a则是数组首元素的地址,虽然值一样,…

【收藏清单】AI学习资料汇总——你想要的AI资源,这里都有
本文汇总了TinyMind站内AI资料类热门文章TOP10,欢迎大家各取所需。来源:https://www.tinymind.cn/ 1、【AI入门者必看】——人工智能技术人才成长路线图 入门AI的两大方式与进阶AI的十大路线,吐血之作,人手必备。路线图可在文末…

25,000,000行的代码就问你敢不敢动?!
你经历过绝望吗?近日,Hacker News 上发起了一个名为“你见过最糟糕的代码是什么?”(https://news.ycombinator.com/item?id18442637)的话题,引发了无数网友回忆讨论,甚至还再次让软件巨头 Orac…

c语言规定预处理命令必须以什么开头,C语言规定预处理命令必须以___________开头...
在定温定容下,语言规开反应NH4Cl (s) NH3 (g) HCl (g)达平衡,加入惰性气体平衡不移动05580041:定预若a、b均为int型变量,且a100,则for (b100;a!b;a,b) printf(----\n)是死循环。()处理05710012:以下正确的描述是( )。命令成年早期…

MySQL 微秒慢查询补丁
作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。原文出自:The new cool MySQL patch has landed! Check your…

Win10 15063 开始运行不保存历史记录原因和解决方法
在Win10 1703的时候你也许会发现开始运行以后,再次打开就没有任何历史记录了,常规方法是桌面-右键-个性化-开始-显示最常用的应用..可是打开是灰色的不可选.. 其实这个问题很好解决,在win10 15063隐私里面有一个设置的原因,请跟随…

CCNA培训课总结笔记--交换机的基本配置(十三)
实验目的:熟悉交换机的基本配置,学会在交换机上划分VLAN及如何将接口划分到指定的VLAN.本实验主要是用模拟器DynamipsGUI及3640的IOS文件做的实验,所以配置的命令有些会有出入.实验设备:3640交换机系列实验内容:其实交换机的基本操作包括设置特权登陆密码,设置控制台的密码等都…

TensorFlow 2.0发布在即,高级API变化抢先看
作者 | Sandeep Gupta, Josh Gordon, and Karmel Allison整理 | 非主流、Jane出品 | AI科技大本营【导语】早在今年 8 月的时候,谷歌开源战略师 Edd Wilder-James 在一封公开邮件中表示正在研发 TensorFlow 2.0,并将于今年晚些时候发布预览版。在 2018 年…

mp4 android自动播放,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4播放示例实现简单的播放功能,播放手机本地的MP4文件。不依赖任何第三方框架,不添加任何防腐剂。添加一个系统自带的控制条。申请权限读取存储中的MP4文件准备布局文件在frag_video_view.xml中放置VideoView;为了让内容居…

Sublime-text theme 颜色主题
主题文件下载:Monokai.rar 替换办法: Preferences -> Browser packages -> Color Scheme - DefalutPreferences -> Browser packages -> Color Scheme - Defalut 覆盖 文件物理位置(win7): C:\Users\用户名\AppData\Roaming\S…
android 自定义radiobutton 样式,RadioButton自定义点击时的背景颜色
一、应用场景:在使用 RadioButton 时,有时我们会需要自定义点击时改变背景颜色的效果。效果图:RadioButton自定义背景颜色.jpg二、实现步骤:1、新建一组 RadioButton :android:layout_width"match_parent"an…

如何让网页不受电信114劫持
每当出现输入网页错误时,电信总会把你劫持到他所在的网页下,如下:[url]http://game1.zj.vnet.cn/url1.php?MTwww.dsdsddsds.com[/url]看了这张老脸就觉得浑身不舒服。能不能想个办法不让他出现呢?嘿嘿,其实很简单&…

“男医生,女护士?”消除偏见,Google有大招
编译整理 | 若奇出品 | AI科技大本营如何消除 AI 带来的性别偏见是个令人头疼的问题,那究竟有没有方法去解决?12 月 6 日,Google 宣布他们迈出了减少 Google 翻译中性别偏见的第一步,并且还详细介绍了如何为 Google 翻译上的性别中…

Web Developer中文版下载
Web Developer是一款非常优秀的网页调试工具。Web Developer有IE和Firefox两个版本,主要功能表现在几个重要的方面:对页面中的文本、图像、媒体文件进行控制,对网页所应用的CSS文件的id与class辅助查看,表格辅助查看,可…

位置服务与地图应用
位置服务与地图应用: 位置服务(Location Based Services,LBS)又称为服务或基于位置的服务。Andorid平台支持提供位置服务的API,在开发过程中主要用到LocationManager 和LocationProviders对象。 为开发能够提供位置服务,首先需要得…

20分钟教你搞懂Git!
Git 是最流行的版本管理工具,也是程序员必备的技能之一。本文就来教你 20 分钟搞懂 Git!以下为译文:尽管每天你都会用到Git,但也有可能搞不懂它的工作原理。为什么Git可以管理版本?基本命令git add和git commit到底在干…

android 长按赋值功能,android实现WebView中长按选中复制文本操作
啥都不说了,老司机直接移步GITHUB看源码吧:https://github.com/deaboway/AndroidWebViewTextSelect万一不work,一定不是代码的问题,你可以自查链接中的如下情况CSS控制页面文字不能被选中user-select:none;body{-moz-user-select:…

如何找回丢失的Vista系统“休眠”菜单
如何让Vista系统“休眠”菜单重见天日一些使用Windows Vista的朋友为了节省磁盘空间,在命令提示符下使用命令关闭休眠功能。但是如果再用相同的方法打开休眠功能时,就会发现,即使恢复了功能,“休眠”菜单还是看不见,这…

go3--常量和类型转换
/* Go中不存在隐式转换,所有类型转换必须显式声明 转换只能发生在两种相互兼容的类型之间 类型转换的格式:<ValueA> [:] <TypeOfValueA>(<ValueB>)全局变量可以使用var()的形式,局部变量不可以使用v…

android倒计时实现方法,Android实现倒计时方法汇总
Android开发中经常会有倒计时的功能,下面将总结出常见的集中实现方式。1.直接使用Handler的消息机制来实现xml布局中文件如下:android:layout_width"match_parent"android:layout_height"match_parent"android:orientation"hor…