嵌入式工程师的学习路线----亲测
- 本文概述
- 入门之前必做
- 竭尽所能了解嵌入式技术与职业规划
- 正确认识自己
- 我眼中的嵌入式技术
- 我眼中的职业规划
- 我的入门之路
- 总结
本文概述
这是一篇关于想要踏进嵌入式技术之路与相关职业规划的建议性文档,文中观点仅限于个人对于嵌入式技术与相关行业的一些见解与实践。如果是大牛请指正或请绕路,勿浪费时间;如果是小白可以进行参考,也欢迎进行技术探讨和行业交流。本人的专业是机械专业,算是转行搞嵌入式,因此对于要转行到嵌入式行业的人可能帮助会更大一些。
入门之前必做
如果你没有了解嵌入式本身,以及将来可以用它来做什么事情,那么这条嵌入式的修仙之路可能在你没有正式开始之前就已经被消灭在了萌芽之中,又或者一生只能徘徊在起点,到不惑之年,随时可能因为一封邮件,就变成了一个失业人员。所以在准备进入嵌入式行业前请竭尽所能的了解,①嵌入式到底是什么样的技术,②将来你可以做什么样的事情。
竭尽所能了解嵌入式技术与职业规划
在明确你入门之前所要做的准备工作之后,下一步就是展开实际行动了。例如,你可以通过网络手段,一些博客,相关视频、或者找专业人士聊一下,又或者去一些招聘网站上面转一下,看看一些公司的招聘的任职需求。这样你才能全面的了解嵌入式相关技术以及相关岗位。
在网路发达的今天,永远不要只听一个人的经验或者一篇文章,就对嵌入式进行定论。你应该竭尽所能,通过一切手段了解嵌入式本身包含技术到底是什么,你能用这项技术从事什么样的工作或者行业。正如我们小时候学过的小马过河的故事:
每个人给你的建议都是从个人的角度给出的观点,不具备通用性。切勿生搬硬套,没有调查研究就不应该盲目从众。没有谁的路是可以复制的,适合别人的未必适合你自己,不适合别人的未必不适合你自己。所以当你决定研究嵌入式技术后,请先规划一下自己的职业路线(项目经理、产品经理、开发经理、技术专家、客户支持等等),或者了解一下将来想要从事的行业(最后从事什么样的行业可以先不用着急,因为我们毕竟还是井底之蛙,见识还是太少啊,等工作一两年之后再做决定,也不要把自己的格局给定死。),这样才不会迷失方向(后面根据实际情况进行调整)。
正确认识自己
在了解完嵌入式技术的具体技术层面与相关职业规划后,请正确的评估自己的能力与资源,制定属于自己的技术方向与职业规划。如果没有打算长期对嵌入式知识的学习,可能嵌入式技术方向并不适合你,或者说你不太适合搞技术,不适合走技术路线。不过可以考虑转管理层,不过这个很大概率要看“个人”了。人最重要的还是要找一个兴趣所在,毕竟你人生的大部分时间都会花在你的职业上面。只要兴趣和现实生活相互平衡好就行。有舍有得,才能延年益寿啊。
我眼中的嵌入式技术
IT一般分为前端、终端和后端,嵌入式技术可以分为底层(电路板级别)、中间层(驱动开发)、和上层(应用开发)。作为一个合格的嵌入式工程师,最好可以有机会都进行了解,这样从长远来看是很有益处的。因为在工作中,你会更加上手,更快的找到问题的解决办法,干的好升职加薪都不是问题。而对于个人而言,可以更好的学习和理解各种技术,这样才能提高自己的核心竞争力。之后,根据你的职业规划,选择一个方向进行深入学习。最后要精通其中的一层,提高就业的核心竞争力,这样在找工作的时候,你才能知道自己到底需要投递什么样的岗位,同时也可以增加你被录取的概率。
那么到底什么是嵌入式呢?
嵌入式是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
是不是有点晕?其实你就想象嵌入式技术的完全体是可以开发出一台电脑的就可以了,什么上网、听音乐、控制各种硬件设备等,都可以做到。只不过每个公司的研究方向不同,因此仅仅精通其中的一两项技术即可,比如海康的安防设备,大疆的无人机等等。
嵌入式技术具体包含什么呢?
编程语言:ARM汇编、C、C++(QT)、Java、shell等
系统:Linux、ucos、wince等
硬件:CPU(ARM芯片、MCU、MPU、DSP等),外设设备(UART、SPI、camera等)
仪器:示波器、万用表、逻辑分析仪等
至于其它一些相关的有兴趣也可以学习了解一下,例如soc、ASIC,原理图、PCB制作等。
怎么下手呢?
看到有这么多的东西有没有很头疼,其实这些并不是都需要学习的,看个人兴趣和发展。
在学习嵌入式 技术之前,C语言的重要性我就不多说了,入门级别的话,可以用C实现一些基本的算法即可,这个是最基本的要求。如果你想做驱动开发,而且你的学习时间比较充足,你可以学习一下C51(不必花费太多时间,最多一个月),可以直接学习STM32,之后学习Linux下的驱动开发。这样的入门方法,时间会更短一点,毕竟我们现在时间的成本太高了。对于汇编其实, 有没有无所谓。如果你要是准备走应用开发,其实汇编等你有兴趣的时候可以看一下。如果要是走驱动开发,主要的那几条指令,多看几遍就可以了,等用到的时候再看也是可以的。如果想要做逻辑开发,可以花点时间了解一下。
如果你想要学习应用层的开发,而且你的学习时间比较充足,你可以简单了解一下一些硬件的基础知识,可以学习一下Linux下的驱动开发,之后在学习应用开发(C++、Java、QT等)。如果有兴趣可以了解一下Android开发。至于Linux内核,等真正需要的时候再去研究吧,否则会极大的打击的学习的积极性,跟看天书似的,太浪费时间了。
如果你还是不明白,最简单的方法就是,看看人家招聘岗位的任职需求就可以了。有些是必须要学会去找工作的,有些可以边工作边学习,还有一些有兴趣或者需要的时候再学就行。
我眼中的职业规划
不管是准备走技术流还是走管理流,都需要对基础技术的学习。走技术流可能需要朝着架构师、分析师方向发展。走管理流可以先从PM(项目管理)开始做起,具体管理之路能走多远,就需要根据个人的能力、资源(你懂的)而定了。对于架构师、分析师、PM你可以查找一些相关文章了解一些,这里我就不再赘述了。
至于你是要从驱动开始还是应用开始,看个人兴趣,不管是驱动还是应用其实都是相互联系的,大牛一般都会精通。不过从应用来讲可能更简单一点。
我的入门之路
从开始学习嵌入式,到现在已经两个年头。以前从来没有想过会干这个行业,大学学的C语言,早就全都忘光了,单片机的选修课也从来没有去上过。因此,对于我来说一些都是从零开始。但是,为什么我会下定决心踏上这条不归路呢?
首先我当时在知道有这个行业的时候,每天都在关注嵌入式方面的信息,网上关于嵌入式工程师的学习知识面以及未来的发展我全都看了一遍,之后我开始找从事嵌入式行业的人进行交流。最后我在正确评估自己后,果断放弃大数据、人工智能这些听着高大尚的技术,依然选择了嵌入式。
现在回想起来自己的学习之路还是挺曲折的,我当时就是看了网上有很多嵌入式工程师的学习路线,总结为:C语言------>单片机(C51)------>STM32------>Linux------>QT------>Linux应用开发,这是一条相对完整的从底层到应用层的学习路线,不过会花费很多的时间。而我是从C语言单片机看起的,但是实践确实比较少,所以刚开始效果非常差。不过后来意识到需要多实践才是硬道理后,我基本就是先有一个概念,然后开始动手实践,无论是C语言程序,还是单片机的学习,都是边干边学,效率还挺高。只有能做出来东西才行,因为我们的目的也是做出来产品。
后来简单了解了一下C51之后,直接学习STM32,。这个花费了不少的时间,虽然有人说没有必要学习STM32,但是对于一个转行的人而言,或者没有编程和硬件基础的人来说,STM32带你入门还是有诸多好处的。因为刚开始,你不需要管一些乱七八糟的工具,直接开始用就行,而且如果想要走管理路线的话其实也不需要知道编译的过程,内核的工作机理,并且没有一定的基础,直接学习Linux,真的感觉在学习天书,花费很多时间,可能还学不会,所以我感觉还是有必要学习一下的,具体的看个人掌握程度。如果你现在还是学生,一定要多动手做点项目,网上有很多实践项目,找几个感兴趣的来实践一下,或者去找一些比较好的公司,实习一下,这些将会决定以后你的工作找的怎么样。
其实网上有好多学习嵌入式的视频和资料,如果你有精力并且经济不允许,那么你可以通过看一些免费的视频来学习,不过需要花费一定的时间和精力去寻找和整理。但是硬件的资源,是必须要投入的,因为你最后必须落到实处,必须实践。如果经济允许可以买一些视频资料来学习,可以省去找资料和整理自己学习路线的时间和经历(这个比较推荐,白嫖肯定没有花钱的好用啊,也可以找买过的人分享一下资源)。如果经济非常雄厚,甚至可以去报一个培训班。对于培训班,我只能说如果不差那点钱可以去报一个,因为真的会省很多时间和精力,也有可能让你少走很多弯路,不过你也要正确的认识培训班,它仅仅帮你理清嵌入式的各种技术和知识点,最后能够到达什么样的高度,还是取决你个人。
我当时经济比较窘迫,所以选择了一个比较折中的办法,就是买了很多的视频资料和书籍。
最开始看的是郝斌的数据结构视频(网上找的免费资源)----->自学数据结构(书籍)----->C51单片机(室友的,嘻嘻)----->STM32(购买了原子的一套软硬件资源,还不错)----->C++(在淘宝购买的课程)“找了一份实习工作”----->开始了解Linux(刚开始看免费教程,买了一些入门级书籍)----->购买了韦东山的视频----->找了一份自我感觉还行的工作,对的起自己流下的汗水。
补充: 对于要不要学习单片机,我个人看法是,需要看你的职业规划和个人能力两个方面。如果你计划走应用层的话,并且时间很紧迫,那么这种情况时没有必要去学习单片机的,可以直接从c语言与Linux下应用开发开始。如果计划从事驱动方面的工作,单片机或者STM32 还是很有必要学习一下的。否则,零基础开始Linux,确实是比较难的。容易打消你学习的积极性。
注:找工作面试也是一种实践,多去尝试一下,我当时找实习,找工作,制作了一份文档。这份文档随着我找工作次数的增加,也变得越来越厚,大家可以参考一下。
面试总结报告https://download.csdn.net/download/qq_41298652/12325716
总结
1.选择方向,规划学习路线。
2.实践才是硬道理。只看视频和书籍而不练习是无法深入体会的,一定要亲自编写自己的代码,给自己出题目,举一反三。
3.坚持、坚持、坚持。
4.简单相信跟着做。
相信一年后,你再回首,定能看到自己的进步与收获。(欢迎交流学习!)