Android开发全套学习!看完你还觉得算法不重要
# 嵌入式开发难吗?
经过这次和同学的交流,我自己也学到了很多。因为嵌入式方面的很多东西我也不懂,我也算学习了。
站在我个人角度来看,结合以前的学习体验。我觉得嵌入式开发比互联网软开(比如`Java`后端)还是要难一些的,比如我们搞`Java`开发的,再怎么说,基本也都是**用户态**的东西,但嵌入式很多东西都深入到了**内核态**,所以难度肯定是有的,表现在几个方面吧:
- **首先**,嵌入式它偏底层,软、硬件都要懂,对能力要求本来就要高不少;
- **其次**,嵌入式开发的学习门槛也要高一些,而且像`Linux`平台下的开发流程,很多人都不习惯,摸不清;
- **再者**,嵌入式学习的正向反馈可能比较慢,尤其是前期学习阶段,导致没有什么成就感,也就坚持不下去了,所以往往就弃坑了。
但是话说回来,做IT的就是这样,越往底层对人能力的锻炼就越高,所以对于能力来说是在**升维**,所以反过来,如果嵌入式做得好的,我觉得来做互联网问题也不大,到时候就属于**降维打击**了。
------
# 总体学习思路
总体来说,还是可以把嵌入式学习分为三个大的阶段:
首先**基础学习阶段**,这就包括**通用编程基础**(C语言、数据结构/算法、操作系统、计网、计组、Linux系统基础)和基本的**硬件基础**,扎实地掌握这两大基础,是后续持续发展和不断进步的动力源泉。
其次就是嵌入式**应用编程阶段**,或者说系统平台编程阶段。因为一般会以特定的嵌入式平台和特定的嵌入式操作系统为依托,熟悉这个系统平台上的编程方法和流程。以常见的`ARM+Linux`平台为例,需要掌握从内存管理到多任务编程、文件I/O、网络编程,甚至图形化界面编程等几个大的方面。
最后就是深入嵌入式**底层开发阶段**,最常见的就是内核开发和驱动开发,这些统属于内核态开发范畴,所以需要对操作系统内部机制有所涉猎和理解,在此基础上需要掌握从系统移植到内核开发、驱动开发的各个细节,这是成神之路。
大体思路是这样,接下来看一下详细的学习路线和知识点梳理。
------
# 学习路线+知识梳理
花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。
![img](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013423331472.jpg)
------
# 书籍推荐
最后,按照整体的学习路线,再推荐一些对应的经典书籍:
![img](http://www.icode9.com/i/li/?n=2&i=images/20210711/1626013423796326.jpg)
### 尾声
评论里面有些同学有疑问关于如何学习material design控件,我的建议是**去GitHub搜**,有很多同行给的例子,这些栗子足够入门。
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,**无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。**
**至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。**
**一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。**
**初学者,一句话,多练。**
> **由于文章篇幅问题复制链接查看详细文章以及获取学习笔记链接:[前往我的GitHub](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**