嵌入式开发和web开发,未来10到20年,哪个的前景更好呢?
扫描二维码
随时随地手机看文章
近期,知乎这个问题引起了21ic家的注意。题主表示:“计算机专业大二学生,大三要分流,目前对web开发和嵌入式系统开发两个方向比较有兴趣,也在知乎上看了类似的提问,但没有让我比较满意的回答,喜欢哪个就选哪个这种回答有点幼稚,所以只想了解一下这两个方向的前景,看看哪个更好一些。”
接下来就引用一些网友精彩观点,供同样有这样疑问的同学进行参考。
作者:注销用户
web开发在我看来技术门槛较低,不过看问题的意思应该是所指范围更宽的互联网行业。
如果说过两年就 本科毕业找工作,从薪资水平看互联网行业平均会优于嵌入式行业。
从行业的发展看,这两个行业我都看好。
因本人从事的是嵌入式行业,互联网行业的工作内容并不了解,所以也就不妄自揣测,仅从嵌入式 行业做一些介绍。
嵌入式其实包括的范围很广,从小到8位的单片机到堪比PC性能的手机SoC,都可以归入嵌入式,开发这些芯片的驱动是嵌入式,在这些MCU/SoC跑的操作系统和基础应用也是嵌入式,在此基础上运行的业务应用也是嵌入式(手机APP等如果不算其中也无所谓)。
嵌入式行业需要软硬结合。
嵌入式软件开发经常会有需要与硬件开发人员一起调试的时候。一个片上系统能不能正常跑起来,需要软件开发者能看懂硬件原理图,能熟悉和了解常用的硬件接口,能看懂芯片和一些器件的规格书。有可能,你需要了解SPI Flash或者NandFlash的接口和内部操作逻辑;也有可能在处理音频接口时要懂I2S的通讯协议;或者,外接一颗诸如什么传感器时,你需要熟知I2C或者SPI接口的时序;又或者接一个LCD时出了问题,需要知道同步信号怎么去量测。
嵌入式行业需要基础扎实。
嵌入式行业用到的MCU或者SoC,有可能是运行Android这种大型系统,或者是嵌入式Linux,也有更小的实时系统如VxWorks QNX eCOS ucOS NuttX FreeRTOS等等,有的还需要直面一片荒原,没有任何OS。
在没有OS的单片机MCU等环境,有可能需要熟知每一行代码耗费的指令,需要谨慎的处理中断等异步逻辑,有时候没有动态分配内存,只有几十K或者百来K的RAM,没有太多的空间给你的代码去挥霍。
有的运行小型的RTOS,你要根据具体情况分配好抢占式的任务或者分时的任务,了解这些任务切换背后带来的时序和逻辑上面的开销。
在Linux上面,SoC资源是更丰富了,但有可能你需要去裁剪内核,或者添加相应的驱动。然后,你需要熟知Linux系统从内核到系统调用,再到GNU的工具链,才能很好的在嵌入式Linux上做应用。
因此,当遇到上面的情况个人需要进一步深入时,需要操作系统和体系结构等计算机基础知识扎实。
嵌入式行业需要相关应用背景比较深
大部分情况下,嵌入式行业不需要太多代码上的技巧,甚至代码量也不会太大,但需要对相关应用的深入了解。
做多媒体相关的工作,你可能需要了解H264/265的编解码;做音视频传输,有可能要熟悉RTSP协议,G.711和G.729协议。如果做物联网,又有可能要熟悉BLE、WiFi相关背景知识,或者是MQTT协议。做影像处理,又有可能要了解3A,图像处理的相关算法。因为嵌入式行业面对的需求和所应用的芯片不同,经常需要在原有的基础上做二次开发,或者是从无到有的去搭建整个平台。那么,能不能了解和熟知你从事的应用的背景知识就极为重要。
从行业的发展来看,我个人观点是互联网也好,嵌入式也好,都会成为一个基础设施的行业在。嵌入式行业火的那些年,华为这类公司也像今天的BAT一样,以高出行业平均一截的工资招揽人才。当下这几年,互联网行业的平均收入确实是优于嵌入式行业。但在我看来,无论是中国制造2025,工业4.0,还是大数据智慧城市等等,都离不开互联网和嵌入式两者的结合发力。
以当下热门的大数据来说,互联网的背景无需多说,数据的采集不需要嵌入式设备的参与吗?最近热炒的新零售,不需要嵌入式影像设备吗?工业机器人也好,家庭机器人也好,纯粹是互联网的事情吗?里面有多少传感器?要不要本地的实时建模?
以人脸检测或者识别来说,为什么会说识别速度慢,芯片有没有硬件加速?有没有GPU,有没有DSP?要连上网络查询数据库吗?好的,数据库的比对是纯照片吗?还是提取人脸特征?人脸特征提取要不要嵌入式设备去做?不同光照条件要不要3A算法去处理?要不要做高动态?
是不是活人要不要红外检测?嗯,还有时下热门的3D结构光建模。这样,一个简单的应用,从图像采集,到图像处理,再到图像算法,然后是传输,还有控制,有可能涉及到多颗嵌入式芯片的参与。那么,它的背后也涉及了多个公司多个团队的协作。
我想说,不论是做互联网行业还是嵌入式行业,在大学时期的基本功一定要学扎实。虽然我没有从事互联网行业,但我相信这个行业深入下去也一定需要扎实的基础知识和行业应用背景知识的储备。不是程序设计语言不重要,而是操作系统,体系结构,数据结构,乃至高等数学,这些大学的基础课程,都是你深入这个行业必须的。如果说一个培训班几个月培训出来就能做的事情,也不必去抢着做。毕竟,读大学干嘛的?
最后,这两个行业如何选择,考虑下自己的兴趣爱好,考虑下将要去往的城市,决定还是自己去做的好。
作者:VizXu
我算是做嵌入式的,姑且过来谈一谈自己的想法。
web开发我不甚了解,所以这里只讲嵌入式相关的内容。
一、嵌入式学习曲线
嵌入式所涉及的内容相当之广,由此导致学习曲线陡峭,学习成本很高,但是回报率却不见得很高,至于为什么会这样,下文会有分析。这里先讨论一下学习曲线问题。我想从语言、操作系统、版本控制系统、编译系统、和技术栈这五个方面讲解:
语言:
C无疑是最基本的,如果你搞驱动那么还需要对汇编有所了解,虽然可以不那么熟练,但是需要对照datasheet知道如何实现硬件和软件交互,其实就是各种倒腾寄存器。按道理如果只和内核打交道事实上C++都可以不掌握,但是只要涉及到Framework的东西C++是肯定需要的,因为硬件抽象层全是C++写的,本着技多不压身的原则,这里默认C++也是要掌握的。
那C/C++掌握到何种地步才能说算是可以上手了呢?这是个我现在也没想清楚的问题,但是网上90%的人说自己精通C/C++都是可以呵呵的,因为以前我也这么认为,但是现在我不这么认为了,事实上掌握语法本身和掌握语言是不一样的,比方我说我掌握了8000个英语词汇,但是我碰到美国人可能连一句话都说不出来,这也可以类比计算机语言。所以我觉得能不能上手,不在于你语言掌握地如何,按照我本人的经验就是多实践。不懂就上网搜索,能翻墙就直接google,我想如果只是语言上的问题,网上能给你解决99%,剩下的自己摸索。
工作中如果涉及上层或者图形界面之类的,那你还需要掌握相应的语言或者框架比如Qt、python等。我感觉要是有C/C++作基础,这些知识都不难掌握。
至于说java、js、css、html啥的,要是碰到了就学习一下吧,但是我估计嵌入式本身是不太会涉及这些语言的,除非小公司啥都你一个人搞。
操作系统:
虽然嵌入式操作系统我本人知道的就有Linux、vxworks、mips、wince、QNX,事实上还有很多其它的系统。但目前来看linux仍然是主流,所以linux肯定要掌握。Linux真正流行起来并做大,很大原因要归功于Android系统及其移动设备端的流行。想想当年symbian统治手机操作系统的时候,Linux那时还是个小吊丝。Google看上Linux并把它作为Android系统的内核,我想无非出于两点,一是开源,社区参与开发人员多;二是Linux性能确实不错。如何深入理解并掌握linux?我本人的经验是,首先买一本linux内核的书,认真看一篇,对它的各个模块有一个比较清晰的认识,比方内存管理,io,进程管理,中断、文件系统,网络等,知道内核空间是怎么运行的,与用户空间是怎么通信的等等。然后下载一份linux内核代码,先自己尝试编译一下,然后尝试对各个模块进行裁剪,烧写到目标机上跑一跑看看效果,对比一下变化,这样我想会理解的更深入。
版本控制:
这个取决于公司。我git和svn都用过,个人感觉git更强大一点。一般用svn的大部分是历史遗留。这个就不多说了,具体网上搜索一下,看看menupage就好了。不过我还是要多说一句,这个.gitignore实在是太坑爹了。
编译系统:
不同公司会有所不同,如果是odm做Android手机的厂商,都是用google自家的编译系统,就是我们常说的Android编译三部曲(source,lunch和make),如果是其它公司的话可能会有基于shell或者python的自定义的编译系统,其实底层也是调用Makefile。
技术栈:
因为现在自己负责的是我们产品的整个系统的开发,包括底层的和上层的代码基本上都是要涉及到的,所以我感觉技术栈还算是比较宽。如果是linux内核开发,那么以下技术是应该掌握的: 硬件架构,片上系统,boot,软硬件裁剪和定制,内核编译烧写,驱动开发,功耗分析,协议i2c、spi、uart还有usb等。如果是涉及上层,那么需要掌握的技术: 进程间通信,多线程开发,信号量和锁,图形界面,网络以及网络协议等。
二、就业前景
从资本流来看,嵌入式行业的资本是净流出的,换句话说在走下坡路了,嵌入式曾经也火过一阵,大概是零几年的时候,那时候物联网概念刚提出来,嵌入式作为其重要载体,一下子也可以说炙手可热了,但是随着时间推移,发现要实现万物皆联的目标还很远,加上后来人工智能大数据区块链概念的崛起,人们也逐渐淡忘了嵌入式。目前做嵌入式的公司一般都是做手机,pos机,扫地机器人啥的,说到底还是需要卖硬件产品,而这种产品生产成本也不低,而且还不好卖,这就直接导致这行赚不到啥钱。我曾问过我单位一个资深工程师为啥微软不想做客户机,回答毛利太低,一台300美金的客户机能赚90美金就已经很不错了,这还是整个客户机市场就那么几个寡头厂商在做的情况下取得的成绩。所以相比现在火到不行的人工智能、区块链行业来说那只能用人比人气死人来形容了。
从稳定性来看,一般做嵌入式比较稳定,毕竟一来硬件这东西用几年也得换,二来做这行的很少有创业型公司,像我们这样的产品全世界也就那么几家公司在生产,完全没必要担心受到新玩家的冲击,加上有很成熟的产业链,可以说整体是相当稳定的,当然你说公务员那更稳定,我也没法反驳。再者学习成本很高,不能像网站开发那样上几个月的培训就能上手,所以进入围城之类的人才也少,大部分是要不经验丰富的老员工,他们已经不太好转行了,要不就是我这样的稀里糊涂入坑的,总之这一行就别想发大财啦。
三、未来趋势
做嵌入式路比较窄,学习成本不小,还比较孤独。当然这里说的孤独是指很少有人和你探讨,很多问题都需要你自己一步步解决,因为这一行就那么一小撮人在做。 但是你说嵌入式会不会没落?我想肯定不会的,而且我估计在某个时机成熟时可能还要火一把,但是我不知道是啥时候,这个只是个人感觉,玄幻。
不过我个人是觉得技术这东西看个人兴趣,不是说做嵌入式就一定一条路走到黑。学好了c/c++以及底层的知识,其它语言和技术其实很好学。我本人现在也在自学人工智能,所以路还是要自己走出来。
以上,祝好。
作者:kaiyuantian
作为一个嵌入式转web的过来人,对我来说。
首先工作方便,嵌入式要带一大堆东西,web一台电脑ok了。
其次一个很现实的问题,web起步工资比嵌入式高的多。
工作做产出web要快的多,而且你的工作95%的时间都是集中在核心任务上的,嵌入式不是有时搭个环境一天就过去了,当然如果熟练,并且经验丰富的话这些还好。
学习曲线,嵌入式要高很多,web上手比较快,但是嵌入式也相对比较稳定,更新换代比较慢,web则相反,当然掌握了本质就很容易了。
至于前景吗,嵌入式 + web =物联网 嵌入式就是物,web就是网。
当前比较热门的大数据,人工智能,都是web方面的,当然人工智能也有嵌入式的,不过也离不开网。
公司方面,嵌入式很传统人,员流动小(个人经历),web方面就比较开放,人员流动大。
如果你关心到10,20年以后,我建议你都学。从嵌入式开始 到web比较容易,如果反过来就比较难了。好好学linux,c/c++打好基础。然后在向其他方向发展。
web开发其实也有很多分支,大方向有客户端,服务端。建议你从服务端开始。语言选择建议nodejs或python,前者依托JavaScript可以前后端通吃。并且api与linux系统aip很像上手比较容易。python呢与c/c++无缝连接。
最后想说,其实我觉得你关心的太远了。10后会发生什么谁都不知道,尤其互联网行业,发展变化非常快。踏实做好眼前是就是最好的
作者:阏男秀
这位同学很有想法啊,「喜欢哪个就选哪个」的确太随性了。下面就以我个人经历和观察分享点看法,供题主和有相同处境的同学参考。
国内现状
假设你面临毕业需要找工作,现在有华为、格力、海康威视和百度、腾讯、阿里巴巴这几家让你选,你会选哪一个?——如果是我,我基本会毫不犹豫地在后三者中继续选择。 前面三个,不敢说是行业顶尖,但也基本是国内做嵌入式比较知名的公司。
- 华为不用多说了吧?通信解决方案供应商,其家的华为手机,在街上随便拉一个人问至少也应该知道。电子通信类的学生,大多数人就是以华为为目标。
- 格力,白色家电的代表,与之同期还有美的、海尔等等。家电产品算是嵌入式领域一个大分支。
- 海康威视,主打视频监控产品,我们公司接过一个方案集成项目,客户指定就要海康威视的产品作为视频监控。
- 百度,知名于搜索引擎,还有各种衍生产品,贴吧、网盘、地图、翻译等等;
- 阿里巴巴,主打线上交易和支付,常用的淘宝和支付宝便是属于其家;
- 腾讯则是通讯产品和游戏,微信、QQ等等等。
先不谈个人,要看嵌入式和Web这两门技术前景如何,观察相关大企业发展情况就可以略知一二了。当然了,嵌入式技术本身还是需要结合具体领域和应用场景,基本上各行各业都有:手机、机顶盒、路由器、车载系统、还有工业和农业领域的各种嵌入式设备等等。唯一不变的是:嵌入式技术做出来的肯定是软硬件结合的产品!
但是呢,我们国内的电子硬件行业并不太乐观,芯片和技术非常依赖国外进口,有条新闻可以窥斑见豹:美国封杀中兴、华为事件。
唇亡齿寒,嵌入式硬件是载体,嵌入式软件是灵魂;载体没了,灵魂也自然消亡了。
而Web技术,是搭建一个知名互联网平台的必须条件。除了前面提到的百度和阿里巴巴,还有近期出现的打车平台(滴滴打车),外卖平台(美团、饿了么),共享单车(摩拜、OFO),而且知乎(问答平台)这里本身也是属于Web领域而非嵌入式领域。
共享单车这里我重点说一下,我认为共享单车无论是在技术上,还是在运营和使用理念上,是一款很经典的物联网产品了。看看智能家居领域做了十几年,也没有一款能进入千万家的革命性产品?
只不过,我们国内似乎还没有很多这样厉害的物联网企业。我目前能想到比较知名的只有摩拜和小米,还有一家做共享车位锁的公司(利益相关:用他们的主板二次开发过GPRS车位锁,项目已卒)。
当然了,除了互联网企业,还有一些是属于传统软件行业的,主要是面向各行各业的信息管理系统(内容管理系统CMS),或者一些办公自动化(OA),在线审批系统等等。这里不是很了解就不多写了。
技术发展
Web技术和嵌入式技术,真的是一个在天飞,一个在地上跑! Web技术有开源理念,不怕找不到学习资料和社区,每个框架都应该有完善的文档,如果想深入框架具体细节,可以,自己去阅读源码或看看前人是否有贡献。前端发展迅速飞快甚至有人发出「求不要等新了,已经学不动了」的感慨。而后端技术相对缓慢,不过框架和语言特性也可以逐年大更新。
反面教材,切勿模仿!
嵌入式技术,不好意思我们产品资料对外保密不开放,卒。开玩笑的,其实最近也有硬件逐步开源了,但整个行业内还是处于保守封闭的状态,发展相对互联网比较缓慢。
我二次开发过一款Android门禁打卡机,其Android系统还是4.0,然后我旁边的前端吐槽说那用nodejs框架可能会有点兼容性问题。用是能用,不过我后来找到一款免费的能在Android上跑的人脸识别引擎,其官方SDK建议Android版本是5.0+。勉勉强强跑到了门禁打卡机上去,可是离线识别人脸运行速度不够理想,大约2.8s,项目卒。
我不怎么碰无人机,但我想再举这个例子,因为怎么也不能否认无人机属于嵌入式开发啊。虽然近期没怎关注大疆无人机的消息,但印象中,大疆真的就是无人机领域里电子消费级别的佼佼者!选择这条路真的需要沉下心来做技术,专心研究无人机及其相关技术才行。不能像我,总是关注各种技术和产品的周边新闻。当然了,这一领域,没有研究生级别和相关学习环境,一般都进不去的。同理,如果做到了图像和语音识别这些,前景应该是不错的(其实真相是因为我接触少才觉得不错嘿嘿)。
而且嵌入式应用和Web应用都是在Linux上跑,尤其是我上面做的那个人脸识别项目,放在云端,那也算是Web应用开发吧?放在本地嵌入式Linux系统里,算不算嵌入式应用开发呢?当然我对嵌入式开发并没有误解,嵌入式四个层次:硬件、驱动、系统、应用。计算机系出身一般是接触系统和应用层;而电子系出身一般做硬件和驱动。
总而言之,Web技术和嵌入式技术,真的是一个在天飞,一个在地上跑!天上飞的速度快,但人人都看得见,地上跑的慢但藏得好,不仔细发掘真看不到。
个人发展
最后说下个人发展。 如果是做Web开发,不论是985/211,还是二三本学生,只要不是眼高手低,毕业生应该不愁找不到工作,而且可能还有多种选项。
而选择嵌入式开发,不敢说找不到工作,但是相比Web可选择的大大减少,985/211估计没什么大问题,但二三本学生我真的不敢说一开始就能找到很满意的那种工作!
我都还记得我当年实习的时候,进入了一家嵌入式方案公司,同一时期还有其他学校的计算机系专业过来,后来一个暑假过去,想留下来及能留下来的也只有我隔壁学院那个光源与照明专业的同学。那家公司也没有多糟糕,博士出来创业,博带硕,硕带本,还请了一个学校老师带我们实习生。
工资方面。目前普遍观点是:同等时期同等水平同等努力下,做Web能拿到的工资比做嵌入式的要高!
看看各行业那些知名企业给出的应届生工资就可了解个大概。为什么要看大公司给应届生的“批发价”?蛋糕很大的时候,大企业拿走大的部分,小公司也能分一杯羹填饱肚子;而如果该行业的巨头分给员工那么点,可想该行业是不是实在没什么利润,或者是不是太压榨员工了。
另外,如果会看各行业巨头的财务报表,也是能了解这个行业发展好不好的,只不过我们这些打工仔的工资还是由老板决定。
再说一点,有些选择也是因为自己的个人因素,比如我从小就泡在网络上,自然偏向于互联网发展;可我大学的助班师姐,同为电子专业我也不知道为什么她能学得那么轻松,年年成绩拿第一,似乎还轻松的考研进了某所985/211,只能说人比人比死人。有次我向她请教学习方法,她说她也不知道为什么对硬件那些一看就懂,努力一下就行,可是如果让她写代码,她就挺头痛的。
大概,命运早就给我们上了无形的枷锁,而我们只是在这枷锁可移动的范围内做出选择吧?
作者:金旭亮
未来会有大量的智能设备需要研发,各个行业都需要,会出现很多研制和生产这些智能设备和产品的公司。做嵌入式开发需要专门的设备和仪器等,个人得进入相应的公司,研发特定的产品和系统,专业化程度较高,就业面窄一点。
Web这块会随着云计算平台的成熟而日益通用化,计算和存储会象水电一样成为基础设施,相对独立的网站的概念会越来越弱化,人们关注的是信息服务,而不会在意这个服务到底是谁开发维护和提供的。
嵌入式开发离不开硬件,它会通过探测外界而产生大量的数据,又能通过接收控制信息以反过来作用于外界,得到的是“实在之物”,而Web开发是纯“软件”的,关注于信息这个“看不见”的东西,主要干的都是信息存储,加工,处理等工作,本质上背后全是数学。
至于前景,看具体人的,好坏因人而异。
作者:匿名用户
嵌入式无疑是最稳定的,因为嵌入式更接近硬件,但是今天的嵌入式可能层次高一点,纯粹写底层的很少了,写业务的多一点,和写上层程序差不了多少,别人家的硬件都有弄好的驱动,各种东西一组和,弄点代码,就是产品了,电路啊极端底层啊都是硬件工程师做的。
嵌入式必备技能,c语言,操作系统,网络编程系统编程,电路了解,驱动,编译裁剪个操作系统都是家常便饭。这些技能,再未来估计50年都不会淘汰。
再说web开发,web开发这个领域,技术含量特别的低,我是过来人,java c# golang 都玩过,什么mvc ioc aop,什么领域驱动。说白了,就是增删查改,然后各种缓存啊,各种数据库。但是web领域虽然技术含量不是很高,但是逼格特别高,从前端的mvvm框架,到后端的负载均衡系统分布式计算分布式存储系统大数据,各种高大上的词,但都是吹逼的,当你真正了解的时候,你会发现屁都不是,很多人都是流于表面。
我总结一下web领域的人的开发状况,这个领域各种东西都是别人开发好的,从数据库,到web服务器框架,到分布式存储。打开idea,新建sping mybatis项目,连接mysql redis ceph mapreduce,然后再选择一个消息队列框架,比如选kafka,生成,运行与tomcat,负载与nginx,再弄个docker,前端弄个vue装衬,成了,一个高逼格helloword,各种牛逼技术都用上了。
web领域变化很快,你不需要自己捣鼓什么,跟着别人走就是了,技术含量极低。 是我就选择嵌入式开发,这些技能都是基础,当我想学web的时候,或许我学七天比培训一个月出来10k的人更牛逼。你以为培训大多的是干嘛的?都是搞web的。最重要的是,很多人基础太烂,写几年增删查改就感觉自己混不下去了,那就是自己的原因。
总结,嵌入式很难学习周期长,需要很多基础知识,web领域可以当混子混日子,培训都能干。
作者:HalfmanG2
就长远看,未来嵌入式开发和Web开发日子都不好过,事实上程序员是个正在死掉的职业。
程序员产生的原因在于计算机操作所需的技能超出了常人的生活技能。
所以过去在进行一些与计算机相关的日常工作时,需要额外的有计算机专业人员参与,也就形成了程序员这个行业,活跃在各个领域。
但是,在不久的未来,随着计算机技术的普及,与开发的日益简便,特别是未来复杂业务逐渐转向云端服务的情况下,我们现在认知中的一些高大上的互联网产品,普通人都能很快实现。所以现在普通的开发人员将失去存在的意义。
那有人可能又要说了,既然服务都转向云端了,是不是 Web 开发会更有前景呢?答案也是否定的,因为随着各种工具完善,服务也不再需要专门的开发人员去处理,除了极少部分的核心算法服务,将几乎不需要进行开发。Web 服务研发人员将更注重业务逻辑的设计与对于三方服务的整合,而不是自己去写大把的代码。
而另外,核心算法服务也不是现在程序员能 hold 住的,基于诸如 AI、神经网络、图像识别数据分析这些核心算法服务,普通程序员根本力不从心,只有专门进行相关理论研究的数学、生物、物理科学家将主要负责这方面的工作。
所以,结论就是,既然在读本科,就考学硕吧。
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!