嵌入式是大坑的说法,是否与学生的信息不对称有关?
知乎向来流传嵌入式是大坑的说法,我混迹嵌入式话题快2年了。总结出了以下几点,希望已经从事该行业的前辈,能现身给个说法。知乎大部分人眼里的嵌入式:1工资低的不像话 2小学生干的活 3学的要死要活的,付出很多,最后付出得不到回报,还不如趁早转互联网。对于这个现象,我从学生角度,有如下发现:现象1:想从事嵌入式方向的学生,大部分是ee专业。在本专业中,单片机被过度神话,尤其在一些二三本院校中,单片机被看作是救命稻草的存在。仿佛学好单片机就能xx,学不好连工作都找不到。现象2:学生基础不扎实。说嵌入式是坑的大部分人有以下特征:1学历或本科普遍不高 2死磕单片机,然而单片机只是工具,重点应该放到模电数电等基础课程上,但这些人大部分基础很不扎实,非常浮躁,沉迷于校园各种高大上的制作和项目,对原理的思考甚少。3大部分所谓的项目,是在重复劳动,驱动大部分来自网上,很少有人能看着芯片手册编程。现象3:害怕跨专业。从大部分学生的经历来看,从事的方向应为嵌入式软件,但因为专业的缘故,经常给自己冠名以嵌入式硬件工程师,因为害怕脱离本专业。结果,两边都学的不精。本专业的电路基础,模电数电,信号与系统,高频电路等学的非常一般。而软件方向的,编程语言,数据结构,操作系统等根本没有系统学过,冠冕堂皇称之,在项目中学习就可以了。从很多答主的经历来看,不懂指针,不懂数据结构操作系统,就开始上手linux。因而校招中,软件方向因数据结构等课程不过关,笔试被残忍淘汰,电路设计因为学校没有很好的研究环境更是不堪一击。于是发出了嵌入式要完,我学的那么用功,依然找不到好工作等言论。现象4:没有上升到linux,在win裸机中打转,板子的bootloader甚至没听过,对自己的开发平台一无所知。现象5:少部分人声称,学好了也没什么用,普通人干10年,最多就20w,和互联网差太多,而且招的人少。从我调查来看,嵌入式人才供不应求。以拉钩网为例,嵌入式3年经验工程师,北上广12k月薪以上遍地都是。3年或者5年工作经验者,20k也比比皆是。从校招来看,海康华为等给的薪水,10k以上已经是非常普通。985研究生校招,14k以上也非常多,只是略逊互联网,根本没到要完的地步。而且听很多hr说,他们非常缺嵌入式工程师,有招人难的问题。我单独私聊了几位已经工作的嵌入式的前辈,大部分表示工作压力不大,甚至不加班。尤其手上的项目一结束,就会有很大的空档期。问题来了,在坚持目前互联网优于嵌入式的大前提之下。说嵌入式是大坑的人,是否和以上因素分不开,还是有其他因素在?ee嵌入式圈,是否存在不利于长久发展的学习风气???补充现象:在知乎纯cs交流区内可以发现,很多业界大神或者有经验的在校生,都向新人推荐走科班的路子,即系统学习c➕指针,看c primer c指针等书,并系统学习数据结构,操作系统等知识,比如公开课或者看某些名著。我也是ee专业,非常赞同这个办法,自己也去实行了。然而到了我们嵌入式区,就成了在项目中学习就行了。项目中学习这句话我觉得本没有错,但说的是先系统学习了,再在项目中深入理解并融会贯通。倘若你连指针都没用过,内存管理也没有听过,怎么可能自己突然就想到在项目中改用指针优化程序?用释放内存节省空间?这样的项目恐怕做100遍,程序质量也无法提高啊。我朋友和我争辩这个问题,他认同项目中学习的观点,有一次和我说他准备学数据结构和操作系统了。结果一个周不到就给我说,他学完了。。。我说啊?随后对我发表观点,只有链表可以用用,其他的太占内存,跑不起来的。我问你会写链表吗,他说这个模式很固定,用的时候查就行了,没必要会写。。。我又问操作系统,对我说,操作系统其实原理和裸机一样,我用中断也能实现多任务切换,用os反而跑的不快,没必要太过于专注。。。我当时真的一脸懵逼。。PS言辞可能有点伤人,很多人还在逃避,但我相信这些问题是现在很多嵌入式爱好者包括我自己的毛病,我们都需要反思,希望能有前辈出来指点。与君共勉。
不是信息对不对称问题,现实情况就是,相对于纯写程序,嵌入式的坑的确更大。
我发现,好书都是列举大量例子,我从入门,调试,成本等几个方面进行举例比较两者区别:(程序员写JS的,嵌入式用STM32的。)
入门:
程序员入门是打印Hello world,嵌入式入门是点亮LED灯。我们先看一下两者代码:
JS程序我就不解释了,就一句话,简单到没什么好说的了。但STM32的代码(请准许我偷懒,大部分内容来自STM32著名教育品牌——野火),我给大家解释一下,点一个LED灯,首先要做的是,看原理图,找出你要点的LED灯跟STM32单片机哪个引口是相连的,是用高电平还是用低电平才能点亮:
好了,从原理图可以看出,是GPIOB0口输出低电平点亮这个LED灯。不懂请跳过~
先放出那两个函数的原型给大家,方便解释。
在STM32中,任何引口的使用都需要特别配置,因为涉及了以下寄存器:
还没说完! 你是否天真的以为,连LED引口都要配置初始,单片机本身就不用配置?
执行main函数之前,还要执行SystemInit函数,这个函数主要用于配置单片机频率。(一般入门不会讲这个,我也跳过算了~,大家知道有这么一回事就好。)
这些程序是不是觉得写得很好呢,这就是外国人写的STM32官方库文件。要想用这些官方库文件,就需要进行移植,这又是另外一个话题了。
总结,JS入门的第一堂课就是写一句程序打印一句话,而STM32入门的第一堂课是:看原理图–>看寄存器–>使用官方库–>点LED灯。前者所需时间不过十几分钟,后者所需时间从半天至一天不等,决定于学生之前的所积累的硬件基础。(当然,51单片机点个LED灯还是很简单的~不用配置那么多~我之所以用STM32就是为了更好地吓你们。)
调试:
举例是需要背景的,各自拿个大约是相同进度的例子。(以下两个例子我都独立完成过。)
JS程序员就在云服务器(CentOS系统)搭建一个nodejs+express+mongodb,最终搭建一个可以访问的简单网站。
STM32的就搞个智能家居系统,最终实现在液晶屏上显示温度湿度,防盗防火的简单模拟。
具体开发流程我就不说了,我就说说,当我们遇到问题时,两者是怎么去debug:
JS:
咦,按着别人教程来做,为什么同样是调用这个API,我会提示出错?
第一反应是:stackoverflow+google,基本能解决问题。
STM32:
咦,为什么我的液晶屏不亮呢?
第一反应是:是不是没通电?用电表/示波器检查一下电源引脚供电电压是否正常。
第二反应是:是不是程序问题?下载别人例程可不可以让液晶屏工作,若不能证明是我的硬件有问题(转A),若不能则证明程序还有问题(转B)。
(A)下载别人的例程之后,就开始检查硬件问题。
第A1反应是:是不是引脚没接收到信号?拿示波器/逻辑分析仪检查一下信号是否都到达引脚。
第A2反应是:是不是这液晶屏本身是坏的? 有条件就换一个液晶屏测试一下。
第A3反应是:是不是我这块STM32板本身有问题? 有条件就换一个板来测试一下。
第A4反应是:是不是杜邦线接触不良?换条杜邦线试试。
第A5 反应是:看上去这个点焊得不太好,是不是虚焊?拿电烙铁重新焊一下。
…
…
第A15反应是:今天是调不出来的,明天再调吧。请大家别笑,解决不了的bug,睡一觉就好的情况,硬件出现的频率比软件就多得多。
(B)别人例程可以,我写的程序不行,下载我的程序用JLINK进行仿真,debug。
第B1反应是:我程序是不是卡住在哪一步程序?设置断点,仿真。
第B2反应是:我写的时序是不是不行?移植别人的时序,替换掉试试。
第B3反应是,是不是我给液晶屏上电时间/初始化时间太短?延时调大点看看。
第B4反应是:是不是硬件有问题? 叹一口气,跳回A类再找找。
第B5反应是:要不把优化级别调低试试?
…
…
第B15反应是:今天是调不出来了,明天从头再来吧。
第n-1反应是:百度一下别人不亮是哪些原因,自己去从这些方面去debug一下。
第n反应是:这两天还调不出来,就要找技术支持来帮帮忙了。
总结:
JS程序员有初级的调试问题,别人都遇到过,stackoverflow+google基本能解决。
嵌入式有初级的调试问题,绝对不会先google:Why my LCD not work?,别人是很难帮到你的。一般是带着程序可能有问题的怀疑下调试硬件,带着硬件可能有问题的怀疑下调试程序。难度系数绝对不是10+10这样简单地线性相加,而是10的10次方这样的指数级难度上升。硬件的调试绝对比软件要难,影响因素实在太多了。
调试所需要时间,前者从几分钟到半天,后者从几分钟到几天。调试难度的天壤之别,成了我转行的最主要原因。
成本:
程序员,只需要一台电脑,服务器,就可以开工的。来个舒服的椅子,再配两个大屏,完美~
嵌入式,请帮我配上,多少MHZ的示波器,逻辑分析仪,喂,采购芯片一定要买可靠的呀喂。所做产品精度越高,所需要的仪器就需要更高级,开始研发的费用极高。
程序做出来后,从一到一百万的使用量,成本不会上升多少,服务器扩一下?优化一下?
嵌入式的板子做出来后,从一到一百万的使用量,代表着一百万块板的成本。
你算一下研发成本与生产成本,谁更低?哪个更适合创业?这也是我转行的另一个主要原因,写代码让我看到更大的世界,更多的可能。(其实呢,转行这个词不太合适,毕竟我还是学生,还没出来工作。)
总结:
其实这方面的讨论已经有很多,大家可以广泛阅读,总结就是对于同样是普通一般的人,程序员的入门门槛更低,调试难度更低,研发/生产成本更低,利润更高。
嵌入式的别哭,君不见,一山还有一山低,21世纪是生物的世纪。如果你兴趣就是电子/嵌入式,请坚持,一样大把钱赚。不管什么专业,适合自己的就是最好的,兴趣爱好是赚钱的第一生产力。
而我的兴趣是赚钱,别跟我谈信仰。从嵌入式开发滑向程序开发,感受到的是一种开发效率更高,调试效率更高的感觉,那种感觉如同堕落的快感,一发不可收拾。
知乎上好工作的排名大概顺序是:去日本拍片>自己兴趣行业>金融业>程序员>嵌入式>其它。
那么问题来了,最好的编程语言是MySQL还是Mongodb?
上面是2016年我大三大四的时候回答的,我补充一个物联网的教程,就是软硬相结合的,主要是针对硬件的学生学习软件的知识,有兴趣的同学可以试着学习一下:【软硬结合】软硬结合导读 | 生子当如哈士奇的个人博客
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/97089.html