走进嵌入式领域的大门

在我之前的文章《嵌入式架构师之道》中覆盖性地讨论了想要成为嵌入式的系统架构师都需要做的事情,虽然也涉及一些细节,但总体来说还属于世界观范畴,在这一篇中我们落到实处,聊一聊嵌入式学习的方法论,具体讲讲嵌入式想要入门都需要在什么时机去学习哪些内容。

说白了,开启任何一门学问的大门要做的第一件事无非就是看书,书籍在人类只是传承中的作用我就不扯了,即使嵌入式是一门实践性很强的学科,嵌入式的入门也必定是从看书开始。
但看书也是一门学问,能够有针对性、有选择、有顺序地看书更是一种能力。尤其是工科类的书籍,在看书的同时还要理论结合实际。

记得周星驰版的《鹿鼎记》中由于段令人喷饭的对白:
陈近南让韦小宝去宫中卧底,说可以教他绝世武功,然后贱兮兮地拿出了一本册子给韦小宝。
韦小宝夸张地说:“这~~~么大一本,我看要练个把月。”
陈近南一本正经地告诉韦小宝,“这本只是绝世武功的目录”,然后指着身后高高地几摞书说,“那堆才是绝世武功的秘籍。”

以我目前嵌入式的能力肯定是写不出绝世武功的,那是宗师级别才能干的事儿。但写不出绝世武功的陈近南依然可以叱诧江湖,所以,接下来便是绝世武功的目录,请各位接好了(幸运的是,嵌入式远的学习比练绝世武功更简单,不用像电影里的陈近南那样“看了三年,练了三十年”)。

说到工科选书,其实是有一个窍门儿的,不需要在网上拜访各路大神,更不需要时不时地献上膝盖。真正千锤百炼的入门级书单就到大学的教材中去找,这一点绝对没有错。等你入门之后,相信自己就已经具备区别市场上品类繁多的技术书籍好坏的能力了。

不要说大学的教材太偏离实际,或者吐槽大学教授的东西根本就是与企业中的应用是脱节的,虽然当年我也干过这些蠢事儿。
如果你只想在嵌入式行业当个小工、混口饭吃,那么请随意找一本《XX天精通XXXX》读一下,如果你动手能力足够强,这几乎也就够了,但如果你想走一条大师甚至是宗师之路,那么还是老老实实地从基础打起吧。
知识是具备连续性的,无所谓过时不过时,汇编语言足够古老吧?但在嵌入式领域,不懂汇编语言是会被嘲笑的。而且,大学使用的教材基本上是很多前辈大神千挑万选或者有针对性地编写出来的,可以说是同类书籍中相对比较易懂的书籍。

当然,有了基础之后还是要进一步提高的,否则一辈子也只能停留在基础之上。这时就需要一些拓展的教材之外的书籍了。

之前的文章中也提到过,嵌入式的知识涵盖范围是很广的,即使是入门,也涉及到电子、计算机、通信等多个学科。前面也提到选书的顺序也很重要,于是根据我多年的摸爬滚打经验,综合电子、计算机等专业课程设置,排除掉与嵌入式无关或者关系不大的学科,为大家整理了嵌入式学习的主干课程以及课外扩展资料,阅读顺序,自左向右。
books

上图虽然看起来很吓人,但即使对于嵌入式行业的初学者,只要是一般大学电子、计算机等相关专业毕业,分割线以上的部分应该大都已学过,只不过花点儿时间再复习一遍而已。
不过,如果你是非相关专业毕业,却想从事嵌入式行业并且未来期望未来在行业内能够发展到一定高度,那么请踏踏实实地夯实这些基础。在这条路上真的没有捷径可走,如果随便上个培训班就能30天精通嵌入式开发,那么让我们这些在大学花了四年辛苦学习,和还要继续深造的研究生情何以堪。
另外,上图中分割线以上部分没有给出具体的教材,因为这部分内容不同大学使用的教材略有不同,而且基本上国内大学使用教材也就:清华大学、电子科技、高教等几个出版社,同一门课程内容都大同小异,差别不是很大。
上图分割线以下的参考资料阅读方法和时机略有不同:
  • 《TCP/IP详解》一定要学完《计算机网络》再开始看,初次阅读可以略看,等到开始研究网卡芯片驱动后联系实际代码再深入阅读;
  • 《电子设计从零开始》如果是电子专业就不必看了;
  • C语言相关的基本课外资料建议重点、反复地研究,C语言可以说是嵌入式中最重要的一门技术,没有之一,所以C语言基础一定要牢固;
  • 《代码大全》不是用来看的,是用来练的,看十遍不如敲一遍;
  • 《编写可读代码的艺术》是我随便找的,或者《华为编码规范》或者《微软编程规范》都可以,目的是在学习之初就培养一个良好的编码习惯,在未来一定会受益无穷;
  • 从《PCB…》到《电磁兼容》,从《51…》、《DSP…》到《ARM…》这几本书都是将理论结合实际来做具体练习的,这也再次证明了,嵌入式就是一门实践性很强的学科;
  • 从事嵌入式行业,C++未必需要研究到很深入的程度,但无论是基于操作系统的程序开发,还是人机界面,C++语言开发起来会更加的优雅,同时,深入了解一下面向对象的程序,能够更加开阔程序开发的思路;
  • 结合GNU套件来学习编译原理,一定要学会自己动手编写Makefile,会使用编译器的一些选项和特性,这样能够更加深入地理解程序运行背后的事情;
  • 《Python…》,学习一门脚本语言有助于更加快速地构建你的嵌入式项目,脚本语言在文本处理上的优势尤其明显,未来脚本语言在嵌入式开发领域必将扮演十分重要的角色;
  • 近些年网络化已经明显成为嵌入式行业的一个趋势,随之而来的通信安全问题在嵌入式系统的设计中也变得越来越重要,《应用密码学》对常用加密手段会有一定程度的了解;
  • 随着嵌入式芯片性能的不断提升,操作系统在嵌入式行业中的地位已经越来越高,但操作系统的学习要基于很多知识,所以不建议刚开始学习就接触操作系统,但对操作系统的学习一定是整个学习过程中很重要的一个环节,由于linux开源的特性,建议结合Linux源码来学习操作系统的相关理论知识;
最后转赠大家一句话:“勿在浮沙筑高台”,这是当年看侯捷老师的《深入浅出MFC》时印象最深刻的一句话。

发表评论