【算法工程师可以自学吗】在自学的情况下如何成为一名算法工程师?

2019-08-16
字体:
浏览:
文章简介:如果是非常喜欢算法的同学,可以直接跳过这部分看我分割线下原回答.如果是想转行or跳坑的萌新们,请认真阅读以下内容.我理解你们想转行跳坑的决心,但是我真的不建议刚刚读研的萌新和低年级学生现在转算法,因为已经来不及了,你们已经错过了最佳入坑时机.[算法工程师可以自学吗]在自学的情况下如何成为一名算法工程师?第一,从2018年秋招情况来看,目前算法岗已经爆炸,报录比例惊人,大部分人都很难找到合适的算法岗位.(可以参看知乎上有一个讨论「如何看待字节跳动招聘收到的算法工程师简历的数量远超需求?」)第二,现

如果是非常喜欢算法的同学,可以直接跳过这部分看我分割线下原回答。如果是想转行or跳坑的萌新们,请认真阅读以下内容。

我理解你们想转行跳坑的决心,但是我真的不建议刚刚读研的萌新和低年级学生现在转算法,因为已经来不及了,你们已经错过了最佳入坑时机。

【算法工程师可以自学吗】在自学的情况下如何成为一名算法工程师?

第一,从2018年秋招情况来看,目前算法岗已经爆炸,报录比例惊人,大部分人都很难找到合适的算法岗位。(可以参看知乎上有一个讨论「如何看待字节跳动招聘收到的算法工程师简历的数量远超需求?」)

第二,现在大家一窝蜂的都转行做算法,你们想想等你们毕业找工作的时候压力得有多大。

第三,往计算机方向转我不反对,因为大方向是对的,但是一定要选对小方向。其实互联网行业很多研发岗位非常缺人(测试开发、安卓ios客户端开发、java前端、大数据开发),但校招却没几个人愿意投(因为大家都在投算法岗)。而且从18年校招来看这些岗位的工资也已经追上算法岗了,头条甚至给安卓sp开出了40w年薪 三个月签字费来吸引大家投递客户端研发。

第四,最后很多想做算法的人内心os大概是这样的:「算法多高大上啊说出去也好听,我要是研究生毕业去做安卓开发,那多“掉价”啊」;「做算法不需要了解那么多枯燥的计算机基础知识,我也没功夫花大量时间去训练我的代码能力,只要数学过关就行」etc.

能。先大致说一下我的情况吧,数学系研一在读,导师是做偏微分方程的,与算法工程师毫无关系。现在在某互联网公司做机器学习岗位的算法工程师暑假实习生(导师很nice的放我出来实习hhh),所有东西完全靠自学,所以还是符合提问者的描述的。

首先说明一下,算法工程师分类很多,所以要首先明白自己想做哪个方向的(去看各大公司的岗位招聘JD,里面有详细的要求,一点一点去学习和掌握相关技术),我这里说的只是互联网行业里的常规算法工程师岗位。

1.首先是数学基础,其中最重要的是线性代数、概率论与数理统计和最优化方法这三门课。这三门课不仅仅是机器学习的基础,在公司招聘的笔试、面试环节都占有非常高的比重。

线性代数这门课,大学上的可能不够,还需加上工科研究生上的矩阵论。这里推荐清华大学老师的MOOC课程,讲得真的非常好,上完(1)(2)基本够用了:线性代数(1)(自主模式)-学堂在线-精品中文慕课(mooc)平台;工科的概率论与数理统计比较简单,看完浙大那本就够用了(对,就是考研的那本);最优化方法也不难,这里推荐李董辉的《数值最优化算法与理论》也差不多够用了。

(后注:这三门课实际上都非常高深,例如浙大那本概率论只是在黎曼可积意义下的,但很多情况不满足,这时候就需要引入测度,所以数学系上的概率论都是在实变函数和泛函分析的基础上进行的,大家有兴趣可以自行深入学习这三门课程)

2.其次是计算机基础,其中最重要的是数据结构与算法这门课。你要了解最基本的数据结构,包括数组,链表,树,图;以及常用的基本算法包括排序算法,查找算法,动态规划,贪心算法等。不能只了解理论,还需要动手独立的实现这些结构和算法,这也是对自己工程能力的锻炼。

(后注:计算机网络,组成原理等也会在笔试的时候考察,对于已经学过这些课的同学,我建议直接去刷题就好了,不用特意去复习,没有学过的还是老老实实的去学一遍吧。还有数据库这门课也比较重要,至少你要会常用的sql语句,了解sql的基本原理)

3.经过前面的课程折磨,现在终于进入了正题,那就是机器学习基础。知乎上很多人推荐吴恩达的机器学习课程,但我觉得对于大部分英语不好的人,听着听着估计都要睡着了,所以我入门的建议是跟台大李宏毅老师的课程,对入门者更友好:李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

跟完李宏毅老师的课程后有两个选择,一个是再跟吴恩达老师的课程(毕竟经典)查漏补缺,然后再看书,另一个是直接开始看书。书籍推荐的话我推荐周志华老师的《机器学习》和李航老师的《统计学习方法》。说明一下,周志华老师的书简单一点,容易入门,但是有些地方跳跃性比较大,读者如果数学基础不好可能会有点懵;李航老师的书比较偏数学化的表达,对数学要求高一些,但是推导过程很完整,读起来更流畅。

(后注:鉴于深度学习的火爆,建议在学完机器学习基础后,抽时间学习一些深度学习的内容,因为这部分的内容也经常被考察,仍然推荐李宏毅老师的课程入门:李宏毅深度学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili)

4.到这里,你终于打好了算法工程师的理论基础,然后你还需要一定的工具(这部分的学习可以和前面的一起进行)。我的建议是python必学(初学者建议安装anaconda,可以省去安装各种科学计算包时的痛苦),然后再选择JAVA或C 作为工程语言。然后再就是大数据基础,包括但不限于Hadoop,Spark,Hive等。

5.最后,你需要做的是根据自己的兴趣爱好选择一个部分深入学习。如果还没有建立兴趣爱好,那么建议你去公司的招聘网站,找相关的算法工程师岗位JD,然后再点相应的技能树。现在比较火的招聘方向有个性化推荐,计算机视觉,数据挖掘,风控及反作弊等等。

写在最后——作为算法工程师,扎实的编程能力和基础算法知识,在应对公司招聘时最重要。优秀的互联网公司笔试很看重代码能力,建议多去leetcode上刷刷题(多刷easy和middle难度的)。