linux开发工程师,linux 开发板
前言
在“关于我”的博客上,朋友们应该知道我不是科班出身,而是被强制从机器跳槽到了Linux APP开发的方向。 我想向大家详细介绍一下这条路的跳槽历史,对大家有所启发。
我是机械专家,对机械专家还很感兴趣。 而且,当时这个专家也是自己选择的。 虽然本科时代的成绩不是第一,但也在专业的前列。 硕士时的成绩一直是专业第一名,还获得过国家奖学金。 由此可见,我还是很喜欢机器的。
我读研究生的时候想去中国科学院深造。 很遗憾,我不及格。 我想成为机械砖家。
拐点
但是转机在我毕业之后。 本来一直想踏实地制造机器,但背后却是阳错阳错。 第一份工作是由机械工程师安排给电子工程师的。 虽然是电子工程师,但是做了很多代码工作。 那个时候我学习了Verilog和C#
并在C#上开发了测试工具和生产用上位机。 据说那个测试工具现在还在电子部门使用。 那时,我真的接触了编程,深深地被编程的世界吸引住了。
但是,我在学校学习机器。 与软件相关的最多是c语言和汇编语言,但c语言是10年前学习的。 我早就还给老师了。 因此,为了工作的需要,我硬着头皮开始学习编程。 我每天早上六点起床,
学习一个小时后7点去坐公交车,晚上下班回家后继续学习。 在这样的条件下我学习了Verilog和C#,同时对STM32有了大致的了解。
但是,那个单位毕竟不是完善软件工作,而是需要做电子工作。 做软件的人都知道编写代码的时候需要一个不受干扰的环境,但是我的工作单位,一天能接到十几个电话,可以严重干扰我的软件开发进度。 因此,我决定离开公司。
成为真正的软件工程师。
入門
第二份工作,我是嵌入式工程师。 去公司之前,我学习了一遍系统51,看了《郭天祥十天学会51单片机》,对单片机有了初步的入门。 正式进入公司后,利用另一个月的时间体系再学习一次c语言,
看到的是c语言之父写的《c编程语言》。 这本书写于80年代,但至今似乎仍过时。 而且,这本书又薄又容易读,很有成就感。
看了“C编程语言”之后,最好看“C和指针”、“C专家编程”、“C陷阱和缺陷”。 这三本书被称为《c语言三剑客》。 学习了它们之后,你的c语言水平绝对会非常高。 要做我们的工作,C语言是基础语言。
请务必完全掌握c语言。
之后,由于工作需要,开始接触Marvell 88MC200和88MW300。 这两种是WIFI芯片,但本质是单片机,采用ARM M3内核。 底部驱动程序是制造商写的,
我们应该做的工作是以SDK为基础制作APP进行二次开发。 在这个过程中,我对敏捷开发有了初步的认识,阅读了《高效程序员的45个习惯:敏捷开发修炼之路》一书。
第二家公司知道了物联网的整体解决方案,对物联网的整体框架有了更深的理解。 同时,全面掌握嵌入式开发所需技能,达到能够独立进行一个物联网项目的水平。 当然,在此期间还学习了版本控制工具git。
我在看《Pro Git》和《git权威指南》。 同时,进一步系统地学习了STM32。 读的书是野火的《STM32库开发实战指南》,但是看的视频是正点原子的。 这里强烈推荐正点原子的视频
做得真的很好。
我因为换了工作,基础很弱,我知道起点比别人落后很多,所以我很努力地学习。 我住在公司附近,公司8点上班,我依然6点起床,12点睡觉。 平时在公司学习,看代码,写代码,调整代码,
我在公司度过了好几个星期。 为了换工作而埋头学习,放弃了一切娱乐活动,为了赶上同事稍微努力了一点。 这种状态一直持续着我在这家公司的全过程。
新挑战
可惜,一年之后我不得不离开了,因为我老婆在广州,我去广州追随我老婆了。由于我面试时的不错表现,以及我不错的英语口语,我顺利的被广州一家外资世界500强录用。我的新岗位是Linux应用开发工程师,
使用C++开发。而在那时,我既不会Linux,也不会C++,所以公司敢录用我真的是勇气可嘉。
从单片机到Linux又是一个比较大的跨度。Linux主要有三个方向:运维、应用、底层,而我选择的是应用方向。为了工作的需要,我必须先拿下C++。好在公司是外企,几乎不加班,于是我有充足的时间学习。
可是,每天坐班车的时间加起来有三个小时,这么好的时间我不能浪费啊,于是,我买了个iPad,下载一套视频,在班车上也进行学习。当然,我也注意保护眼睛,在班车上绝不看书,看视频的时候也经常往窗外看看。
这里讲讲自学过程中是采用看书还是看视频的方式。我采用的是先看视频再看书的方式。为什么要这样?因为我个人觉得,很多技术书都是很厚的一本,自己看下来要花费很多时间精力,而且很多知识点在工作中很少会用到,
可以暂时先略过的。视频一般会比较短,一般是几天就能看完,而且老师一般只挑重点的讲。我们时间都很宝贵,我建议先把老师讲的知识完全掌握了以后,再利用书籍进一步扩展其它知识。但是,不管是看书还是看视频,
一定要写代码,一定要写代码,一定要写代码,否则非常容易造成眼高手低!
我这家公司里我依然保持着早上6点起床,晚上11点睡觉的习惯。这样早上有1个小时,晚上3个小时,班车上3个小时,一天总共有7个小时可以用于学习。而周末我会睡个懒觉,7点起床,依然11点睡觉,
周末几乎不出门,所以周末又有大量的时间可以用来学习。
C++实在是太难了,我用了一个多月才将视频里的知识完全拿下来。之后,在工作中,陆续开始看「C++ Primer」 进一步巩固。其它书籍推荐:「Effective C++」,
「C++语言的设计与演化」,「C++ 标准程序库」。在stackoverflow上有个C++必读书单,可以去看看。
学完C++我再学习了Linux系统编程,同样采用的是先视频后书籍的方式进行。不管是视频还是书籍,一定要看最经典的。市面上有太多良莠不齐的视频和书籍,如果选择了一个质量不好的材料来看,
不仅会浪费很多时间,而且有可能还会被误导。对于视频的选择,可以去各大培训机构,里面通常有一些免费视频资料供我们下载。
对于Linux应用的学习,主要有六部分:1. 环境搭建;2. 基本操作;3. 系统编程;4. 网络编程;5. 数据库编程,6. Shell编程。下面一一详细介绍。
1. 环境搭建
作为Linux工程师,毋庸置疑一定需要Linux环境。对于Linux环境的获取,我们通常有两种方式:
将电脑整体安装为Linux系统;在电脑里安装一个虚拟机,跑Linux电脑;Window+Linux双系统。得到Linux环境后还不够,
还要知道如何配置、如何远程连接Linux电脑、如何与Linux电脑互传文件、如何在主机上阅读Linux电脑中的代码,等等。
2. 基本操作
众所周知,Linux很少或几乎没有界面,所有的操作几乎都可以通过命令行来完成。对于运维人员来说,需要掌握相当大量的Linux命令。而对于应用、驱动方向的人员来说,只需掌握一些基本的常用的命令即可。
对于这部分很多人建议看「鸟哥的私房菜」 ,但我觉得这个更适合运维人员,我们无需掌握那么多命令。
3. 系统编程
在学系统编程之前,一定要先学习Makefile,这会为后续的学习提高很大效率。之后的系统编程,主要有几大块:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)。这几部分学完了,
基本也就差不多了。
4. 网络编程
网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。
5. 数据库编程
数据库的内容其实并不属于Linux,但在项目中经常要用到。这部分主要要学会数据库的基本操作,以及如何写一套接口去操作数据库。
6. Shell编程
Shell是Linux下的脚本语言,功能虽然不如高级语言强大,但它可能做很多事,在某些场合甚至比高级语言要方便得多。当然除了Shell脚本,还有Python脚本。
Linux应用编程书籍推荐:
UNIX环境高级编程。简称APUE,号称程序员的圣经。它不是一本API字典,它还讲述了很多操作系统的细节,内存,文件系统等方面,是一本难得的好书。但是它起点有点高,不适合初学者。Linux程序设计。
如果觉得APUE有点难入门的话,可以选择此书进行入门。Unix/Linux系统编程手册。这本书号称是一本超越APUE的书,它是一本比较新的书,里面新增了APUE所没有的Linux/Unix新特性。
而且对于一些概念性的东西讲的确实比APUE好。但至于能否超载APUE,还有待历史的考验。UNIX 网络编程。也是一本非常经典的书,主要是网络编程方向的。MySQL必知必会。
本书在Amazon上长期排在数据库销售榜首,建议想快速了解数据库原理和MySQL的新手阅读。快餐性质,简洁明快,小开本,而且很薄,比较好阅读。Linux Shell脚本攻略。这本书很薄很精华,
它追求的不是全,而是精,所以用它来入门再适合不过了。学完以上六部分,基本就有能力完成Linux环境下的应用编程了。当然,在有些场合我们可能还需要用到Python脚本。
像我公司的项目部分脚本就是用Python完成的。对于Python的入门,可以参考「简明Python教程」。但如果想进一步提高的话,那就需要阅读大量书籍了。对于Linux层级的脚本应用,
掌握一些基础的足够了。
以上就是我的Linux应用开发自学之路,虽然我离高手还有很长的距离,但我还是将自己的这段自学经历分享出来,希望能够帮助朋友们少走一些弯路,同时也期待和高手一起学习、提高。好了,今天的分享就至此为止。