如何成为一名合格的自动驾驶工程师

今天跟大家分享一篇来自 Felix Friedmann 的技术博客,Felix 目前在奥迪的全资自动驾驶公司 AID感知组从事软件开发工作。我自己在锡根读完书找自动驾驶软件开发岗位工作的时候偶然读到了他在18年分享的文章 - So you want to be a self-driving car engineer?

原文链接如下:

So you want to be a self-driving car engineer?

autonomous-driving.org

我征得Felix本人的同意,将他的文章翻译到知乎,希望更多的朋友能够了解到如何成为一名合格的自动驾驶软件开发工程师。正文之前首先介绍一下我写这个的基本动机。

我很幸运当时看完 Felix 的文章并做了一系列准备后找到了目前自动驾驶软件开发的工作。我自己不是计算机软件背景的,也没有做过类似的岗位实习,这篇文章给了我很大的启发,让我了解到作为一名合格的自动驾驶软件开发的工程师,应该有哪些基础技能需要掌握,有哪些能力需要持续精进,有哪些坑不能省力必须填好。我想,在未来五年或者更长的时间里,一定会有越来越多的像我这样非计算机科班出身,只是在本科或者研究生阶段通过毕业设计或者实习接触到了自动驾驶领域的相关开发工作的同学,会在毕业后寻求这个领域的全职工作。既然他的文章在我看来覆盖得非常全面,那么就在这里分享给大家吧!

1. Solid software engineering is paramount

建造自动驾驶车辆相当于我们这个时代的登月计划。这项任务难度不亚于设计建造一个机器人驾驶员,使其在充满各种不确定性的复杂环境中为我们提供超越人类驾驶员的安全性,况且还几乎没办法预测在各种极端情况下它的同类会做出什么反应。

这种复杂度需要高质量的软件工程辅以优秀的组织能力,当在竞争如此激烈的自动驾驶领域真正尝试推进这项工作时,会发现这两方面可能都差得很远。那些搞研究用的脚本和拼接起来的代码离可靠的产品可差得远了!自动驾驶车辆中,像来自传感器,网络通信,并发等等的潜在故障源真的是不计其数,甚至时不时的系统就直接瘫痪了。为了避免在系统集成中出现这些问题,自动驾驶车辆的软件就必须为可靠性而设计。

自动驾驶车辆工程师首先得是一位专业的软件工程师,其核心职责之一就是确保高水平的软件质量。高质量的软件意味着:

  • 非常 solid 的软件设计
    • 良好定义且一致的软件架构要做到位;遵循合适的设计模式及最佳编码实践;代码要做到简洁,模块化,可重用。
  • 嵌入式软件开发
    • 小心谨慎处理内存管理,时序及并发;设计算法时要考虑到其计算复杂度与运行时间边界。
  • 测试覆盖率
    • 所有的产品代码推到 master 分支之前都要确保达到一定的测试覆盖率。每一次的代码构建都要在 CI(Continuous Integration) 中进行单元测试,冒烟测试,集成测试;从而确保代码的健壮性。
  • 软件开发实践
    • 基本的常识,如合适使用版本管理系统(是的,就是这么悲伤,这还要再提一次);分支管理 branching model;文档(C++ – e.g. doxygen
  • 11
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值