我的第二份工作算是搞软件的,招聘的时候说是 软件工程师,但上班后发现,在公司里大家叫我 FW ,汉语发音为 fen wei(分位),这是相对于HW 的叫法。刚开始的时候,我一直没弄明白什么是FW?就像很多外行的人听到这个名字一样。那么 FW 到底是什么样子的职位?一个优秀的 FW工程师 应该具有什么样的品质?
FW 实际上是 FirmWare 的缩写,就像 HW 是 HardWare 的缩写一样,但是很多人都明白 HW 是硬件工程师,是每天和电路原理图、PCB板子以及电烙铁、示波器打交道的工作。在现代词典里,HardWare的解释是:硬件;FirmWare的解释是:(计算机的)固件(指存储在存储器而非软件中的指令)。由此可以理解成:在电子系统中,存储在如Flash里面的,开机后自动启动,控制电子系统以响应用户操作,也就是嵌入式软件工程师职位的一个分支。但是,这样的理解却并不是对 FW工程师 的准确表述,他们有着自己特殊处境,有着自己独特于嵌入式软件工程师的特殊点。
做一个纵向的对比以帮助我们更好理解 FW工程师。实际上,FW工程师 是夹在软件工程师(SW)和硬件工程师(HW)中间的那个职位。
软件工程师(SW)的工作是写程序产品,他们的工作就是根据系统架构完成特定模块中的特定部分的编程工作,是一种纯粹的写代码的工作。即便是底层程序开发人员,他们的编码工作也仅仅需要理解目标硬件接口的特性,只需要弄明白在什么情况下需要用控制位将硬件设定在正确的状态,就可以安心的去写他们的代码了。
硬件工程师(HW)的工作主要是把一个电路原理图,做成一个正确的硬件电路板。这中间又有更进一步的分工,电路原理图有专门的设计人员,PCB实现有专门的Layout人员,以及EMC等等,他们各司其职。普通意义上的 HW工程师 实际上就是根据电路原理图,协调Layout、EMC以及工厂方面人员,完成产品设计,主导期间出现的问题,并与FW工程师配合,完成产品设计,并编制BOM,将产品导入工厂进行批量生产。
FW工程师 就是SW和HW中间的那个角色。他们不需要编写大量的代码,因为他们的Source Code是芯片商的软件开发团队开发好的,基本上已经实现的所有的功能,他们不需要自己动手编写。所以称他们嵌入式软件工程师是十分勉强的。但他们的工作是在一个已经能够正常工作的Source Code的基础上,根据特定的需要完成一些改变(就整个Source Code来讲,这些改变实在是小的可怜)。在某种意义上,他们的工作和软件维护人员的工作差不多。他们和软件开发人员有着明显的界限,在遇到困难的时候都可以寻求软件开发人员的帮助(对于FW工程师,就是找芯片商的技术支持部门,如果其技术支持人员搞不定,他们会进一步寻求其软件开发团队的帮助);他们都需要对整个Source Code有个大概上的认识,要知道代码在运行期间的主流程,要清楚Source Code有多少模块和这些模块的作用。他们在日常工作中,常常会根据产品差异化的需求而改变OSD(On Screen Display),有时候需要对UI控制方面做比较大的手术;常常会为一个不同供应商的硬件做一些正确的初始化设定,因而要细心阅读其datasheet,确保正确控制其按预期的方式工作;常常会细心的调节个别Register的值,反复验证以得到期望的最佳效果;常常要根据HW的改动,而修给必要的GPIO通道的设定;常常为了一个Bug而苦思冥想数日,不断的反复的尝试以定位对应的代码段……
他们不需要有十分扎实的程序基础,不需要有出色的程序设计能力,不需要知道数据库,不需要知道复杂的数据结构……他们需要熟悉的就是这个Source Code使用的语言(一般是C),需要能够看懂代码,可能需要了解操作系统原理(某些Source Code的底层是多任务的嵌入式操作系统),需要能看懂常见的电路(要能够基本理解整个硬件系统的工作原理,实际就是了解HW上的信号流),需要熟练使用示波器(某些Bug的分析常常需要使用示波器分析波形)。
最为重要的是他们需要一定的理解能力,需要有比较好的想象力。他们只有比较透彻地理解整个Source Code才能迅速的定位Bug,需要通过想象来猜测被打包封装的部分代码的功能。
他们不是真正意义上的程序员,也算不上真正意义上的嵌入式软件开发人员,他们是程序员和硬件工程师中间的那个人,那个配合硬件工程师和专业的软件工程师之间的过渡体,一边是从专业程序员那里取得软件成品,再根据项目需要配合HW改造出自己需要的Firmware,烧录到Flash里面的“固件”。
如何成为一个优秀的FW工程师?优秀的FW工程师应该具有哪些品质?请关注后续文章。
FW工程师 是一个基本上可以说是个低级的职业,在薪水链条里面处于底层。那么他们的出路在哪里?在职业规划上,他们应该怎样向薪水链条的上游过度?
全部0条评论
快来发表一下你的评论吧 !