您的位置:首页 > 职场人生

AI时代就业指南:普通程序员如何转行大数据工程师?

2019-02-12 16:22 916 查看

随着大数据的爆发,中国IT业内环境也将面临新一轮的洗牌,不仅是企业,更是从业人员转型可遇而不可求的机遇。如果将IT人士统一比作一条船上的海员,大数据就是最大的浪潮,借浪潮之势而为之,可成功从普通程序员转行成为大数据专家。

 

在美国,大数据工程师平均年薪达17.5万美元,在中国顶尖的互联网公司里,大数据工程师的薪酬比同级别的其他职位高出30%以上。DT时代来得太突然了,国内发展势头很猛,而大数据相关的人才却非常地有限,在未来若干年内都会是供不应求的状况,因此程序员们,你们的春天到了!

 

当然,专行也并非一朝一夕的事情,你需要对这个行业有一定的了解,并匹配一下自己的知识和能力结构。

1. 什么是大数据?

大数据,简单的说是一组量很大很复杂的数据集合,在这种情况下传统的数据处理方式将不再适用

 

需要强调的是:

1)并非所有的数据问题都是大数据问题;

2)大数据的很多分析方法很多理论基础是基于传统数据分析的,两者从理论基础和实践都不存在明显的界限;

3)基于传统模式下数据分析需求会逐渐下降,但是基于大数据生态下的大数据分析模式 将逐渐会需求增多,典型如以hive以及spark-sql为技术基础的大数据分析需求。

互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口。为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人。我自己整理的一份最新的大数据进阶资料和高级开发教程,大数据学习群:199加上【427】最后加上210就可以找到组织学习  欢迎进阶中和进想深入大数据的小伙伴加入。

2. 大数据有哪些职位?

大数据业务流程有4个基本环节,分别是业务理解、数据准备、数据挖掘、分析应用。在这个流程里有三个职能领域:大数据系统开发,承担整个运营系统的构建与维护、数据准备、平台与工具开发;大数据挖掘,负责关键模型应用与研究工作;大数据分析应用:既是外部需求的接入者,也是解决方案的输出者,很多时候也会承担全盘统筹的角色。

 

 

接下来,我们看相关职位划分:

 

数据分析师:

精通业务,在企业中发挥的价值在于能够利用已有的数据资料进行观测,实验,研究分析出背后的一套规律为企业进行优化决策,包含运营、产品、战略规划等职位。

数据挖掘工程师:

需要较强的编程能力,包括算法工程师、机器学习工程师、深度学习工程师等,这些职位负责建立和优化算法模型,并进行算法的工程化实施。

大数据工程师:

需要较强的编程能力,包括大数据仓库工程师、大数据运维工程师、大数据开发工程师、大数据架构师、爬虫工程师等,这些职位负责数据的收集、清洗、入库、提取、计算等工作。

其中适合普通程序员的职位是大数据工程师和数据挖掘工程师,这两个职位都需要较强的编程能力,其中后者还需要一定的数学知识。

 

普通程序员(softwareEngineer)和大数据工程师(Data Engineer)需要掌握的技能栈:

 

图中蓝色圈为普通工程师能力栈,粉色圈为数据开发工程师能力栈,绿色圈为数据科学家能力栈。需要说明的是,国外并没有数据挖掘工程师这一说法,国内的数据挖掘工程师的能力栈和本图中绿色圈相当,而数据分析师的能力栈则正好和不于粉丝圈交叉的纯绿色区域相当。

普通程序员(普通工程师)转大数据方向的职业规划路线图:

 

 

如图所示,普通程序员一般起步可以先从数据工程师(国内一般称大数据开发工程师)起步,后续可以往数据挖掘方向或者架构师方向发展。

3. 普通程序员如何转行大数据工程师?

一个常见的大数据工程师招聘需求为:

 

1. 计算机或相关专业本科及以上学历 2. 具有丰富的数据开发经验,对数据处理、数据建模、数据分析等有深刻认识和实战经验 3. 熟悉SQL,有一定的SQL性能优化经验 4. 熟练掌握Java语言,MapReduce编程,脚本语言Shell/Python/Perl之一 5. 业务理解力强,对数据、新技术敏感,对云计算、大数据技术充满热情 6. 积极乐观、诚信、有责任心;具备强烈的进取心、求知欲及团队合作精神

数据工程师属于典型的技术线,负责搭建仓库搭建、数据的存储、处理、计算处理、报表开发等。普通程序员具体需要掌握的技能和职业规划请见《AI时代就业指南-大数据职业发展与规划》。

4. 普通程序员如何转行数据挖掘工程师?

一个常见的数据挖掘工程师招聘需求通常是这样:

 

1、本科以上学历,扎实的统计学、数据挖掘、机器学习理论基础,能够利用高等数学知识推演高维数学模型。 2、熟悉聚类、分类、回归、图模型等机器学习算法,对常见的核心算法理解透彻,有实际建模经验; 3、具有扎实的计算机操作系统、数据结构等编程基础,精通至少一门编程语言例如c++/python/R; 4、深入理解Map-Reduce模型,对Hadoop、Spark、Storm等大规模数据存储与运算平台有实践经验; 5、对于推荐系统和广告系统有实践经验者优先; 6、能够积极创新, 乐于面对挑战, 负责敬业; 7、优秀的团队合作精神;诚实, 勤奋, 严谨。

 

数据挖掘工程师介于技术线和业务线之间,通常更偏技术线。他们负责通过建立模型、算法、预测等提供一些通用的解决方案,当然也有针对某业务的。

 

数据挖掘往往与机器学习离不开。比如分类、聚类、关联规则挖掘、个性化推荐、预测、神经网络、深度学习等。

数据挖掘 =业务知识 + 自然语言处理技术( NLP ) + 计算机视觉技术( CV ) + 机器学习 / 深度学习( ML/DL )

( 1 )其中业务知识具体指的是个性化推荐,计算广告,搜索,互联网金融等; NLP , CV 分别是处理文本,图像视频数据的领域技术,可以理解为是将非结构化数据提取转换成结构化数据;最后的ml/dl 技术则是属于模型学习理论;

( 2 )在选择岗位时,各个公司都没有一套标准的称呼,但是所做的事情无非 2 个大方向,一种是主要钻研某个领域的技术,比如自然语言处理工程师,计算机视觉工程师,机器学习工程师等;一种是将各种领域技术应用到业务场景中去解决业务需求,比如数据挖掘工程师,推荐系统工程师等;具体的称呼不重要,重要的是平时的工作内容;

PS :在互联网行业,数据挖掘相关技术应用比较成功的主要是推荐以及计算广告领域,而其中涉及到的数据主要也是文本,所以 NLP 技术相对来讲比较重要,至于 CV 技术主要还是在人工智能领域(无人车,人脸识别等)应用较多,本人了解有限,相关的描述会较少。

 

数据挖掘岗位需要具备的3 种基本能力

1. 工程能力

( 1 )编程基础:需要掌握一大一小两门语言,大的指 C++ 或者 Java ,小的指Python 或者 shell 脚本;需要掌握基本的数据库语言;

建议:MySQL + python + C++ ;语言只是一种工具,看看语法就好;

推荐书籍:《C++ primer plus 》

( 2 )开发平台: Linux ;

建议:掌握常见的命令,掌握 Linux 下的源码编译原理;

推荐书籍:《Linux 私房菜》

( 3 )数据结构与算法分析基础:掌握常见的数据结构以及操作(线性表,队,列,字符串,树,图等),掌握常见的计算机算法(排序算法,查找算法,动态规划,递归等);

建议:多敲代码,多上 OJ 平台刷题;

推荐书籍:《大话数据结构》《剑指 offer 》

( 4 )海量数据处理平台: Hadoop ( mr 计算模型,java 开发)或者 Spark ( rdd 计算模型, scala开发),重点推荐后者;

建议:主要是会使用,有精力的话可以看看源码了解集群调度机制之类的;

推荐书籍:《大数据 spark 企业级实战》

 

2. 算法能力

( 1 )数学基础:概率论,数理统计,线性代数,随机过程,最优化理论

建议:这些是必须要了解的,即使没法做到基础扎实,起码也要掌握每门学科的理论体系,涉及到相应知识点时通过查阅资料可以做到无障碍理解;

( 2 )机器学习 / 深度学习:掌握 常见的机器学习模型(线性回归,逻辑回归, SVM ,感知机;决策树,随机森林, GBDT , XGBoost ;贝叶斯, KNN , K-means , EM 等);掌握常见的机器学习理论(过拟合问题,交叉验证问题,模型选择问题,模型融合问题等);掌握常见的深度学习模型( CNN ,RNN 等);

建议:这里的掌握指的是能够熟悉推导公式并能知道模型的适用场景;

推荐书籍:《统计学习方法》《机器学习》《机器学习实战》《 UFLDL 》

( 3 )自然语言处理:掌握常见的方法( tf-idf , word2vec ,LDA );

 

3. 业务经验

( 1 )了解推荐以及计算广告相关知识;

推荐书籍:《推荐系统实践》《计算广告》

( 2 )通过参加数据挖掘竞赛熟悉相关业务场景,常见的比赛有 Kaggle ,阿里天池, datacastle 等。

 

5. Java 程序员如何转行做大数据?

对于Java程序员,大数据的主流平台hadoop是基于Java开发的,所以Java程序员往大数据开发方向转行从语言环境上更为顺畅,另外很多基于大数据的应用框架也是Java的,所以在很多大数据项目里掌握Java语言是有一定优势的。

当然,hadoop核心价值在于提供了分布式文件系统和分布式计算引擎,对于大部分公司而言,并不需要对这个引擎进行修改。这时候除了熟悉编程,你通常还需要学习数据处理和数据挖掘的一些知识。尤其是往数据挖掘工程师方向发展,则你需要掌握更多的算法相关的知识(具体可见第四问)

对于数据挖掘工程师而言,虽然也需要掌握编程工具,但大部分情况下是把hadoop当做平台和工具,借助这个平台和工具提供的接口使用各种脚本语言进行数据处理和数据挖掘。因此,如果你是往数据挖掘工程方向发展,那么,熟练掌握分布式编程语言如scala、spark-mllib等可能更为重要。

Java程序员转大数据工程师的学习路线图:

第一步:分布式计算框架

掌握hadoop和spark分布式计算框架,了解文件系统、消息队列和Nosql数据库,学习相关组件如hadoop、MR、spark、hive、hbase、redies、kafka等;

第二步:算法和工具

学习了解各种数据挖掘算法,如分类、聚类、关联规则、回归、决策树、神经网络等,熟练掌握一门数据挖掘编程工具:Python或者Scala。目前主流平台和框架已经提供了算法库,如hadoop上的Mahout和spark上的Mllib,你也可以从学习这些接口和脚本语言开始学习这些算法。

第三步:数学

补充数学知识:高数、概率论和线代

第四步:项目实践

1)开源项目:tensorflow:Google的开源库,已经有40000多个star,非常惊人,支持移动设备;

2)参加数据竞赛:Kaggle和国内天池数据竞赛

3)通过企业实习获取项目经验

如果你仅仅是做大数据开发和运维,则可以跳过第二步和第三步,如果你是侧重于应用已有算法进行数据挖掘,那么第三步也可以先跳过。

6. 普通程序员如何转行AI工程师?

AI,也就是人工智能,并不仅仅包括机器学习。曾经,符号与逻辑被认为是人工智能实现的关键,而如今则是基于统计的机器学习占据了主导地位。最近火热的深度学习正是机器学习中的一个子项。目前可以说,学习AI主要的是学习机器学习。

我们推荐机器学习路线是这样的,如下图:

 

 

 

这个学习路线是这样设计的:首先了解这个领域,建立起全面的视野,培养起充足的兴趣,然后开始学习机器学习的基础,这里选择一门由浅入深的课程来学习,课程最好有足够的实验能够进行实战。基础打下后,对机器学习已经有了充足的了解,可以用机器学习来解决一个实际的问题。这时还是可以把机器学习方法当作一个黑盒子来处理的。实战经验积累以后,可以考虑继续进行学习。这时候有两个选择,深度学习或者继续机器学习。

深度学习是目前最火热的机器学习方向,其中一些方法已经跟传统的机器学习不太一样,因此可以单独学习。除了深度学习以外,机器学习还包括统计学习,集成学习等实用方法。如果条件足够,可以同时学习两者,一些规律对两者是共通的。学习完后,你已经具备了较强的知识储备,可以进入较难的实战。这时候有两个选择,工业界的可以选择看开源项目,以改代码为目的来读代码;学术界的可以看特定领域的论文,为解决问题而想发论文。无论哪者,都需要知识过硬,以及较强的编码能力,因此很能考察和锻炼水平。经过这个阶段以后,可以说是踏入AI领域的门了。

坦白的说,普通程序员转机器学习并不是一件轻松的事情。机器学习却需要截然不同的思维模式。“机器学习模型不是静态代码——你需要不断为其提供数据。”正如谷歌大脑项目(Brain Residency)负责人罗伯森说,“我们一直在不停地更新模型,而且还要不断学习,增加更多数据,调整预测方式。它就像是一个有生命的东西,这是一种截然不同的开发模式。”

当然你可以通过掌握一些开源框架如TensorFlow开源项目来加快学习进度。

7. 数据分析师和数据挖掘工程师哪个工资高,哪个价值更大?

大多数情况下,薪酬只代表一个人在职场的价格,不代表他在公司的价值。找工作也要看是否合适自己,职场中拼的都是相对优势,你要想获取高收入,应该扬长避短,寻找可以发挥自己优点的行业和职位,而不是寻找什么最有价值的工作。

这两个职位在不同企业定位和分工各有不同,就平均工资而言,数据挖掘工程师>大数据工程师 >数据分析师。数据挖掘工程师需要同时掌握编程和数学知识,门槛比另外两个更高。另外不管是国内还是国外,一般写代码越多,工资越高,这个在任何一个行当都是如此,不代表数据挖掘工程师的价值更大。

 

 

 

8. 我现在转大数据晚吗?

Gartner是一家领先的市场和技术研究公司,在Gartner 2015新兴技术发展周期报告。区块链、自动驾驶汽车与物联网处在顶峰部位(左侧为关注度上升期),而大数据则关注度有所下降(右侧关注度下降期)。

 

 

 

 

许多人以此为依据,说大数据已近过时了,事实是,Gartner这张图反应的是新兴技术的发展趋势。经过10年的发展,随着区块链、人工智能等新技术的关注度提升,大数据作为一项相对成熟的技术受关注下降是自然而言的事情,或者可以说大数据已经从新兴技术的范畴而转入商用阶段。大数据技术已成为这些可能改变世界格局的12项技术中许多技术的基石,包括移动互联网、知识工作自动化、物联网、云计算、先进机器人、自动汽车、基因组学等都少不了大数据应用。

大数据不存在所谓“过热”和“虚火”的问题,未来10年甚至更长一段时间都是大数据发展的黄金阶段,相关的行业将引来巨大的发展机遇。从市场和行业趋势看,现在学习大数据正当时。

 

 

 

从年龄上看,如上图所示,仍有相当多的人即使在35岁也可以在寻找转行和继续深造的机会。人生的机会并不多,即使你已经到了30岁-35岁,对大多数人来说,只是职业生涯的前半部分,完全不必缩头缩脑患得患失。

9. Hadoop学习需要什么语言基础,会Java就行吗?

Hadoop学习其实要看你的目标是什么,对于简单的开发即在现有的已搭建好的开发框架平台上做项目开发你需要有java或者c++的一定语言功底,针对这种开发人员个人认为他就是把hadoop作为一种java的API来使用,所以只需要能够进行基本变量定义,数据传递,文件读取等能够熟练操作即可。

但是一个合格的HADOOP开发人员其实相对而言要求是较高的。首先要熟悉各种系统的操作,最少对linux和windows要熟悉,能够熟练搭建环境构建实例,成果完整运行,代码调优,服务器调优,熟悉各种中间件的特性等等,一般这种工程师具有三到五年的强势项目经验,对于java驾轻就熟,对于各系统语言熟练掌握,对已个服务器中间件等熟悉。

更好一些的是能够根据产品设计合理的系统。这种级别不用细谈一般是架构或者一些特别领域的特殊人才。否则一般是一个team共同设计完成。

 

10. 普通程序员零基础如何学hadoop?

第一步学Java基础, 或者Python;

第二步学习系统语言最少掌握LINUX;

第三步掌握一门数据库语言 ORACLE /DB2;

第四步学习SHELL编程;

第五步学习hadoop/spark生态圈,根据生态圈来学习生态圈里的基本常识 比如构建hadoop hbase和nosql编程。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: