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


  • 自我考核:审视自己写的项目代码 , 能发现并修正至少三处不符合最佳编码实践的问题 。
设计模式
在代码架构方面 , 设计模式是一个重要的话题 , 对于日常工作中出现的许多典型场景 , 给出了一些解决方案的“套路” 。 这方面最著名的书当属 GoF 的《设计模式》 , 不过个人并不十分推荐 , 尤其是以 Python 作为主要工作语言的话 , 其中很大部分的设计模式可能并不需要 。 入门可以浏览一下这个网站掌握一些基本概念:, 后续可以考虑阅读《Clean Architecture》 , 《重构》等相关数据 , 理解掌握在优化代码架构过程中思考的核心点 , 并加以运用 。 Python 相关的设计模式应用 , 还可以参考《Python in Practice》 。
  • 自我考核:在项目中 , 找到一处可以应用设计模式的地方 , 进行重构改进 。
质量保障
对于需要实际上线运行的软件工程 , 质量保障是非常重要的一个环节 , 能够确保整个产品按照期望的方式进行运作 。 在机器学习项目中 , 由于引入了数据这个因素 , 相比传统的软件测试会有更高的难度 , 也是业界还在摸索前进的方向 。 建议可以先阅读《单元测试的艺术》或《Google 软件测试之道》 , 大致理解软件测试的一些基本概念和运作方式 , 在此基础上可以进一步阅读 Martin Fowler 对于机器学习领域提出的 CD4ML 中相关的测试环节 , 学习 sklearn , LightGBM 等开源库的测试开发方式 , 掌握机器学习相关的质量保障技术能力 。
  • 自我考核:在项目中 , 实现基础的数据输入测试 , 预测输出测试 。
项目管理
软件工程推进过程中 , 项目管理相关的技能方法与工具运用也非常的关键 。 其中各种研发流程与规范 , 例如敏捷开发 , 设计评审 , 代码评审 , 版本管控 , 任务看板管理等 , 都是实际项目推进中非常重要的知识技能点 。 这方面推荐学习一本经典的软件工程教材《构建之法》 , 了解软件项目管理的方方面面 。 进一步来说广义的项目管理上的很多知识点也是后续深入学习的方向 , 可以参考极客时间上的课程《项目管理实战 20 讲》 。
  • 自我考核:在某个负责项目中运用项目管理方法 , 完成一个实际的需求评估 , 项目规划 , 设计与评审 , 开发执行 , 项目上线 , 监控维护流程 , 并对整个过程做复盘总结 。
高级话题
软件工程师在技能方向成长的一条路线就是成为软件架构师 , 在这个方向上对于技能点会有非常高的综合性要求 , 其中也有不少高级话题需要深入学习和了解 , 例如技术选型与系统架构设计 , 架构设计原则与模式 , 宽广的研发知识视野 , 高性能 , 高可用 , 可扩展性 , 安全性等等 。 有兴趣的同学可以了解一下极客时间的《从 0 开始学架构》这门课 , 逐渐培养这方面的视野与能力 。 另外如《微服务架构设计模式》还有领域驱动设计方面的一系列书籍也值得参考学习 。
  • 自我考核:设计一个算法项目 Docker 镜像自动打包系统 。
算法基础
数据分析
数学基础
在进行算法建模时 , 深入了解数据情况 , 做各类探索性分析 , 统计建模等工作非常重要 , 这方面对一些数学基础知识有一定的要求 , 例如概率论 , 统计学等 。 这方面除了经典的数学教材 , 也可以参考更程序员向的《统计思维》 , 《贝叶斯方法》 , 《程序员的数学 2》等书籍 。
  • 自我考核:理解实际项目中的数据分布情况 , 并使用统计建模手段 , 推断预测值的置信区间 。
可视化
在进行数据分析时 , 可视化是一个非常重要的手段 , 有助于我们快速理解数据情况 , 发掘数据规律 , 并排查异常点 。 对于各种不同类型的数据 , 会对应不同的可视化最佳实践 , 如选择不同的图表类型 , 板式设计 , 分析思路编排 , 人机交互方式等等 。 另一方面 , 可视化与数据报告也是我们与不同角色人群沟通数据 insights 的一个重要途径 , 需要从业务角度出发去思考可视化与沟通方式 。 这方面可以参考《Storytelling with Data》 , 《The Visual Display of Quantitative Information》等经典数据 , 同时也需要培养自己的商业背景 sense , 提升沟通能力 。