“嵌入式软件工程师”,我现在越发讨厌既笼统又讨巧的称呼。笼统是指它没有明确任务,讨巧是挂着嵌入式难道就不是码农? 嵌入式软件工程师实际上是个行业称呼:专指在嵌入式平台开发软件的软件工程师,实际上还是软件工程师。嵌入式平台恐怕是软件领域开发平台里最令人开发者头痛的,因为平台不统一、不标准、易跟着需求变化。反观PC、服务器端的软件工程师则舒服多了,平台固定主要工作就是软件基本不需要接触平台里的硬件。嵌入式软件工程师大体可以分为驱动工程师(所谓的系统工程师实际上大部分工作就是写驱动而已,或者多个API)和应用工程师。当然很多人会说算法工程师什么的,那些基本和平台无关的就不要是说了,因为你的算法在PC端的Matlab实现了,用C预言写好了不过是应用层的一个调用包而已。 实际上最令广大嵌入式软件工程师困惑的就是驱动工程师,因为这个职位太难做了。要掌握的知识多,要应付的人也多,但在软件领域又是对软件本行了解不多的人(大数据、人工智能基本无缘了吧)。随着电子硬件的持续发展,电子硬件在软件领域的发展经历了:控制——计算——人工智能的例程。当前能运行人工智能算法和应用的平台应为功耗和体积问题,大部分为固定的PC或大型服务器。但就像ARM等硬件IC公司在智能手机发端初期研发出成本较低的终端芯片,在人工智能领域的AI芯片也处于发端阶段。 当前嵌入式行业的开发人员大部分处于应用开发层,基于平台设计硬件和软件极度依赖基础供应商。比如智能手机硬件平台、安卓软件平台等给嵌入式行业里的手机领域带来近10多年的黄金发展期。目前AI芯片也正处于这种阶段,当前的硬件和软件基础都在建立,及其类似2008年前后的智能手机领域。 嵌入式行业大体可分为硬件和软件,硬件领域随着IC供应商的持续发力,硬件工程师可发挥的余地与他们的前辈相比大不如前,当然他们所面临的问题和需求也可能比他们的前辈多。而在嵌入式软件领域,当我们拿起2008年前后出版的书比如嵌入式linux,依旧觉得可以拿来即用。但这在互联网或游戏行业是不可想象的,因此可以说嵌入式软件的发展比它所在的软件行业的其他兄弟们要差一点。应为嵌入式软件领域的平台发展很慢,但如果我们把眼光放大将智能手机等2008年以后出现的移动终端放进嵌入式领域,将会发现这不正是嵌入式软件领域的极大发展吗? 因此嵌入式软件领域大量的需求不在平台构建(硬件和软件),而是在基础供应商比较完善的前提下做应用软件。随意对于很多公司而言能构建一个平台和生态系统能攫取整个行业的大部分利润,但对于大多数公司而言基于平台开发应用才是生存之道。 只做应用不做平台是嵌入式领域软件工程师都很想的出路,但是如此不过是与其他平台调用的API不同罢了。驱动工程师依旧是嵌入式软件行业需要的人才,即使人数少职业难度大。所以有志于做底层喜欢硬件的人可以尝试,至于专业想做码农的人还是关注应用层吧。