观点 | 观远数据字节:算法工程师技术路线图

《观点》是由观远数据倾力打造的一档技术类干货分享专栏,所有内容均来源于观远数据内部员工,旨在为数据分析行业输出指导性的知识体系。

本文来源于观远数据联合创始人兼首席数据科学家字节内部分享。

作者简介-周远(花名:字节)

• 观远数据联合创始人兼首席数据科学家

• 知乎机器学习领域KOL

• 致力于算法前沿技术在泛零售消费领域的应用落地,深度参与主导了多个AI项目在行业头部、世界五百强客户的应用和上线

• 曾多次带领观远AI算法团队斩获智能零售方向的Hackathon冠军

全文共13466字,阅读需要36分钟,建议根据提纲循序渐进,选择性深入阅读。过程中如发现基础部分欠缺,可以再回到前面查漏补缺,迭代前行。 算法工程师技术路线图

1.工程基础

  • 编程语言

  • 操作系统

  • 软件工程

2.算法基础

  • 数据分析

  • 机器学习基础

  • 算法框架

3.算法工程交叉

  • 大规模算法运行

  • MLOps

4.工程深入方向

  • 数据库

  • 云计算

5.算法深入方向

  • AutoML

  • 模型解释

 

工程基础

一、编程语言

1.Python

Python是算法工程师日常工作中最常用的语言,应该作为必须掌握的一门技术。大致的学习路线如下:

  • 学习掌握Python的基本语法,可以通过各类入门教程来看,个人推荐《Learn Python the Hard Way》。

   ✔️自我考核:能够读懂大多数的内部项目及一些开源项目代码的基本模块,例如pandas, sklearn等。

  • 学习Python的编程风格,建议学习观远内部的Python代码规范。

   ✔️自我考核:编写的代码符合编码规范,能够通过各类lint检查。

  • Python进阶,这方面有一本非常著名的书《Fluent Python》,深入介绍了Python内部的很多工作原理,读完之后对于各类疑难问题的理解排查,以及语言高级特性的应用方面会很有帮助。另外动态语言元编程这块,《Ruby元编程》也是一本非常值得推荐的书。

   ✔️自我考核:能够读懂一些复杂的Python项目,例如sqlalchemy中就大量使用了元编程技巧。在实际工程项目中,能够找到一些应用高级技巧的点进行实践,例如基于Cython的性能优化等。

  • 领域应用,Python的应用相当广泛,在各个领域深入下去都有很多可以学习的内容,比如Web开发,爬虫,运维工具,数据处理,机器学习等。这块主要就看大家各自的兴趣来做自由选择了,个人推荐熟悉了解一下Python web开发,测试开发相关的内容,开拓视野。

   ✔️自我考核:以Web开发和测试开发为例,尝试写一个简单的model serving http服务,并编写相应的自动化测试。

 

2.Scala/Java

Java目前是企业级开发中最常用的软件,包括在大数据领域,也是应用最广泛的语言,例如当年的Hadoop生态基本都是基于Java开发的。Scala由于其函数式编程的特性,在做数据处理方面提供了非常方便的API,也因为Spark等项目的火热,形成了一定的流行度。在进行企业级的软件开发,高性能,大规模数据处理等方面,JVM上的这两门语言有很大的实用价值,值得学习。

顺带一提,Scala本身是一门非常有意思的语言,其中函数式编程的思想与设计模式又是非常大的一块内容,对于拓宽视野,陶冶情操都是挺不错的选择。

考虑到算法工程师的工作内容属性,这边给出一个Scala的学习路线:

  • 学习掌握Scala的基本语法,开发环境配置,项目编译运行等基础知识。这里推荐Coursera上Martin Odersky的课程,《快学Scala》或《Programming in Scala》两本书也可以搭配着浏览参考。
     ✔️自我考核:能使用Scala来实现一些简单算法问题,例如DFS/BFS。或者使用Scala来处理一些日常数据工作,例如读取日志文件,提取一些关键信息等。
  • 学习使用Scala来开发Spark应用,推荐edX上的《Big Data Analytics Using Spark》或者Coursera上的《Big Data Analytics with Scala and Spark》,另外有些相关书籍也可以参考,比如《Spark快速大数据分析》等。
    ✔️自我考核:能够使用Spark的Scala API来进行大规模的数据分析及处理,完成lag feature之类的特征工程处理。
  • JVM的原理学习,Scala/Java都是JVM上运行的优秀语言,其背后是一个非常大的生态,包括在Web,Android,数据基础架构等方面有广泛的应用。JVM相比Python虚拟机,发展更加成熟,有一套非常完善的JDK工具链及衍生的各类项目,便于开发者debug,调优应用。这方面推荐学习周志明的《深入理解Java虚拟机》。
    ✔️自我考核:理解JVM GC原理,能通过JDK中相关工具或者优秀的第三方工具如arthas等,排查分析Spark数据应用的资源使用情况,GC profiling,hot method profiling等,进而进行参数优化。

计算机语言理论。Programming Language作为计算机科学的一个重要分支,包含了很多值得深入研究的主题,例如类型论,程序分析,泛型,元编程,DSL,编译原理等。这方面的很多话题,在机器学习方面也有很多实际应用,比如TVM这类工作,涉及到大量编译原理的应用,知乎大佬“蓝色”也作为这个领域的专家在从事深度学习框架相关的工作。llvm, clang作者Chris Lattner也加入Google主导了Swift for Tensorflow等工作。Scala作为一门学术范非常强的语言,拥有极佳的FP,元编程等能力支持,强大的类型系统包括自动推理,泛型等等高级语言特性,相对来说是一门非常“值得”学习的新语言,也是一个进入PL领域深入学习的"gateway drug" :) 对这个方面有兴趣的同学,可以考虑阅读《Scala函数式编程》,《冒号课堂》,以及Coursera上《Programming Languages》也是一门非常好的课程。另外只想做科普级了解的同学,也可以读一读著名的《黑客与画家》感受一下。

 

3.C/C++/Rust

当前流行的算法框架,例如TensorFlow, PyTorch, LightGBM等,底层都是基于C++为主要语言进行实现的。但是C++本身过于复杂,使用场景也比较有限制,建议只需要达到能够读懂一些基础的C++代码逻辑即可。在系统级开发领域,目前有一门新语言逐渐崛起,连续几年被StackOverflow投票评选为程序员最喜爱的语言:Rust。从设计理念和一些业界应用(例如TiKV)来看还是非常不错的,但是我也没有深入学习了解过,就不做具体推荐了。这方面建议的学习内容包括经典的《The C Programming Language》以及Rust官方的:rust-lang/rustlings.

✔️自我考核:能够读懂LightGBM里对于tweedie loss的相关定义代码。

 

二、操作系统

1.基本概念

我们所编写的算法应用,都是通过操作系统的环境运行在物理硬件之上的。在实际运作过程中,会碰到不少相关的问题,例如为什么程序报了资源不足的错误,为什么notebook在浏览器里打不开,为什么进程hang住了没有响应等等,都需要一些操作系统的知识来帮助理解和分析问题,最终排查解决。操作系统涵盖的内容比较多,建议一开始只需要了解一些主要概念(例如硬件结构,CPU调度,进程,线程,内存管理,文件系统,IO,网络等),对于整体图景有一些感觉即可。后续碰到了实际问题,可以再在各个部分深入学习展开。优秀的学习资料也有很多,基本都是大部头,重点推荐《深入理解计算机系统》,《Operating Systems: Three Easy Pieces》,以及《现代操作系统》。

✔️自我考核:能够基本明确运行一个模型训练任务过程中,底层使用到的硬件,操作系统组件,及其交互运作的方式是如何的。

 

2.Linux基

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值