最近电子发烧友(以下称'发烧友')采访了韦东山老师,本文是采访原稿,展示出来让大家更深入了解韦老师的同时也进一步学习
嵌入式Linux经验。
机会总是留给有准备的人发烧友:为什么要学习掌握ARM裸机?ARM裸机与从事嵌入式工程师职业关联度如何?
韦东山:我们讲解的ARM裸机,特殊之处在于:不使用IAR/KEIL/MDK等软件,而是在纯粹的
linux环境下从0写代码。这些好用的开发工具屏蔽了太多的技术细节,比如:位置无关码、重定位、中断环境的保存与恢复、链接脚本。而这些细节,在后续的bootloader学习中是需要的。除上述细节外,ARM裸机的学习目的在于:掌握如何编写程序来控制硬件。后续的“Linux驱动=软件框架+硬件操作”,我们先在单纯的裸机学习中掌握硬件操作,在后面的学习中就可以把精力放在驱动软件框架上。我们学习ARM裸机的目的,是去学习后续的Linux课程,进阶为Linux系统工程师。不是要让你继续从事单片机开发,成为单片机工程师。在技术层面,Linux系统工程师回头从事单片机开发,轻而易举;但是现在不开始着手Linux的学习,后续转型很麻烦。2004年我们使用51单片机从事车载电话开发,所做的软件已经算是单片机层面顶尖水平了──我们可以在单片机上开发自己的
操作系统。但是,我们同事纷纷感觉到了危机,单片机能做的事情太单一了。当年流行wince,Linux刚起步,我们选择学习Linux,现在wince已经没人提及,而Linux仍如日中天。中兴公司也是在2005年才全面从vxwork切换到Linux的,我有幸进入中兴与他们一起研究Linux。在收入方面,大家尽可以去51job等招聘网站搜“单片机”、“Linux”,后者一般是前者2倍以上。在发展方面,有了Linux知识,几乎通吃所有产品。我从事过网络会议系统、监控摄像头、楼宇对讲系统、安防、广告机方面的开发,我只是开发底层系统,不是开发APP,这些产品通通使用Linux。现在兴起的
机器人、人工
智能,它们要落地的话,运行Linux系统的硬件是必选项。就身边事例而言,我是2008年离开中兴,随后几年里有几个同科室的同事也都离开了,他们都做Linux系统;现在都做得很不错。有人在联想做
Android开发,有人在做POS机,有人自己创业,他们或是团队领导,或是有股份。
发烧友:根据您的经历及见闻,现在ARM嵌入式工程师前途如何?含金量、薪资待遇呢?
韦东山:理想很丰满,现实很骨感。所有行业的从事者都是在一个金字塔里,工作好收入高离家近假期多的人,都只是少数。我只能说,平均而言,ARM嵌入式工程师待遇较好,发展前途不受限。说好话之前,先说丑话。ARM嵌入式工程师入门门槛高,职位需求相对APP来说是少的,很多职位需要你有经验。所以,有一部分同学最终只能转行:转而做单片机或APP开发。但是,ARM嵌入式工程师所处位置非常好,向下跟硬件工程师打交道,向上跟APP工程师打交道,可以参与整个系统的开发,前途不受限。我是个宅男,只能举身边的例子:我在中兴时从事嵌入式系统的同事,发展都很不错。我的科长,拥有专业的Linux底层知识的同时,极具大局观,他向上研究APP的相关知识、相关协议,上下兼通,是中兴的产品经理、总工了。同事A,早年从因POS机开发(用单片机),在中兴里天天加班深研Linux技术,现在在创业公司里当技术头头,有股份。加班多,但是收入高。同事B,在中兴里是做APP开发,后跳槽到OPPO后,深研底层开发,早几年单是年终将就是我的年薪,现在自己创业。同事C,女,跑到IBM做服务器相关的工作去了,嵌入式Linux的知识绝对是帮上大忙了。同事D,深研Linux系统知识,人称大师,从不加班(羡慕死人了),有大BUG必定请他出马、出差。对于嵌入式工程师,把Linux知识吃透了,可以游走于几乎所有行业,因为这些产品基本上都要用Linux。想当领导的话,向上学习一下APP、业务知识,你就可以掌握整个产品的开发全流程了。想创业的话,向下你知道需要什么样的硬件,向上你知道需要请哪方面的APP工程师。对于暂时找不到嵌入式LINUX职位的同学,不用担心,你总会发现机会的。做单片机产品的公司,产品升级的话必定要用Linux,到时你就是公司掌握先机的人;做APP的话,如果跟硬件相关,你的嵌入式LINUX知识会提供很多帮忙。
发烧友:一个合格的嵌入式工程师,需要具备哪些性格和职业特征?一些理工科学生或刚毕业不久的工程师老说迷茫,产生迷茫的原因有哪些,为什么?怎么克服?
韦东山:嵌入式工程师,必须具备的性格和职业特征:究根究底:操作系统层面的问题,必须彻底弄清楚原因,彻底解决,否则隐患巨大。绝对耐心:嵌入式工程师的代码量很少,多数时间是在学习新知识、协助调试。我在中兴工作时,曾经花了一个月来捕捉、解决一个BUG,最能只增加了一条指令。BUG随机出现,我不断地重启系统、重启软件;根据新现象不断地现学现用。大局观:你写的每一个驱动,功能上要实现,性能上也要实现。需要结合产品的实际需要,根据APP的特点,调整你的程序。调试BUG时,从APP到驱动再到硬件,各种可能的问题都要考虑。迷茫,唯一的原因就是对未来感到不确定。我的专业是物理,在大一大二时深感迷茫,不知道毕业后能做什么,我选择了学习第2学位:计算机。我刚工作时用的是51单片机,对所用的落后技术也深感迷茫,我选择辞职自学Linux。我在中兴工作时,加班多、工资少、房价高,仍然迷茫,选择创业。创业过程中,我录制Linux视频,期间
iOS火曝、
androidAPP火曝,很多人趁着风头做
ios、Android培训,我也迷茫,最后选择不跟风:现在这些培训很快就冷却了。我也算工作15年的老工程师了,也接近40岁了,仍不时觉得迷茫。但是我深信两句话:要收获,必须先付出;吃得苦中苦,方为人上人。对于迷茫的工程师,我建议:根据自己的兴趣,选择不太偏门的方向,潜心学习;选定方向后,不跟风不追热门。
发烧友:您是否遇到过女嵌入式工程师?在嵌入式工程师职业上女性有什么优势和劣势?
韦东山:我在中兴时就带过一个女同事,但是在这领域女性不多。我认为嵌入式工程师特别适合女性,相对于APP开发,嵌入式工程师工作中的需求交化不大,代码量也不大,不需要天天加班。劣势在于,嵌入式工程师入门门槛高,需要硬件知识、良好的英文阅读能力、多层面的软件知识(操作系统、驱动程序、APP开发),学习强度是挺大的。前期需要付出挺多。
名师引导更容易入门发烧友:很多新手学习ARM裸机都会很迷茫,请问在学习ARM裸机过程中容易遇到哪些坑?
韦东山:很多小坑,如果自己去解决的话,估计要花上几个小时,但是有经验的人一眼就能看出来。最奇葩:拿到开发板,把电源插到耳机孔去了。大多数:粗心,很多人拼写命令时写错了,结果忙上半天找原因。储备知识不足:开始学习时,我们只能照着文档写命令,这些命令的作用后面才会说明;如果当场就讲这命令,课程就会又臭又长。所以,我们都会建议:按着视频学习,不懂的、没讲到的,先放着;后面学完你就全懂了。
发烧友:成为一名具备一定开发能力的嵌入式Linux开发工程师需要具备哪些知识?
韦东山:我先说合格的标准吧:能在一个新的板能上搭建出Linux系统,能写出需要的驱动程序。所以,需要以下知识:硬件知识:能看懂电路图,看懂芯片手册,看懂硬件协议。英文阅读:上述资料基本是英文的。C语言:嵌入式工程师常用语言就是C。操作系统原理:有助于帮助我们理解Linux源码。常用驱动程序框架:精通几个驱动程序后,领悟原理后,才有能力开发新的驱动程序纸上得来终觉浅,你学完后,必须找一块不同的开发板,在上面把所学过的程序自己写出来,这样才能真正掌握──这也是我对新同事的要求。实际上,很多公司招聘时要求有工作经验。对于嵌入式工程师,这个经验非常容易得到:你换一个不同的板子练习就可以了。
发烧友:在学习ARM裸机或ARM Linux过程中,得到资深名师或导师的指引有哪些好处?
韦东山:学习过程中,很多因为粗心导致的问题层出不穷,自己去解决的话很花时间;嵌入式学习过程中,需要的知识非常广,自己临时去学习的话,进度很慢;能否跳过,自己也不知道。这时候如果能有人指引,效率会很高。我在2005年学习时,市面上基本没有资料,我学非常痛苦,在论坛上疯狂发贴,那些问题现在回头看非常弱智,但是当时就把我卡住了:茶饭不思,时不时想砸电脑。
发烧友:请问韦东山老师最终为何选择嵌入式授课教育?
韦东山:生活与兴趣推着我走上这条路,没什么情怀。我2005年适职自学Linux时,过程痛苦,把自己的学习所得写了一篇文章:S3C2410完全开发流程,发布在网上;然后就去中兴上班了。此文流传甚广,人民邮电的编辑联系我,要我出书。我答应下来,但是因为一边上班一边写书进度缓慢,于是在2007年辞职专心写书。2008年书出版了,钱花光了,于是接受华清远见的邀请,去做兼职讲师。讲课过程中,我采用完全不同的风格:从0写代码,边讲边写,大受欢迎,效果超好;慢慢有了名气后,游走于多家培训机构,天天讲课,天天现场写代码。这样天天做同一件事,天天写同样的代码,实在是烦死人,决定自己录视频算了。于是2011年底,发布第1套视频,承蒙学生们、工程师们厚爱,他们帮我一起打击盗版,口口传播,于是也就一直坚持到现在。我发现,我有讲课的能力,可以把复杂的问题讲得非常清楚,非常形象。我希望,众多像我当年初出校园的学生,他们有学习的渴望,我能帮他们一把。所以,一直以来,我不吹牛,不强拉人学习,想适合学习的人不强求。如果你要学习嵌入式系统,而我恰好经验丰富,你愿意的话我就教你。悦已之作,方能悦人。这是我们公司的格言,如果做出来的产品你自己都不喜欢,别人怎么会喜欢呢。在工作中,我就经常回头去重看视频(我也会忘记),从未感到脸红,因为我都是用心录制的。