闲着没事,写写自己的心得。
本人有近8年的嵌入式开发经验,谈谈自己对,嵌入式发展方向,职业规划的想法,也可以给那些在校大学生点参考意见
本人是13-17年的本科毕业生,这个时候,是互联网快速,发展的时期,中国的科技进步非常大,但是,缺点软肋还是很多
操作系统,服务器,芯片,很多核心都时国外的。本人学的是电子专业,正是看到了国内对芯片的,巨大需求,必定推动国内ic的发展,所以选择了电子专业,也是出于对电子的热爱,小时候,有个搭积木的游戏机,觉得非常好奇,拆烂过好几台,所以选择了电子专业。
电子专业,毕业可选择的方向有两个方向,硬件,软件,软件又细分几个方向(应用,驱动,内核系统,算法)。
硬件,可以去设计芯片,也可以去设计产品,外围电路,pcb板。
软件,可以可以做系统驱动,应用。
到底选哪个,从长期看,选硬件,这是我多年后的心得,当然是我自己的想法,为什么会有这种想法,硬件难度相比软件小,好学一点
,而且还有一个优势,越做经验越丰富,不容易,被公司裁员,相对来说,不会卷,不需要可持续学习太多东西。每个公司的硬件,招一两个,小公司,要优化裁员,不容易轮到你,因为硬件是需要一直生产的,出了问题,是需要经验的人才能解决。到了后期,工资并不低,甚至比软件开发高,我同事,毕业两年混混当地,10k左右,第四年已经25k了,而我工作两年时是15k,5年后,才拿到25k,而且,后面突破比较难,并不是技术,而是大多数公司,支付不起。但是硬件,很容易往上继续走,28k,30k,容易的多。要命的是软件,需要持续学习很多技术,学的多,忘的多,反反复复学习。35岁危机,软件是比较焦虑的,硬件相对来说,并没有那么大压力。
本人是嵌入式开发,(应用,驱动,内核系统,算法)都搞过,嵌入式软件工程师,嵌入式驱动工程师,嵌入式系统工程师,大部分,是应用,驱动都搞,当然这种大部分是mcu、soc应用,驱动,需要搞的,非常少公司有这需求。
所以,本人的建议,毕业生,先搞mcu+ rtos +gui,搞一两年,薪水并不低,15k起步,比较常见。甚至搞一辈子也是可以的,30k也容易拿到,把rtos啃下来,并不难。我有个同事就是走的这条路,现在薪水比我高很多,30多k了,这点令我很惊讶,不是他技术比我牛,恰巧mcu
难度相比linux简单很多。相反,我在linux深耕了非常多年,从大学开始,就学完了驱动,内核,应用,到现在,有10年的使用经验了,薪水不尽人意,并不是自己不敢往上涨,是市场需求,普遍偏低,相比互联网,难度还比互联网大,当然,除了华为,大公司级别的,如果高学历985,211就算了,本人,普通本科。但是学习能力并不差,相反,我认为,自己的编程水平觉悟很高。
本人从事过mcu,soc,应用,驱动,算法开发,非常杂,也非常累,这些年,选择了四家公司,正是自己以前的思想害了自己,想搞全栈开发,一人独挡一面。通过分析市场,招聘网站信息,以及个人学历,并不会有这样的机会,市场也不会太多需求。
所以尽早认清自己的能力,是非常重要的,尽早调整自己的职业规划,无比重要,关系到个人的职业生涯,发展。
马上就30岁了,再过5年,35了,被时代的机器,推入到卷的时代,难免让人焦虑。
本人接触过,甚至升入研究过soc,内部资源,汇编,uboot,部分内核,字符驱动框架,以及系统,文件系统。
以前是想走驱动开发的路,也是被互联网吹嘘的,带着走的,驱动开发待遇好,其实真的就那样,应用开发,反而还要高,有的。
现在的驱动,基本是soc芯片商写好的,所以去到华为,确实可以。但是985的比列还是少,大部分就是普通生,另外,别人外包,哪个外包,就不说了。
本人自己的技术栈规划,也是对某些和我相似经历,一种探讨,交流,看我说的对不对
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等等。
所以本人发展方向是应用开发,结合自己在linux底层的基础上,对系统,计算机的认识,这种巨大优势,帮助我更好的理解,开发应用程序。不是纯应用开发,千万别走纯应用开发(qt开发,c++开发)。一定是结合嵌入式。
对于普通学历的学生,选择软件开发,最好是走应用开发结合一些底层,的道路,要么就是前面说的 mcu + rtos + gui。这两个方向前期可以搞mcu + rtos + gui,不想太累,就一直搞,想上升学习就转linux。我踩过的坑是,这两个都学了,也开发了,类死,耗损精力。
另外该学安卓吗,我是不会去学,没那么多精力,我的就业选择顶多是soc+stm32。有人建议我深入研究某个模块,比如音频alsa,这个我绝对不会去搞,除非公司有需求,安排研究。我的原则是会用就ok了。camera到是可以深入研究,因为的倾向是音视频方向,暂时。
就业方向上
暂时只考虑,音视频,智能汽车。
补充,还有,搞电机方向的,这个是工业控制比较多,也有搞无人机的,这个,本人未涉及,无发言权。
如果有不对的地方,望大家指教。
另外补充一点,千万别去培训班,花几万块培训,就是人傻钱多,不如自己大学期间,花钱买开发板,把所有例程,反反复复,啃下来。找工作,那是没一点问题,本人大学期间,不上不重要的,非专业课,只自学,靠老师教的,叫老师来都找不到工作,自学收或是巨大的。