嵌入式:我不是针对谁,我是说在座的Javaer都是弟弟,尤其程序羊
不好意思久等了
这篇文章让小伙伴们久等了。
一年多以来,关于嵌入式开发学习路线、规划、看什么书等问题,被问得没有一百,也有大几十次了。但是无奈自己对这方面了解有限,所以每次都没法交代,搞得实在不好意思。
但是办法总归是有的,正如前篇文章《最近厚着脸皮联系了不少老同学》所聊,虽然我自己不从事这些方向,但寻思了一下,我的同学和朋友中,多少还是有一些从事相关方向并且在一线(或曾在一线)工作过的,所以我就请他们帮忙一起梳理这几个我不熟悉领域的学习路线,这次嵌入式开发就是其中之一。
这篇文章之所以拖这么久,因为沟通实在太费时间了,毕竟大佬们都挺忙,况且梳理总结这件事情本身就比较繁琐,所以等到现在才发出来。
嵌入式开发难吗?
经过这次和同学的交流,我自己也学到了很多。因为嵌入式方面的很多东西我也不懂,我也算学习了。
站在我个人角度来看,结合以前的学习体验。我觉得嵌入式开发比互联网软开(比如Java后端)还是要难一些的,比如我们搞Java开发的,再怎么说,基本也都是用户态的东西,但嵌入式很多东西都深入到了内核态,所以难度肯定是有的,表现在几个方面吧:
- 首先,嵌入式它偏底层,软、硬件都要懂,对能力要求本来就要高不少;
- 其次,嵌入式开发的学习门槛也要高一些,而且像Linux平台下的开发流程,很多人都不习惯,摸不清;
- 再者,嵌入式学习的正向反馈可能比较慢,尤其是前期学习阶段,导致没有什么成就感,也就坚持不下去了,所以往往就弃坑了。
但是话说回来,做IT的就是这样,越往底层对人能力的锻炼就越高,所以对于能力来说是在升维,所以反过来,如果嵌入式做得好的,我觉得来做互联网问题也不大,到时候就属于降维打击了。
总体学习思路
总体来说,还是可以把嵌入式学习分为三个大的阶段:
首先基础学习阶段,这就包括通用编程基础(C语言、数据结构/算法、操作系统、计网、计组、Linux系统基础)和基本的硬件基础,扎实地掌握这两大基础,是后续持续发展和不断进步的动力源泉。
其次就是嵌入式应用编程阶段,或者说系统平台编程阶段。因为一般会以特定的嵌入式平台和特定的嵌入式操作系统为依托,熟悉这个系统平台上的编程方法和流程。以常见的ARM+Linux平台为例,需要掌握从内存管理到多任务编程、文件I/O、网络编程,甚至图形化界面编程等几个大的方面。
最后就是深入嵌入式底层开发阶段,最常见的就是内核开发和驱动开发,这些统属于内核态开发范畴,所以需要对操作系统内部机制有所涉猎和理解,在此基础上需要掌握从系统移植到内核开发、驱动开发的各个细节,这是成神之路。
大体思路是这样,接下来看一下详细的学习路线和知识点梳理。
学习路线+知识梳理
花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。
注:图片上传后可能被压缩,如需无损版高清大图或PDF版文档,可直接在本公众号后台回复「嵌入式」三个字自取吧。
书籍推荐
最后,按照整体的学习路线,再推荐一些对应的经典书籍:
这次就分享到这里吧,下篇见。
每天进步一点点
慢一点才能更快
- 对不起,我不是针对你,我是说在座的各位都不会写 Java!
- 通过输入一串字符,首先判断这些字符是否全都是数字,不是的话程序结束;如果全是数字则转换为中文的大写表示
- 针对商品信息抽取-雏形程序-java语言
- (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)
- Java 深入学习(9) —— 针对接口编程,而不是针对实现编程
- Bat文件执行java命令,报:javac不是内部或外部命令,也不是可运行的程序或批处理文件
- java 不是内部或外部命令,也不是可运行程序
- windows10 配置java环境变量,javac 出现“不是内部或外部命令,也不是可运行的程序”的问题。
- 以前都是写java的程序,第一次写iOS程序不习惯的地方
- [Java 12 IO] OutputStream 字节输出流,继承自它的类,都是 程序中输出 数据
- 从 C/C++ 程序调用 Java 代码 (不是用JNI)
- 执行力:我不是针对你,而是说在座的各位,执行力都很差劲儿
- Java题目内容: 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
- 'java'不是内部或外部命令,也不是可运行的程序或批处理文件
- java 外部调用c程序(后缀为.exe--是可以运行的程序--不是本地方法的实现)
- javaweb程序中,普通的java类,不是servlet类读取资源文件的方式
- 'D:\android\ANDROI~1\tools\lib\\find_java.exe' 不是内部或外部命令,也不是可运行的程序或批处理文件。
- 再论java程序性能小优化(太多了,网上到处都是,不多说,略说一二,我经常不注意的小项!我的博客处女作)
- Javaweb程序,src和webroot下的文件和包都是什么意思?
- 理解User test=new User();Java代码中的等式,都是对类的对象的操作,即等式右侧都是对象而不是类