唐攀,华清远见高级研发工程师和高级讲师,从事Android底层及系统移植相关研发工作,担当企业在职员工培训、企业内训及大学生职业培训。有多年知名外企嵌入式方向软件研发经历,拥有丰富的项目经验,与杨铸共著《深入浅出嵌入式底层软件开发》一书。2009年转行到培训与研发结合的教育行业,并从那时开始进行Android应用开发及底层移植等工作。
兴趣+坚持=一门新技术
CSDN:根据介绍,你以前是在日企从事汽车嵌入式开发,是什么缘故促使你转向Android移动开发?在自主学习的过程中有没有遇到什么困难?你是如何克服的?
唐攀:其实从07年Steve Jobs发布iPhone手机开始,我们已经从信息时代进入了移动互联网时代,这是个更细化的新时代,在地铁公交上,几乎每个人都在对着移动智能设备进行“交互”。当Android在08年出现,大陆的程序员基本上09年才开始接触 Android,我之所以转向Android移动开发,主要是因为Android是基于Linux操作系统,而我之前又是做Linux应用与驱动工作,所以一定的“交集”让我快速转型。当然,刚开始对Android很陌生,后来买了部G1手机才开始慢慢感受到它的优势,比如开源、程序间平等、UI漂亮和可玩性强等。
刚开始学习Android还是2009年,那个时候网上并没有现在这么多的资料,所以都是直接从官方网站上看在线SDK。有问题也是Google去解决,并且一般做底层的都是和C或C++接触比较多,所以Java语言这儿可能也会有一点突破,不过还好,学会C的人,学其它语言都不难。在学习Android应用时没有很大的困难,就是:兴趣+坚持,而到了后面可能问题就比较多,各种服务的使用,自定义控件或样式等。
后来我又转到Android底层,这主要是因为开源是Android最大的优势,也比较适合国情。在底层最大的困难就是环境搭建和调试经验,基本上每个问题上都会卡上一段时间,一旦解决了,这些就会是自己的经验,一般快捷有效的解决方法都是借助google和自己的跟读代码。
CSDN:是什么原因让你从技术人员成为一名教学工作者,有特别的故事和我们分享吗?
唐攀:这得归结于机会和个人选择共同作用的结果,08年金融危机,外企处境不妙,而教育培训机构却独树一帜。当时一朋友介绍到一培训机构里研发嵌入式开发板上对应的教学案例与项目,后来偶尔也能替讲师上课,再后来教学总监觉得效果不错。在教学案例与项目研发结束后,总监就让我转到教学上——做教育,这是个良心产业,当讲师也相对比较体面一些,收入和做研发差不多,但是一般不会加班,因此有工作、有兴趣和有生活,也就喜欢上这个行业。
CSDN:你从事Android底层教学工作,对于如何更好、更深入地学习Android技术肯定有独到的见解,可以与我们分享下这一块经验吗?
唐攀:独到的见解倒谈不上,倒是有一些对初学者的建议,Android是一个大杂烩,牵扯的东西非常多,比如Java、C、C++、设计模型、Linux和驱动等等,总之太多了。如果你是做嵌入式底层,比如做过驱动,做过Linux应用程序开发,那你学Android底层相对比较轻松一些,如果你是做上层的,那你要突破的点太多了。我觉得学习Android底层,应站在应用程序角度考虑接口,站在接口角度考虑框架, 站在框架角度考虑硬件抽象与数据处理,以Linux操作为基础,以编程语言为武器,以设计模型为战略,以read source code 为具体动作,坚持下来就行。
CSDN:你和杨铸共同编写了《深入浅出嵌入式底层软件开发》一书,在这本书中,你都做了哪些贡献?在出书的过程中有什么难忘的回忆吗?
唐攀:杨铸老师就是前面提到的朋友兼总监,他先提出来要写一本书,他负责高级驱动那部分,但又想将ARM体系结构加入到书中,由于我一直做这块工作,所以书前面的ARM体系结构及裸驱这块是我写的,杨老师负责后面的部分。至于出书的回忆太多了,我记得无数个夜晚我同时对着三块板子调试书籍里提到的案例(因为我自己改的一个小操作系统要运行在三块常见的开发板上,降低读者学习成本),用了一整天时间画一张中断流程总图,书籍中ARM部分,每一幅图都是我自己亲手PS,反正总共写了300多页,用了半年时间。不过这些付出还是值得的,通过网上书店的评价来看,读者还是比较认可这本书。
如何学习嵌入式开发
CSDN:可以说说当初你为什么选择嵌入式开发?你认为学习嵌入式开发如何开始和深入?
唐攀:选择嵌入式开发是兴趣使然,这得归功于我父亲的影响,他当兵是学无线电,复员后工作之余帮邻居修电视及收音机等。受此影响我也对这些特别感兴趣,大学就直接选择学计算机,毕业了找工作也是底层相关,不过当时叫单片机……,可以说兴趣主导了我的方向,每当我看到电子产品时,我就特别有感觉。
如何开始和深入学习嵌入式开发,这个还是要和专业相关,并且有兴趣,因为嵌入式有时真的挺枯燥,简单的问题可能卡上几天。深入的话,就是个人追求的问题,我是喜欢打破沙锅问到底的人,嵌入式这块如果你想深入的话,汇编和体系结构要学好,然后是操作系统要了解透、中断处理、内存管理和内核结构体等等都能达到掌握程度,另外再加上代码的阅读能力就差不多了。
CSDN:你认为要成为一名优秀的嵌入式工程师应该会哪些技术,具备哪些职业素养?
唐攀:技术无止境,几年前J2ME还很火,可现在已是Android和ios天下,再过两年可能就是HTML5,这些都不好说。其实技术只是工具,最主要的还是编程思想和一个人对新方向的嗅觉能力,编程思想这块就是开发经验的积累,多调几个错误、多写代码、多看别人的代码和多实现自己的想法,然后就是多关注国内外类似CSDN的一些IT资讯门户。谈到职业素养,其实就是一句话:北京的IT圈子很小,抬头不见低头见,不在一时之得失,做好每一件事,写好每一行代码。
CSDN:请简单介绍下哪些是常用的嵌入式系统?在这些系统中,如何选择适合自己的系统?
唐攀:常用的嵌入式系统主要还是按功能分:实时和非实时,单任务与多任务,常见的有vxworks、linux、winCE和ucosII等。选嵌入式系统得根据硬件芯片和系统功能来决定,如果实时性要求高的,那么就是vxworks和ucosII,如果用于处理多任务,并且要UI表现好点,那么就是linux+QT或Android与winCE。
CSDN:硬件开发平台有FPGA,ARM,DSP,AVR等等,哪个更好,能简单分析下吗?初学者如果要学习ARM开发板,该如何去选购?
唐攀:其实不能说硬件开发平台哪个更好,只能说哪个更适合你哪个更有前途,说白了,就是赚的多还不累的。其实这几个平台都有自己的特点,FPGA基本上是纯硬件,搞IC的,DSP主要是逻辑处理控制,ARM平台现在应用比较多一些,基本上就是针对ARM的芯片进行编程和外设控制,AVR是比较偏小型化的单片机开发和设计,应用广泛且比较简单。如果你是硬件专业的,就做FPGA或ARM、AVR的外设电路设计,如果做软件的,就DSP、ARM和AVR的编程等。如果初学者要学习ARM开发板,我觉得还是2440的比较不错,一是便宜资源多,二是方便调试。有很学生就想花大价钱,买最好的板,其实没有用,买了学习用不上也是浪费,不如自己花500多块买个2440,一点一点的学习,学习成本最低且效率最好。最好去淘宝上找一个2440开发板,那里不仅多,关键不贵包邮,还送东西。
CSDN:有人说嵌入式开发不一定要会ARM汇编指令集,你怎么看的?还有人说会Windows CE的都是牛人,不过也有人讲Windows CE没前景,就业范围太窄,你是怎么看待这个问题的?
唐攀:没写过汇编程序的C语言的程序员,不是优秀的程序员。为什么这么说?汇编并不是一门语言,而是背后的体系结构,了解体系结构后,能大大增加你的计算机理解力,能写出高效的C代码,就好像C语言是武器,而体系结构是剑法,有了宝剑,没有剑法,不能达到最高的杀伤力。WinCE我没有太多的经验,现在WinCE是有点落伍了,主流都是WindowsPhone了,不过目前WindowsPhone市场需求还没有激发出来,再过上一年应该差不多了,大家可以关注下,个人比较看好它。
CSDN:抛开自身因素,当前嵌入式开发学习往哪个方向发展比较好?另外在未来移动物联网和云计算将大行其道,你觉得嵌入式开发都有哪些发展机遇?
唐攀:现在来说,嵌入式开发最好和现在的物联网、智能家居和云计算结合起来,物联网有传感器外设,有控制单元,云计算要与端结合,这些过程都需要嵌入式,我们平时工作中要多关注新理念和新机遇。
CSDN很多内容值得我们去学习
CSDN:你是什么时候接触到CSDN,它对你工作和学习起到哪些帮助或影响?对CSDN有什么建议,对其未来有什么期待?
唐攀:很早就接触CSDN,这主要还是在开发过程中遇到问题,百度一看都是CSDN的文章,心想差不多有救了,因为CSDN是专业做IT的技术库,其中有很多经典的文章和内容值得我们去学习和扩展。对CSDN的建议就是多分享些世界新技术,多报道一些国内外的新点子,同时希望CSDN能多在大学生中举办些开发创新活动,提高国人的创新能力,争取出些Facebook这样的人才,让中国的IT人成长更快,质量更高。