当前位置 博文首页 > 深度学习与计算机视觉:一个不是很了解CS(计算机科学)的人,应

    深度学习与计算机视觉:一个不是很了解CS(计算机科学)的人,应

    作者:[db:作者] 时间:2021-08-22 09:00

    来源: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」,每日朋友圈更新一篇高质量博文(无广告)。

    扫描二维码添加小编↓

    cs