知乎 | 一年半的时间成为算法工程师,这可能吗?
点击上方蓝字,关注并星标,和我一起学技术。
最近在知乎里面看到了一个很有意思的问题,提问的同学是这样说的:
今年研一,感觉自己什么也不会,导师完全放养,2个月没见过面,从入学到现在一个学期快结束了总共见了5次面,没有项目,没有指导,哎 想做机器学习方面的工作,距离明年秋招还有一年半,目前在看C++primer,然后学一学数据结构和算法,同时再学校李航的《统计学习方法》,但是感觉很吃力;另外面试肯定需要介绍项目经历,这方面又太欠缺,不知如何是好,辗转反侧,彻夜难眠。求助各位大佬,我该如何准备,才能拿到一个算法offer?
感觉自己什么也不会,导师放养,又想要拿一个offer,但时间有限,只有一年半。我想,很多同学在硕士阶段可能都有这样的困惑。本来这是一个很好的问题,但让我遗憾的是,高票回答聊的都是项目经验、竞赛、简历、LeetCode这些。感觉没有一个达到点上的,所以今天和大家聊聊这个问题,希望可以对迷茫当中的同学们有点帮助。
一
为什么说上来就回答应该刷项目经验、LeetCode的回答不在点上呢,先不说这些举措究竟有多大的用处,单说这样的答案本身就是不对的。因为这只是知其然而没有知其所以然,我们知道要刷LeetCode,但是不知道究竟为什么要刷,它究竟有什么用。我们知道要刷项目经历,但不知道要刷什么样的项目,又要刷到什么样的程度。这些建议看似非常明确,但是背后有着非常巨大的未知,贸贸然去做,反而会陷入迷茫。
如果我们把一年半拿到offer看成是目标的话,我们首先要做的不是立即行动,而是先对目标进行背景调查、搜集信息,对它积累足够的了解。之后再来分析目标,拆解它的必要条件。最后再从这些必要条件出发,把满足这些必要条件当做是目标,再来进行同样的分析。
我不知道这位同学为什么想要做算法,不知道他出发的初心。但是当我们做出职业方向的选择的时候,我们是需要一个强有力的心理支撑的。就是你究竟为什么想做算法?你觉得算法工程师都是干嘛的?它在互联网公司当中起到的作用是什么?
只有这三个问题想清楚了,才不会陷入迷茫,也不会将来入行了之后发现和自己当初想的不一样而后悔。
二
那算法工程师究竟是干嘛的呢?
很简单,这行的作用就是推动业务的发展。调参、训练模型、复现paper……这些只是手段,不是目的。核心的目的还是业务的增长,提升业务指标。其实也不只是算法,几乎所有技术岗位的本职都是这个。所以为什么我之前会说技术驱动的公司只是一个口号,实际上几乎所有公司都是业务驱动的。
问题来了,既然使命是推动业务增长,那么业务是什么?
电商的搜索、推荐、广告算不算业务?自动驾驶算不算业务?机器翻译、语音识别是不是业务?如果让我回答,第一个肯定是业务,第二个勉强算,第三个更偏技术。当今算法领域几大方向,推荐、CV、NLP,你会发现只有推荐是和业务强挂钩的。CV和NLP都不直接关联业务,比如CV做图像识别,图像识别只是技术,我们把图像识别用在安保上,安保才是业务,图像识别本身不算。NLP也是一样,单纯的NLP技术不算是业务,大厂当中往往把NLP用在提升搜索、推荐的效果上,搜索、推荐是业务,NLP不是。
这就是我为什么推荐大家选择推荐的原因,除了技术本身门槛相对较低之外,另外一个很重要的点是它距离业务很近。想要入行,最起码得知道,你想要做哪一块业务,在这一块业务当中算法是如何起作用的,又涉及哪些知识和技能。到这里基本上没涉及技术,你可以理解成对这个行业的一个背景调查。
搜索推荐不谈了,拿CV举个例子,如果是电商领域,CV大概会有这么几个作用。一个是以图搜图,也就是基于图片的搜索;一个是鉴黄、风控,对违规的商品、图片进行识别;一个是图片分析提取特征,比如说商品的封面图的质量,对用户的吸引力等等。然后再是针对这些场景需要用到的一些技术,比如CNN、YOLO等等。
业务方向选好了,那么对应的技术栈也就清楚了。比如说你选了推荐,那么你剩下的就是了解当今的推荐系统是如何运作的,它当中设计那些技术,算法的作用是什么,用到哪些模型,哪些技术,又有那些前沿的paper。你顺着这条线一路摸下来,按图索骥,网上大神的博客读一读,各类专栏看一看,走马观花,了解一个大概,基本上就可以做到心中有数了。
三
当你对于岗位的业务以及对应的技术栈都有一个大概的认知之后,就可以开始动手学习了。
学习的顺序也比较明确,首先是机器学习基础,再是深度学习基础,再是对应领域的一些前沿技术和paper。这是一个万金油的路径,不管你想要从事什么领域的算法,都可以沿着这个路径出发。这里我有一个建议是机器学习相关的模型浅尝辄止,知道原理和推导过程就可以了,不需要细扣。一个是因为这些模型基本上淘汰用不到了,另外一个反正之后准备面试的时候也是需要复习的,再加上一些模型的细节很容易忘,比如SVM的推导过程什么的,所以前期学习的时候可以适当宽松一些。
根据我个人的经验,机器学习基础再加上深度学习的基础这两个加在一起三个月绰绰有余。业务相关的技术和论文篇幅也并不大,以推荐领域举例,如果只是学习技术,不涉及实战的话,我个人感觉三个月也绰绰有余。这两项加在一起也不过用了半年的时间。只有再用半年的时间去刷一些实战经验,比如kaggle当中的比赛,比如腾讯、阿里举办的各种比赛等等。
最后剩下的半年才是刷LeetCode和算法题,复习巩固一些机器学习的基础(SVM、随机森林、决策树)这些,准备实习面试。真能拿出半年的时间来准备,每天花两个小时刷5题,LeetCode前300题刷上个三遍问题不大。剩下的时间海投简历,看看面经,复习一下学过的基础。不说板上钉钉,至少找到一个还不错的实习机会问题不是很大。
只要能拿到实习的机会,基本上就算是入行了,后面的校招路会好走很多。就算一下子进不了大厂也没有关系,先进个中小型企业打磨技术和能力也未尝不可。
尾声
简单总结一下,学技术是为了应用在业务当中,算法尤其如此。所以首先应该找到从业的方向,找到自己想要从事的领域。有了方向之后再根据对应的要求来进行学习,等学得差不多了,也有了一定的实战经验之后,再是刷题准备面试。我自己当初转行的时候只用了几个月,一年半的时间真的完全够了。路走对了,只要能坚持下来,成功率绝对不低。
千万不要盲目,上来就刷LeetCode,就啃一些模型,搞了半天也不知道这些东西学来干嘛的,这就本末倒置了。
好了,今天的文章就到这里,感谢阅读,喜欢的话不要忘了三连。