闲着没事,写写自己的心得,本人在职场上,有近8年的嵌入式开发经验,谈谈自己对,嵌入式发展方向,职业规划的想法,也可以给那些在校大学生,或工作一两年的,一点参考意见,有不对的地方,欢迎留言探讨,指教。
一、嵌入式分哪几种方向
嵌入式发展方向,硬件,应用,驱动,系统,甚至是多种组合,应用 + 驱动 + 算法。其中又分mcu,和soc,linux,rtos。
到底选哪个好,得根据自己的学历,学习能力,兴趣爱好,甚至城市,去选择。
本人是13-17年的本科毕业生,学历一般。以前是互联网快速,发展的时期,中国的科技进步非常大,但是缺点软肋还是很多。
操作系统,服务器,芯片,很多核心,算法,方方面面,都是国外传入过来的,真正有所起色就是这几年。
本人学的是电子专业,正是看到了国内对芯片的,巨大需求,必定推动国内ic的发展,所以选择了电子专业,也是出于对电子的热爱,小时候,有个搭积木的游戏机,觉得非常好奇,拆烂过好几台,所以选择了电子专业。
电子专业,毕业可选择的方向有两个方向,硬件,软件,软件又细分几个方向(应用,驱动,内核系统,算法)。
硬件,可以去设计芯片,也可以去设计产品,外围电路,pcb板。
软件,可以可以做系统驱动,应用。
到底选哪个,从长期看,选硬件,这是我多年后的心得,当然是我自己的想法,为什么会有这种想法,硬件难度相比软件小,好学一点
,而且还有一个优势,越做经验越丰富,不容易,被公司裁员,相对来说,不会卷,不需要可持续学习太多东西。每个公司的硬件,招一两个,小公司,要优化裁员,不容易轮到你,因为硬件是需要一直生产的,出了问题,是需要经验的人才能解决。到了后期,工资并不低,甚至比软件开发高,我同事,毕业两年混混当地,10k左右,第四年已经25k了,而我工作两年时是15k,5年后,才拿到25k,而且,后面突破比较难,并不是技术,而是大多数公司,支付不起,小公司的成本非常高,采购硬件设备,芯片,占了很大一部分,不像会联网,只需采购几台电脑。但是硬件,很容易往上继续走,28k,30k,容易的多,有经验的硬件工程师,就是公司的宝贝,缺了他,有时候还真的运行不起来,甚至好久才能接替,硬件工程师失业裁员相对少,我认识一个50岁的中专生,搞了一辈子电路板,现在还没被裁员。要命的是,软件需要持续学习很多技术,学的多,忘的多,反反复复学习。35岁危机,软件是比较焦虑的,硬件相对来说,并没有那么大压力。本人软件开发,已经没法转硬件了,主要是时间成本,没有公司会招我去搞硬件,除非自己慢慢接触,从stm32,单片机电路设计开始做起。但我不会走软硬结合的道路。
本人是嵌入式开发,(应用,驱动,内核系统,算法)都搞过,应聘过的岗位,有嵌入式软件工程师,嵌入式驱动工程师,嵌入式系统工程师。大部分时间是做应用结合外设驱动,有mcu上的,有soc上的。要说明的一点,需要搞soc应用+驱动的公司,非常少,一般是小公司,大公司不会让你一个人,分的很细,搞驱动的只搞一个两个,比如net,就搞net,camera的就搞camera,搞应用的,就负责一部分应用,应用又可能分算法,业务裸机驱动。
所以,本人的建议,毕业生,先搞mcu+ rtos +gui,搞一两年,薪水并不低,15k起步,比较常见。甚至搞一辈子也是可以的,30k也容易拿到,把rtos啃下来,并不难。我有个同事就是走的这条路,现在薪水比我高很多,30多k了,这点令我很惊讶,不是他技术比我牛,恰巧mcu
难度相比linux简单很多。
相反,我在linux深耕了非常多年,从大学开始,就学完了驱动,内核,应用,stm32,soc,linux,51单片机,到现在,有10年的使用经验了,薪水不尽人意,并不是自己不敢往上涨,相比互联网薪水普遍偏低,是市场需求决定的,主要是企业成本用在了硬件设备上,嵌入式工作难度比互联网大。当然除了华为,大公司级别的,高学历985,211,搞芯片,薪水真不一定比互联网低,甚至高不少。本人普通本科没法和他们比,并不是学习能力比他们低,相反,我认为,自己的编程水平觉悟很高,学习能力并不差。初中到高中一直是拔尖人才,只可惜,高中阶段,家庭原因,被比下去了,哎,一言难尽,不然不会被学历卡的死死的,早就高级人才了。
本人从事过mcu,soc,应用,gui,驱动,算法开发,非常杂,做的也非常累,这些年,选择了四家公司,正是自己以前的思想害了自己,想搞全栈开发,一人独挡一面。通过分析市场,招聘网站的信息,以及个人学历,并不会有太多的这样的机会,一个是市场觉定的,一个是学历卡死在这。
所以尽早认清自己的能力,是非常重要的,尽早调整自己的职业规划,非常重要,关系到个人的职业生涯,后续发展。
马上就30岁了,再过5年,35了,被时代的机器,推入到卷的时代,难免让人焦虑。
本人接触过,甚至升入研究过soc,内部资源,汇编,uboot,部分内核,字符驱动框架,以及系统,文件系统。
以前是想走驱动开发的路,也是被互联网上,那些机构吹嘘的,带着走的,驱动开发待遇好,以前也许确实是这样,其实真的就那样,有的应用开发,反而还要高。现在的驱动,基本是soc芯片商写好的,所以去到华为,确实可以。但是985学历,研究生学历的比列还是少,大部分就是普通生,另外他们很喜欢招普通本科做外包,哪个外包,就不说了,这种千万别去,再多钱别去,很多本科生学习能力很强,做开发做的好,和他们做的差不多,待遇就是比他们低,输了学历,还要输掉竞争,难免不让人伤心。
二、职业规划
本人自己的技术栈规划,某些和我经历相似的同行,可以一起探讨交流,看我说的对不对。
给毕业生的建议:
1、单片机mcu方向
刚毕业没有学到多少东西的,没有学完linux的,就只能去做mcu,学好正点原子的stm32,rtos,gui。
2、linux方向
驱动方向:
需要对soc大概的了解,寄存器,中断源,向量表,uboot可以大概的了解,阅读一下源码,汇编部分,如何启动soc的,到启动内核的
对nand,ddr,norflash,特性了解,本人写过几篇文章,介绍它们的启动原理。
内核,需要对进程管理,有比较深入的理解,多阅读,不管驱动开发,应用开发,对进程了解是非常重要的。然后知道一些启动流程,挂载跟文件系统就够了,驱动,字符设备一定要熟悉,深入理解,gpio等等,(input,lcd,i2c,uart),可以深入一点,也可以不深入。
usb,emmc,net,了解大概就行,会调试,移植,使用,就行。比如分区,设置网络协议栈。
codex,camera,看情况,如果是音视频方向,需要深入一点,这个方向,待遇不低,难度也不低。
根文件系统,会设置启动脚本,制作,部署就可以了。
应用方向;
深入理解研究freertos系统,这个可以帮助理解进程调度,是非常重要的
深入理解进程,线程
深入理解网络编程,tcp协议
深入理解io编程
深入理解i2c,spi,uart,协议。
深入理解,异步,同步,select,竞争,锁
往后的发展方向,结合音视频的soc,比如hisi35xx,深入理解,音视频,采集,传输,编码(不深入研究具体压缩算法,如h264)
深入理解gui,qt。应用结合驱动,会配置usb,以太网,,emmc,会写lcd,接camera,touch,gui,更高级的,音视频,采集,流媒体,图像算法,可以研究OpenCV,FFmpeg,alsalib等等。
3、硬件
硬件方向,毕业生可以去搞一搞,不会差
本人自己职业规划:
本人大学期间完成了51,stm32,linux,驱动,应用的学习。所以本人发展方向是应用开发,结合自己在linux底层的基础,对系统,计算机的认识,这种巨大优势,帮助我更好的理解开发应用程序。不是纯应用开发,千万别走纯应用开发(qt开发,c++开发),一定是结合嵌入式,qt,c++可以研究,可以用,但不要走精通qt。更多精力可以花在算法上,比如OpenCV,FFmpeg,图像处理。
对于普通学历的学生,最好是走应用开发结合系统底层的道路,选择软件开发,要么就是前面说的 mcu + rtos + gui。这两个方向前期可以搞mcu + rtos + gui,不想太累就一直搞,想上升学习就转linux。我踩过的坑是,这两个都开发了,累死消耗精力。这种需要linux和mcu的公司,需求少,得看自己掌握程度,和运气,也许有机会能担任公司研发管理。
另外该学安卓吗,我是不会去学,没那么多精力,我的就业选择顶多是soc+stm32。
有人建议我深入研究某个底层驱动模块,比如音频alsa,wifi,以太网,emmc,这个我绝对不会去搞,这种岗位非常少,主要是国内很少公司搞这些芯片的。除了乐鑫搞esp8266,4g模块的,这些确实可以搞一搞,现在物联网,这几个模块用到比较多,其他模块除非公司有需求安排研究解决一些问题,我的原则是会用,移植调试,接入到我的系统,就ok了。
camera到是可以深入研究一下,因为我的研究方向,暂时倾向音视频方向。很多产品都用得的到camera,有空确实可以深入研究。对于codex,我是会用,采集音频就OK,不会太深入研究内核alsa架构,当然我研究过表面上的alsa驱动框架,和应用编程alsa-lib。
就业方向上
暂时只考虑,音视频,智能汽车。
还有搞电机方向的,这个是工业控制比较多,也有搞无人机的,这个本人未涉及,无发言权,顶多玩过步进电机,无刷电机,pid算法,做个无人机玩具。
另外补充一点,千万别去培训班,花几万块培训,就是人傻钱多,不如自己大学期间,花钱买开发板,把所有例程,反反复复,啃下来。找工作,那是没一点问题,本人大学期间,不上不重要的,非专业课,只自学,靠老师教的,叫老师来都找不到工作,自学收或是巨大的。