入门
第二份工作,我是嵌入式工程师。在去公司之前,我系统的学了一遍51,看的是郭天祥两天学会51单片机,对单片机有个初步的入门。真正入职后,再借助一个月的时间系统学习一遍C语言,看的是C语言之父写的C程序设计语言。这本书尽管写于80年代,但如今看来仍然不过时。并且这本书比较薄,容易看完,比较有成就感。
看完「C程序设计语言」之后,最好再看C和表针,C专家编程,C圈套与缺陷。这三本书堪称「C语言三剑客」,学完它们你的C语言水平绝对是十分之高了。做我们这行,C语言是基础语言,一定要把C语言完全拿下。
然后为了工作的须要,开始接触了Marvell88MC200及88MW300。这两款是WIFI芯片,但本质是单片机,采用的是ARMM3内核。底层驱动早已由厂家写好了,我们要做的工作就是在SDK基础上做应用做二次开发。在这个过程中linux开发教程,我对敏捷开发有了初步的认识,看了高效程序员的45个习惯:敏捷开发修练之道这本书。
在第二家公司里,我晓得了物联网的整体解决方案,对于物联网的整体框架有了更深入的了解。同时对嵌入式开发所需的技能有了全面的把握,达到就能独立做一个物联网项目的水平。其实,期间还学会了版本控制工具git,看的是ProGit及git权威手册。同时再进一步系统学习了STM32,看的书是野火的STM32库开发实战手册,但看的视频却是正点原子的。这儿强烈推荐正点原子的视频,真的是做的特别好。
因为我是改行,我自知底子薄,起点比他人落后好多,因而我很勤奋学习。我就搬去公司附近,公司8点下班,我仍然6点早起,12点午觉。平常没事的时侯就在公司学习,看代码,写代码,调代码,甚至好几个假期也是在公司渡过。为了改行我一心扑在了学习上,舍弃了一切娱乐活动,只为能赶上朋友一点半点。这个状态仍然持续了我在这个公司的整个过程。
新挑战
可惜,一年以后我不得不离开了,由于我女儿在北京,我去上海跟随我儿子了。因为我笔试时的不错表现,以及我不错的法语口语,我顺利的被北京一家内资世界500强录用。我的新岗位是Linux应用开发工程师,使用C++开发。而在那时linux开发教程,我既不会Linux,也不会C++,所以公司敢录用我真的是勇气可嘉。
从单片机到Linux又是一个比较大的跨径。Linux主要有三个方向:运维、应用、底层,而我选择的是应用方向。为了工作的须要,我必须先拿下C++。好在公司是国企,几乎不加班,于是我有充足的时间学习。而且,每晚坐班车的时间加上去有三个小时,那么好的时间我不能浪费啊,于是,我买了个iPad,下载一套视频,在班车上也进行学习。其实,我也注意保护双眼,在班车上绝不看书,看视频的时侯也常常往窗前瞧瞧。
这儿讲讲自学过程中是采用看书还是看视频的形式。我采用的是先看视频再看书的形式。为何要这样?由于我个人认为,好多技术书都是很厚的一本,自己看出来要耗费好多时间精力,但是好多知识点在工作中甚少会用到,可以暂时先略过的。视频通常会比较短,通常是几天能够看完,但是老师通常只挑重点的讲。我们时间都很宝贵,我建议先把老师讲的知识完全把握了之后,再借助书籍进一步扩充其它知识。并且,不管是看书还是看视频,一定要写代码,一定要写代码,一定要写代码,否则特别容易引起眼大神低!!
我这家公司里我仍然保持着晚上6点早起,下午11点午觉的习惯。这样晚上有1个小时,下午3个小时,班车上3个小时,三天总共有7个小时可以用于学习。而周六我会睡个赖床,7点早起,仍然11点午觉,假期几乎不出门,所以假期又有大量的时间可以拿来学习。
C++实在是太难了,我用了一个多月才将视频里的知识完全拿出来。以后,在工作中,相继开始看C++Primer进一步巩固。其它书籍推荐:EffectiveC++,C++语言的设计与演进,C++标准程序库。在stackoverflow上有个C++必读书单,可以去瞧瞧。
学完C++我再学习了Linux系统编程,同样采用的是先视频后书籍的形式进行。不管是视频还是书籍linux系统镜像下载,一定要看最精典的。市面上有太多参差不齐的视频和书籍,假若选择了一个质量不好的材料来看,除了会浪费好多时间,并且有可能就会被蒙骗。对于视频的选择,可以去各大培训机构,上面一般有一些免费视频资料供我们下载。
对于Linux应用的学习,主要有六部份:1.环境搭建;2.基本操作;3.系统编程;4.网路编程;5.数据库编程,6.Shell编程。下边一一详尽介绍。
环境搭建作为Linux工程师,毋庸置疑一定须要Linux环境。对于Linux环境的获取,我们一般有三种形式:得到Linux环境后还不够,还要晓得怎样配置、如何远程联接Linux笔记本、如何与Linux笔记本互传文件、如何在主机上阅读Linux笔记本中的代码,等等。基本操作众所周知,Linux极少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,须要把握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需把握一些基本的常用的命令即可。对于这部份好多人建议看「鸟哥的私房菜」,但我认为这个更适宜运维人员,我们无需把握这么多命令。系统编程在学系统编程之前,一定要先学习Makefile,这会为后续的学习提升很大效率。以后的系统编程,主要有几大块:IO编程、进程、线程、进程间通信(包括管线、信号、信号量、共享显存等)。这几部份学完了,基本也就差不多了。网路编程网路编程主要就是socket,poll,epollLINUX 删除目录,以及对TCP/IP的理解,同时要学会高并装束服务器的编撰。数据库编程数据库的内容似乎并不属于Linux,但在项目中常常要用到。这部份主要要学会数据库的基本操作,以及怎样写一套插口去操作数据库。Shell编程Shell是Linux下的脚本语言,功能其实不如中级语言强悍,但它可能做好多事,在个别场合甚至比中级语言要便捷得多。其实不仅Shell脚本,还有Python脚本。
Linux应用编程书籍推荐:
学完以上六部份,基本就有能力完成Linux环境下的应用编程了。其实,在有些场合我们可能还须要用到Python脚本。像我公司的项目部份脚本就是用Python完成的。对于Python的入门,可以参考简明Python教程。但若果想进一步提升的话,那就须要阅读大量书籍了。对于Linux层级的脚本应用,把握一些基础的足够了。
以上就是我的Linux应用开发自学之路,尽管我离大神还有很长的距离,但我还是将自己的这段自学经历分享下来,希望还能帮助同学们少走一些弯路,同时也期盼和前辈一起学习、提高。好了,明天的分享就至此为止。