听说你想做一个汽车软件工程师?(上)

听说你想做一个汽车软件工程师?(上)

文章最后新加入番外篇:功能安全工程师职位

---------------------------------------------------


最近有不少童鞋、特别是初入职场的朋友,向我咨询汽车软件工程师的职业发展与选择。刚好我想写一篇文章谈谈这个问题,顺便写一些自己作为软件工程师和项目主管这些年来的职场感悟,最后给出一个非常主观的选择排行

入行这些年,我阴错阳差地当过通信诊断工程师、算法工程师、需求工程师、测试经理,现在是项目负责人,带着一个美、德、印三地十来个工程师的软件工程团队。也算是有一定发言权吧。可能有些观点大家不一定赞同,就算是我抛砖引玉,还望轻拍。

另外,如果阅读数不够多的话....我会把这篇文章发到相关问题下面去...对的我就是这么不要脸。


一、汽车软件工程师的职位都有哪些啊?我应该怎么选?

首先要澄清一个错误的观念,那就是:不是只有写代码的工程师才叫软件工程师!事实上,车企(零部件企业也好、主机厂也好)的软件部门里,有一半以上的工程师是不写代码的,但是职位也叫“软件工程师”。

这里借用一张我的老帖

写工业级别代码是怎样一种体验?www.zhihu.com图标

中的软件部门组织架构图:

软件部门组织架构

一个汽车软件部门,至少要有以下几种职位:

  1. 项目组长
  2. 需求工程师
  3. 软件架构师
  4. 基础软件工程师
  5. 应用层软件工程师
  6. 系统集成工程师
  7. 测试工程师

那么对新人而言,究竟什么是好的职位呢?我觉得可以从以下几个维度来考察:

  • 能常常学到新知识(成长性):这个不说了,新人最重要的是学习
  • 学到的知识在行业里有通用性: 这样才好找下一份工作不是?
  • 职位有灵活性,容易转岗:谁也不会在一个职位上干一辈子。
  • 工作过得舒心,同事能尊重,自己有成就感
  • 在公司里有曝光度,老板、同事能看得见你的工作:升职快啊。
  • 钱多:简单粗暴。

还有一个维度是工作的稳定性,但是我个人认为这些职位的稳定性都差不太多,而且现在企业裁员都xjb裁,谁去谁留真的不好说,跟员工个人也有很大的关系。所以这个维度就不比较了。

我们现在一个一个说。

汽车软件开发流程和职位示意
  1. 项目组长:负责整个项目的总体规划、任务分配、资源整合、客户对接,定义任务优先级,在技术路线发生争执的时候做出决策,并监督整个项目的进行。用人话讲就是一个“对外忽悠客户、对内忽悠组员”的职位。

基本上在软件团队里,这个职位是最好的,但是跟职场新人也是基本上绝缘的。你不把技术、流程用几年时间理清楚,咋能出去忽悠人呢对吧。 所以这个职位新人基本上就不用关心了。

  • 成长性: 5
  • 知识通用性:5
  • 转岗灵活性:5
  • 工作成就感:5
  • 曝光度: 5
  • 工资: 5

综合评价: 5 -- 少年你还在想什么呢?

2. 需求工程师:和客户沟通软件需求,讨论确认所有技术细节,并撰写详尽的需求文档。

坦白而言,说需求工程师是一个项目最重要的职位也不为过。一份准确、清晰的需求文档是一个优秀项目的基石,而一个优秀的需求工程师团队更能够直接大幅提升整个项目的效率,甚至能引导整个项目组以最优的路径开发。需求工程师本来应该是由经验丰富的老工程师担任的。

但是呢,需求工程师同时也是一份非常枯燥的工作。平时有一半以上的时间都在写文档。如果你足够不幸, 那还得在一个叫DOORS的挨千刀的软件平台里写,可以写得你怀疑人生。

IBM 需求管理软件DOORS

技术大牛们当然是不屑于写文档的啦!所以国内外的现状就是“鸠占鹊巢”:技术大牛负责和客户沟通需求,而需求工程师们退化成了一帮“打字员”,只是记录技术大牛的讨论和设计,把它们被动地变成需求文档。

于是需求工程师往往就由新人来担任,在外企的话,甚至整体外包到印度、越南、罗马尼亚等等低工资国家去完成。由于新人或者外包团队对产品理解有限,往往写出来的需漏洞百出,于是被大牛怼简直是需求工程师的常态...总而言之这简直是软件团队里最糟糕的一个职位。

由于需求工程师不接触代码,也不接触算法细节,很难转岗到别的职位。需求工程师的成长路线往往是向系统工程师、质量工程师、安全工程师上靠,最终脱离软件部门。另外,非常优秀的需求工程师也是有机会成为项目主管的,但往往这种优秀工程师都不是一毕业就做需求出身。

  • 成长性: 4
  • 知识通用性:3
  • 转岗灵活性:3
  • 工作成就感:2
  • 曝光度: 3
  • 工资: 3

综合评价: 3 -- 短期做做挺好,别做久了!

3. 软件架构师:负责软件架构设计,明确各个软件模块之间的接口,并且负责操作系统的配置和调度。

这又是一个和新人无关的岗位。不多说了。能干这个都是技术大牛,甚至比项目主管还牛,因为毕竟不是每个搞技术的人都想去做撕逼抢资源的协调工作。

软件架构师转项目主管是理所当然的事,甚至在不少项目里,架构师本身就是项目主管的备份。架构师几乎可以转软件部门的任何职位。

架构师的常用工具软件:Enterprise Architect
  • 成长性: 5
  • 知识通用性:4
  • 转岗灵活性:5
  • 工作成就感:5
  • 曝光度: 4
  • 工资: 5

综合评价: 4.7 -- 和项目组长不相上下的选择

4. 基础软件工程师:其实基础软件工程师还可以再细分。包括软件驱动工程师通信/诊断工程师等等。驱动工程师就包括Hardware/ECU Abstraction Layer的设计和编程啊、Bootloader编写啊、AutoSAR的配置啊、内存Layout的设计啊、操作系统啊等等,范围很广。而通信诊断工程师就是字面上的意思:负责总线通信接口的配置和诊断的配置。

驱动工程师其实蛮吃香的,尤其现在AutoSAR是个热门,知识通用性很好,因为各个ECU其实驱动部分的开发都差不太多。但是底层软件跟ECU的具体功能离得蛮远,并不容易转成算法工程师。驱动的测试和软件应用层的测试差别比较大,所以也比较难转成整体软件的测试工程师或者测试经理。

另外,虽然知识通用性好,但是驱动工程师的市场需求总体来说是比较小的。因为一个ECU软硬件平台定型以后,基本上驱动部分未来3到5年都不会进行大规模开发了,而是成为一个平台解决方案,被各个项目借用,所以驱动工程师团队并不需要很大,这意味着一旦失业可能还是不如其他职位好找工作。

  • 成长性: 4
  • 知识通用性:5
  • 转岗灵活性:2
  • 工作成就感:4
  • 曝光度: 3
  • 工资: 4

综合评价: 3.7 -- 我觉得还行

通信/诊断工程师,这也是我进入汽车行业的第一个职位。怎么说呢。。。真的超级枯燥且没有成就感。这也是我在做了两年多以后选择跳槽的主要原因。通信/诊断容易上手,适合新人。市面上绝大多数车企都用的是CAN通信和UDS诊断协议。如果做德国车企项目的话,再看看FlexRay就可以了。

然而通信/诊断职位在技术上没有太大上升空间,虽然知识通用性很好,不愁找工作,但很难接触ECU的核心功能算法,算是对职业发展有一定的限制。通信/诊断工程师是可以转成测试工程师的,但是几乎不可能成为总体软件的架构师或者项目主管。

而且由于上手快,工资也不是特别有竞争力。

  • 成长性: 3
  • 知识通用性:5
  • 转岗灵活性:3
  • 工作成就感:3
  • 曝光度: 3
  • 工资: 3

综合评价: 3.4 -- 有点鸡肋啊,还是尽量转岗吧

5. 应用层软件工程师,在很多公司也被叫做算法工程师或者控制工程师。看过我以前帖子的童鞋都知道,我做过很长一段时间的转向助力算法工程师和制动系统算法工程师。我觉得这段经历是最让我获益匪浅的。

应用层软件工程师的主要工具之一:Matlab/SimuLink

应用层软件,算是ECU软件核心中的核心。无论是什么控制系统,都可以通过对应用层软件的设计获得非常深刻的理解,成长性自不必说。对于通用性而言,只要是算法工程师,招聘时候并不太关心你以前是不是做同一个ECU的,因为应用层软件都有它的相似性。但是有一点需要注意,那就是ECU的安全等级。

总体来说,高安全等级ECU (比如转向、制动、安全气囊控制器)的应用软件工程师,比低安全等级ECU(车载娱乐系统、车身控制——雨刷、车窗等等)的工程师,在找工作的时候有更大的优势。这一点我们可以后续再谈。

成就感爆棚也是应用层软件工程师的一个特点。应用层软件工程师基本上都有机会实车测试并调试自己写的算法。看着自己的算法从一行行冰冷的代码,变成能够跟驾驶员交流的实际功能,这种成就感是其他工作(哪怕是项目主管)都很难带来的。

另外,由于应用层软件工程师需要参与V型流程的全过程,基本上可以转成任何其他的岗位,转型架构师或者项目主管也是水到渠成的事。

  • 成长性: 5
  • 知识通用性:4
  • 转岗灵活性:4
  • 工作成就感:5
  • 曝光度: 4
  • 工资: 5

综合评价: 4.5 -- 对于职场小白最好的出道选择!没有之一!

6. 系统集成工程师,负责将每个工程师的软件变更正确地集成在一起,形成新的发布软件。系统集成的具体工作就涉及到SCM (Software Configuration Management) 的部分了,比如有的公司用SVN,新潮一点的公司用git , 还有的公司用一些奇奇怪怪的工具(ClearCase, AllChange...) 等等等等。一般而言,除了巨无霸公司有专职的系统集成工程师,一般这个职位是其他工程师兼任的。

ClearCase, 集成工程师要给每个模块定义好不同的分支和标签,来形成正确的最终软件

系统集成工程师工作比较枯燥,而且系统集成总是发生在软件发布周期的最后,压力超级大。由于集成工程师往往也负责一部分集成测试,所以转做测试工程师/测试经理还挺常见的。另外的职业上升途径就像需求工程师一样,转做质量或者系统工程师。除此之外,转岗并不是很容易。

集成工程师的具体工作很依赖本公司的SCM软件,所以可能在公司A你是ClearCase大神,而转到用PTC Integrity的公司B你就有点蒙圈了(虽然原理都差不多)。知识的通用性不是很好。但是集成工程师往往对软件发布的流程烂熟于心,所以说转去做质量工程师的很多。

  • 成长性: 3
  • 知识通用性:3
  • 转岗灵活性:3
  • 工作成就感:2
  • 曝光度: 2
  • 工资: 3

综合评价: 2.7 -- 这个就有点尴尬了

7. 测试工程师,要细分的话可就多了。至少可以再细分成软件在环(SIL)测试工程师和硬件在环(HIL)测试工程师。对于底层软件的测试,还有PIL(处理器在环)测试工程师。

HIL测试工程师的好伙伴:dSPACE Control Desk

至于测试工程师嘛....真的是个一言难尽的职位。

首先有经验的测试工程师对整个项目而言是非常重要的。由于“V”型开发流程的存在,测试工程师甚至能通过“评价软件需求”和“讨论测试用例”两个流程来左右软件的设计。但是呢,通过我多年的观察,测试工程师一般是处在软件开发鄙视链的下层...

SIL 测试常用软件 VectorCast

我知道知乎上的测试工程师很多啦,我这么说有点得罪人。但是我观察到的是,新人一旦入了测试工程师的坑并持续三年以上,基本上在这行里就和算法工程师、架构师、项目主管无缘了。我在几个公司的几个产品线做过,还真没听说以上的职位有哪位同事是长期测试出身。欢迎知乎的同学们提出反例。我周围搞测试的同事因为这个原因离职的不少。

转岗的话,测试工程师晋升为测试团队主管是最直接的,其他转需求工程师、质量工程师等等也比较常见。

测试工程师的知识通用性还是很好的,找工作不难,但是工资....嗯,还行吧。

  • 成长性: 3
  • 知识通用性:5
  • 转岗灵活性:2
  • 工作成就感:3
  • 曝光度: 3
  • 工资: 3

综合评价: 3.2 -- 少年你打算一辈子献身伟大的测试事业了么?


最后嘛,木城想说,如果你有选择软件部门职位的机会,那h顺序应该是:

项目组长 --> 软件架构师 --> 应用层软件工程师 --> 驱动软件工程师 --> 通信/诊断工程师 --> 测试工程师 --> 需求工程师 --> 系统集成工程师

不知道这个排名跟你心中的排名一样吗?


----------------------------------------番外篇---------------------------------------------

有同学留言或者私信让讲一讲功能安全工程师职位,下面我就来说一说这位“外卡选手”。

功能安全工程师,和质量工程师、系统工程师一样,一般是不设置在软件部门里的,但又和软件开发联系非常紧密,所以我说是一位“外卡选手”。

功能安全工程师的主要职责是确保汽车软件的开发全过程符合功能安全规范ISO26262。具体而言就是对软件的开发设定安全目标(Safety Goal), 对功能进行险象和风险分析HA/RA (Hazard Analysis / Risk Assessment) ,以及编写安全需求,编写functional safety concept,最终形成功能的Safety Case (安全包?)。

除此之外,功能安全工程师还要领导失效性分析(dFMEA),故障树分析(FTA)等等。安全工程师同时还要参与软件需求和设计的讨论。一句话,安全工程师很忙!

dFMEA工具 IQ-RM

功能安全工程师一般是由具有多年经验的其他职位的工程师转岗而来,毕业直接当安全工程师的也有,但机会很少。安全工程师一般是讨论会上说“不”的那个人,所以小白根本镇不住场子。新人做安全工程师的话,最开始的两年肯定要有老师傅带,而且会经常被人怼,不过熬过了这段时间就好了。成长性还是很高的,5分。

不同零部件的功能安全分析原理上是一样的,而且涉及到具体功能往往有相关的算法工程师协助,所以知识的通用性很好,找工作很容易。而且现在功能安全是热点,有3年以上工作经验(度过了前两年“尴尬期”)的安全工程师在市场上很吃香,不愁找不到工作。知识通用性非常高,5分。

安全工程师转岗比较难,基本上入了安全的坑就出不去了。当然,想硬转还是可以的,但是收入往往会下降。灵活性3分。

工作成就感嘛….主要就是在写文档和开会,其实成就感一般,给4分吧。

曝光度…安全工程师的曝光度那是相当的高啊,整天跟各个部门的经理、技术大拿开会,绝对是公司的明星, 5分。

工资嘛,安全工程师的工资相对还是比较高的,4分吧。

如果说需要注意的地方,那就是,小白们不要去小厂当安全工程师!安全工程师基本上没有教材可循,都是靠企业内训和师傅手把手教。去了小公司,内训一团糟,流程又混乱,可能教你的师傅自己对ISO26262的理解都不到位(这种情况非常普遍)。

比如我面试的时候喜欢问安全工程师一个很基础的问题:我们经常说"我需要一个ASIL B的信号",你能不能解释一下到底什么是ASILB的信号?这种提法有没有问题? 还真不是每位安全工程师都答得上来。

在这种环境里待几年,好的东西没学到,坏毛病学一身,以后再找工作就难了。

  • 成长性: 5
  • 知识通用性:5
  • 转岗灵活性:3
  • 工作成就感:4
  • 曝光度: 5
  • 工资: 4

综合评价: 4.3 -- 真遇到了就从了吧!



预告:

听说你想做一个汽车软件工程师(下)?:现在汽车电控部件这么多,我该做哪个部件的开发工作?

编辑于 2019-12-04