该去大公司还是小公司?软件和硬件谁更重要?

点击上方“大鱼机器人”,选择“置顶/星标公众号

福利干货,第一时间送达!

我是2011年毕业于三流本科学校的,大学时候学的电子信息工程,毕业后通过关系进入到本行业的一家公司,做硬件开发。大学几乎没怎么学习,全都在玩了,其实现在想起来的话大学玩的确实爽,就是有点后悔大学毕业时候怎么就没考研或者考公务员试试。

题回正传,我学习差,刚进公司啥都不懂,简单的上拉下拉电阻不知道什么意思,三极管更不懂得开关座用啥的,我记得我们领导当时说过一句话:你是我见过做研发基础最差的。在后边的四年我一直在这家公司工作,慢慢的也适应了工作,不得不说,刚毕业的学生确实劲头十足,我也得感谢自己那时候的努力和付出,慢慢的基本上对硬件开发也都熟悉了,自己也可以独立设计电路,独立做个MCU系统,独立画板等等等等。

所以我想说:

对电子行业有兴趣的各位,不要害怕基础差,只要你开始这份工作后,有一颗肯学习的心,慢慢的一切你都会熟悉和上手。

 

2011年到2014年四年整的时间,我都在一个公司,公司属于国企的三产,待遇不高,但是公司管理层次分明,文件严格按照9000标准卡,公司部门之间也都是依靠文件联系,部门内部真的是非常非常和谐,有老有小,大家一起工作,基本上没有什么内部斗争,工作也很轻松,经常有时间听他们谈谈古代历史,一起侃侃大山之类的。现在的公司文件一团糟,采购的BOM与生产BOM完全不一致,研发没有BOM备份,原来人走了找不到原始文件,分管研发的老总直接越过研发经理与具体研发人对话,感觉研发经理就像是打杂的,不过研发经理上个月辞职了;

现在公司研发人员不多不说,好几个项目同时进行,领导只会压你时间,只会催你进度。对于这些我想说的是,如果你是毕业生我建议选择一家管理相对成熟的大一些的公司,即便是技术你没有小公司学的全面,但你得到的是一个管理模式的头脑,一个系统的研发体系和一个让你步入职场不至于失望的起点,但是也可能让你后续的工作感觉很不顺心,如我现在一样。

该去大公司还是小公司?软件和硬件谁更重要?_第1张图片

电子信息工程的就业方向

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

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

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

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

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

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

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

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

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

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

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

该去大公司还是小公司?软件和硬件谁更重要?_第2张图片

求职方法和行业大背景

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

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

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

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

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

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

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

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

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

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

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

很多公司画板的工程师是女生,而且其实女生会更有优势。大学期间尽量多参加比赛,电子设计大赛和各种杯,瑞萨杯,飞思卡尔杯等等等,有没有获奖都行,这些就是你的经历,你的简历,写的就是这些你做过的项目,大小都行,写的就是你参加过什么比赛,有获奖更会在你面试的时候加上不少分。

然后,还是要尽量早点实习,学校的环境和公司的差距还是很大,出来一趟你会发现强的不是一星半点。对于纯硬件设计工程师,言尽于此。

该去大公司还是小公司?软件和硬件谁更重要?_第3张图片

去大企业还是去小公司?

我是从去年9月份辞职,然后到了一个相对陌生的城市发展,说实话,是因为我对象喜欢这个城市,也就来了。一开始辞职时候找了一家物联网公司,因为没深入了解,导致了干了一个月之后就辞职了,那次辞职是裸辞,辞职后的压力很大,不断的找工作,发现真正适合的工作只能是本行业的工作,其实从2014年年初我就有点厌倦硬件开发的工作了,后来迫于生活压力,又快过年了,原来城市的一家世界500强的公司录用了我,我就暂时又回到原来城市工作,与对象暂时分居两地。进了500强的大公司,确实感觉到与小公司不一样,但是说句实话大公司里面的人际关系太复杂了,复杂的超出了我的想象程度,一个完全不懂研发的人管理研发,不懂电路的人做电路设计,刚毕业的人没接触过DSP写出来的程序就敢用来做小批量,唉,不说了。

今年三月还是由于感觉跟对象在不同城市又辞职回来了,不过也错失了一个能在大公司往上爬的机会,那时候基本在大公司转正就可以自己负责电路开发这块(其它人都不懂),不过也不后悔,看看他们那边的小高层,全都是心眼啊。

辞职后又开始新的找工作历程,大约一个月后找到了现在的工作,裸辞找工作就像剩女找对象,会慢慢慢慢的放低自己的要求,后来就来到了现在的公司。公司研发人员有10多个,但是上位机的太多,做MCU和产品硬件的这边一共5个人。现在的感觉就是公司管理特别混乱,没有一套完整的产品研发-生产体系,研发出来的新产品出货速度太快,导致后期维护量巨大,生产也是一塌糊涂,一个集中器生产100台,至少有40台以上会有毛病,刚才领导又来催时间了,研发这边的领导也是个逗比,就知道催催催,也不看具体工作数量和质量。文件管理混乱不堪啊,真心的,领导哪天想起来了就让你出个这文件,哪天又让你出个那文件,真心烦。

在这一行干的越久就会越明白,这行想继续做下去,要么自己有好的项目自己干,要么有兴趣,要么遇上一个让你想跟随的好领导。

对于选择工作上,个人感觉毕业后有机会进大公司一定要进大公司,一个系统的公司可以给你一个系统的培训,让你有个整体的工作思路,小公司当然有小公司的好,什么杂活都干,学的东西必然多,但绝对不利于个人的长期发展。

该去大公司还是小公司?软件和硬件谁更重要?_第4张图片

聊聊招聘

从2012年开始,不断看到人家说嵌入式怎么学。

单片机 ARM Linux C 汇编 C++ QT 驱动 说来说去都围绕这几个单词。

不知道是培训机构的影响还是怎么回事,

一大群开发初学爱好者迷失在Linux驱动开发 Bootloader移植中,还有QT移植中?甚是心痛。

如果是一个学生,如果是一个即将走向嵌入式开发岗位的兄弟。

好好的在Linux环境下,写点C代码,实现点数据结构练习基本语法和算法。

调用调用open read ioctrl 然后写点进程线程和网络,做个项目。

扎扎实实的,基础牢牢固固的,对于我们招聘初级工程师来说,是最喜欢不过的了。 

软硬兼修,后顾无忧

据网友光华居士表示“嵌入式软件工程师,两手都要硬!”嵌入式软件编程显然不同于PC软件开发,它和硬件密切相关。想写好嵌入式软件代码,就必须了解清楚所使用MCU的硬件特性、各个外围电路和接口电路的原理。不仅要深挖细究MCU内核架构的知识,是否支持浮点处理器/DSP,是否支持协处理器、指令数据缓存。

还要了解MCU的编程模型、各种存储器的地址空间分配及其访问效率如何,在MCU之外,还必须了解各种电路知识,什么地方需要上下拉,什么地方需要加滤波电路,什么地方必须隔离,哪里必须加抑制器件,等等不一而足。

为什么需要了解到这种程度呢?

1.软硬结合,更好地实现用户需求。比如输入捕捉,如果是通过上升沿或者下降沿捕捉,加了不合适的滤波电容会造成对沿的破坏,不加滤波电容就会受困于各种空间干扰产生的杂波。

倘若硬件工程师搬来的是加了不合适电容的电路,搞得沿之间位宽失真,便会出现数据不正常的偶发故障,倘若硬件工程师搬来的是不加电容的电路,搞得软件工程师必须进行软件滤波,把代码搞得又复杂又难解,你说这怨谁来着?

2.方便定位Bug。爱因斯坦曾经说过,“提出一个问题往往比解决一个问题更重要,因为解决一个问题也许仅是一个数学上的或试验上的技能而已,而提出新的问题、新的可能性、从新的角度去看旧的问题需要有创造性的想象力,而且标志着科学的真正进步。”

钻研硬件电路可以帮助软件工程师提出更多解决问题的思路,发现导致Bug的更多可能性。一般来说,当遇到Bug时,对硬件一知半解的软件工程师只在代码层面上打转转,基本不会在硬件方面提出问题,最终为了迎合蹩脚的硬件设计出别扭无比的代码,却不曾想,只要稍稍改变一下硬件设计,就可以轻松且优雅地完成代码设计。

3.艺多不压身,求人不如求己。当我们对硬件电路设计起了怀疑,倘若自己悄没声地拿起烙铁飞个线、换个元件,验证了自己的思路,这时直起腰版、拿着板子理直气壮地去找硬件工程师,岂不是顺顺利利,又送顺水人情?

倘若直接拿着板子,心底发虚面上露怯地去找硬件工程师理论,一场唇枪舌战在所难免,腥风血雨不说,到头来硬件工程师硬着头皮给你调调电路,真是解决了问题还好说,若是自己思路错了,那不是自找苦吃?上个班,挣点钱养家糊口而已,当个老好人,和同事其乐融融多好,吵来吵去,搞得那么辛苦,何必来着?


但是实际中嵌入式开发需要的知识体系和技能,80%其实跟硬件平台无没有无关系的。比如计算机系统原理、编程技能、程序的编译链接、你对Linux内核的理解、设备模型、驱动架构、项目管理等等。

真正跟硬件平台有关的,比如驱动开发,上面的框架是跟平台无关的,下面跟各个硬件平台的适配部分,可能跟硬件平台就有关系了,寄存器配置、开发板硬件配置等。而对于嵌入式工程师来说,尤其是驱动开发工程师,等你工作后,你会发现,跟应用开发相比,真正要写的代码量很少,往往只需要改几行代码。但是往往这几行的代码量,需要你深厚的背景知识:硬件知识、通信协议、对芯片、开发平台资源掌握、对Linux内核架构、设备模型、驱动框架的理解,这些才是嵌入式工程师的核心竞争力。

如果你看到很多广告还在以开发板或者平台作为噱头,能拿多少工资作为宣传,这时候你的脑海里要有这种意识,这是一种推广宣传。工资多少是由你自己的水平和市场大行情决定的,虽然在面试时HR会对你本身的水平评估有一些误差,但是要相信,时间会证明你自己的真实价值,不断提高自己的知识水平和技能才是王道。

真正的技术需要自己花时间慢慢吸收、积累、消化,内化为自己的知识体系和技能。外在的心灵鸡汤或高煲老鸭汤,只能让你一时地热情高涨,产生暂时的错觉,并不能真正的提高技能。

该去大公司还是小公司?软件和硬件谁更重要?_第5张图片

学嵌入式≠学ARM≠学开发板

据王利涛表示,很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板。买一块开发板,然后在上面“移植”u-boot、Linux内核,再使用busybox制作一个根文件系统,大功告成!觉得可以出去找工作了。这其实是有一定片面性的:首先ARM是个CPU架构,跟PC上的X86架构一样,你见过有人在Windows下面学习C/C++编程、MFC编程、网络编程、互联网编程,说自己学习X86的吗?当然,也不可否认,嵌入式平台的多样性、硬件的可定制性导致我们在嵌入式平台上开发应用程序、驱动之前,首先要搭建这个平台,就像我们在Windows下面要装操作系统一样,但是这仅仅是我们学习嵌入式开发的第一步。

其次,关于系统的“移植”,很多人玩了开发板之后,会在自己的简历上写自己移植过u-boot,Linux内核......其实,这种写法也是有点瑕疵的。真正的移植,往一个新的芯片或开发板上porting一个u-boot或Linux内核,那可不是一个人能干的事情,是一个团队干的事情。时钟、DDR、存储,可能牵涉到各个模块,哪里遇到问题,都需要各个模块的owner去debug,有时候甚至可能是芯片的bug,或者硬件开发板的bug,这就需要我们使用软件去解决、去规避这个坑,这都需要我们在很短时间,甚至一两天的时间去解决这个问题,需要一个团队的各个模块专家合力完成。

所以说,我们所说的“移植”,其实就像是在Windows下面安装操作系统,按照步骤完成装机。当然,通过这个过程,可以加深我们对嵌入式系统的理解,但是我们首先要知道的是,我们“移植”的系统,都是芯片公司团队做好的系统镜像,我们做的只是配置、编译、安装、甚至升级这些基本的操作。这些环境只是我们学习嵌入式开发的平台,万里长征才走完了第一步。

嵌入式越来越复杂,一个SOC芯片上集成的模块越来越多。以手机为例,典型的嵌入式产品,我们看看上面集成了多少模块:触摸屏、LCD、USB、WiFi、4G等无线通信、音视频编解码IP、DDR、存储控制器、3D/2D加速、GPS、指纹识别、NFC、DMA、G-sensor各种传感器.......。可以说,现在一个手机的复杂度和硬件配置,已经超过我们的桌面PC了。除了不断增加的硬件,软件方面,比如Linux内核,光内核代码就有1000多万行,每天更新的速度超过你学习的进度,你能学得完嵌入式的所有知识和技能吗?

早期PC时代,我们知道能做出X86 CPU量产的也没有几家,Intel、AMD和威盛。但是嵌入式时代不一样了,ARM的IP授权模式导致不同的芯片厂商百家齐放,不同的SOC平台和开发板眼花缭乱,针对不同行业需求定制的SOC平台雨后春笋:手机芯片、平板芯片、视频安防、物联网、汽车电子、工业控制,甚至人工智能AI芯片....,你到Linux内核的ARCH下面可以看看有多少种CPU架构,再到arch/arm下面看看有多少种开发平台,这还只是加入到内核mainline的平台,算上没有加入Linux内核主线的各种平台,其实数量更多。

众多的芯片架构、不同的开发板平台,我们该如何去学习?

嵌入式和PC的概念也越来越模糊了,Intel已经推出X86架构的CPU和嵌入式产品了,比如平板。ARM也开始进军服务器和笔记本领域了。无论什么CPU架构,ARM、X86、MIPS、PowerPC,还有最近火热的物联网芯片,无论是做嵌入式产品,还是PC、服务器,他们的底层本质其实都没有变,都是计算机原理和系统架构,都是冯诺依曼的计算机架构,图灵原型机的各种实现。

不断复杂的软硬件系统,对嵌入式工程师或者学习者来说是一个挑战。这对我们本身的知识和技能有一个更新的要求。早期51单片机时代,我们可以自己使用面包板或者自己画PCB,做一个开发板,然后在上面开发软件。软件、硬件自己全搞。现在不断复杂的SOC平台,再想一个人全搞,软硬通吃,基本不可能,这也导致我们需要分工协作来完成。首先软硬件的分工,各司其职,各自精通自己的领域,然后进行软硬件整合,协作开发。再次,软件方面,嵌入式软件也越来越复杂,Linux内核1000多万行,android源码下载下来就占几个G的空间,自己想全搞,同样不可能,同样需要进行分工。比如android,需要分为BSP工程师、Linux内核工程师、驱动工程师、android中间层开发工程师、APP开发工程师。对于一个Linux内核,也需要分工,各个模块同样进行分工:Linux内核的USB子系统、音频子系统、视频编解码、文件系统......把其中一个模块你搞精通了,工资绝对不是问题。

对于嵌入式学习者来说,我们该学习什么,或者说如何学习?才能提高自己的职场竞争力,或者说对于一个新手来说,如何通过自学,达到公司的用人标准和技术要求,找到一份自己想要的工作?

首先,你要学会做减法,从现实出发,要有这样一个意识:我不可能精通所有的嵌入式技术,学会坚持,制定合理现实的小目标。很多人喜欢那种不切实际的广告轰炸营销,击中你心理上的某个软肋,某个G点,一下子兴奋起来。越熬越浓的心灵鸡汤,并不能解决我们吃饭的生存现实问题。很多人,包括我,在学习的时候,都喜欢给自己树立各种路线、计划、日程表。制定计划时激情满满,热情高涨,激动得睡不着觉。计划宏伟而饱满,仿佛成功就在眼前。但是往往不切实际,往往在早期,遇到各种困难,各种坑,各种拖延导致没有坚持下来,最后夭折。然后接着制定下一个宏伟的计划,继续夭折,生活周而复始,day after day。观察我们生活周围,真正做出成绩的都是那些基于现实出发,能一路坚持下来的人,day by day。有时候你会发现,并不觉得他们有多聪明。

其次,保持自己的兴趣,说白了就是为了坚持下去。见过很多人想学习嵌入式,花了很多米买一块开发板,激情满满,过一段是过去再看,已经不折腾了。嵌入式开发难,难在哪里呢?主要在于开发环境的搭建,软件调试上,不像在Windows上使用VC开发程序,集成开发环境都帮你弄好了,各种断点、单步、查看堆栈、寄存器、内存窗口。而嵌入式不一样,硬件环境搭建会遇到各种各样的问题,各种电脑的兼容问题,各种莫名其妙的问题,有时候着实让人抓狂,时间久了,慢慢地学习的激情殆尽,也就不想学习了。这还不算什么,更严重的是,很多人学习嵌入式遇到挫折,往往会打击人的自信,觉得自己能力不行,智商不够,不适合干这行,在心理留下了阴影。对于个人学习者来说,买了开发板,你不买配套的万用表、示波器等调试设备,遇到硬件问题也是一筹莫展,无法解决。其实我们可以完全使用其它的平台去开展我们的研究和学习,比如QEMU,一款可以仿真开发板的开源软件,使用这款开源软件,我们可以在电脑上虚拟一个世面上流行的开发板,然后再在这个仿真的开发板上跑u-boot、Linux内核、挂载根文件系统,使用和开发板一样的源码,运行效果和真实的开发板是一样的。


而且,使用QEMU的好处就是,“硬件”永远不会出问题,可以让我们避过硬件的各种坑,腾出更多的精力去研究嵌入式软件的各种架构、编程技能、内核驱动....,这些才是嵌入式工程师的核心竞争力,需要花大量的时间不断地去积累,去磨合,去提高的。把大量的时间耗在一个本该不属于学习范畴的硬件bug上或者硬件环境不兼容上,不划算,因为你以后进公司后,遇到同样的问题,找硬件工程师,半分钟帮你搞定。所以说,选择一个理想的嵌入式学习平台,尤其对于初学者来说,很重要。

最后,要保持学习的深度,刻意练习。不要让自己永远待在学习的舒适区,要学会挑战自己,不断去扩展自己知识的边界,完善自己的知识体系和技能。很多人买了开饭,按照教程,“移植”了u-boot,Linux内核,制作了根文件系统,然后就陷入了迷茫:接着要干什么?要学习什么?想学习又感觉深入不下去,东一耙子,西一耙子,看看这,看看那,时间不知不觉就过去了。其实,学习嵌入式,基本的嵌入式知识和理论学习还是必要的,很多人推崇边做边学,到项目中学习,实践出真知。当然这也是一个方法,但是也有弊端,那就是学习的不系统,很多有心人到后来还是得回来补课,完善自己的知识体系和技能。很多人玩开发板,烧写镜像,玩得贼溜,但是你知道这里面的原理吗?

知道JTAG怎么下载的吗?

Jlink和JTAG有什么区别?

为什么PC上要装个JTAG软件而Jlink不用?

程序的编译和链接是怎么样的?

为什么内核镜像要下载内存的某个地址?

换个地址行不行?

为什么我们编写的程序要在有OS的环境下运行,在ARM开发板裸机环境下,你能写一个跑起来的程序吗?

只有对这些问题深入思考,你才会对嵌入式有一个更深的认识,超越了平台,一通百通。

-END-

往期好文合集

干货 | 双目摄像头实现手势识别,完美还原人体运动手势。戳这里>>

这篇文章后,不要再问我怎么做一台智能车了。戳这里>>

电子工程师也有“鄙视链”!软件硬件无一幸免!戳这里>>

群体智能,多个机器人协同搬运!戳这里>>

  最 后  

 

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

你可能感兴趣的:(嵌入式,芯片,内核,weex,编程语言)