非计算机专业学生怎么走上计算机技术之路?

链接:https://www.zhihu.com/question/418183181

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

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

非计算机专业学生怎么走上技术之路?来自211一般大学,高考错失计算机专业。目前工科。应该考研吗?还是寻找其他成长之路?

作者:白乌鸦

https://www.zhihu.com/question/21671705/answer/576553915

我精简了科班本科阶段的学习路线,可直接按以下管线学习,足够学上至少两年。

第一部分对应学习管线,第二部分对应管线中每一个环节所推荐的参考书目。

推荐的学习管线

编程语言学习篇

C -> C++ -> Java -> Python

这一套学完就基本掌握了语言的精髓了。

本科难度一般指的是熟悉,而非精通。

算法与数据结构篇

离散数学 -> 算法与数据结构 -> 算法竞赛入门

这一套学完就不惧怕面试的算法题了。

对于求职,主要掌握线性/树/图/网络四种结构,以及贪心/DP/分治/搜索等基本算法即可。

计算机体系篇

汇编 -> 计算机组成原理 -> 数据库 -> 操作系统 -> 编译原理

这一套学完对计算机的理解会提高几个层次。

但一般的程序员很可能用不到太深的内容。

人工智能入门篇

计算机图像 -> 计算机图形 -> 大数据分析 -> 计算机视觉 -> 自然语言处理

这一套学完大概能理解AI的发展和应用。

这几门不能说有严格的递进关系,每门大概熟络后就可以进入下一门,对于有志于从事AI相关的,能精通一个方面就很难得了。

对应科目推荐的书籍清单如下

C:《C程序设计语言》

C++:《C++程序设计语言》

Java:《JAVA编程思想》

Python:《Python核心编程》

离散数学:《离散数学及其应用》

算法与数据结构:《算法导论》(前几章)

算法竞赛入门:《挑战程序设计竞赛》

汇编:《汇编语言程序设计》

计算机组成原理:《计算机组成原理》

数据库:《数据库系统概念》

操作系统:《现代操作系统》

编译原理:《编译原理》

计算机图像:《数字图像处理》

计算机图形:《OpenGL编程指南》

大数据分析:《统计学习方法》

计算机视觉:《计算机视觉》

自然语言处理:《Deep Learning in Natural Language Processing》

——后记

我编辑了一年前的回答,并加了很多comments。

关于目的,这篇回答想告诉非科班科班学生每天在学什么,以便于重塑基础,追赶进度,并非为了短时冲刺,跟风求职。(对于突击求职,精读具体的细分方向是更好的选择)

关于时间,课表里一共17门课,按每课3学分折算共51学分,差不多是两学期的课时。

关于硬核,这里的每门课在科班的培养计划里都能找到,但不是每个计算机科班学生都能完全掌握这些课程,计算机这门学科本身就很硬核。

关于依赖关系,有些模块中确实不强,能力足够的话可以自行调整顺序,或者按能力需求跳过部分课程。

对于从零开始的小白,我还是建议C/C++入门,大多数大学也都是这样设置的。从某种程度上来讲,面试时能用C/C++手写高效算法象征着较好的逻辑思维能力和良好的计算机功底,会在面试中获得很大的加分。

作者:陈历飞
https://www.zhihu.com/question/21671705/answer/1241926801

转计算机方向其实并不难,但你得知道怎么转。

甚至你不需要上很多课,不需要报任何培训班,不需要花很多钱。

1、只看最短路,你只需要4门课:

  • 编程语言 (Java 或者 C/C++)

  • 算法与数据结构

  • 数据库

  • 一门技能课 (网页开发,移动端开发,云计算,AI等)

别看计算机课很多,什么操作系统,计算机网络等等,那些课固然很好,但对我们转专业的学生来说:

时间有效,精力要用在刀刃上,优先去补那些最核心的、对找工作最有用的课程。

2、怎么补?

条条大路通罗马,我能想到以下几个好方案

  • 研究生留学:

    • 先申请一个本专业的研究生(ex生化环材),选课自由的那种,然后进去之后去选计算机相关的本科/研究生课程,最终完成曲线转专业大业。

    • 直接申请面向转专业的计算机研究生课程:比如美国NEU,USC,USF等大学等都提供这样的项目。

  • 自学:推荐网络公开课,比如cousera,比如哈佛、斯坦福公开课,不必要上什么培训班,因为:

最好的课程其实都是免费的。


  • 本科转专业,跨专业考研等

  • 跨专业选修课(我在本科时亲测过,能行)

3、需要注意什么?

纵使你看完了以上所有课程,如果没有实战,没有实际做作业做项目,都是0。

实践是检验真理的唯一标准。

  • 编程语言+算法与数据结构的实战:请去LeetCode刷题练习。

  • 数据库+一门技能课的实战:请动手完成1-2个项目。

    • 网页开发:写一个论坛,一个淘宝之类的网站

    • 移动端开发:写一个日历,通信软件之类的。

    • 云计算:用spark和Hadoop尝试对大数据进行删改读写

    • AI算法:写一个推荐系统、搜索引擎、图像变化、语义理解的模型试试

4、如何定义成功

  • 掏出你的简历,里面能凑到3-4门计算机/编程相关项目:恭喜你!你已经具备一个计算机学生一样的简历和项目背景。

  • 掏出大公司面试题,你能找到思路知道如何去回答问题:恭喜你!你已经具备通过软件工程师面试拿到offer的能力。

当看着你的简历,评估你的面试,你的表现已经和一名普通计算机学生一模一样时:恭喜你!你已经成功走上计算机技术之路了!

以上,就是我能想到的非计算机学生走上计算机之路的最短路。我自己也不是就读计算机专业,但我见证着很多本科和研究生同学,来自电气,数学,通信,能源,生物等非CS专业,通过自己的努力最终转计算机,收获BAT,FLAG的offer完成逆袭的故事。

我们不能改变过去,但我们可以改变未来。

有志者事竟成,希望以上回答能够帮助到你,加油!

补充:

以上回答是我基于身边和自己的经验,总结出来的”转CS最短路“的最优方案。

并不是说计算机网络,计算机体系结构,操作系统等其他课就没有价值,但为了最短时间入门,不得不降低其他课程的优先级,在之后慢慢了解。比如结合投递的岗位,在实战遇到的问题后,再变查边学。

至于为什么要学数据库?因为数据库在之后网站开发,移动端,云计算,AI等项目中都会涉及到。考虑到学习数据库的性价比,入门难度低(相对操作系统等),所以推荐花点时间提前学习一下。

该回答视频版本已上线B站:https://www.bilibili.com/video/BV1Sh411d77i/

作者:大袋鼠
https://www.zhihu.com/question/21671705/answer/132737688

若想转行做技术,考研、自学都可以,但你首先要有兴趣。
我以我的经历给题主一些建议,但是我的每条建议都是建立在「对计算机、互联网充满兴趣」这一前提上的。我本科读的是物流管理(经济管理类专业),现在大四。我在2015年秋天决定转行,在2016年夏天找到工作,如今在杭州一家医学互联网公司做后端开发。

一、转专业或转行的原动力,一定要是兴趣驱动,而不是利益驱动。(注意:这是判断你要不要转专业、转行的关键因素)

我是靠着兴趣自学,然后转行成功的,而且我对计算机、互联网的兴趣确实已经持续很多年头了。

所谓兴趣驱动,就是要求你对计算机或互联网有着充分的好奇心和足够支撑你学习的热情。
有些人,他们使用电脑上网就是聊聊天看看剧、查查资料打打游戏,如果还会P个图,那就已经很了不起了。

但有些人,他们就是很在意一个网页为什么可以排版得如此美观,在意一个有趣的小程序到底是怎么做出来的,在意为什么贴吧大神可以把照片中史泰龙的头搬到曾轶可的身体上。

后面这类人,很容易将好奇心转化为兴趣,然后将兴趣转化为能力,甚至内化为价值观。
而且兴趣的驱动有一种独到的好处,它会给予你十足的动手能力,以及动手后的成就感和欢欣。

「成就感」是个很了不起的东西,它如果和兴趣相辅相成、共同驱动,你的学习速度会提高一个量级。

所谓利益驱动,则是认为自己没什么可以拿出手的吃饭的本领,以为IT待遇高、门槛低,是一条好路子。现在市面上一大堆培训班出来的「程序员」找不到工作,叫苦不迭,说到底就是奔着这条高待遇的路子来的———其他的先不管,我先赚着钱再说。若你是这种想法,转专业、转行前一定三思。

毕竟兴趣才是最好的老师,换句话说,「你要有一颗Geek的心,而不是功利的心。

二、善于自学,杜绝一开始就想要拜师、培训的想法。

这一点我想首先说一个小故事。我之前是一名Beatbox口技表演者,总会有同学或者陌生人,在得知我拥有这个技能后,立刻就要认我做师父,恨不得我可以嘴对嘴,啊不,面对面地给他们讲课,他们希望我能够让他们速成。

实际上,Beatbox的基本技巧,网上的教学视频数不胜数,而且他们还讲得比我好,比我更专业。但是,我的「徒弟们」却鲜有人能够耐心地去搜搜教程、跟着视频认真得学一学。

同样,想学计算机技术,网易公开课、Coursera、慕课网、实验楼,这些都是自学的好地方,而且花销很小。何必要到技术社区苦苦地寻求一个师父呢?何必丢一笔钱给培训机构呢?
但是,自学一定要学得系统,要有一套自己的流程,而且一定要善于使用搜索引擎,这个我后面再讲。

三、善于使用搜索引擎,这是一个人非常优秀的特质。

倒不是说一定要用谷歌,也可以用百度(虽然黑百度是知乎的政治正确)。其实一定程度上来讲,Google、Baidu、Bing、搜狗都可以。当你善于使用搜索引擎查询自己的问题时,用哪个引擎根本不重要,因为一个引擎搜不到答案, 你就会换一个引擎,直到搜出自己想要的。

四、关于系统化学习、自学的流程。

前面有位答主提到过,自学最好不要按照科班的课程设置来,他说得很对。
我们要选择「兴趣+成就感双驱动」这种学习方法,就要在一开始最大程度地避免能浇灭自己信心的东西,基础原理可以在入门以后再进行学习。

科班的计算机课程都是从「计算机组成原理、数据结构、算法导论、C语言、计算机通信原理」开始的,这些基础课程有一个共性,课程中的概念大多都很晦涩、抽象,因为它们接近底层原理,十分容易让人一头雾水,这对自学者来说极为不利。

那什么样的自学流程才是适合自学者的?
我认为是「系统学习一门编程语言 -> 自己给自己提需求 -> 动手折腾 -> 遇到问题 -> 逐一解决 -> 理解原理」,我就遵从的这条路线。

先说说这条路线的好处。很多人在入门了一门编程语言后就变得手足无措,他们根本不知道自己到底能做什么。而自己给自己提需求,就可以驱使自己迈开步子、动起手来。

我举个例子:大学里的班长有时候需要收集班级同学的信息,比如寒假几号离校。通常班长的做法就是,班级QQ群里或微信群里吼一声:「麻烦同学们把离校时间私聊给我!」。最后自己手动整理成表格。

假如我是一个刚学会PHP的班长,我可以想到,利用PHP+数据库做出一个表单网页,去收集班级同学的信息,然后马上动手去实现。动手的过程中我可以慢慢掌握前台如何正确的将数据传输到后端、后端如何将数据储存到数据库中。我还会想着将数据库的信息如何导出为Excel表格,于是我打开搜索引擎搜索自己的疑问,从而了解到一个叫做PHPExcel的PHP库,简单学习一下官方提供的使用方法,就可以将数据库中每人的离校时间数据转为Excel表格。

做完这个网页,不光自己省心省力,而且如果有同学说一句「班长还会写网页啊?」就更能够让自己心里美滋滋,这就是「成就感」。

接下来不断循环「提需求 -> 动手做 -> 遇到问题 -> 解决问题 」这个过程,刚入门的自己也就慢慢成长起来了,起码不再手足无措了。

那么如何系统地学习一门编程语言呢?
首先,你必须要知道编程是严谨的,要本着一颗严谨的心去学习。
你最好按照这个顺序来,大部分的教学视频也是这样来的:

  • 了解这门编程语言的基本语法。

  • 了解这门语言的基本数据结构(整数、浮点数、布尔、字符串、数组、列表、字典等)

  • 如何定义变量及其数据类型(有的语言不需要定义数据类型),如何给变量赋值。

  • 如何正确使用这门语言的逻辑语句(If、For、While)

  • 如何运用这门语言的常用函数。

  • 如何自己写一个自定义函数,如何给自己的函数设置参数。

至此,你已经可以自己做点东西了。然后:

  • 理解面向对象,运用面向对象。

  • 学会Debug,学会查错排错。

  • 学会使用各种已有的类库。(前辈栽的树、造的轮子)

  • 学习一门框架。

  • ……

上面提到的这些,网络上的教学视频基本都会讲到。我强烈建议你在听课的时候,打开搜索引擎放在一边,时刻准备着搜索自己不理解的问题。同时准备一个编辑器,老师敲什么代码你就敲什么代码。

学习的过程中不要好高骛远,不要刚学会基本语法就想着上手框架。这样会走很多弯路,这就不算是「系统学习」了。

若你在学习的同时,想要给自己提一些小需求,那么你可以尽管提、尽管做。
首先捋清楚思路,至少动手的方向不要错。然后脑中构思实现过程,逐一去实现。途中若遇到基本功的问题就回去温习基本功,遇到超纲的问题就去求助搜索引擎。直至你完成了自己的需求,「成就感」和欢欣就会让你更加坚定这条道路。

五、关于方向的选择。

其实我在准备写这一条建议的时候我就后悔了,实在是夸下了海口。因为我只是一个刚转行成功、刚踏入职场的新人,而且现在只在做开发岗,运维、测试等岗位都还没尝试过,所以对于方向选择这个问题上我实在不敢给出什么人生经验。

先了解一下目前市面流行的编程语言吧!搞清楚每门语言的适用方向(像Python这种有多种方向的要都了解下),是Web开发还是移动APP开发或者桌面程序开发?然后到招聘网站看各自适用岗位的岗位职责,了解具体的工作内容。

多结识一些行业前辈,他们会给你很多有用的建议。我是因为7年前就开始写自己的独立博客,所以会认识一些互联网行业的朋友,在转行过程中他们帮了我很多,感谢他们。
多到技术社区逛一逛,最后决定选好什么语言。
一定不要犹豫太久(我很后悔大三才做转行的决定)。

作者:风飞

https://www.zhihu.com/question/21671705/answer/133175297

凌晨5点,刚码完python web应用半吊子框架(一个星期前开始自学),心情略激动,怒答一个!
答主情况:本科211,非计算机专业,工科,自学,转行成功。
先说结论:一旦决定转计算机,那么就从现在开始自学;在家庭条件允许的情况下优先选择考研!

时间有限,我长话短说(主要是转行经历、转行体会和一些感概)。

1、答主经历:决定转IT是在毕业很久很久以后。由于对培训班效果没信心,以及自我感觉在计算机方面的兴趣和小聪明,决定自学(主要是穷,报班要脱产培训4个月左右,SZ这边学费大约2W)。我记得从我决定自学开发那天起,我每天的生活就是早上八点起床,白天正常上班,下午五六点准时下班,花30分钟时间吃饭回宿舍开电脑,然后看视频或者看书敲代码,凌晨两三点才睡觉。周末很少出去,都是一个人学习。这样的情况持续了大约两个月,两个月里,我看完了某培训班的一整套视频,和比较厚的《Android疯狂讲义》,把基本java语法和Android基础敲了个遍。算是过的比较充实的一段时间:白天上班让大脑得到休息,晚上敲代码让身体得到放松,还能清晰的感觉自己每一天都在进步。

然而等我自认为把这些基础都熟悉掌握以后,准备去网上长见识的时候却懵逼了!因为更本没人讨论四大组件基本用法, 没人讨论页面如何跳转,没人讨论项目分包是什么鬼。有的只是fragment高级用法、各个图片加载库的使用与源码解读、多层嵌套问题的解决办法123...总之,在我还只会走的时候,我却发现大家都在跑!有那么几天,我深受打击,我开始怀疑自己一直以来自恃的小聪明,甚至开始不确定自学转行这条路我还还能走多远!可是现实生活逼我从这种状态下走了出来,我开始重新规划,我从网上找了一张android开发知识架构图,圈出各个知识点的重要性,按需排序学习。

这个时候,是很痛苦的,因为对于一个非科班的我来说,需要了解的太多太多了,往往一个知识点里夹杂着好几个相关的知识点等着我去百度、去揣摩、去理解。

这及其耗时间与精力,并且消磨我的意志和信心。我明显的感觉到自己过于浮躁了,以至于我没能静心完成该在这个阶段做完的功课,导致我的基础知识体系并不健全(目前仍在恶补这部分的知识)。这阶段完成后,对于一个即将转行的我们来说,至少应该懂得这个行业究竟在干些什么,对工程项目有一个模糊的整体概念,对这个行业所涉及的大部分技术,该掌握的要掌握,该了解的要了解,至少要听过,或者知道这玩意儿干啥的吧。

接下来的时间,就是去学习使用常用开源库做自己的项目了。自学的话,这时候是有一定困难的。因为我既没有现成的后台接口可以调用,也没有人能帮我筛选出一个难度适中的开发项目,写项目过程中遇到的任何困难,都需要独立去克服和解决。然而这是每一个自学的人所必须熬过的坎,同时也是转行所必经的坎。正是由于提前等迈过了这道坎,所以多数自学的人在公司正式工作的时候,比那些培训班出来的人,更容易适应并且生存下来!项目初步做完之后,简直成就感满满啊,不过我清楚的知道,这就是一个demo!什么设计规范、什么编程规范,统统没有!

既然是转行,那么重点就是找工作了,可是这一点我能说的并不多。因为我是比较幸运的。总而言之就是还算顺利的入了行,至于入行之后是如何度过最痛苦的前三个月,如何成长又是另外一回事了,个中幸酸,经历过的自然懂。从准备转行到入行,共计八个月左右,除去长假、正常工作耽搁、自我荒废、考证等时间外,估计四到五个月吧,各种书籍淘宝电子资源等花费四五百元左右。

2、接下来就题主的问题和准备转行同学普遍的问题说说个人的看法吧。

(1)关于自学还是培训。我是倾向与自学的。因为花费不大,不需要脱产好几个月,还能锻炼人的资源获取能力、自我学习能力、独立解决问题的能力。况且现在培训班质量真心不怎么样。当然报培训班能省去你很多找资源、解决初级问题的时间,以及适当的让你少走一些弯路。培训班适合刚毕业、希望急速转行或是手头相对宽松的人群,而自学比较适合自律高、自学能力尚可、对IT非常感兴趣的人群;

(2)兴趣驱动与利益驱动。兴趣驱动与利益驱动缺一不可。对于题主这类仍未毕业的学生来说,兴趣驱动更重要,而对于毕业后已经工作的人来说,利益驱动更重要。我在大学期间,曾经有段时间,非常迷恋编程,并且坚持了一年多的时间。但是由于没有感受到来自生活最真切的压力,最后不了了之。然而毕业很久以后,当我切实感受到材化行业与IT行业在发展与待遇方面的巨大差别后,我终于下定了决心转行,直到成功!

(3)是否需要考研。结论我已经说了,在家庭条件和个人情况允许的情况下,优先考虑考研。相较与传统行业,IT行业在我国仍还算“年轻”,具有比较强的包容性,任何人,不论是何专业,你仍能跨过入行门槛,而且你掌握入行所需的基本技能,行业还是会接纳你,一旦你具备一定工作经验,低学历和非科身份就显得越加不受人重视了。这就是评论区有人说IT业“技术为王”的原因。然而,低学历意味着你会更早的触碰到你在该行业的职业天花板(技术和管理两个角度来看都是如此)。

在传统化工行业呆过的同学应该知道,现在稍具规模的公司,招聘研发职位的入门门槛都已经提高到研究生学历了!博士也是一抓一把!那些上了三十多岁的本科毕业现今主管经理级别的人也都拼了名给自己弄个在读研究学历之类的。

别看IT业现在年轻,以其发展速度和普及速度,我想在这一点上,其步入传统行业后尘的时间应该不会太长。另外研究生学历入行薪资要远远高于本科入行薪资,读研的“性价比”还是很高的。

(4)非科班如何获得第一份工作。这一点看个人机遇与坚持了,面试技巧也是非常非常重要的,毕竟吹牛逼工夫到位了,面试官很难再一两个小时内断定你到底是6K~9K的价位还是12K~15K的价位。简历可以适度包装,这个社会,说穿了,人不为己,天诛地灭。还有就是多面试,多总结,实在不行放低薪资要求,曲线救国。

3、说几句废话或者个人体会。

(1)转行贵在坚持。没人告诉你究竟应不应该转行,转行究竟能不能成功。但是,你需要明白,一旦你抱定决心准备转行,那么,就破釜沉舟吧!

(2)大神说的话不一定对。比如你问大神怎么学,大神一句read the fucking code打发了你。难道你真的打算靠读源码开始自学?难道你真要以你二三级的英语水平去读英语原著?去看英文文档?去stackoverflow查移位操作是什么鬼?

(3)不要沉迷于碎片化知识的学习,注意搭建自己的知识框架。blog、知乎之类的,实在闲的没事的时候可以逛逛,要不然逛了会让你产生一种“我学到了好多东西”、“我什么都懂一点”的错觉。踏踏实实看完一本《HTTP权威指南》比你翻遍所有的http话题相关的blog要强!认真阅读一遍《java编程思想》,解决问题的时候你会少用百度N次;

(4)搞IT,搞技术,别光看,一定要多敲,多debug,你能学到更多。

本来打算三两句话写完的,不过还是写了这么多。当时刚把python web应用debug完成,激情满满,看到这个话题一心准备写个转行自传,也算是给后来者一个参考。然而时间着实有限(堆着七八本书没看完,好几个demo没写完,python才学一周多),所以不得不一拖再拖,压缩回答内容。回答质量也全然不敢做保证了,望各位见谅!(如果真的还有问题,可以私信我,我尽量给予回复)

☆ END ☆

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值