我干过前端开发、JAVA,写过C#(.NET),C/C++;目前转业至嵌入式软件中,聊一聊这二者在开发中的差异体验。
简单点说:
嵌入式开发,简单说就是硬件和软件都是定制化的。
纯软件开发,主要是给标准硬件,比如电脑啥的写软件。由于目前软件市场占有率大部分已经被大厂吃完了,所以程序员只能满足大厂的招聘要求,工作是维护、迭代、优化已知产品为主。相比十年前,现在很少有人自己带团队从零开始开发一款软件了。
嵌入式方向的学生,大部分是EE专业而非CS专业。在EE专业尤其是在二三本的EE专业,大部分就业主要往单片机方向走。嵌入式软件属于高端制造业中的一环,与纯软件有很明显的差别。电子相关专业的本专业课程以电路基础,模电数电,信号与系统,高频电路等为基石,软件方向以编程语言、数据结构、操作系统、计算机组成原理等为系统性知识结构,如果软件知识体系不过关会在实际开发中被刷掉,而电路设计大多因为学校没有很好的研究环境并且理论研究复杂大多数人学的往往也不是很深。
嵌入式开发要求掌握的内容多,但在市场中普通人干10年,最多就20~30w,和互联网差太多,而且招的人少,一个契合岗位的嵌入式工程师招人困难,嵌入式人才供不应求。据相关统计数据,我国嵌入式人才缺口大概在每年50万人左右。嵌入式系统很庞大,能适配的行业众多,有走硬件的,也有走软件的。
不过,在制造行业中嵌入式开发的薪资属于较高一档的了,但横向比较纯软件要掌握的技术更复杂、更多、薪资水平相对不具优势,企业提供的专门从事嵌入式的高薪工作岗位和互联网企业相比少太多;另一方面制造业的产品研发,立项到上线量产的周期远长于互联网企业,相应的其它福利也就少很多,而且因为项目进度压力,这些大企业的加班需求并不比互联网少,相对来说,嵌入式行业属于制造业,投资大、周期长、利润率低,与计算机软件相比性价比不高。计算机软件属于服务业,通过计算机技术嫁接到其他行业中为其他行业赋能,比如原来你在线下按摩,现在开个软件通过互联网的形式辐射流量让你的客源更广,打造品牌啥的,很多互联网公司,租个办公室,配几台电脑,拉条网线,招几个码农,就能开始干活了。做个App或者网站,马上就能上线赚钱,而且,软件产品的边际成本几乎为零,做得好了,利润率能高到离谱,因为原本就是做生意,业务没变,商业模型没变,只是鸟枪换炮拉到线上通过互联网的形式吸了更多的人进来,规模扩大了,还不需要场地建立工厂和流水线,厂家直销直接收钱,消费者只需要玩玩手机钱就进来了,相比之下,嵌入式行业的成本投入高的多。
所以,嵌入式和纯软件,其实是产业结构问题产生的差距,不是技术问题。而嵌入式需要掌握的技术远比纯软件更麻烦,但收益反而不明显。因此,性价比不高。
嵌入式系统是一种以应用为中心,以计算机技术为基础,可以适应不同应用对功能、可靠性、成本、体积、功耗等方面的要求,集可配置,可裁减的软、硬件于一体的专用计算机系统。它具有很强的灵活性,主要由嵌入式硬件平台、相关支撑硬件、嵌入式操作系统、支撑软件以及应用软件组成。<