姓名:陈星月 学号:19029100022 学院:丁香2号书院
转自:https://blog.csdn.net/STCNXPARM/article/details/105037464
【嵌牛导读】本文将对嵌入式与互联网相关方面进行介绍
【嵌牛鼻子】嵌入式与互联网
【嵌牛提问】什么是嵌入式?嵌入式与人工智能的关系是什么?以及与互联网之间的对比?
【嵌牛正文】
一、什么叫嵌入式,以及与人工智能的关系?
嵌入式原本是嵌入式系统,但是由于现在电子设备众多,导致嵌入式涵盖太广,很多初学者打着嵌入式的牌子,其实只是玩玩最基础的单片机,连操作系统也不上。这和其他细分的领域做对比是没有意义的。
嵌入式原则上是ARM+Linux,在其上进行开发,需要的知识涉及C语言,操作系统等综合性知识,比如Java,c++,python都是需要的(GUI部分,这其实就是Java安卓的前身)。ps:现在很多做嵌入式的转安卓驱动(安卓是Linux发展而来,具有共性,并且安卓系统的应用越来越广泛,手机、平板、学习机、门禁机等等),嵌入式还需要了解硬件,一般从事Java开发(APP\网页)懂这个的很少,毕竟Java本身为了适合跨平台使用跑在虚拟机上(虚拟手机等硬件平台),很少会接触硬件,对底层已经不是很关注了。
人工智能其实也是个大概念,甚至可以说包含了嵌入式。最终实现的平台也是硬件平台支持。
目前的具体应用:机器视觉,指纹识别,人脸识别,视网膜识别,虹膜识别,掌纹识别,专家系统,自动规划,智能搜索,定理证明,博弈,自动程序设计,智能控制,机器人学,语言和图像理解,遗传编程等。其中近年来很火的万物互联-物联网,可以说是以嵌入式为基础,人工智能为发展的结合体。
嵌入式这个概念非常的广,几乎可以包括各行各业,从工作类型最常见的是分为嵌入式硬件工程师和嵌入式软件工程师。
二、嵌入式岗位分析
1、软硬件分类
a、嵌入式硬件工程师
嵌入式硬件工程师与我们平常所说的硬件工程师不同。嵌入式硬件工程不但要求具备硬件工程师的基本技能,还必须完成部分软件工程师的工作,例如: 底层驱动的开发嵌入式操作系统的裁剪,移植; GUI、文件系统等软件的移植; 基于嵌入式操作系统的底层驱动程序的设计等。
b、嵌入式软件工程师
嵌入式软件工程师与我们平常说的软件工程师不同。我们平常说的软件工程师大部分指的是windows 和Linux操作系统下应用软件的开发人员,硬件平台是基于PC 机的。而嵌入式软件工程师则是指在wince.linux 等嵌入式操作系统下进行用户应用软件开发的人员,硬件平台则是基于嵌入式产品的(例如: 手机、PDA 等)。软件开发工具也有所区别,嵌入式软件开发一般使用的是嵌入式系统专用的开发工具,例如wince 下的evc,和linux 下的qt 等。
c、软、硬件工程师工作性质的区别
嵌入式硬件工程师的工作是为软件工程师搭建好硬件平台和必要的开发环境。 嵌入式软件工程师则是根据用户的需要完善产品的软件功能。硬件工程师就像是设计师和建筑师,负责整个建筑的设计和建设。软件工程师则是负责房间的装修,锦上添花。
总的来说, 硬件工程师的工作性质尤为重要,因为硬件工程师在设计产品 时不但要完成产品的基本功能,还必须考虑多方面因素: 功耗、干扰、后期维修、生产安装等。一旦某一个因素考虑不周全,会造成整个产品的设计失败。
除此之外,产品在设计中可以没有软件工程师,绝不能没有硬件工程师。 因为在某些对实时性要求严格的嵌入式产品(例如: 工业产品)或者某些低性能的嵌入式产品(例如:CPU使用单片机的产品) 中,往往是不能够使用操作系统的。 这时,整个产品的设计工作则全部由硬件工程师来完成了。
2、软硬件工程师简单对比
a、嵌入式软、硬件工程帅的就业形式
软件工程师的工作性质使得软件工程师的起点较低,所以目前国内的软件工程师居多。并且目前国内的嵌入式培训都是以软件培训为主。所以从长远看,硬件工程师的就业压力要小。但是另一方面,企业中硬件开发人员需求量要比软件开发人员的需求量小。因为一旦产品定型,后期的产品升级都是由软件来完成的,硬件的更新和变动很少。
b、嵌入式软、硬件工程师的工资待遇比较
工资待遇的高低由企业所处的地域、行业、企业的性质和人员的工作岗位而定。由于每个企业的情况不同,所以工资待遇的差异很大。
对于以硬件产品为主的企业来说,硬件开发的成本高,产品的成本也高。因为后期的加工生产,维修等等都需要很大的费用。所以企业的利润较低。不过由于硬件工程师掌握着企业的命脉,所以企业会提高硬件设计人员待遇。
对于以软件产品为主的企业来说,开发的成本较低,一旦开发完成,后期的产品基本无成本。所以软件行业的利润较大。但是,由于软件工程师人员多,所以待遇也有所下降。
3、嵌入式的硬件工程师和软件工程师哪个更有前途
(1)、先从企业的角度来讲讲。我个人认为造成这个差异的原因,第一个是基本上所有的公司,从初创公司到全球百强,都有对软件工程师的需求。现在哪个公司不需要几个码农来开发app,或者做个web。但是做硬件这种工作并不是所有公司会去做的。
(2)、第二点要归功于现在的创业潮。不管在美国在中国互联网创业都是趋势,但是可以说绝大部分的初创互联网公司做的都是软件方向。有个点子,有点技术,找几个合伙人抱着电脑就能开干了。但是初创公司要专注做硬件开发就比较难了,因为成立设计硬件公司的门槛和起步开销比较大。所以这也导致大部分初创公司以互联网为主,能做的了硬件设计的公司基本上都是处于垄断地位的大企业。
(3)、第三个很重要的原因就是硬件设计。在现在来看已经是相对成熟的技术,大部分硬件的东西已经步入夕阳产业的范畴,因为很多东西已经成了规范,也因为很多东西被自动化所取代。前一阵子全球大牌的硬件公司才裁了不少人,Intel更是裁掉了接近20%的硬件工程师。但是互联网热从90年代开始到现在热头还没过,而且未来诸多产业如人工智能、机器学习、图像识别、大数据都才刚起步,所以还有一定的上升空间。
(4)、再从个人的角度来讲。想成为一名软件工程师找到工作的门槛远比成为一名合格的硬件工程师低很多。要想以软件工程师的身份混到个饭碗,学两门语言学好,常用的数据结构,刷点题就基本上能找到薪水小几千的岗位,像学朱有鹏老师课程的学生学得好都是上万的。
(5)、但是要想成为一名合格的硬件工程师,不是科班出身的不好好学几门模电数电信号逻辑设计的课,没有在学校实验室里自己焊点电路做实践,连简历都发不出去。而且现在要想学个什么语言框架,网上搜一搜“”xxx语言入门教程“”就有非常丰富的资源,但是要是在网上搜“如何学好超大规模集成电路设计”,要想找到可以受用的资源几乎是不可能的。而且就我所参加的招聘会来说,如果有招硬件工程师基本都要求有研究生的学位,但是对软件工程师的要求基本上就是熟悉算法数据结构,会web编程有相关经历就够了。
(6)、软件工程师很多时候吃的是体力,硬件工程师大部分时候是吃经验,所以硬件工程师一般得有一定的经历积淀才能脱颖而出。尤其像模电这种上手程度很高的方向,没个十年八年的相关经验根本不算学成出师。所以说本身对从业者的资质要求更高,也是硬件工程师不好找工作的原因之一。
总体来说嵌入式软件更有前途,涉及到算法更是其中的重中之重,建议可以学习数学基础,从事算法类(一般为图像/视频算法),相对硬件工程师,需求最大的肯定是高级的软件工程师,硬件平台一般都是通用的,很难突破新技术,上层软件具有更好的可塑造性,我坚信嵌入式是一个非常朝阳的行业,未来的前景非常好。
三、浅谈嵌入式开发优缺点
从事嵌入式软件开发的好处是:
a、目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触,难度高才会产生价值。
b、与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。
c、哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
从事嵌入式软件开发的缺点是:
a、入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
b、这方面的企业数量要远少于企业计算类企业。
c、有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。
d、平台依托强,换平台比较辛苦。
四、与互联网(CS相关的,如平台服务器,前端/APP/软件)对比
a、嵌入式开发学习的技能需要很多,没有两三年,是摸不透的,前期性价比以及发展自然比不上纯互联网,以至于网络上各种劝退。
b、至于薪资方面,如果是51、stm32、avr单片机等中层技术,会有天花板;如果是高层的Linux驱动、ARM处理器再到现在大热的边缘硬件加速器等技术;如果在大厂起薪大多不会比互联网的低。
c、嵌入式公司会少些,顶端的有华为、中兴、大疆、深信服、海康威视,以及现在新兴AI独角兽:地平线机器人、图森未来、商汤科技、云从科技等;而互联网公司自然是扎堆。
d、嵌入式编程语言比较狭窄,一般都是汇编、C/C++;比不上互联网的各种丰富,其次嵌入式开发中,编程量会少很多,很多时间都在找系统bug,调试各种异常,因此搬砖工作量自然比互联网的少些。
e、职业发展相对顺利,从事企业应用软件的人,工作范围广,项目变化大,日常积累很难产生质变,容易遭遇职业瓶颈,而从事嵌入式软件,所涉及的专业技术范围相对固定,时间长了会越来越有经验,所以说程序员的瓶颈大多数是因为年龄大,劳动力低下,接受日新月异的新事物能力变弱;而嵌入式,只要你注意积累,会一生享用。
f、工作强度相对较低,注意只是相对,开发自然是少不了加班熬夜,持续学习;开发企业应用软件的IT企业,这个用户的系统搞完了,又得去搞下一个用户的,而且每个用户的需求和完成时间都不同,开发人员往往疲于奔命,重复劳动;而搞嵌入式系统的公司,都有自己的产品计划,按自己的节奏行事,所开发的产品通常是通用的,不会因客户的不同而修改,一个产品型号开发完了,往往还有较长一段空闲时间进行充电和休整。