潍坊市论坛

注册

 

发新话题 回复该主题

每个程序员必须知道的8种数据结构 [复制链接]

1#
北京中科白癜风专治白癜风 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/

大家好,今天和大家聊聊转行的事情。

首先声明,今天这篇是一篇劝退文,想要劝一劝那些不是非常合适,或者说没有想清楚的同学。我倒不是站着说话不腰疼,而是真的觉得外界对于我们这行的看法可能有一点问题,或者说有一些误解和不了解的地方。不想有同学付出了很多努力之后,一场空或者是之后再来后悔。

一些误解

首先和大家聊聊一些误解吧,一些和大家想象当中可能不太一样的东西。

算法不等于人工智能

人工智能这个词最近火得很厉害,不管什么大小公司都号称自己是人工智能企业,各种牛X的技术吹得震天响。什么千人千面,什么自动识别、自动驾驶什么的,很多企业把之前大数据时代吹的牛改一改名字就再次拿出来用了。

我之前总是持一个观点就是现在的人工智能都是伪智能,算法并没有自我意识,它一样是完全按照程序的设定而执行。只是这个执行的过程非常复杂,以至于人们通过执行的结果无法直接得知它中间的执行步骤。很多人抬杠我说按照图灵测试的定义,这些依然叫做智能。我们先把这个争论搁置,即使这些算法的确是智能,那么能称得上人工智能的技术以及能称得上人工智能的企业也不多。

像是什么做人脸识别的,做语音识别的,这些技术和企业都不能完全算是人工智能企业。因为语音识别和人脸识别就是特定的算法,也不存在什么和人交互一说。像是我们在大公司里做推荐、搜索、广告以及NLP的工程师就更不算是人工智能了,顶多算是智能一些的算法。既不存在和用户的交互,我们也不是冲着智能这个方向去的,一切都是为了业务指标。

技术驱动是伪命题

我之前在的公司就是成天号称自己是技术驱动、数据驱动。但不客气地说,这个词在中国几乎是一个伪命题。因为技术驱动很难,并且也不挣钱。

即使是著名的达摩院这样的机构,也要承担着盈利的压力,连阿里旗下的研究机构都是如此,其他的机构更是可想而知。现在的所谓人工智能以及各种智能算法的技术,很难落地,也就是说很难找到应用场景。找不到应用场景,这个技术再牛,也没有用,因为对于公司和企业来说,它的使命是挣钱,而不是推动社会或者是技术发展,这些只是挣钱的同时带来的效果。

像是人脸识别、图像识别或者是其他一些算法,它们有什么特别能赚钱的应用场景吗?不能说没有,只能说以目前的技术能达到的效果而言,不多。

举个例子,比如什么AI看病,AI诊断。机器能达到的准确率真的能超过医生吗?以目前的算法的能力来说,置信度没办法达到非常高,准确率能有95%就算是绝顶的效果了。但对于医生来说5%的误诊率是一件很可怕的事情,这意味着多少医疗事故啊。退一万步说,即使AI达到了很高的水平,病人能相信AI的判断吗?我想大部分人肯定还是觉得有专业的医生来判断更踏实。何况医疗领域的数据非常私密,医院也是不可能愿意拿出来和企业进行分享的,所以这也是当下互联网医疗一直没有大动作的原因。

工作内容并不有趣高端

说起来做算法的或者是做人工智能的,是不是觉得工作场景很高大上,每天都钻研最新的技术,阅读最新的论文,谈笑有鸿儒,往来无白丁?

现实可能是每天都是数据、数据、数据,指标、指标、指标。

前面说了,几乎所有的技术都是为了业务服务的,如果不能带来业务上的价值,那么这个部门被裁撤的日子也就不远了。既然如此,那么我们用算法做算法,目的也都是为了带动业务的增长,也就是业务指标的提升。那么我们要做的就是想尽办法带来提升。想要提升,就得有好模型,想要有好模型离不开好数据。

不要迷信各种论文、金钥匙,只有数据才是核心。数据决定了效果的上限,模型不过是逼近这个上限罢了。数据一团糟用什么模型也不会有用。既然如此,那么我们每天要做的就是和各种枯燥的数字打交道,大量的时间花在了分析数据、清洗数据以及制作数据上。除此之外可能还有一些其他的脏活累活,并不比一般的开发轻松。

另外,对于开发而言,他们所作的事情是看得见摸得着,结果可以预期的。我做了一个功能,如果没有bug,它就是这个功能。但算法不一样,我们所有的工作都基于我们的推论之上,我们觉得这个模型或者是这份特征可能有用,但是实际情况无从预见。很有可能花了很多精力到头来一场空,所以压力并不小某种程度上反而更大。

职场现状

说起来现在算法岗位的情况,大家最容易想到的一个词就是卷。

虽然我个人的确很不喜欢内卷这个词,总觉得它被滥用了,但不得不承认这一行竞争压力的确不小。先说说校招的情况,如果是校招生,没有不错的学历背景以及比较优秀的论文,并且在这个领域内的基本功也算扎实的话,想要进入大公司是非常困难的。

因为现在跻身这行的人太多了,并且说实话在算法领域想要发一篇论文难度并不大。别的不说,就光我读过的没什么营养东拼西凑的水货论文就不少,有些还是著名学校或者是研究机构出的,其他差一些的学校的情况就更可想而知了。而且现在海归也很多,从前这些人当中大部分人都选择了移民,但目前由于疫情以及国内发展的关系,越来越多的人会选择回国,这就导致了竞争变得非常激烈,有点金融那味了。

良莠不齐带来的结果就是企业会提升对简历的要求,比如学历不好的直接筛掉,比如没有不错论文的也筛掉。这样当然会错失很多人才,但可以节约大量阅读简历以及面试的时间成本。这也是当下招聘要求水涨船高的原因。

如果是社招的话,企业一般都会希望候选人有过相关的工作经验,即使是大公司愿意招收一些高潜力但是经验薄弱的候选人。但是前提要求也是学历以及背景出色,基础扎实,并且高潜。

高潜这个词我简单翻译一下大概就是性格做事稳重踏实,学习能力强,知道自己要什么并能够不断付出努力,以及年轻。是的,年纪大了基本上就和高潜这个词无缘了。这也是我想要劝退那些30+想要转行从业的人的原因,世上不如意的事情很多,没有必要一一勉强。

人群分析

我观察了一下,对我认识的同事进行了一个简单的分析,大家可以参考借鉴一下。

在我的同事当中,90%以上学历出色。在新加坡就不用说了,新加坡国立和南洋理工的硕士居多,除了这两所还有一些其他海外的名校。以前在阿里也是一样,90%都是知名硕士,至少至少也是知名的硕士。反推过来,如果硕士毕业于知名或者是知名,那么可以推出他们的本科至少也是双一流或者是还不错的本科。

我是本科的重大,从学历上来看基本上是这个行业当中的守门员。几乎没有见过学历比我还弱的,所以如果你们最近一份学历比重大还要弱很多的话,建议谨慎。

以论文来说的话,因为国内的硕士基本上都会有论文要求,所以企业可以根据简历上的论文的水平来参考这个人的能力。除非你是国外的硕士,因为国外的很多课程硕士是不发论文的,所以论文这一项也不太好说。但有的话一定是一个加分项,没有的话有可能会扣分,尤其是国内的硕士。至少我认识的两个不错的新人都有质量不错的论文,所以我判断应该论文的分量还是挺重的。

从算法竞赛经历来说的话,有ACM背景的其实并不多,可能10%不到。所以这块的确是一个不错的加分项,实际上我本科期间的ACM队友现在从事算法方向的的确不少,有不少和我一样,没有继续读研。从目前的行情来看,的确也有不可企业越来越看重算法竞赛,比如头条、第四范式等等,所以如果你才刚刚大一的话,我还是很推荐去尝试一下acm竞赛的。

所以我们简单总结一下,第一梯队应该是本科有过acm获奖经历,硕士申请到了不错的学校,并且在学校当中有不错表现以及论文的同学。不过这些人也不多,全国一年acm银奖以上也就一千人左右,加上折损淘汰率,可能算下来全国也就几百人,非常非常少。第二梯队是名校学历+优秀论文,这种组合也很难得,我估计在从业者中最多也就30%。第三梯队是有竞赛获奖经历/大厂实习经历的优秀本科生以及学历偏弱有不错论文或者是论文偏弱学历不错的硕士,这群人构成了算法从业者的大头,中坚力量。但第三梯队的人数最多,竞争应该也是最大的,大家情况差不多的时候基本上就完全看个人能力了。

如果你现在的情况距离第三梯队还很远的话,我基本上也是持劝退态度。

一些建议

虽然这篇说是劝退文,但我知道很多人还是不会听的,尤其是年轻人往往叛逆,我也理解。所以对于那些不听劝的,我也准备了一些建议。

无论是转行的,还是即将毕业但是积累不多的,想要入行都是不容易的,一定是需要付出巨大努力的,这个心理准备一定要有。没有任何一种办法,或者是任何一个培训班,可以让你在不努力的情况下达成这一效果。

所以剩下的问题就是怎么努力,往哪里努力。

打好基础

我给出的建议是打好基础+做出亮点,算法行业的基础无非是算法+数据结构+机器学习+深度学习。这几块每一块都不小,想要从零开始啃下来非常不容易。这也是为什么acm出身的同学有优势的原因,因为他们已经熟练掌握了算法和数据结构,不仅负担更小,并且对于继续学习后续的机器学习以及深度学习也有帮助。

我个人的建议是大量刷题快速学习,大部分人学算法和数据结构都是为了应付面试。既然如此,那不如索性不用学了,直接上手刷题,在刷题的过程当中学。把学习的时间省下来把LeetCode前题刷个4遍,把里面涉及到的所有算法都学会练熟悉。这些都是机械操作,考验的就是毅力和苦功,没什么太多的技术含量,国外的留学生找工作也都是这么过来的。

机器学习和深度学习难点在于刚入门的时候,刚入门的时候什么都不懂,什么概念都是新鲜的,尤其是还会涉及很多公式推导。但实际上公式推导只涉及简单的线性代数以及矩阵运算,只是看着唬人。机器学习和深度学习里面具体的技术点也并不多,尤其是深度学习大部分都是围绕神经网络展开的各种奇淫技巧。主要难熬的是刚入门的前几个月,挺过去会好很多。

最后说说做出亮点,说到亮点很多人会想到kaggle或者是其他的一些比赛。我个人觉得这些比赛参加一两场熟悉一下,理解一下算法是怎么运作的就可以了,没有必要非要做出成绩来。因为kaggle这类比赛用到的技术以及能力和实际工作当中还是有很大差别的,并且现在这些比赛也卷得厉害。里面卷着的基本上都是一些小型的人工智能企业,他们雇一些全职的员工来刷比赛,用这些比赛的名次来证明公司的能力。所以想要单枪匹马赢过这些公司非常不容易,也需要花费大量的时间,所以我个人不是很推荐。

读论文

我觉得比较好的办法还是从论文下手,把相关业内的论文读一读,积累一点造诣。

对于刚入行的同学来说上来就读paper是一件比较痛苦的事情,第一个难点是不知道要读什么,paper这么多,每一篇都读过来显然没有精力,也没有这个必要。好在现在互联网非常发达,我们在网上找一找大牛的博客和指引,可以找到一堆readinglist。第二个难点是本身的阅读难度,毕竟是全英文,再加上又有各种公式,刚开始会比较痛苦这个是肯定的。我个人建议是先硬啃几篇下来,然后记录一下读不懂的地方,再去找一找网上中文的博客和解析来做一个对比。十来篇论文看下来,你会发现这件事情会一下子变得没有那么难了。

这里要注意,我们读论文是要摸清楚在这个领域当中的套路,而不是死板地记录论文当中的方法或者是技术。到后来当你找到自己的方法论之后,你会发现读论文变得非常快。看个摘要,再看个图例,读一些描述基本上就差不多了。到这个地步,从理论上来说已经是专家了,可能实践上还需要积累一些经验,但至少应付面试找份工作问题就不大了。

一点感受

人人都说算法好,人工智能强,其实真的也就那么回事,依然是辛苦忙碌的打工人,和其他普通程序员并没有什么高下之分。

即使现实一些从收入上来看,也并没有比前端、后端、客户端那些纯开发的程序员多。而且这个行当也不是所有人都合适,除了需要保持持续学习之外,还需要涉猎很广,除了算法本身对于后端、大数据、分布式、系统设计都需要有所了解和涉猎,难度和压力都不小。所以如果已经在互联网行业当中做上程序员了,真没多大必要非要换方向,有点吃力不讨好。能轻松一点,何必卷着呢,对吧。

好了,今天的文章就到这里,感谢大家的阅读,喜欢的话给个三连吧~

-EOF-

推荐阅读点击标题可跳转

1、Facebook工程师总结的14种算法面试模式

2、据说程序员等电梯的时候都想过调度算法,网友:还真是

3、汉诺塔问题的递归和非递归算法

分享 转发
TOP
发新话题 回复该主题