毕业已经两年,这意味着从车辆工程转行做程序员已经两年。
这两年来,我从一个C语言都用不熟悉的菜鸟,一步步到现在负责软件多个模块的开发和维护。我走过很多弯路,也踩过很多坑,当然也从中不停地学习和成长。
这篇文章把我这两年走过的路,以及做出的选择回顾一下。一方面是系统的梳理一下过去,另一方面希望为纠结转行的朋友提供一些参考。
关注我公众号以及加我微信咨询转行的朋友,大多都是车辆工程专业的在读学生,他们期望从传统的汽车行业转行做自动驾驶、车联网等前沿方向。然而,这些技术与传统的车辆工程关系不大,反而是自动化、计算机等专业更加吃香。
第一年
转行第一年也是我参加工作的第一年,从学校踏入社会,最大的感受就是车规级ECU开发的流程和步骤竟如此复杂。
在学校时,我单纯的以为ECU的开发就是在单片机上写写代码,实现想要的功能即可。然而,进入公司接触到真正车规级ECU的开发,我才知道自己的想法有多么的天真和幼稚。
目前行业内,汽车ECU的开发遵循“V”模型开发,这是在学校很难接触到的。此外,代码写完、功能实现并不算是完成工作,接下来还要进行静态代码检查和动态代码检查,一是确保代码符合MISR C开发规范,二是规避单片机运行过程中因为中断和共享变量导致意想不到的bug。
很巧的是,我刚进入公司时团队有个项目正在处理静态代码和动态代码检查的问题。leader认为这种事情非常简单和低级,就分配我处理这个事情。当接到这个任务时,我内存压力巨大,毕竟我的C语言水平很差劲,甚至有些代码我都看不懂是什么意思。
任务在身,我只能顶着压力往前冲,为了在工作中好好表现,我花一个月的时间阅读了几本C语言的书籍,并且系统的学习了两个网课,至此我的C语言才算不拖工作后腿。当然,这份任务也让我提前结束了试用期,算是小小的意外之喜。
结束试用期后,我偶然听说团队中另一个项目中功能安全模块人员不足。凭着一贯的敏感,我上网搜索了功能安全的相关信息。在了解功能安全后,我唯一的想法是伴随未来汽车电气化和智能化的趋势,功能安全在开发中所占的比重将会越来越大,从中我看到了这个职业光明的发展前景。因此,我积极向leader争取希望能够承担一部分功能安全的工作。
之后我就跟着老师傅们一起负责功能安全模块,直到项目最终SOP。做功能安全的大半年,我参加了一些ISO26262的相关培训,并且通过实战和培训的结合学到了很多功能安全方面的知识。
目前,就我接受的教育和接触的朋友来说,不论是本科、硕士甚至博士朋友接触功能安全方面的人都很少。然而,整车厂现在越来越重视功能安全,这绝对是一个极好的发展方向。如果不信,去猎聘搜索“功能安全”,看看各公司开出的薪资就能明白我的意思了。
第二年
但好景不长,项目SOP后,团队并没有接新的项目。为了缓解人力资源过剩的问题,leader问我是否有意向转向车联网部门做开发。
当时leader给我两个选择:(1)基于AutoSAR架构做MCU开发;(2)基于高通平台做linux C开发。
由于我刚进公司参与的项目就是基于AutoSAR架构的MCU软件开发,我很熟悉AutoSAR架构。然而,MCU开发与硬件耦合度太高,需要软件开发人员具备扎实的硬件知识,这是我非常不喜欢的一点。
考虑到这方面,我找车联网部门的leader咨询了基于高通平台的linux C的开发情况,并且着重问了linux C开发中是否涉及很多硬件知识。
当得知车联网部门中linux C开发主要涉及计算机网络方面知识,并且涉及多线程和多进程开发,同时不需要太多硬件开发知识时,我很不争气的心动了...
此外,我自己也上网搜索了linux在嵌入式开发中的应用。linux广泛应用于消费电子产品中,而且AutoSAR也推出了新型的Adaptive AutoSAR架构,兼容linux内核。种种证据能够说明,linux系统在未来汽车电子设备中占据的比例将会越来越大。
从此,我开始了漫长的linux学习之路。由于在此之前我从未接触过linux系统,也并不懂计算机网络的知识,仅仅是一个会用C语言写代码的码农。为了能够快速,我买了书和网课,也从B站找了一些学习视频。每天在地铁上、午休、下班回家都一直在恶补工作中需要用到的知识。
那段时间很累,但在学习linux的过程中,我顺带把操作系统、计算机组成原理和计算机网络全部学习了一遍。由于长时间的积累,某一天在工作中突然顿悟了,编程语言带给我的困难不复存在了。虽说现在在工作中也时常遇到困难,但不会再像无头苍蝇一样不知所措。
学习linux一年多,我的心得是linux才是真正适合程序员学习的操作系统。学习linux的过程中,你会学到计算机原理、操作系统、编译原理和多线程多进程通信等知识。这些知识能够协助日常软件开发,同时使你能够从更高的层级来看待软件开发。
总结
如果你现在有志于转向汽车电子,并从事软件开发工作。那么我有以下建议:
1. 考取研究生(至少211)
2. 利用空闲时间,学习C语言和python(python作为工具语言,能够提升工作效率)
3. 争取找到研究方向前沿的导师,并参与到相关项目中(这决定你第一份工作的方向,重要)
4. 锻炼自己快速学习和处理问题的能力(重中之重)
5. 对软件开发有兴趣(最最重要)