首先需要了解嵌入式工程师岗位基本情况: 嵌入式工程师作为当前主流的开发岗之一,由于其开发的难度系数高,在薪资方面更是惹人眼红。嵌入式经验越丰富“地位”越高,薪资越高。
嵌入式软件开发具体可以分三类:
嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指Linux上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。业界对驱动人才的定义是三年才算入门,可见此门槛之高。
嵌入式系统工程师:主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。
嵌入式应用工程师:编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念,需要很强的学习能力,该职位也是各大公司需量最大的,一般10人的开发小组,驱动开发与系统开发与应用开发的比例是1:2:7。
同时嵌入式又可以分为大公司工作和小公司工作:
大公司项目分工非常细,例如职位是嵌入式驱动开发,那么大公司可能还会细分嵌入式显示屏驱动工程师、嵌入式音频驱动工程师、嵌入式电源驱动工程师等;这就是大公司一贯的作风,它希望去培养某一方面的人才;在大公司你做的东西都是很“精”的;同时,大公司的薪资水平和福利也是相当可观的,有完善的晋升路线,离职率一般不高。
小公司项目分工不明确,什么都得干,在这里人少活多,什么都得干。部分小公司不会管你是嵌入式驱动工程师还是嵌入式应用工程师是活你就得干,没学过就去学。小公司还有一个特色就是:“节奏快”,大公司里面可能开展一个项目会花上几个月的时间或者更长,在小公司是不存在的,领导都是指望着你几天或者两三周完成。但是,在小公司你可以得到飞速的进步,很强的综合性技能,前提是比人家花出更多的时间,把每一个项目理解清楚,而不是应付心态。坚持下来,两年后必能独当一面。小公司提供给应届生的薪资水平相对与到大公司来说要低,其福利不完善和晋升路线也一般比较模糊,所以小公司的离职率会比较高,经常出现两年三跳的情况。 嵌入式无论哪种语言,程序代码只是一个简单的工具,最后真正留下的只有原理、协议、框架、思维。
很多人做十年,都停留在基础层级,甚至在退化,他们公司做系统集成,他每天只需要做串口协议的解析和转发工作,换一个产品,还是做这个,而一套程序成熟后又没什么大改的地方,最多就是不同的用户要不同的功能,对协议进行一些增删而已。这种公司一般还都是大公司,慢慢的,做这个工作的工程师在某种程度上就被废掉了。同理,天天调pid,换一套系统,还在一样的。所以很多公司要求要有一个产品从零到一的过程。 在这种陷阱里似乎很舒服,但也有些危险,容易遭受年轻人的挑战,他们比你年轻、有精力,工作更拼命。作为技术人不停地跟技术难题死磕、更新知识,或许这才是对的状态,以图长久的保持市场竞争力。
随着IT技术发展的日新月异,嵌入式系统的应用越来越广泛,作为一名嵌入式工程师,更是要加强自己的技能,才能跟得上时代发展的要求,那么一个优秀的嵌入式工程师要拥有哪些能力呢?
1.熟悉基本职业技能
C语言。至少精通C语言编程,嵌入式行业是必须要用到这门语言的,而且也是主要使用语言,养成良好的编码习惯和风格,确保代码的可维护性,可移植性,可阅读性。
嵌入式软件开发的特殊性要求开发人员也要具备基本的硬件能力,对硬件基础知识,硬件设备要有所了解。
2.熟悉实时操作系统
目前产业界对于熟悉实时操作系统的工程师需求很高,也愿意提供更高的薪资水平,因此建议那些没有接触过实时操作系统的嵌入式工程师从一些较小型的系统着手,累积相关技术经验。
3.熟悉软件开发流程
软件流程带来的两个主要好处在于:a.通过不同阶段的设计开发评审验证测试,保证代码的质量;b.建立起闭环的路径,追踪需求在设计开发测试阶段的覆盖率,保存不会有遗漏。
缺乏流程上把关,直接进行编码,后期的代价是非常高的。
4.不断学习进取的能力
不管做哪一行,都要不断提升自己,不断学习新知识,新技能,挑战自我。嵌入式工程师要多扩展自己的知识领域,与其他工程师相互交流,互相帮助,共同进步。
嵌入式这一行,虽然比较难,但是前景不错,只要你认真对待,不断学习,相信会闯出另一翻天地。