从材料硕士到算法工程师的转行之路,有三不建议
2019-04-08 20:44
作为一名从传统行业成功转行算法工程师的老人,经常会有想转行互联网,或者是算法工程师的朋友询问我转行的经验。为了能够帮助到更多希望转行的朋友,特在此记录下自己的转行历程及心得。
1 转行的动机
转行的动机基本上可以归纳为四点:
1)现在的工作工资太低,
2)现在的工作前景黯淡,
3)对现在的工作毫无热情,
4)对意向的行业特别感兴趣。
而对大多数年轻人来说,工资太低是原罪。毕竟现在的年轻人压力太大,硕士毕业都二十好几了,有女朋友的面临着结婚,买车,买房;没女朋友的还可以潇洒几年,但几年之后同样要面临这些问题,当然不排除有的同志立志做一辈子的单身狗,^_^。回到正题,大多数人转行都是因为工资低,我同样也不例外,但却也有所不同。开始因工作太低而转行,最终因兴趣而成功。
2 转行的历程
简单自我介绍,17年7月从某中下游985材料专业毕业,毕业后就职于上海某汽车零部件公司,从事模具开发的工作,校招签约是一年13w,然而实际工作中每个月到手6300左右,转正之后也才7300左右,每个月需要1300(嘉定郊区)的房租外加早餐和晚餐的费用(公司提供免费午餐)。享受应届生落户政策,把户口落在了上海,本想着一直在上海待下去,然而17年上海的房价又在快速增长,这让我根本看不到留下来的希望,因此大概在17年9月份的时候就开始考虑转行。
开始打算转行的时候考虑了两个方向:金融和互联网,这两个方向也是大多数人的转行归宿,一开始尝试的是金融,大概半个月之后发现自己不合适:一是自己根本没有任何兴趣,都是强迫式的去学习;二是自己的学历一般,本科双非,硕士也只是个普通的985。这样也就放弃了金融这条路,那就只剩下互联网了,那好吧,那就只能走这条路了。
对于互联网我是很陌生的,连互联网有哪些职位都不知道,技术方面更别说了,除了大学考过计算机二级,就没接触过编程,真的是连hello world都不会写的小白,不过既然打算转行了,就不管自己现在是个什么水平了,先撸起袖子干吧,但是该怎么干呢?百度呗,知乎呗。
万事开头难,第一步总是最难的。于是乎开始去网上各种找别人转行的经验,有成功的,有不成功的;有告诉你上培训班的,有告诉你不要上培训班的,有告诉你python好入门的,有告诉你java才是王道,甚至还有零星地喊着PHP是世界上最好的语言的;有告诉你前端容易些的,有告诉你后端前景好的;有告诉你算法工程师是当前最火的,而且工资高;有告诉你算法门槛太高了的,诸如此类……。在这个时代信息获取更容易了,但也需要你有更清晰的判断力,不过我就比较简单,只看工资高的,那好吧,那就算法工程师了,大家不是都说xxx几个月带你成为年薪40w的算法工程师吗?
既然确定了目标,那就开始规划学习路线吧,然后又去网上各种找资料,算法工程师的语言首推python,然后不少人又说python计算性能差,你还需要学java,c++;算法方面除了机器学习,深度学习,还有各种线代,概率论,高数,算法导论等等要学,那好吧,既然打算学了,那就开始吧。首先就从python开始吧,然后就去网上开始下视频,找了好几份视频,最后发现还是某马的视频通俗易懂些(此处非广告),此时已经过完国庆了,也就是说从17年国庆之后真正的开始了转行之路。
刚开始自学的时候真的挺痛苦的,我既没有报班,也没有选择裸辞,好在每天下班都挺早,基本上每天晚上能抽出四个小时的学习时间,周末大概每天八小时。就这样开始了自学之路,从linux的简单操作开始,然后是python的简单语法,一直到这都觉得挺简单的,看来转行是分分钟的事情,直到学到类这一章,开始有点蒙了,这里一个对象,那里一个方法,什么封装,继承,多态,感觉脑子要炸了。没办法,那就照着别人的代码抄吧,抄完之后就一行行的读,在纸上一个对象一个对象的画,就这样勉勉强强的理解一些,在这个时候我的心态也有了一些变化,转行好像也那么容易,但我是谁,二十几年前拿过冠军的人,这点困难算什么,平静下内心后开始继续,但此时我脑子里也在想一个问题,转行所需要花费的时间。
我是不敢裸辞的,这样一旦没成功损失太大,而且那时自己也没攒到钱,然而边工作边自学不仅效率不高,而且真的很累,所以我需要快速转行成功。算法工程师需要的时间太大,当时大概估计了一下,以这种边工作边自学的方式大概需要半年甚至更久,而我给自己的时间是大概四个月,在这时做了一个大胆的决定,先转后台开发,再转算法工程师。至于为什么选择后台开发,仅仅是因为和算法工程师联系大一点。那就这样决定了,然后就开始去看python后台开发的招聘需求,总结下来需要掌握的最基本的技能:python,django,数据库(mysql,redis),计算机网络(http,tcp/ip),面试还需要掌握数据结构和算法。那就一样一样的来吧,具体时间如下:11月底学完python,12月中旬学完数据库和计算机网络,12月底看完数据结构和算法:python描述这本书。1月底学完Django,并搭建一个个人博客。2月开始准备面试题。
总结一下这部分的学习心得:
python:主要以视频为主,不建议看书学习,多写代码,写代码的时候最好规范,多用类去封装自己的代码。重要点有python中的各种数据结构的特点,装饰器,生成器等特性,线程,进程,协程,内存机制等。
数据库包括mysql和redis:这两个用起来很点单,但是理论上的知识点却挺多的,尤其是mysql,在面试之前建议多刷写经典的面试题,一些不懂的点配合着别人的博客和书来看可以取得很好的效果。redis一般问的都是里面的数据结构,相对简单些。
计算机网络:http协议,tcp/ip协议,推荐看一些简单的书,比如图解HTTP协议,然后还是刷高频面试题中的知识点,这是针对面试最优效的方法。
数据结构和算法:推荐数据结构和算法:python描述这本书,主要关注链表,栈和队列,二叉树,hash表这几块内容,然后再去刷剑指offer,剑指offer的题相对leetcode少很多,难度比较大的可以放弃。
基本上这样你只要做一个漂亮一点的简历,然后要求不要太高,基本上工作就能找到了。
18年3月初,也就是过完年回到上海我就开始投简历,这时你不用去考虑公司,只要稍微符合的就投,我总共投了将近100份简历,前前后后大概收到了6,7个面试,都是很小的公司,最大的也才150人左右,我只面试了两家,都给了offer,选择了最大的那一家,也就是这150人的公司。
18年3月8号辞职,3月11号入职新公司,当时的薪资是税前8000,转正后10000。工作地点在市区,房租1600,但住宿条件较之前差了100条街。吃饭也很贵,日均50-60。转行之后感觉生活更加紧迫了,好在自己对未来比较看好,也就都能接收。
不得不说在工作中学习效率真的是很高,在这里很感谢我们的“俊哥”,在工作上给了很多帮助,不仅代码写的越来越好,也接触到了很多以前没接触过的东西,比如FQ谷歌,各职位各部门之间的协作流程,git的工作流程,docker的项目部署,数据库的使用等,这些在之后从事算法工程师时都有用到。说到这是不是有种忘记了初心的感觉,no,并没有,转行算法是必然的,尤其是在现在做后端开发工资也不高的情况下,还有一句不能漏了,在这个时候我对写代码已经是非常有兴趣了。
新工作有个很大的优点,就是很少加班,而且上班时间灵活,我又住在公司附近,走路十分钟,这也给我提供了很大的帮助。18年3月底开始决定重新转行算法,如出一撤,打算先从看视频开始,去网上一找,大家都推荐吴恩达的机器学习课程,可是听不懂英文真的是很大的障碍,即使有字幕也学的很难受,就这样又去找其他的视频,不少人在推荐林轩田的机器学习基石。说实话林轩田的机器学习基石真的挺难的,尤其是对初学者而言,而且机器学习基石没有涉及到太多机器学习算法,主要是讲一些机器学习的理论,但这也没办法,知道是硬骨头也得去啃,就这样配合着别人的学习笔记磕磕绊绊的花了半个月学完了,但此时感觉自己还是啥都不懂。然后就开始去买书来看,第一本就是西瓜书,一开始是泛读,了解有哪些机器学习算法,大概一两天就看一章,每天大概能腾出三四个小时,而且只读到了第十一章。此时大概4月中旬,还是基本懵逼的状态,没办法,就开始买一些简单的书来看,比如机器学习实战,python机器学习实战,然后就照着书上的代码去运行,并结合西瓜书还有别人的博客来一个算法一个算法的啃。这整个过程花了一个月左右的时间,也就是到了5月中旬,个人认为已经算是入门了,但此时并不能说对算法有多熟悉,而且对各种的算法推导并没有统一,机缘巧合下有个同事推荐我去看统计学习方法这本书,现在也是我目前最喜欢的一本书,面试之前必定翻一遍,周志华老师的西瓜书是大而全,适合入门;而李航老师的书就是小而精,适合进阶。依然是坚持每天推导一个算法,就这样大概花了半个月的时间,自认为对机器学习中的各种算法算是比较熟悉了。
理论掌握的差不多之后就需要实战了,去真正的领略算法的实际用途。kaggle竞赛平台是个不错的选择,里面有很多机器学习入门的项目,最经典的就是泰坦尼克和房价预测,正好对应着分类问题和回归问题。这个时候你就可以用各种算法去尝试,比较结果,还要去熟悉各种特征处理方法,比如缺失值的处理,离散化等等。总之这个过程你不仅要大概的知道各种算法的优缺点,还需要知道各种特征提取,特征选择,特征组合的方法。此外你可能还会碰到过拟合,欠拟合的问题,那恭喜你,你会获得更多的经验。
本以为经历了上面这些,对机器学习的算法应该是掌握的比较好了,然后就去刷面试题,发现自己很多都不熟悉,也就是之前见过,甚至是理解过,但现在就不记得了,看来自己掌握的还是不够好,怎么办?那就复习做笔记吧,可是手写笔记也太麻烦了,那就写博客吧,大家也可以看到我的第一篇机器学习的博客是6月底,此时也是我对整个机器学习算法的总结开始,说实话这个阶段起到了质的飞跃,一开始对很多概念还很模糊,但你写完一篇博客后对这个算法就清晰很多了,强烈推荐。
与此同时,在7月初开始接触深度学习,其实到了这一步你也需要确定方向了,你是选择推荐,计算机视觉,自然语言处理还是其他等等。说实话计算机视觉很火,因此那时也想朝视觉的方向发展,可是电脑配置太差,又没有GPU,当时在做Kaggle上的一个图像分类的项目,每次电脑都卡死,没办法,客观条件不允许我做视觉了,对推荐兴趣不是很浓,那就自然语言处理吧,虽然当时知乎上各种看淡NLP的未来,觉得这个方向短期没有突破,然决定了那就共同面对兴衰吧。
相对于机器学习,深度学习的内容要少很对,无外乎几种网络,CNN,RNN,LSTM,自编码,受限玻尔兹曼机,GAN等。特别是当你对机器学习很熟悉之后,学起来就非常快了,但是tensorflow可较sklearn难多了,什么计算图,什么tensor,尤其是tensor的维度,三维,四维太常见了,但是学框架总比你自己去实现CNN,RNN要简单多了吧,所以深度学习很多时候都是在学tensorflow怎么用?当然深度学习中也有不少理论需要掌握,比如梯度弥散,激活函数,反向传播,优化函数,LSTM和RNN,Attention的原理。而现在可能还会问Transformer,NLP中的预训练模型。BERT的使用等等。但总的来说深度学习学起来还是简单些,难点主要在调参。
回过头来,说说深度学习和自然语言处理,首先推荐大家去找一些优质博客,理解清楚什么是CNN,RNN,LSTM等,理解它们的结构,输入和输出等。了解了基本的网络结构之后,可以去看吴恩达的深度学习视频,在网易云课堂中有,包括了深度学习理论,计算机诗觉和自然语言处理。另外深度学习这本书也是必不可少的,不用全部看完,毕竟太厚了。自然语言处理一开始没必要去看那些传统的书,给你讲语法,语义之类的书,主要还是以实战为主,了解自然语言处理中有哪些应用任务,比如文本分类,词性标注,机器翻译,问答系统等。推荐从文本分类入手,因为这是自然语言中最基础也是最常见的任务,我目前也主要是在做一块,接下来会入坑知识图谱和问答。
整个深度学习大概花了不到一个月的时间,而且此时还在总结机器学习和刷面试题。所以深度学习上花的时间真的不多,当然此时对深度学习除了理论比较熟悉,几乎是没有任何实战经验,而且tensorflow只能说能用,当很不熟悉。本打算把这些进一步扎实一点,但因为其他原因,不得不在8月9号辞职离开上海来到深圳找工作。
在求职算法的时候感觉市场一片大好,相对当时3月份求职后台开发的艰难,这次真的好了很多,不但收到不少面试,而且其中还不乏一些大厂。可能当时这个行业还是缺人,再加上已经有了五个月的开发经验,相较那些无任何互联网经验转行算法的朋友来说还是有些优势的,而且求职时我的博客也给加了不少分(至少能证明你是有认真学习的,而不是几天培训班,跑几个项目就来找工作的人)。
在这里还有一点,我面试基本是100%拿offer,这次总共面了7家,收到了6个offer,拒绝的那一个还是因为我的期待和它提供的岗位不符,所以就没有后续了。这里有一点点小经验分享给大家:
1)基础:只要你的简历不作假,面试官就不会期待你有多少项目经验,他更在乎的是你的基础,所以理论基础一定要打好。
2)信心:很多转行的朋友可能都会怀疑自己是不是能做好这份工作,较科班人士是不是差的很多,我只能说科班也有很多普通人的,你只是较那些大神差很多而已。所以信心要足。
3)态度:当面试官问你为什么转行的时候,你不用避讳因为钱多,可以说绝大部分人的动机都是因为钱,但这个过程中你是不是真的感兴趣,面试官还是很在乎的,所以我一般都会说因为钱多才决定转行,但因为兴趣才坚持到现在。
3 一些建议
虽然现在进入了互联网寒冬期,转行越来越难了,但还是给那些想转行的朋友一些建议:
1)你需要能挤出大量的时间来学习,学习需要连贯性,不然效率会非常低下,低下到你怀疑自己的能力,甚至放弃。
2)你需要能静的下心来学习,不要受过多的干扰,包括身边的朋友,网上的言论,尤其是那些告诉你转行有多难,那些劝退的人,要退缩也是你因为自身的原因主动退缩,而不是被别人给吓退缩了。
3)放下你的过去,很多人都觉得转行浪费了自己所学的专业,尤其是对于硕士和博士,我并不认为这是浪费,在学校最大的收获绝对不是一点点专业知识,而且打算转行的人一般也是专业没学好又对自己的专业没兴趣的人。
4)认清现实,虽然现实很残酷,但你必须去面对,对转行算法有三不建议:一,绝大部分本科生不建议;二,从小到大数学差的不建议;三,普通学校的硕士不建议。虽然说的有点直白,在中国对学历的歧视是很赤裸裸的,算法工程师确实大多都要求硕士,对于非CS,数学等专业的还会要求是好大学的硕士,如果达不到你的发展可能会受限,当然这里面肯定会有个例,很多普通大学也有很多大牛。另外数学差学算法还是挺痛苦的,之前说到的线代,高数,概率论等都是需要的,在这里我没有重头学是因为我大部分都记得,哪怕这些书我好几年没翻过。
最后,祝各位想转行的朋友在19年都能成功!