嵌入式软件工程师适合去芯片公司吗?

来自:老猿漫说(微信号:monkey-talk-view),作者:老猿

事隔一年更新此文,是想将文章写得更客观,将工作内容、发展方向进行了细化,介绍创业阶段和成熟阶段公司的优劣势,扩充了选择一份工作的参考因素和评估矩阵。希望在年底换工作的高峰期能够给朋友们提供一些参考信息,大家可以结合自身特点以及职业规划进行分析。



行业趋势


关于芯片行业的趋势,各位一定都感受得到,国内的芯片行业发展越来越迅猛,包括AI芯片、处理器、传感器、物联网芯片等,近些年发展力度逐渐增加,尤其是今年的中兴事件,让我们更加意识到芯片技术对于一个国家的影响有多大,因此国内的芯片前景肯定是越来越好,人才需求也会越来越大。



工作内容


芯片分很多种,大家也都不陌生,需要嵌入式软件工程师的芯片开发可以简单分为两类:处理器类和功能类。

处理器类囊括的很多,比如低端的STM32系列和手机上使用的高通骁龙系列或者华为的麒麟系列。功能类是指完成特殊功能的芯片,以各种传感器和通信芯片为主,如加速度传感器、温度传感器、以太网、蓝牙、WIFI等。当然也有具备专有功能的处理器芯片,比如包含深度图像识别的处理器。

芯片公司招聘嵌入式软件工程师,根据工作内容不同,大致分为三种,为了描述方便设定名称,仅在本文适用,描述以处理器为例。


芯片验证

负责芯片设计的同事在FPGA上通过Verilog等语言写好模块后,由嵌入式软件工程师,也称作firmware工程师,使用C语言写程序验证其功能。

比如:芯片设计的同事写了一个GPIO模块,那么你就需要写一段程序来验证GPIO的基本功能,设置各寄存器的值来配置输入、输出、中断、中断的各种触发方式等。 

当然,GPIO只是一个最简单的模块,通常比这复杂得多,需要根据设计者的要求验证各种参数配置和应用场景,如果验证的不全面或者不准确,等到流片后才发现,会对公司造成巨大的经济和时间损失。

要求:需要掌握一定总线知识,根据不同的模块,需要掌握不同的协议,并且通常要求掌握得较深入。

缺点:缺少自主性和创造性。

之前的文章针对这个工作流程进行了更细致的说明,一位朋友留言说描述很准确,文章最后会覆上此文链接。


驱动开发、系统移植

编写各模块的驱动程序,STM32这类MCU因为不运行较复杂的操作系统,驱动相对简单一些,近些年MCU厂商提供的驱动源码日趋健全,也就需要很多工程师来开发和维护这些驱动代码。

高端的CPU则需要移植Linux等操作系统,各模块都需要开发基于系统的驱动。 将自研CPU完整支持Linux等系统是一个十分浩大的工程,不仅仅要实现功能,还要根据芯片特点来优化性能。

部分功能型模块虽然不直接运行操作系统,但是因为供手机等设备使用,也会开发基于Linux系统的驱动,目的是缩短客户的开发周期,以获取更多的市场份额。

要求:对各种通信协议有较深入了解,通常要对操作系统非常熟悉。


产品应用

应用芯片开发面向客户的产品,芯片公司一般会提供成熟的解决方案或者是demo,使用现有芯片完成一个产品需求,复杂的可能会是一个手机,简单的可能是一个带计步器功能的手环。 这一点和大多数嵌入式软件工程师的工作相同。

要求:取决于产品的复杂程度,有可能需要对操作系统比较了解,也可能不需要了解操作系统,比较有产品思维会更好的胜任这样的工作。

工作内容大致分为以上三种类型,根据公司规模以及芯片的类型可能是以上工作完全独立,也可能是同一人或者一组人负责以上两种或者三种。 下图能够展示公司规模对于工作内容上的影响,以较复杂的处理器芯片为例。



晋升方向


下表为工程师在内部晋升的方向和对应的可能性,将三种类型的工作进行分离,不考虑重合的情况。


芯片验证

芯片研发周期较长且与常规产品项目有些不同,相对较难体现出在项目管理和新产品开发管理方面的才能,所以晋升项目经理和产品经理的可能性最低。

如果工作中涉及到很多的总线或者接口协议,那么还是比较有可能成为这方面的技术专家的,只是无法成为系统方面的专家。 如果工作中能展现一定的管理能力,有望成为职能经理。


驱动开发、系统移植

成长为技术专家和职能经理的机会更高,另外,有可能会参与到常规项目当中,所以有机会体现才能并被任命为项目经理。


产品应用

由于处在项目当中,如果有足够的管理能力,成为项目经理的可能性很大,另外,根据公司的实际情况,也有可能成为产品经理(部分公司没有严格意义上的产品经理)。 成为技术专家的可能性要看开发过程中具体用到的技术和框架等。


面试时一定要问清楚应聘的岗位是哪种类型,或者是哪种类型居多。

如果之前一直从事产品类的工作并且也想朝产品经理方向发展,那么很明显芯片验证类型的岗位就很不合适。

如果比较喜欢专心做开发且希望成为职能经理的话选择面就会更多。



选择一份工作的参考要素


与个人发展规划的匹配度

此项应该是最高优先级,公司的方向和职位定位一定要与个人发展规划高度匹配,否则一家公司哪怕前景再好,待遇再高,也建议慎重考虑(喜欢追求风口的不在此列)。毕竟如今的职场,一生只就职一家公司的可能性几乎为零,如果单纯因为待遇等方面选择了一家公司,那么几年下来表面上看是赚到了一些钱,实际上很可能损失的是事业黄金期,而那些钱也很难让你财富自由。


晋升空间

在个人能力以及岗位等条件基本相同的情况下,晋升空间主要从公司的发展阶段来考虑。

创业阶段:创业阶段的公司因为组织架构上很多职位可能都是空缺的,如果你之前是在一家各种规范流程都非常健全的大公司,自己又将其掌握得很透彻,入职后的工作中一定要将其展现出来,把握住这样的机会得到晋升的可能性会大很多。

成熟阶段:成熟的公司,组织架构一般已经完整,也有了自己的流程和企业文化,想往高层走要难得多,需要的不仅仅是突出的表现和贡献,还要等待机会,而这个机会什么时候会出现就看运气了。


风险

创业阶段:创业阶段的公司有很多不确定性因素,创业成功不仅仅取决于产品的方向,还需要很好的融资能力和经营管理能力等等。 面试时一般无法真正了解一家公司的企业文化和经营管理能力,所以主要还是应该考虑其产品方向,并且真正好的产品也会更容易融资。

不确定性最差的结果是公司几年后解散,在前面提到的与个人发展规划的匹配度在此时将体现出差异,如果匹配度高,在此期间个人已经得到必要的成长,失去的仅仅是一个机会罢了。

成熟阶段:已处于成熟阶段的公司如果不是夕阳产业,风险一般不会太大,自己也可以在成熟企业中积累流程制度等方面的知识和技能。


薪资待遇

芯片研发成本非常高,敢去做芯片的公司往往不差钱,尤其是创业公司,为了尽早推向市场,待遇一般都是市场的中上水平。

除薪水以外,创业公司往往还会用股票和期权来吸引员工,这一点我持保留态度,股票和期权应该仅仅作为选择一家公司的次要参考条件,不能让其成为主要因素。小米8年上市,而芯片开发周期长,所以芯片公司上市时间一般不会比这个时间短,像拼多多那样三年即上市的情况在芯片行业中可能性几乎为零。

上市时个人又能拿到多少股票呢?如果进入公司早,需要拼搏很多年,结果未知。如果进入公司晚,凭什么认为能够在短期内为公司创造足够的价值来获取股票呢?更何况很多时候股票是需要购买,甚至是提前购买,真正能够走到上市这一阶段的公司比例又是多少?要比倒闭的公司少得多吧。所以,如果把股票期权作为主要衡量标准的话往往是得不偿失的。当然,风险喜好者自行思考。

下表是关于公司所处阶段的多方面对比总结。



评估矩阵

以下是关于选择公司的评估矩阵,可以算出总分后进行选择

最高分就应该是你的最佳选择,同时也可以为每个项目设置权重,比如通勤时间权重可以稍低一点。

Tip之所以将通勤时间列出来是因为时间真的是太宝贵了,单程半小时和单程1.5个小时差别是巨大的,扣除每天的工作时间、睡觉时间、通勤时间,一天的时间大致如下图。

有一个说法“下班后的两个小时决定你的成就”,如果想将自己变得卓越,超越其他人,那么好好利用这段自由支配的时间就变得尤为重要。 

然而上图只是理想的状态,IT行业朝九晚六基本不可能,至少不能每天都是这样,再加上工作一天后,大脑需要一定的放松才能再有效运转,时间可能就变成了这样。

看到了吧?由于通勤方面的差异,导致最终的可支配自由时间变成了0和2的差别。哪怕下班后不想再努力,只想休闲娱乐,0和2对生活质量的影响也是很大的,最终间接影响到工作效率。

所以通勤时间要考虑吗?



结语


任何一段经历都可以是一次成长,好的环境会让一个人快速地成长,而身在糟糕的环境也不要自暴自弃,再不好的环境也能找到值得学习的地方,最起码可以将其视为反面教材警示自己不要犯同样的错误,自身得到提高后也更容易碰到和把握住机会。

一个人的成长,心智的影响力最大,在这方面感兴趣的朋友可以看看古典老师的《拆掉思维里的墙》,相信你会有收获。

推荐↓↓↓
程序猿
上一篇:如何理解JavaScript的原型和原型链? 下一篇:嵌入式软件工程师去芯片公司好吗?