上篇文章介绍了我那些传统汽车行业的朋友,文中三个例子均是从传统行业跳槽转换了职业方向,观点可能有些片面,但也能代表汽车行业一部分人的现状。
今天,我想结合朋友和我的跳槽的经历,谈谈汽车智能化浪潮下,“汽车人”的职业方向选择。
在开始今天的话题之前,先声明一下:由于本人经验和职业方向的限制,该文章的讨论范围基本限于汽车电子软件方面。
对于汽车电子软件,可以进行以下分类:
- 按照开发主体分为:嵌入式开发和单片机(MCU)开发;
- 按照底层平台分为:Linux、QNX、Andorid、OSEK(AutoSAR Classic)、ROS;
- 按照岗位分为:系统工程师、软件开发工程师、软件测试工程师、系统测试工程师。
为了更明确的选择职业方向,不可不将“汽车人”们的工作方向和技术栈,作一个大概的分析,以便大家更准确的进行参考。
那么,“汽车人”的工作方向和技术栈是怎样的呢?
软件开发工程师。汽车行业对于程序员的要求相比于互联网/IT行业低一些,他们只需了解基本的数据结构和算法,其主要编程语言是C和C++。然而,汽车行业的程序员也分为很多种,本文讲讲我最熟悉的MCU软件和嵌入式Linux软件开发。
这两种岗位对于软件开发人员的要求与互联网/IT企业不同,他们不需要具备深厚的数据结构和算法知识,也不要求掌握设计模式和软件架构等方面的专业知识。
然而,他们需要具备对于底层硬件、软件、交叉编译、驱动等方面的知识储备。
当然,如果你具备上述非强制要求的知识,固然很好,但我认为你大概不会选择进入汽车行业做程序员。
MCU开发工程师要求熟悉多种芯片,比如瑞萨和英飞凌、熟悉AutoSAR Classic、熟悉CAN与LIN通信、熟悉各种硬件,且基本只有传统零部件供应商才有招聘需求,因此很难进入各大OEM、造车新势力和明星初创公司。
由于AutoSAR Classic标准很成熟,且工具链供应商提供的符合AutoSAR标准的工具已十分成熟,因此MCU工程师基本都是AutoSAR Classic标准进行上层业务开发。
比如,购买了Vector的工具后,BSW和RTE层等全是可配置的,开发人员只需要根据需求完成上层业务开发即可。
由于AutoSAR标准仅适用于汽车行业,因此汽车行业的MCU工程师跳槽后就业方向,破圈比较困难。
另外一点,由于各零部件厂商使用MCU开发的产品基本都是成熟产品,程序员们大都是根据需求小修小改或者解决bug,从头开始进行正向研发的项目并不会太多。
相比于MCU开发,嵌入式Linux开发工程师不要求熟悉各种硬件设备,但需要熟练使用Linux、熟悉多线程和多进程、熟悉IPC通信、熟悉网络通信。另外,由于Linux内部工具众多,因此使用shell、cmake、python等做工具和构建软件等也是基本能力要求。
上述这些只是最基本的技术栈,根据产品不同,要求掌握的技术细节也会有所不同。比如,以太网通讯就需要熟悉SOMEIP和TCP/IP协议,4G通讯则需要熟悉MQTT和OPENSSL协议,做音频则可能用到ffmpeg等等。
嵌入式Linux开发工程师要求这么多,并非坏事,因为汽车行业对于嵌入式Linux的需求来自零部件供应商、传统OEM、造车新势力、智能和自动驾驶初创企业,可以这么说几乎汽车行业所有环节都有需求。
此外,互联网和IT企业对于嵌入式Linux的需求也很大,比如手机、智能手表等大量智能设备。
就我个人看来,汽车智能化的过程中对于Linux的使用会越来越多,需求也会越来越大。哪怕以后不想从事汽车行业,嵌入式Linux开发工程师跳槽到互联网和IT企业也没什么太大的难度。
当然,汽车行业程序员还包括功能安全、算法开发和软件架构等岗位,但我除了对功能安全有些经验外,另外两个岗位不太了解,就不在展开了。
为什么我不介绍功能安全岗位呢?
首先,我认为经验过于浅薄,且功能安全实在过于复杂。这个岗位应该属于MCU开发方向,因为它要求工程师不仅具备扎实的软件知识,还要具备丰富的硬件知识,对于软件开发工程师的要求过多,且工作内容极其庞杂。
如果你是经验浅薄或者转行做程序员的朋友,我建议这个岗位就不要看了,因为真的无法胜任。哪怕你是经验丰富的工程师,也要经过大量的培训才能慢慢转到这个方向。
其次,具备功能安全级别的产品一般都是成熟的产品和平台,目前我还未见过从头开发的功能安全产品,所以我就不深入介绍这个岗位了,以免误导了大家。
限于文章篇幅,本文就先介绍汽车行业中软件开发程序员的工作方向和技术栈,至于软件测试和系统相关岗位将放在后续文章中进行介绍。
ps. 欢迎关注公众号【程序猿司晨】,汽车专业野生程序员一枚,分享汽车软件技术和个人成长经历。 技术栈:嵌入式Linux、车载网络通讯协议、Adaptive Autosar...