两年嵌入式软件开发的工作感想
13年大学毕业至今已经两年有余,想想自己的工作经历还是挺曲折的,之所以选择了嵌入式软件这个行业,一方面的确是比较感兴趣,另一方面我觉得软件行业薪资待遇还不错。嵌入式系统是相对于桌面系统(PC)而言的,属于专用软硬件系统,而桌面系统属于通用系统,对于我而言,通用系统不能完全满足我喜欢动手实践的习惯,比如说,利用硬件DIY一些好玩的东西。所以,能从事自己喜欢的一份工作还是挺满足的。
入职面试的时候,老板给我上了一课,印象比较深刻,大概意思就是选择一份工作应该先看行业后看职业,只有好的行业作为前提,才能有一个不错的职业发展道路。电子产品在我们的日常生活中扮演者不可缺少的角色,半导体行业作为电子产业的前端,理论上说应该是相当有潜力的,所以,半导体产业应该算是朝阳产业。我的目光比较短潜,其实我只看中了我做什么,没有上升到整个行业的层面,想着如果能在我的职业里有一个不错的表现就心满意足了。可是到现在为止,我仍倾向于我感兴趣的职业,而淡化行业的选择。实践中也是这样的,只有自己发自内心的感兴趣了,才能全身心的投入进去,才能比较容易的走向一个相对不错的职业发展道路。面试通过后我就满怀希望的加入了我现在的公司。
我所在的研发中心在成都,相比集团其他研发中心,我们这成立时间比较短,招聘大多是校招,所以我入职的时候资历较深的研发工程师并不是很多,公司对新人培训的理念是On job trainning, 也就意味着公司给了你很大信任,直接上手项目。这样新人会很快的上手,相比其他公司,我觉得在这里会成长的更快一些,新手意味着做出的项目的质量可能会不好,所以,经理会给新入职的同事很大的关照,各种review,各种提点,在完成了一两个项目后,就差不多上手了,之后经理就比较少的搭理你了,这时候你的权利会比较大,很多时候需要自己做决定,这当然是基于领导对自己的信任。这个时候我们在做项目的时候就会多了一些责任感。
之前参加过嵌入式软件的培训,全职培训历时大概有5个月左右,玩的操作系统是Linux,我们用的开发板是三星的OK6410开发板,用的内核版本是2.6.28,PC上装的Linux系统是Ubuntu 12.04,从那时起就对Linux着迷了。Linux是完全开放的,里面的很多理论都对我现在的工作有帮助,例如Makefile的编写规则帮助了我更好的理解了VS工程的设置,VS的工程设置应该是在windows下的图形化的Makefile的编写,其理论应该是如出一辙。两年时间里,我大多是做的裸机开发的工作,比较少接触Linux操作系统下的开发,对常用的通信,如SPI,I2C,USB,RS485,RS232等有了一定的了解。后期的开发主要基于xilinx的SOC平台,BSP的使用省去了对寄存器的直接操作,使用起来更加方便了,只是如果需要对SOC架构或原理性的东西进行深入研究就得阅读大量的文档资料,也就在这个时候,我的英文阅读及英文写作能力有了较大的提高,当然这少不了平时各种写文档,各种写邮件的帮助。
初来公司,作为新手,不到一周就接手了一个项目,当时的心情是欣喜加紧张和担心,欣喜自己终于接触到真正的项目了;紧张是因为之前从没有进过实验室做过真正的项目,有的只是一些实训的项目,没有真正的商业用途;担心是因为担心自己做不好,于是我拼命的加班,有一两个月整月上班,周末基本不休息,分析之前做过的类似的项目,再研究同事提出的design spec。当然,加班不会一直都这么疯狂的,松弛有度才是长久之计。4DX是我接触过的一个比较好的管理理念,无论是生活还是工作,如果运用得当,就可以很大程度上帮助我们提高做事的效率。对于聚焦最重要的目标这一点是我比较有体会,工作中总是有很多搞七搞八的事要做,对于能否在给定的时间完成任务而言,聚焦最终要的目标就显得尤为重要;其实我们的很多经验都是从失败中积累的,所以,正确的看待失败其实对我们很有帮助。
谈谈我对Linux开发的一些个人见解,培训的时候我们有一个月的课程是在学习学习Linux应用开发,还有一个月是在学习Linux驱动开发,我觉得Linux应用开发对C语言的功底要求比较严,之前做过一个基于Linux平台的物流追踪系统,包括一个控制板,GPS接收模块和GPRS短信发送模块,原理是GPS不断接收位置信息,然后交给控制板解析,然后控制板监控接收客户端通过GPRS发送的位置请求,之后再发送解析好的位置信息给客户端,整个过程用到了多线程、串口操作、AT指令等相关知识点,其中我觉得最好玩的就是字符串解析,很多公司在面试的时候都会出一些字符解析的题目,这很考验一个程序员的进本功,所以作为一名程序员,字符串解析是一个很有意思的练习。回归正题,我觉得在Linux下的项目开发可以让你了解很多机制性的东西。比如,Linux下需要自己写Makefile,非常灵活,虽然麻烦一点,可是只需要写一次就OK,而且你会对编译器的行为非常了解,你会变得越来越厉害;而在windows下就只build一下就OK,可是这其中隐藏的道理你却很难去整明白。Linux应用开发会多一点涉及文件操作、多进程多线程、进程间通信,TCP(UDP)/IP模型等;我对Linux硬件驱动开发的理解是:硬件驱动开发=软件机制+硬件寄存器操作;当然还需要一些语言功底,因为同一硬件可能同时被多次调用,即多线程同时操作同一硬件,所以,一些同步的机制是必不可少的。驱动的开发一般都不是从零开始的,一般都是从一些框架或相近的驱动改过来的,所以我觉得很多东西其实并没有我们想象的那样触不可及,只要我们大胆的去尝试,未尝不可实现。记得刚开始培训时,老师说过一句话,管它学海有多深,学一分有一分的快乐,确实如此,不要一开始就被吓怕了。
D-K effect:中文名字是达克效应,我是在经历了工作中的成长,再反思自己之前的一些行为才体会到的,讲的是一种认知偏差现象,这种认知上的偏差带来的后果轻则骄傲自满,影响自己上进的进度,重则影响团队的协作和发展,所以能时刻保持一个空杯的心态真的很重要,尤其是像我们程序员这种需要不断学习的职业。附上达克效应解释的链接:/link?url=c2CXfrKPcpUrsnUij-U37DdMMnVXP6masoztwjMFLq2Dz7QkPq9G89JlPPlJWC0g9ykfGITCm8TShdSGw95tuq
作为一个程序员,加班是必不可少的,一天的大多数时间都是在办公室或着实验室坐着,时间长了,身体就会出现各种不舒服,每周坚持几次锻炼真的很重要,身体是革命的本钱,即便是你的技术再厉害,没有一个好身体作为支撑也是不行的。
讲的有点乱,算作自己的一点感想吧!