找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

嵌入式工程师出路之我见:就业,技术,行业...

admin 2019-9-12 08:52 286人围观 嵌入式相关



作者:玄妙漪澜

原文地址:http://tieba.baidu.com/p/5959056728?see_lz=1&pn=1

本人本科非985/211,工作地点广州,现职业为linux C软件开发工程师,但我的工作背景相对广泛,干过硬件测试工程师,嵌入式软件开发工程师,电子信息工程毕业。接下来我会说几个挺大家都关注的问题:(偏向于大学生,仅供参考)

电子信息工程的就业方向

其实这个问题应该从电子信息工程这个专业是什么来分析,你们可能会去百度然后得到一堆不实用的官方言论,说下我的认识:

从字面上分析 电子 ,有硬件、弱电、非电力能源强电类、信息、软件甚至编程,所以这个专业的就业方向可谓是广泛到漫无边际,各行各业都能涉及到。

专业对口的职业硬件上有电子设计工程师、硬件工程师,半软硬的有嵌入式硬件工程师、单片机开发工程师、嵌入式软件开发工程师,纯软件甚至已经不能算是百分之百对口,但同样可以有,而且大概率主要偏向于计算机专业系,比较正统的有C/C++软件工程师、linux系统开发工程师,稍微擦边的有java开发、安卓开发工程师,学个html5做个前端开发工程师,学几门脚本php、Python等等都没问题,而且我的身边大把这样的人,我说的还只是研发方向,不包括测试类。



其实就业这个东西,你得再从行业和公司去分析——行业即是你的这些技术本领最后都应用在什么方面上,比如通信、网络、医疗电子、汽车、智能制造、物联网智能家居、外包公司、系统运维等;公司指的是你最后选择去的公司情况,大小规模以及技术力量。为什么要特别指出这些东西呢因为涉及到就业中大家最关注的点——就业工资高不高。

就业工资,其实取决于很多方面,但最重要的肯定是和你自身的能力有关,能力越高,能拿到的也就越高。这里所指的能力包括一切硬实力,甚至学校的知名度也算一方面。

另外,与所在的公司盈利情况、发展情况及所在的地域也有关,本人位于广东,对其他地方没有太大了解,广州深圳了解的更深一些。对于刚毕业可能参差不齐,我认为广州深圳研发类转正后是不会低于5K的,当然,如果从高处想的话,高的可以无限的想象,工资高的人大有人在,不过这取决于自己的心有多高。

虽然工资永远是我们追求的核心,但也不要过于好高骛远,一毕业就想蛇吞大象,对于毕业生,一般公司给一般群体都是1w以下的,其实你刚毕业能拿到7k+就可以安然自得了,已是高于平均水平。另外还有些公司是包吃住的,可能刚入学的人不会有考虑这个因素,实际上,开给你的工资和你每个月能存到的钱那不是一回事,如果包吃住6000,那可要比你那7000啥都没有划算多了。

如果你在广州深圳找不到一份工资高于5k的工作,那说明你学的还不到家,这个跟学校和学历关系不大。因为技术类这行就是靠实力说话,笔试面试下来,人家公司不会冤枉你,所以别问我什么我是大专的是不是就拿不到这个数。

另外,当你报了这个专业或者你在选专业的时候优先从工资就业这一点开始考虑,那么你是不明智的。术业有专攻,三百六十行,行行出状元。无论是建筑、金融还是管理,只要学的好,本领过硬,都可以混的好,一句话,还是靠自己。

再者,有很多人听说很多身边的朋友这个专业工资待遇什么的出来还不错就选过来了,其实,这个专业对等的行业不是个混吃等死的行业,你的工资通过跳槽会升的非常快,一年破万是普遍情况,稳定下来以后基本工资都只会停在15k到20k,再涨很难,这时就要看公司了,有很多公司有项目奖,年终分工,股份等等,这个对于干了好几年的老员工才是拿大头的地方。如果涨不上去,你就只能转行转型了,而且这里有一个硬道理,你工资越高,代表你能力越大,能力越大,你的责任越大,你要扛的事就越多,压力很大,总监级别的心态不好头发掉光是肯定的。

所以,从选专业的角度来说兴趣是关键,当然很多调剂过来或者已经稀里糊涂报进来的人就没办法。如果想以技术类作为看家本领只能好好学,平心而论,技术的路属于“稳”的路,换句话说,如果你有一颗不满足于现状喜欢搞事情,年轻力壮意气风发一心想赚大钱做马云的那种,那请你放弃本专业别浪费时间马上开始考虑其他发展道路。因为技术类的工作就要坐得住、有兴趣,靠着你对本业坚持不懈地探索。一步一步来,你才有可能走的更远。我不会因为我是业内人士就很推崇本业,找到自己的道路,明白自己想要什么,才是真的,特别是大学生,最好在大二就有自己的方向,这样,你有充足的时间做一切准备,比如换行!



求职方法和行业大背景

因为我是专业对口的,所以我就从对口的角度,说下我们专业学的啥以及怎么学。有很多人在问专业难度,以及哪些课需要读好认真学等,其实这些需要看你的心有多大,才能决定你要走多远。

另外,电子信息的专业难度只要智商没问题其实一般都学的来,男女都一样,至少学到就业水平是没问题的,所以别问我什么对女生是不是不友好,女生是不是学不来,我只能说那是因为很多女生最后没兴趣没坚持下来。对于女生来讲,这确实是一条孤独之道,学的人不多,学成的人更不多,但我觉得是个人思想和学习环境导致的,大环境下女生都不喜欢这个,所以想走远可能会难。但现在女程序员也已越来越多,“谁说女子不如男”?

如果你想搞科研,有什么高端大气上档次的理想,那本专业就很难。对于任何工科类的专业,肯定是智商高和有毅力的人最后能走的远,所以也没有必要去比较,优秀的人大有人在。学的东西很泛,开的课程情况看学校,主要的课程还是偏硬件类、模电、数电、电路,好的学校会开通信原理、计算机网络、单片机、c语言这些、专业课很多,我就不一一列举了,反正我大学的课是排的满满的,一般来说你有一两门学的精基本就能吃饭了。

这个专业应该怎么学,有哪些出路决定于毕业后想从事哪种工作,此处暂且先不讨论技术外的出路。大一大家都比较迷茫和青涩,估计不明不白所以也没什么决心,对未来有各种憧憬和期待,野心勃勃,各种搞活动搞事情。到了大三才明白过来,一事无成,才又回头扬言搞技术!接下来就是学不会、难入门、坚持不下来的状态……崩溃、懊悔、迷茫……其实,这是大部分本专业学生的现状。

我建议花一年时间,即大一就去闯去荡、去搞事情,最后确定你是不是想稳下来搞技术。大二开始认真学习,坚持下来你到大三就会很强了,没错,已经强到可以找初级工作的地步。如此,便可早入行,到大四大家一起找工作的时候就会比别人起点高一些。当然如果你在大一就一心一意就想搞技术那就更不用说了。

那么这个专业具体怎么学?我接下来的建议只适用于普通想找工作出路的人,对于胸怀鸿鹄之志的请忽略。其实一般的课程你只要过得去就行了,有的人问什么高数物理很难啊用不用学好啊,其实我大二开始混饭吃(本人是相对特殊的大学生,比较早工作),到现在好几年了都没用过高数和物理。但并不建议完全舍弃高数和物理,因为其他科目都与高数物理息息相关,虽然工作上用到的机会并不多,实在无力回天的话,即使不太精通也无妨。

有人问C语言用不用学好?这决定于你从业的工种,目前,我的工作偏软件,吃饭的家伙就是C语言。可以跟自信的跟你讲,精通c语言很重要,不是熟悉,不是了解,就是精通。那么如果不喜欢软件,你是一个硬件工程师或者单片机工程师,那么c语言就用得偏少,那么只要会语法、会编程就可以了。虽然单片机工程师也玩C语言,但相对用的比较浅薄,就是用来控制硬件,主题还是硬件,所以就相对不那么重要。

其实很多男生一开始对本专业有兴趣都是因为硬件,确实动手焊焊东西,看到作品还是蛮有成就感的。有些小项目,智能寻迹小车,看看小车在跑啊或者搞个光立方灯闪啊闪的,看着特别好玩,确实比较吸引男生,这些以前本人都玩过深有体会。但是大部分人其实入门之后后面放弃了硬件搞软件去了。

究其原因有两方面:第一是硬件确实很难,存在瓶颈,入门容易,也很好玩,大部分人只要会焊个东西,会画个板,造一辆会跑会叫的小车就算是入门了。但是真正从业的时候会发现以前都是玩玩具。工业级的产品都要求过硬的质量,要经得起风霜的考验,要经得起人为的摧残,也就是说实际上除了功能之外的东西,还得做很多措施保护,除了这个,单单就产品的功能也有严格的要求——精确到每个电阻、每个电流和电压,要有过硬的理论基础、电路分析、模电、数电、电磁波原理,可能还需要物理。画板要考虑干扰、emc、信号完整性、纹波等,没错,听起来是不是很难,所以其实一般的应届生都不具备一定的经验和水平,书也读的不够扎实,所以很难做到这些,工作中就经常犯错,压力很大,局限性很大,会发生很多你不可理解的事情,就会做着做着发现,啊,不是应该是这样的电流这样的功能吗,怎么没反应或者不是这样的!?然后连查问题都不知道怎么查,然后抛给大佬。

由此引申出第二个原因,因为你一毕业能力不够,其实很难,很少人能达到工作需求,所以企业一般不会开给你高工资,而且还要教你,还要容错,所以刚毕业普遍看起来硬件工程师工资比软件的低,因为软件很多人在校期间就能学好,甚至达到社会工程师水平,所以工资自然就高了,三五年后谁也说不好,硬件确实是个需要积累的东西。所以对于有志于此的人,我还是鼓励学硬件,别老看个待遇,而且硬件工程师比较稳,一般公司想动你都得想一想,毕竟是社会稀缺资源。



怎么学习硬件?大部分课程过得去就成,但是,你最好把电路、模电、数电都读精通。对于已经到了大三下学期然后突然想搞技术的人,其实纯硬件对你来说有点接近关门了,除非你很有毅力,因为这时候你没时间补基本功,后面要想玩好电容、电感、运算放大器、二极管、三极管、mos管很有难度,而且这些理论课程偏枯燥。此外,对于已经在大二铺设好了理论的人,大三就要开启你的魔鬼积累之路,多呆实验室,找老师,找师兄指导,尽你所能做作品去吧,可以找几本电子设计类的书籍或者网上的论坛照着搭,尽量多地积累小电路模型,尽可能多地熟悉一些集成芯片,比如LDO之类的,特别推荐思维好的同学学习开关电源,很考硬件功底,如果你能自己搭出合格的拓扑较为复杂开关电源,那么你的纯硬件已经过关,可以考虑实习了,然后这个时候要学画板,layout那些,熟悉altium designer,俗称AD,但是其实大企业用的不多,多数是allegro,CAD。很多公司画板的工程师是女生,而且其实女生会更有优势。大学期间尽量多参加比赛,电子设计大赛和各种杯,瑞萨杯,飞思卡尔杯等等等,有没有获奖都行,这些就是你的经历,你的简历,写的就是这些你做过的项目,大小都行,写的就是你参加过什么比赛,有获奖更会在你面试的时候加上不少分。然后,还是要尽量早点实习,学校的环境和公司的差距还是很大,出来一趟你会发现强的不是一星半点。对于纯硬件设计工程师,言尽于此。

单片机开发工程师和嵌入式开发工程师

说起电子专业最对口的就是这两样了,因为纯硬件还有一个叫应用电子技术的或者是什么电子科学与技术,但是这两个职业,绝对是首选考虑电子信息工程的。

很多不了解行业的人说起嵌入式,他们就会说,“啊,我知道,就是搞单片机嘛。”甚至,连我们本专业同班同学百分之五六十的人都是这么认为,然后我内心就如火山在奔腾,有一种想拍人的冲动。

其实从广义上的来说,单片机确实算是嵌入式的,特别是能跑系统的单片机,像stm32和高级一点的凌阳单片机。但是狭义上的单片机,就是泛指这一类不跑操作系统的单片机,也就是我们常说的MCU、stm32虽然可以跑系统,但是大家都是裸机开发,基本不会给它上系统,所以单片机开发工程师干的,用的芯片平台,也就是stm32这个级别的了,而嵌入式搞什么呢?嵌入式写全叫嵌入式系统,需要往芯片上植入高级系统,一般是Linux,高级的就是安卓,windows都有,玩的芯片平台都是arm9以上的芯片家族,什么飞思卡尔啊,TI的芯片啊,中国自己做的有华为海思啊,安凯啊,这类叫SoC,片上系统。

其实还有一些比较特殊的芯片平台,前几年也挺火的,比如FPGA,这个平台的编程语言不是c,是VHDL,做并发处理,速度快,主要做仪器仪表,高精密那种。刚毕业的时候有一个师兄专门学的是这个,后面放弃了改学安卓去了,然后后来比较冷门,反正我毕业之后就没再听过做这个的工程师。不过我在毕业找工作那会去面过海格集团旗下的海华电子,他们好像是用这个的,海事电子,航海仪器啊,还有军用野战电源,不过后面面试没成功,从此也就与FPGA再无交集。

个人认为能搞嵌入式硬件开发的都能完美胜任单片机开发,所以嵌入式硬件开发的市场价值实际上也要比单片机开发工程师要高级的多,其实你在招聘网站上看到的单片机开发工程师一般都是门槛比较低的,真正招高级的单片机开发都会打上“嵌入式开发”的标签。

比如我最近面的cvte,这是个行业内很出名的公司。可能有人关心面试的过程,但这里不讨论,以后有时间写写,反正他当时招的嵌入式,但是其实是搞单片机开发,虽然本人最后很幸运拿到了offer,但没有去。回过头来说下嵌入式硬件,实际上就是嵌入式驱动开发工程师,这是嵌入式业界内难度最高的一个工种之一,没错,嵌入式业界很广泛,实际上嵌入式开发囊括的内容很多,由底层往上,就是嵌入式驱动开发工程师,大家都在说装驱动。

那么驱动是个什么玩意?所谓的驱动,简单理解就是控制硬件的那部分程序,这部分程序在单片机上直接用C语言写就行了,只要你步骤对,没配错,一般都ok,但在SoC上需要套上linux内核的框架,需要考虑系统性能,数据处理,相对的要难上不少。所以驱动工程师就不止要会硬件,懂硬件的原理和控制方法,还对软件能力有很高的要求,而现在软硬兼修的工程师少之又少,身价很高,凌驾于纯软件之上,所以前面有人说我们专业啥都要会一些,这其实是一件值得庆幸和称道的事。

实际上刚毕业的学生基本没有办法做驱动开发工程师,只能从其他领域入手,慢慢向底层过度,有一定工作经验后才会被认可为合格的驱动开发工程师。嵌入式除了驱动开发,还有系统开发,系统架构工程师,这个也是高难度职业,一般都是公司的总监级别人物,所以,刚毕业的新同学其实百分之八九十都是搞linux应用开发,即是在已经有系统的基础上开发程序,就好像你在windows上开发软件,在安卓系统上开发app是一个道理的,也就是大部分嵌入式软件工程师的工作,也就是编程,用c/c++写软件,和一般软件工程师其实也没两样,只是你需要懂很多系统层面上的东西,多进程多线程编程,数据保护,数据结构,你还需要懂网络编程,可能需要了解各种协议,还有就是嵌入式软件工程师比一般的软件工程师能更多地接触到硬件层面上的东西。

话说到这,应该没有人再以为嵌入式软件开发是搞单片机了,实际上加了一个操作系统,就完全不是那么一回事了。那么软件工程师就该有软件工程师的样子,本人没进行过其他种类的软件开发,不知道java、安卓、H5那些是怎样的,但嵌入式搞的软件,绝对不是之前在学校从头搞的一个小程序,每个公司都会有自己对应产品的代码仓库。而嵌入式产品的代码,规模都很庞大,成千上万个C文件和各种其他文件,有很多公司校招面试会问你敲代码的代码量之类的,就是这个原因。所以没有哪个人搞嵌入式是从第一行开始敲代码的,嵌入式工作的大主题就是移植和加功能,在“祖传代码”的基础上搞事情。所以很少有嵌入式的项目是一个人搞定的,一般都是一组好几个一起做一个东西,好几年、好几代程序员积累下来的玩意,最终堆叠成了公司的产品。

为了总结,稍微提及一下嵌入式的基本架构,嵌入式产品一般都包括bootloader(uboot)、linux内核、文件系统以及居住在文件系统里的各个应用程序。对于嵌入式来说,移植和可裁剪是一个很重要的主题和特点。

说说单片机

大概总结一下嵌入式开发工程师的工作内容,做底层驱动的人的工作大致是几样:

1.搭系统,裁剪和移植内核

2.编写外部设备驱动

3.驱动移植

4.数据处理,为上层做应用的人提供接口和参数

5.做技术文档,

而做上层应用的人的工作则是:

1.根据产品功能设计和搭建产品的软件框架

2.移植或编写应用程序,调用底层接口实现功能

3.根据产品需求加模块,加功能改功能等等

4.界面操作,会涉及到QT开发或者是GUI,一些集成图形库等等。

另外,一个公司做上层跟做底层的工程师比例是8:2,因为驱动这种东西一旦做好,就不需要再去修改功能和更新迭代,相对稳定,所以公司不会需要难么多人去开发和维护驱动,而只需要高薪聘请少部分人。

有些公司对你的工作会有一个明确的定位,会给你定主要负责的项目和功能,有些公司则不会,就是有什么开发需要,根据能力以及你过往的经验来决定你在新项目里的位置,所以学的好的人,上下层不脱节,软硬件不分家。这样,有些公司会根据你的兴趣和方向给你分配和工作,其实对于有工作经验的嵌入式求职者,一般技术面时会问你的规划和发展方向。

很多人其实一开始对这个专业感兴趣都是因为看过一些单片机的项目觉得有趣,学了一阵子,然后后面又听说嵌入式工资待遇很好,就转学嵌入式。

其实这里有个误区就是还是觉得嵌入式是搞类似单片机的东西,以为一入门就能搞驱动,搞创造,当年我一开始也是这么想的。但是要开始学那会师兄问我,你知道嵌入式是干嘛的吗?你知道嵌入式怎么学好吗?你知道嵌入式学出来能干嘛吗?我一脸懵。

第一个问题楼上说的很清楚了,接下来讲第二个问题,因为我是正儿八经的嵌入式工程师从业,所以这块我了解的多,就多说一些。其实学嵌入式的话基本就是先从单片机开发工程师的路线来,一般来说,学校是会开设单片机一类的课程的,但这里有两个弊端,一是单片机课程开的时间问题,很多学校都是大三才开课,那个时候黄花菜都凉了,二是不少学校教单片机死扣微机原理,甚至还用汇编教,教学还跟实际脱离,不动手。建议是这样的,大一或者大二找浅显易懂的单片机书籍去读,推荐郭天祥写的那本书,然后买一块开发板去玩,这个东西,会玩上瘾的,不骗你。

当你点一点流水灯,搞一搞串口通信,再弄一块液晶显示屏1602刷点什么图案,会获得很大的成就感,反正我是这样的。而且单片机这个东西的入门很简单,你只要有点微薄的c语言基础就行了,不需要懂什么微机原理和汇编语言这些古董!我的同学大一就在玩了,那时都没有c语言的课程。实际上,我只花了一个月就学完了51单片机,我觉得一个月算长了,因为如果一两个月下来你没学的七七八八,说明你对这个东西没兴趣,或者真的不适合搞技术,至少不是很适合单片机或者嵌入式,可以考虑想下其他道路了。单片机说白了就是学引脚,配寄存器,当你学会51单片机之后其实你就可以玩很多单片机的小项目了,花点小钱买点材料找些去搭一搭,会获得一种造物主的喜悦感,至于项目,大把是,书籍,或者网上找很多。简单的有那些小车,光立方,计算器,交通灯……还有需要涉及到一些简单的传感器,比如什么红外对管啊,超声波测距啊,霍尔元件啊。其实51单片机没多少资源可用,算是比较初级的芯片,后续可以考虑变种的八位单片机,比如stm8,stc,中颖,瑞萨那些,引脚复用关系更复杂,资源更丰富一些,可以涉及到adc,i2c,spi这些东西,需要配置寄存器,配时钟,配中断,或者有库函数可以给你学习和调用,这些网上的论坛也一大堆,然后作为进阶,最后学习stm32,算是一个典型而且被广泛使用的高级单片机,已经可以初步跑系统,诸如ucos一类的小型系统,功能也是应有尽有,把stm32玩熟的话基本就能吃饭的了。至于stm32的学习资料非常多,教学视频什么的都有,而且玩stm32的人非常多,你不会是孤独的,遇到有什么问题解决不了,上网一搜一堆答案。

单片机的基本说完了,反正你最终的目标是掌握全部的外设,熟悉UART、SPI、I2C、USB总线,有很多人用过,但是都是一知半解,把这些真正搞懂很重要,因为面试的时候面试官最喜欢让你说一下这些东西怎么配,这些东西的过程,或者对比下这几个玩意,厉害一点的就问你这些东西出了问题该怎么查,思路有哪些,答不出来你就再见。

单片机没多少内容,所以各位少年基础打好,别太自信,有多少同学不知道UART分为好几种类型,比如RS232和和RS485两种不同的协议。然后最后厉害点的再玩下触摸屏和dma等等高级的操作,然后做几个作品就可以准备出道了,单片机作品不低于5个,最好有十个左右,复杂度高的至少要有一个,什么叫复杂度高呢,就是用上我上面说的总线两种以上加上些吊炸天的外设,比如电机,flash,摄像头,屏幕等等,OK,单片机的我就言尽于此了,如果你想往嵌入式的驱动工程师方向发展,也得这么玩,但是不用玩的贼溜。接下来我来说说嵌入式怎么玩,应该很多人关心这个问题,因为嵌入式的学习对于毕业生非常不友好,而且条件非常有限,可以说你在学校很难有条件掌握。

首先第一点,其实很多学校的电子信息工程都没有开设嵌入式的课程,有些学校可能开设了嵌入式的课程,但其实教的是stm32,比如我的学校就是这样,我是二本a的学校,但当时我们学院根本就没有会嵌入式的老师,可笑到就连带我的指导老师都叫我放弃学嵌入式去搞php(因为当时大热门),说什么工资高,还说什么linux连他都学不会我学去干什么。,我有我学的理由,这里暂时不讨论,后面有时间写写。反正事实证明我就是嵌入式开发出道了,最后啪啪打了老师的脸,毕业设计那会我用嵌入式做了个东西,在座的老师都不会,给了个全班最高分。当然啦,对于那些学校好,有开设真正嵌入式课程的同学,你们要懂得珍惜,因为带你学嵌入式的老师和师兄就是你最宝贵的资源,是你道路上的一盏明灯。

其实linux也没有那么难,我的导师会那么说的问题在于我要说的第二点,在我看来,嵌入式就目前来说没有系统完善的学习资料,因为嵌入式这个东西涉及的面太广,根据各行各业的不同,会涉及到硬件、软件、网络、操作系统等,所以书籍要么就是讲的很泛,软件硬件都讲一些,我记得韦东山写的有一本灰色的书就是这样,啥都涉及一点,但很多没讲明白,而且点太多,记不住,看完云里雾里的,还有好几本书讲嵌入式的也这样。

其实嵌入式的详细资料大部分都是分开的,很零散,软件吧,比如单单讲linux的,就有好几本,什么unix环境高级编程,unix网络编程,深入理解linux内核,Linux设备驱动开发,每本都是你高数书上下两册加起来那么厚,想看完够你喝一壶的。再者硬件吧,其实压根就没有必要,因为我们开发所用的芯片一般都会有芯片使用手册,供应商写的很全面详细,比如华为海思有一款芯片就写了九百多页,包括三星的s5pv210和TI的数字信号处理芯片,都有详细的数据手册,还都是英文的,我记得我们上DSP那会,用的课本就是芯片手册直译过来的。手册上什么都有,开发商还附带给你提供软件支持包,都有这么权威的东西了,还有谁