想做算法,你需要哪些条件?
点击上方蓝字,关注并星标,和我一起学技术。
大家好,今天和大家聊聊算法工程师的基本条件。
之前写过一篇转行劝退文,反响很大,但很多同学在表示感同身受之余也表示自己不愿意轻易放弃,还是想要放手一搏。所以今天我就站在一个过来人老法师的立场上和大家谈谈算法工程师究竟有什么软的、硬的门槛。大家可以对比着看看自己,究竟符不符合要求,又该如何努力。
是敲门砖不是学历
说到学历,大家普遍的反应都是现在互联网行业整体都非常卷,算法尤其。基本上大厂非985、海外名校不要,如果学校普通很难找到很好的工作。
站在学生的立场上肯定义愤填膺,觉得自己被剥夺了潜在的机会,产生不满的情绪,这些都可以理解。但是如果你站在面试官的立场上你马上就会得出完全相反的结论,我们来设想一下,你一天的工作量本来已经很饱和了,但还要抽出大量时间来完成面试。结果你面的10份简历里面有9个完全不能看,但是出于职业素养以及面试礼仪,你必须要聊完一个小时或者是一个半小时,你会是什么心态?是不是很抓狂,很多人真遇到了估计肯定要投诉hr了,难道不会筛选一下吗?什么样的人都来给我面?我的时间不是时间吗?
这些就是我目前看到的很多面试官的真实反映,这就是目前面试的现状。绝大多数人的能力和面试表现都是和简历上写出来的东西挂钩的,如果你的简历上找不出什么亮点估计你的面试也不会有什么水花。而对于很多学生而言,学历是很重要的一个亮点,所以如果学历不太好的话,直接就掐灭了一半的火花。
那是不是没有学历一定不行呢?
其实也不尽然,如果我们去网上搜可以找到一大堆反例来证明这个观点不是正确的。我个人的看法是把你的简历当成敲门砖,砖头本身好不好并不重要,重要的是它能不能敲开门。如果你的砖头本身比较脆,不结实,那你就需要多找点额外的材料修补修补,有些人的砖头本身很过硬,可能不需要太多的修补也能把门敲开。现在的确海归很多,名校出身的人也不少,显得竞争压力很大。千万不要被这种现象迷惑了,拥有名校背景的人10个里面也一样有8个不太行,优秀的一样是少数。如果你同样优秀,那只有名校学历的人在你面前一样是渣渣。
千万不要觉得我能力很强但是学历不好会被限制,规矩是死的,人是活的,相比于硬性要求,我更相信特殊渠道。因为学过算法的都知道,无论什么样的规则都一定无法覆盖所有的case,所以最后一定还是会有人为操作的空间的,换句话说一定会有牛人可以突破限制的。
所以在学历这件事情上大家不妨放平心态,因为没能力的人即使有学历,也大概率无法通过面试,即使他真的通过面试了,也不一定能在大厂站稳脚跟有所发展。而真正有能力的人,也是不会被一个offer限制住的,即使真的没能进得了大厂,也一样有大把的机会等着你。
我爸从小就跟我说,人一定不要把自己看轻了,要相信:此处不留爷,自有留爷处,处处不留爷,爷去投八路。
基本要求
接着再来聊聊一些基本的要求,我简单总结一下,对于一个纯小白的工程师大概是四个方面的要求:模型、数据、场景、工程素养。
说起来只有四点,但这四点当中每一点拆开说都可以讲上几堂课。先说说模型吧,模型可以分为两类,一种是应付面试的机器学习基础模型,也是现在工业界基本上用不到的模型。比如什么GBDT、随机森林、决策树、SVM等等,这些模型主要就是在面试的时候会问到。看看你有没有扎实地学过机器学习,对机器学习的基础掌握得有多少。这部分基本上系统地学过一次,实际用过就可以了,剩下的可以等到面试之前再来复习。第二部分则是对应的领域必须会用到的模型,比如说如果是推荐领域,那么FM、DIN这类必不可少,如果是CV呢,那么各种CNN也是必须的,如果是NLP,显然离不开LSTM、RNN。
说完了模型再来说说数据,数据也是要区分领域的,对于推荐场景和CV场景的数据显然是大相径庭的。以我熟悉的推荐场景举例,推荐场景下的特征可以分为哪些部分?这些部分的特征分别都是如何设计的?这些数据有哪些特点?这些数据又是如何产生的,它的数据源、数据链路是怎样的?比如你知道用户特征需要根据时效分成实时特征以及历史特征吗?这么划分的依据是什么?这些数据又是如何喂到模型里的?
第三点是场景,也可以理解成业务,比如推荐、搜索、广告,这些领域看似都是预测用户和item之间的CTR,但是它们之间的技术都一样吗?目的一样吗?再比如推荐也有很多不同的场景,首页的推荐、店铺下的推荐、商品详情页下的推荐,这些不同场景下的推荐逻辑一样吗?用户端的意图是一样的吗?最重要的一点是这一层面的理解不是独立的,需要结合数据、模型一起来分析。在这样的场景下,在这样的数据情况下,我们需要如何设计特征和模型来提升效果呢?写几个特征、训练一下模型是简单的大部分人都会,但是基于场景结合数据、模型深度思考,推导出完整的提升逻辑则要困难得多。
最后一点是工程素养,算法工程师也是程序员,也必须要会写代码,也需要会用git、shell、linux等各种系统和工具,也需要了解基础的网络、操作系统的知识,也需要结合实际问题灵活变通思考解决方案。这些技能整合在一起,统称为工程师的素养。也就是面试环节当中的做题部分,其实考察的就是候选人的思维能力以及基本的素养。
软实力
前面说的一大通都是硬实力,硬实力很关键,但软实力同样非常重要,而且非常容易被人忽视。
那软实力有哪些呢?
我也简单总结列举了一下,第一个是问题的分析和解决能力。在实际工作当中很多问题是之前无法预料的,可能谁也没见过,这个时候需要我们完全基于实际原创一套解决方案。想要做到这一点,首先需要有一个完整的方法论,如何分析问题,从几个方面入手,如何尝试寻找解法,最后如何解决,解决了之后如何评定效果。很多人一直到问题解决都很擅长,但是到了最后评定效果的时候没有这个意识。在工作当中,我们要付出努力,也有拿到回报。
第二个是学习能力,对于算法工程师而言,我们的工作内容以及工作目标以及用到的技术非但不是一成不变,反而是变化很快的。新的模型,新的方法,新的策略层出不穷,只会闭门造成肯定是不行的,我们需要有强大的学习能力以及学习意识。需要看得懂最新的论文,撸得出最新的模型,能够进行严谨的实验和分析。别的不谈,单就说阅读纯英文论文的能力,就不是人人都有的。
最后是沟通交流的能力,在工作当中我们一定不是孤军奋战,总需要与人合作交流互通有无。能否get到别人在表达什么,能否有同理心理解别人的困难,能否正确顺利地表达自己的想法,让对方清晰地get到你。不仅如此,我们还需要和老板汇报,和外界宣讲,以及找各方合作,这些都需要强大的交流沟通能力。有的时候我们还需要说服各方或者是老板,让他们愿意为了我们服务,伴随着我们职业发展,以及层级的提升,这一块的能力会越来越重要。
尾声
写到这里,我自己回顾一下文章的内容也会有些感叹,这些条件看起来每一个都不甚苛刻,但是如果要汇聚在同一个人身上则太难太难了。但转头想想,其实也不仅是算法如此,每一行都是这样,往上走的路总是崎岖艰难的,越优秀的人本来也就是拥有更多美好品质的人。
虽然要求不低,但是最起码路径是清晰的,至少我们知道需要往哪个方向努力。所以也就没有必要多说了,开始行动努力起来吧!
好了,今天的文章就到这里,感谢阅读,喜欢的话不要忘了三连。