一个不是很了解CS(计算机科学)的人,应从哪里开始自学?

来源:https://www.zhihu.com/question/380375631

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:穷码农
https://www.zhihu.com/question/380375631/answer/1091091024

这个题我碰巧会,而且我是转专业学计算机的。现在也是CS的TA,所以对美国的CS本科课程还算了解。

课程的话,最重要的就是下面五门:

  1. 数据结构,

  2. 算法,

  3. 计算机操作系统,

  4. 计算机网络,

  5. 数据库系统。

外加计算机组成原理

上面的这六门课,无论你是将来找工作,读研,还是读博,都是最最重要的。而且学习的顺序就是上面的这样,美国一般会开一门计算机基础,教一门语言,Python和Java居多。然后就是数据结构,在这之后就学算法。以此类推。

如果你想在美国找工作的话,就需要把时间分配好,去刷题,刷project。因为如果你到毕业的时候哪怕GPA很高,学校也不错,能过得去简历关,面对你最重要也是最难的一关就是面试。

切记上面这一点。

面试就是算法面试,除了少部分公司,比如Amazon,特别注重behavior question (BQ)之外,其他公司基本一溜的需要你对算法和数据结构掌握得很好才行。

以下的情况都是针对国外,尤其是北美而言的。

GPA有3.5+就好,一定要重视刷project,刷题

有project才能过简历关,LeetCode熟练才能过面试关。毕竟读CS或是转CS的大部分人,还是以读书找一份程序员的工作为导向的。

因为国外实习或是new grad找全职,面试主要考察算法和数据结构

需要熟练掌握一门语言(Python,Java,或是C++),然后用你熟悉的语言来实现基本的算法和数据结构。


网课可以跟着这几门来学:

网络课程的话,则是十二分强推UCB的CS61B。他们家的计算机系的CS61A,B,C课,简直制霸各种课程推荐列表。

1.CS61B的官网在这里:

https://inst.eecs.berkeley.edu/~cs61b/fa19/

这门课以Java为主。

2. MIT的算法课,教程用的算法导论,也是强推的网课:https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb 

这门算法则基本不涉及到语言层面,主要是算法层面,讲得很好。

3. 然后就是红宝书的网课以及配套官网:

https://algs4.cs.princeton.edu/lectures/

https://www.youtube.com/watch?v=1QZDe28peZk&list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX

4. 斯坦福2018 Winter CS106B: Programming Abstractions,虽然从名字不太能看出来,但其实是用C++讲数据结构,想用C++的小伙伴不容错过,我看了一半了,特别有帮助,尤其是对递归和回溯的讲解,简直醍醐灌顶。

现在因为不可知的原因,Youtube上面已经下架这门课程,但更方便的是,咱们可以在B站直接看:

https://www.bilibili.com/video/av21620553?p=1

最后来说说练习平台

光学(看书)不练,算法和数据结构是学不会的。

所以推荐一些好的刷算法和数据结构平台,当然另一方面也是为了找工作面试做准备咯。

如果你在北美的话,初级程序员面试基本就是考察数据结构和算法,所以大家一定要勤加训练!

1.LeetCode

这是现在刷题找工作最热门的网站了。

但LeetCode现在题目也太多了,一共1300+了,而且一直在增加!!!

全刷完没必要,也不高效,所以推荐看下面的回答:

https://www.zhihu.com/question/32019460/answer/875114975

国外LeetCode大牛们是怎么刷LeetCode的:

https://zhuanlan.zhihu.com/p/98580817

2. Educative

https://www.educative.io/explore?aff=K7qB

他们家还给Github的学生账户提供半年的免费课程,满足条件的小伙伴,可以照着下面的文章流程申请一下,有更详细的课程和相关步骤介绍:

https://zhuanlan.zhihu.com/p/93374358

对算法最有帮助的课程是:

https://zhuanlan.zhihu.com/p/104983442

专门针对数据结构的课程有:

C++:

https://www.educative.io/courses/data-structures-in-cpp-an-interview-refresher?aff=K7qB

JavaScript:

https://www.educative.io/courses/data-structures-in-javascript-an-interview-refresher?aff=K7qB

Java:

https://www.educative.io/courses/data-structures-in-java-an-interview-refresher?aff=K7qB

Python:

https://www.educative.io/courses/data-structures-in-python-an-interview-refresher?aff=K7qB

我上过其中的Java版本,课程是把数据结构里面的基础数据结构都用java实现了一遍,对于用java的同学特别有帮助,java的基础在刷题的过程中,还是要必须掌握的。

课程从复杂度开始讲起,Arrays,LinkedLists, Stacks/Queues, Graphs, Trees, Trie, Heaps, Hash Tables等数据结构,全都实现了一遍。而且还有配套的基础LeetCode题。是一个入门的很棒的教程。选择其他语言的话,内容应该也是差不多的。

项目Project

看到评论区问项目推荐,特意更新一下我自己跟着刷项目的网站。下面这个网站是Java全栈,从Java的基础,前端三件套,以及Java的框架,应有尽有。最好的地方在于,用不同的技术栈实现天猫全栈。这样跟着一套学下来,技术方面就不会太差了。

https://www.zhihu.com/question/56476038/answer/1007722651

如果你想专门学前端,可以去Udemy找几个网课跟着练:

计算机的东西还是比较多,也比较杂的,但先从上面的六门课学起肯定没问题。

共勉。

作者:CelticDruid
https://www.zhihu.com/question/380375631/answer/1088569924

个人认为理论和实操都很重要,所以分为两部分。

理论:

基础:数据结构+算法(二叉树,队列,栈,红黑树)

计算机网络:HTTPS,TSL,Routing Algorithms,TCP/IP,REST API等等。这部分主要研究如何安全、高效地在局域网/互联网节点之间传递信息

数据库/分布式:几种分布式处理的范式(比如数据同步和robustness),关系式/非关系式数据库

计算机架构:内核,内存,CPU/GPU结构,中断等。计算机底层工作原理和网络安全等等

计算机图形学:渲染管道,GPU shader,优化,并行计算,光照算法(个人认为这里数据结构用的非常多)。基本高效进行数据和图形/几何转换

机器学习(大泡沫):线性回归,Multi-Layer Perceptron,梯度下降,深度神经网络,反向传播,卷积神经网络,生成式对抗网络等

实践:

个人认为最常用的语言:C/C++(图形学和系统),Java(服务端和桌面程序),Python(机器学习,数据科学,后端等),C#(.NET和Unity),Ruby/Perl(网络/安全),Javascript/ECMAScript(前后端/全栈/网页游戏)

网络前端:Django,AngularJS,HTML5,JS/Canvas等

网络后端:Node.js,Django,Postgresql等

机器学习/数据科学:SciKit,Pytorch,Tensorflow(不推荐,比pytorch难用),Pandas,Numpy等

图形学:OpenGL,Unreal Engine,Unity。前两个C/C++后面的JS和C#

架构:汇编,好像分NASM和ARM结构;X86和X64会有寻址上的差别,然后不同厂家有不同标准。C和有很广泛的应用,可以内联汇编函数灵活编程

项目管理工具:Maven和gradle。个人感觉gradle更好用,但是基于Java的服务端项目Maven比较合适。

分类可能不是很合适,但大概就这样。我建议选择一两个方向先研究,然后最好先把基础打牢。

作者:吾人为学
https://www.zhihu.com/question/380375631/answer/1087476896

可以先从掌握1~2门语言出发,推荐C、Java。

并不是很推荐一开始就上Python,因为它的语法结构跟其他语言不太相似。

在语言掌握了之后,可以学习数据结构和算法。推荐的书籍可以看我之前的回答。

这些结束了之后,一定要多练习,尝试做几个小项目。

计算机专业最重要的就是动手去做,代码能力一定要强。

作者:张大牙
https://www.zhihu.com/question/380375631/answer/1096151103

如果是科班的话肯定是有一套按部就班的教学流程的,完全不用担心。

如果实在想预习一下的话,可以先学一门开发语言,C语言比较简单,会是一个比较好的入门手段,教材我比较推荐K&R C,就是所谓的The C Programing Language,不要只看书,习题也一并做掉效果最好。

学好了C之后,下一步可以读一下CMU的深度理解计算机系统来对构建对整个CS的体系的一个初步认知,可以考虑配合着网上一些大学的MOOC课件一起学习。

再往后你就可以根据自己的喜好选择一些专业课程逐步深入了,例如数据结构、编译原理等等。Good Luck

作者:lwangls老王老师 https://www.zhihu.com/question/380375631/answer/1094894281

不要先学理论,先学一门程序语言,编各种各样的程序解决你的实际或感兴趣问题,有了一年经验后,再回过头学那些理论。

作者:安先生
https://www.zhihu.com/question/380375631/answer/1094900853

计算机科学导论

大概了解cs各门课都是干什么的

看的时候倒也不需要全部细看

作者:忘言 https://www.zhihu.com/question/380375631/answer/1086737850

先去查一查了解一下你们学校从什么语言入门,确定了就是一个字“干”。学cs一定要多动手多尝试不要怕折腾。

另外,国外好大学有很多公开课,自己去找一找斯坦福、MIT、CMU、Berkeley的公开课。

作者:混乱中立
https://www.zhihu.com/question/380375631/answer/1091475314

信息计算专业大二学生,目前跟着学院实验室老师学习安全。

高考前是乖乖学习高考科目的18年,电脑都很少碰。报志愿也没有想报计算机,所以刚上大学的时候我可以说对CS毫无了解。大一上学期结束时机缘巧合之下进入学院的一个学习安全的实验室,这才被激起了无限的兴趣。

学校课程先安排学习的C语言(但我学的并不好),但也算是打下了代码思维的基础。

然后开始学习python。每周完成老师布置的程序训练,也研究别人的代码开了开眼。

然后是前端HTML、CSS、JavaScript、jQuery的学习,了解网页基本结构,看着那些网页布局能自己写出来一个一样的。

接下来是SQL的学习,只学了语法,没有对数据库进行深入了解。

(这时候大一结束了。)

大一暑假留校期间,我开始接触web安全,了解了文件上传、sql注入等漏洞,也开始着手php的学习,并完成了一个和数据库结合的教务系统。在dvwa、upload-lab、sqli-labs等靶场练习,然后循序渐进接触web安全其他内容,还有一些扫描工具的使用,kali linux的使用等。期间初识CTF,在一些平台(攻防世界,bugku等)练习web&misc。放假去北京玩的时候顺便去北京邮电大学膜拜一下天枢战队,又是机缘巧合之下(实在是过于巧合,可以写成奇遇记了)获得了天枢战队的纪念品。(天枢的学长学姐们都好好啊!)(/ω\)

大二上学期练习CS和MSF,安排阅读的书籍有《C程序设计语言》《操作系统》《计算机网络》《数据库》。花了一段时间用mysql和php做了数据库的课设,也帮同学做了两份课设,仍记得被通宵到五点多支配的恐惧。

学期后期开始php代码审计,得到了几份很久之前大佬写的源码学习人家的思路,如何防止漏洞的产生等。

寒假留校期间开始学习载荷上传、落地、免杀技巧。

寒假回家先沉迷了10天的小说漫画和动画片。然后开始学习汇编语言,并站在汇编的角度理解C语言,很多东西迎刃而解。

现在在看看雪的《加密与解密》,开始re&pwn的学习。

下学期会看《数据结构》《计算机组成原理》《计算机算法分析与设计》和密码学的视频,《加密与解密》也会继续,再后面会看《0day安全》《Windows程序设计》等。

我不是一个聪明的人,安全对学校专业课的学习肯定是有影响的。只要不是上课时间我都在实验室。有时候也会翘掉一些水课(英语、体育、省情、创新创业之类的)。但毕竟还算数学系的,数学专业课没有时间仔细推敲,这点令我很惭愧,但也没有办法兼顾。

能再更高效的利用时间就好了,能再聪明点就好了(>ω<)

作者:匿名用户
https://www.zhihu.com/question/380375631/answer/1090841916

Calculus, Linear Algebra, Probability, Statistics, Information Theory, Algorithms, Network Science, Computational Complexity, Theory of Computation, 面向应用可以学点Machine Learning/Deep Learning应用到CV、NLP,面向未来还可以来点Quantum Computing

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。

扫描二维码添加小编↓

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值