如果你想往技术方向发展,应用层软件是个不错的选择,但要注意选对选好产品的方向,比如智驾域,底盘域和动力域等。
对于刚毕业的朋友,选择应用层软件开发岗位的话,通常会比其他技术岗位薪资高点,如果产品方向热门的话,发展潜力非常大。反正不管什么产品方向,从事应用层软件开发要注重几点:
1.针对产品,要注重产品的功能和应用,也要注重产品特性和性能。
产品功能与应用,首先要掌握产品的功能控制与实现,好搞透彻产品的基本组成和控制原理,就拿iBooster+ESP来说,从实物出发,搞清楚机械部件都有什么,怎么连接,传感器有哪些等。
结合原理图,了解各个功能都是怎么控制相应的执行器来实现。
这些都是基本的,个人一向比较注重,很明显地受益点就是很容易称为团队的补锅匠,哪个模块都不陌生,哪个模块都可以去接手。还有一点非常非常重要的,注重产品的应用场景或应用工况,这意味着要多去上车或台架调试,实践出真知,切记不要一开始就盯着代码或者模型看,注重上车实践,尤其是与车辆运动控制相关的产品,很多控制策略都是经过一代又一代工程师上车调试的积累,当然能够上车调试也是应用层软件工程师的日常工作乐趣点之一。个人经历了偏理论的学术思维到偏应用的工程思维的转换过程,反正当你看的糊里糊涂时,先测再看,多试多调!
产品特性和性能,这块在做应用层软件开发投入的精力有限,没有太深的体会,还有就是当时软件非常成熟,客户的需求都能达到,没出现过性能不达标的案例,有点遗憾,但是再做软件技术管理时就碰到了客户提的性能需求,这时就发现这方面的积累匮乏。当然这块首先得看机械或硬件的能力,再靠软件的发挥,所以做应用层软件也需要特别注意积累,拉开水平差异的点。
所以在产品方面,如何做应用层软件开发,可以回顾之前分享的一个图:
2.针对研发基础,包括工具链和开发流程。
对于工具链,很多工程师不太愿意花很多精力,如果我多花点精力到Simulink,可能我现在在Mathoworks卖工具了,但是没关系,况且每家公司的工具链可能都会有所差异,满足工作需要就行,个人有兴趣深究那是好。
工具链有个非常重要的点,就是与软件开发流程结合起来,能够让V流程各个阶段高效地落地。
对于开发流程,现在通常都有ASPICE,功能安全和信息安全等方面的要求,本质上以V流程为基础,左边需求,架构和设计,右边UT,IT和QT,要求不同投入有差异。而对于每个阶段,一句话概括就是:什么时候(When)谁(Who)通过哪些活动(What1)必须交付怎样(How)的东西(What2)。
这个图蛮经典
个人比较注重开发流程,做过的事情需要闭环。当然也要注重开发流程的灵活性,因环境而异,因时而异。
针对软件本身功能,如果有机会接触到底层软件和控制器硬件,有余力可以更全面地了解下列与应用层相关的软件功能。比如任务调度