2000年左右,嵌入式软件工程师拥有一套非常具体的技能。他们通常是电气工程师。实时需求。嵌入式软件工程师不仅要懂C语言等软件开发,还要懂硬件。位、字节和寄存器的世界是嵌入式软件工程师的领域。但它不再那么简单了。早期的嵌入式开发者通常使用8位或16位的架构,比较简单,所以开发者一般能在几个月的开发周期内掌握这些架构。但是近年来,很多嵌入式开发团队转向了更加复杂的32位架构,不仅包括一些数据采集的采样传??感器,以及外围通信设备,还有越来越多的各种协议,比如USB、DMA、TCP/IP、蓝牙等这些复杂的架构,或者相关的通信协议,开发者往往需要数年时间才能真正完全掌握。嵌入式系统变得复杂很明显,嵌入式系统已经变得极其复杂。将硬件设备连接到互联网以创建物联网的巨大需求在过去传统的嵌入式C语言程序开发中并没有出现。因此,这种“巨大的需求”导致了真空——相关公司找不到足够的嵌入式C语言软件开发工程师。为应对“真空”,一些公司并没有大力培养嵌入式C语言软件工程师,而是开始依靠具有Windows应用程序或移动设备程序开发经验的人员来开发他们的实时嵌入式软件。这会导致另一个更致命的问题:这些开发人员大多只了解公司分配的任务所需的高层应用框架,而对底层硬件了解不够。这样的公司不多。因此,目前单片机厂商都在努力为开发者提供高层次的软件框架和工具,而真正的硬件底层开发则由厂商完成。这使得嵌入式软件开发人员甚至应用程序开发人员更容易在更高层编写软件,他们不必再担心底层硬件,因为相关的“轮子”已经“出厂”了。相关“轮子”已经“内置”显然,这样的嵌入式程序开发模式更有利于一些嵌入式企业降低成本,加快上市时间。但我们也可能会发现,传统的关心位、字节、寄存器的嵌入式C语言和汇编软件开发工程师已经不那么重要了,可能很快就会“消亡”。未来的嵌入式软件工程师将拥有不同于传统前辈的技能。他们将不再关心硬件底层,比特、字节、寄存器,或者任务的实时性。事实上,他们可能不再关心传统嵌入式程序员需要关心的任何事情。未来的嵌入式软件工程师可能只需要具备应用程序开发技能并知道如何调用API让硬件做事。但是,他们并不知道自己为什么要这样做,也不知道API究竟是如何告诉硬件做事的,所以他们不具备实时调试硬件的技能甚至概念,也无法钻研进入寄存器。这些工程师更像是远离硬件的Windows程序员。了解底层硬件的传统嵌入式程序开发人员永远不会被“淘汰”。未来,嵌入式软件开发者不具备底层硬件开发能力未必是坏事。至少这种开发模式让一些缺乏关键技能的开发者开发团队或者公司不断壮大,这在移动设备领域就可以看到。了解底层硬件的传统嵌入式程序开发人员永远不会被“淘汰”。否则,谁又能提供API供上层应用开发者调用来控制硬件工作呢?然而,现实是传统的嵌入式程序开发人员被企业所忽视。许多高科技公司更喜欢机器视觉、机器学习和其他高级研究领域的开发人员。值得注意的是,这些顶尖人才往往对驱动硬件的“基础工作”不屑一顾。但是,如果程序员无法与硬件设备通信,那么所谓的“机器”视觉和“机器”学习又如何可能呢?
