及时行乐|算法工程师福利:超实用技术路线图( 二 )

  • 自我考核:以 Web 开发和测试开发为例 , 尝试写一个简单的 model serving http 服务 , 并编写相应的自动化测试 。
  • 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》也是一门非常好的课程 。 另外只想做科普级了解的同学 , 也可以读一读著名的《黑客与画家》感受一下 。
    C/C++/Rust
    当前流行的算法框架 , 例如 TensorFlow, PyTorch, LightGBM 等 , 底层都是基于 C++ 为主要语言进行实现的 。 但是 C++ 本身过于复杂 , 使用场景也比较有限制 , 建议只需要达到能够读懂一些基础的 C++ 代码逻辑即可 。 在系统级开发领域 , 目前有一门新语言逐渐崛起 , 连续几年被 StackOverflow 投票评选为程序员最喜爱的语言:Rust 。 从设计理念和一些业界应用(例如 TiKV)来看还是非常不错的 , 但是我也没有深入学习了解过 , 就不做具体推荐了 。 这方面建议的学习内容包括经典的《The C Programming Language》以及 Rust 官方的:


    推荐阅读