杨云君,《Android的设计与实现 卷Ⅰ》作者,资深Android系统专家,不仅在Android应用开发方面积累了丰富的经验,而且精通Android系统级开发和性能优化,对整个Android系统的架构设计与实现原理有十分深入的研究和透彻的认识。

(APKBUS配图)
 
  以下为小编对杨云君作者的访谈内容:
 
  APKBUS:请和大家介绍下您及所从事的工作?
 
  杨云君:
 
  2006年大学本科毕业,此后在企业级应用领域做过网银中间件和运营系统。
 
  2009年初涉足移动通信平台,开始接触Symbian和Android。
 
  到目前为止,一直从事Android应用层,系统框架层的研发工作,主要解决ANR,OOM,System Server Watchdog、性能优化以及系统级调试等问题。
 
  APKBUS:您是如何踏上Android开发这技术领域的?
 
  杨云君:
 
  踏上Android领域可以说有点阴差阳错,起因要从2008年开始说起。2008年可以说是一个让大多数人悲喜交加的年份,雪灾、地震、奥运、金融危机、企业大裁员以及后来的房价大跌。这么多大事集中在一个年份,人总是要有些改变的,不能改变的那只有神了。那一年Java EE及其衍生品SSH(Struct+Hibernate+Spring)在很多领域已经是遍地开花,掌握这个领域技术的人才已经饱和,一些有规模的公司已经具备完善的程序库并形成了自己的开发模式。很多时候,开发变成了“配置+Copy/Paste+数据库”的简单模式,Java EE再也不是那个熟悉EJB便被奉为牛人的辉煌时代了。随之而来的是大量低技能从业者的涌入,在此期间也遇到过不少有趣的事情,下面列举一二:
 
  a.公司招聘的新人问为什么String s = “abc”这句要加String?
 
  b.新人不懂指针,我问:大学里都学过C语言,指针应该都学过了。新人答曰:我们老师都不会,讲到指针就略过去了。
 
  c.公司里很多人,不会使用Linux和Oracle数据库,甚至都不会安装,甚至多次不会安装。
 
  大家可能会说,你这什么公司啊,我们公司的人就比这个强!!实不相瞒,上述事件就发生在国际知名的世界500强软件公司。
 
  上述事件,不足以说明问题,但我已经隐隐感觉到这个领域是没有出路了。改变的种子已经埋下了,但不知道改变什么,如何改变。
 
  上述事件发生后,时间就到了2008年的下半年,我有幸被派去国外总部出差学习,接触了国外的软件从业者。本以为国外从业者的状况会比国内好一些,可一个月过去了,我发现,他们也好不到哪去,只有核心的几个人承担核心的工作,其余的人还是在打酱油。于是我开始慌了,都是打酱油,那老人如何比新人更优秀呢?难道打更多的酱油?
 
  就在此时,美国金融危机全面爆发(以美国两大房贷巨头暴跌为标志),公司在其母国开始重组并裁员。那时候我并没有意识到问题的严重性,或许大多数人都没意识到,都沉浸在奥运的欢乐中(呵呵!有朋友炒了几张奥运门票赚了几万)。
 
  时间过的飞快,一段时间的学习结束后,我便回国了,在国内分公司继续任职。趁着奥运的余温,我也乐呵了一段时间,暂时忘记了烦恼,晃荡到2009年。
 
  可好景不长,金融危机远比想象的严重,国内分公司也开始裁员了,裁员规模远超想象,几乎每天都有多名同事离开。离开的还好,反正横竖都是走人,最痛苦的是没离开的,天天沉浸在折腾中,那种心情可想而知。
 
  大半年折腾过去了,发现500多人的公司还剩下一100来人,我就被剩下了。总算做了回“剩人”,好歹不是“剩男”。在有些人看来,剩下总是好的,据说有离开的同事,1年没找到工作。
 
  大裁员过后,我虽然被委以重任,但我已经不想继续在这个领域里发展了,此时我突然想到在国外出差时候,有几个同事在摆弄一个叫Android的东西,于是开始看Android方面的资料,周围的同事看到我在学习android,便给我推荐了Symbian系统,于是我Symbian和Android一起看,后来觉得Symbian没有前途,便毅然学习Android。现在想想当初真悬,如果学了Symbian,现在不知道去哪哭了,看来独立思考的能力是很重要的。
 
  打定主意后,便开始准备了,之后又发生了一些足以改变我一生的事情,就不便多说了。再后来,告别了器重我的国外领导,降薪进入一家国内领先的Android方案公司。
 
  APKBUS:您从事Android开发这么多年,已然是一个老兵,您是如何一路坚持走到今天的?
 
  杨云君:
 
  从2009年从事Android至今已经4年多了。09年降薪从Java EE领域转入Android领域,主要是因为这个领域基本是一片空白,如果后续普及,自己可以有先入者的优势,冒点险是值得的。2011年Android大爆发,用人需求大增,最多的时候一天接到70多个面试电话,周围陆续有同事另谋高就,这时候我觉得Android市场已经有很大的泡沫了,一旦泡沫破灭,很多公司都要玩完(可以参考上次手机泡沫破灭的例子)。于是我也随大流迅速换公司,进入一家更稳定的公司。一路坚持至今,是想自己的技能获取最大的价值。
 
  APKBUS:据了解,最近您推出了一本新书——《Android的设计与实现 卷Ⅰ》,而这书是针对Android四层架构中的某一层编写的,什么原因促使您写了这本书?可以分享一下写书过程中印象深刻的经历么?是否还有著书的计划?
 
  杨云君:
 
  《Android的设计与实现 卷Ⅰ》是我的第一本书,这本书主要针对框架层的核心模块的运行机制进行详细分析。我的初衷是想写一本性能优化的专著,可后来发现,如果读者不理解框架层的运行机制,性能优化一说只能泛泛而谈。因为性能优化涉及应用层,框架层,运行库和内核层等,应用程序开发者往往只在应用层理解应用程序的运行机制,而系统层面的问题很少涉猎,这样的话,很难以系统的视角分析性能问题以及ANR,OOM等问题。以ANR为例,其成因大约有十几类,其中大多数都是系统层面的问题,而非应用程序本身的问题。至于是否还有著书计划,要看市场和读者的反馈。
 
  APKBUS:Android Framework在Android系统中处于怎样的地位?
 
  杨云君:
 
  Framework在Android系统中处于一种承上启下的地位。承上的意思是框架为上层应用提供api和运行机制;启下的意思是框架屏蔽了下层的复杂性,为上下层的交互定义了一套规范。
 
  APKBUS:Android Framework运行在Linux内核之上,Binder 是Android对Linux内核层的一个扩展,您能简单介绍下Binder的机制和实现么?
 
  杨云君:
 
  从Android体系结构的角度看,Binder是Android对Linux内核层的一个扩展,属于字符设备驱动,Android便是通过这个驱动程序实现不同进程之间的间接通信。Android通过对Binder驱动的封装,提高了一套Binder操作的框架,便于上层使用,这样Binder的概念便不仅仅是一个驱动,而是拓展为一种架构。通过这种架构,Binder实际上成为“框架的框架“,Binder框架分成Native层和Java层两部分。Android吸收了组件化的设计思想,将大量核心功能放在不同的Service组件中实现,需要使用这些功能的其他组件,可以通过系统提供的接口访问这些Service。提供服务的组件和使用服务的组件可以运行在不同的进程中,通常把Service组件所在的进程称为Server进程,把使用Service的组件所在的进程称为Client进程,这其实是一个C/S体系结构。Binder变为这种体系结构提供进程间通信功能。
 
  APKBUS:您有这么些年的Android开发经历,对Android应用层,框架层源码开发以及性能优化有着深入的研究和认识,在学习上有什么心得可分享?Android应用开发者和系统开发者怎么高效的学习Framework呢?需要掌握哪些技能?
 
  杨云君:
 
  学习一门技能,最重要的是两个方面:合适的项目经历和主动的自学能力。技术总是在变化的,但核心的东西万变不离其宗。学习者应该把一个模块彻底搞明白,即便后续版本有变化,也能很快适应。理解框架层的运行机制是一个合格应用开发者必备的技能,但框架层浩如烟海,学习框架层必须循序渐进各个击破,不能眉毛胡子一把抓,比较好的入门路线可以参考《Android的设计与实现 卷Ⅰ》的论述,最好以Binder框架层、Package Manager、消息机制、Activity Manager等模块入手。
 
  APKBUS:您作为一位专门从事Android手机定制和开发的工程师,可以谈谈对Android系统的认识么?
 
  杨云君:
 
  Android系统是一款优秀的智能手机操作系统之一。没有Android的普及,大多数人可能还停留在以Symbian为代表的功能机时代。Android的优点不必多说,相信大家都比较认同。Android不足的地方主要体现在性能方面,这个随着系统的完善,或许会进一步优化。
 
  APKBUS:目前有很多Android的手机,商家为满足一些需求都会修改rom然后定制它们,这样很容易导致开发的功能在不同的手机上显示各不同,产生各种问题。面对这样的情况,解决此类问题您有什么建议?
 
  杨云君:
 
  Android既然是开源的操作系统,厂商定制是不可避免的,这个就需要应用程序开发者和美工配合做好不同机型的适配工作。
 
  APKBUS:要成为一位优秀的开发者,是否存在快速成长的捷径?普通程序员如何一步步向优秀的开发者目标靠近?
 
  杨云君:
 
  我想,快速成长的捷径只存在于天赋极好的人身上,大多数人还是需要不断的主动学习和项目锻炼才能快速成长。普通程序员要想一步步向优秀开发者的目标靠近,不断的主动学习和项目锻炼是很必要的。不断的主动学习,就是要不断夯实自己的编程基础,对Java、C++、C等基础语言需要有一定的掌握,对基本的算法有一个足够的理解。项目锻炼指的是要早项目中锻炼自己分析问题和解决问题的能力,并总结经验。
 
  APKBUS:不同的Android开发阶段,需要掌握的知识也不同,更清晰的了解自己处于哪一阶段哪一水平对开发者来说很重要,您可否对学习Android的开发者提供一个发展规划呢?
 
  杨云君:
 
  要清晰自己所处的阶段,必须首先熟悉Android的体系结构中各层涉及的技术。初学者往往以为Android是以Java编写的,这是极大的错误。Android是集Java、JNI、C++、C、汇编,脚本,Linux,modem、硬件体系结构等等于一身的集大成者。通常应用层主要以Java为主,框架层以JNI、C++和C为主,编译模块以脚本为主,内核层会涉及linux操作系统,以C和ARM汇编语言为主,此外还有特定硬件的实现库以及modem主要也以C和汇编为主。可见框架层是Java和C语系的分水岭。以Java为主的开发者,可以应用层和框架层为重心,以C语系为主的开发者,可以内核、modem为重心。我的初衷是以《Android的设计与实现》系列图书为引线,规划一个完整的框架层学习路线图,卷1以JNI,Android启动,Binder,消息通信异步处理,Package Manager,Activity Manager为主,卷2则主要分析UI系统
 
  小编寄语:生活在变化、科技在更新,世界万物的改变,或潜移默化,或轰轰烈烈,但万变不离其宗,技术也不会例外。快速成长的捷径就如作者说的,只可能发生在少数人身上,大多数人需要不断的自我学习以及项目的磨砺成长起来。只要我们肯坚持,不放弃,我想一定会成功的!
 
      本文为APKBUS原创,转载请保留原文链接http://www.apkbus.com/android-4271-1.html

转载于:https://www.cnblogs.com/ymczxy/p/4711088.html

专访杨云君:变身优秀开发者的学习之道相关推荐

  1. 7月7日云栖精选夜读:专访 | 杨强教授谈CCAI、深度学习泡沫与人工智能入门

    摘要: 中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办,云栖社区作为独家直播合作伙伴的第三届中国人工智能大会(CCAI 2017)将在杭州国际会议中心盛 ...

  2. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好

    为什么80%的码农都做不了架构师?>>>    摘要: 在事业刚刚起步的时候,王俊杰毅然决定支教半年.支教归来后,他先后参加了扶贫智能平台.污水处理智能系统等等项目,并利用业余时间完 ...

  3. 专访 | 杨强教授谈CCAI、深度学习泡沫与人工智能入门

    文 | 胡永波 7 月 22 - 23 日,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办的第三届中国人工智能大会(CCAI 2017)将在杭州国际会 ...

  4. 专访阿里云雁杨:因需求而进化,ECS云服务器追求弹性极致

    编者按:10月11-14日,为期四天的2017杭州云栖大会(门票火热抢购中!)将再度在杭州云栖小镇起航,作为全球最具影响力的科技展会之一,本届大会将有不少阿里集团专家以及各企业行业领袖的精彩演讲.从今 ...

  5. 云栖专辑 | 阿里开发者们的第19个感悟:Simple is better.

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  6. 云栖专辑 | 阿里开发者们的第12个感悟:多维思考,胜过盲目苦干

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  7. 云栖专辑 | 阿里开发者们的第11个感悟:拥抱变化,用正确的方法对待工作

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  8. 云栖专辑 | 阿里开发者们的20个感悟,一通百通

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

  9. 云栖专辑 | 阿里开发者们的20个感悟,一通百通 1

    2015年12月20日,云栖社区上线.2018年12月20日,云栖社区3岁. 阿里巴巴常说"晴天修屋顶". 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备. 所以社区特别 ...

最新文章

  1. 字符串的UPDATE和REPLACE部分
  2. BROCADE使用小技巧
  3. jar2exe 配置jre
  4. win10+Tensorflow2 + cuda +RTX 3080 +cudnn 安装
  5. 云原生的本质_CloudNative
  6. GoogLeNet——CNN经典网络模型详解(pytorch实现)
  7. 第四十七节,random 随机数模块
  8. DOM对象转化成jQuery对象 $(参数) (能不能查到jQuery对象的所有方法)
  9. 苹果Ma视频剪辑软件:DaVinci Resolve Studio (达芬奇调色)
  10. 迅雷免费VIP账号获取器 每天更新帐号 易语言编写
  11. JavaScript自动切换并播放视频 | Tampermonkey
  12. rancher应用商店的使用
  13. 流水线-流水线相关计算
  14. 乐高 42083 布加迪 Chiron(多图流量预警)
  15. 给初入测试/开发程序员的几点建议,把困难当做猎物......
  16. 杀人 真心话大冒险 起底
  17. 图形化开发(五)022-Three.js之材质——受光影响-MeshLambertMaterial 兰伯特材质 MeshPhongMaterial 高光材质
  18. 绿盟web应用防火墙(主机版)中国教育和科研计算机网,绿盟远程安全评估系统NSFOCUS RSAS...
  19. 淘宝商品历史价格接口/商品历史价走势接口代码对接分享
  20. 超实用,精心整理了34个Python+Excel+Word+PDF自动化库!

热门文章

  1. 看板任务管理,让你分分钟提高工作效率!
  2. [收藏] FC交换机基础知识详解
  3. Codeforces 1579G
  4. dropbox文件_获取通过电子邮件或网页发送到Dropbox的文件
  5. 浦发银行举办第二届国际金融科技大赛 成立开放银行等创新实验室
  6. 一位金融工程小硕的华丽逆袭人生!超真实Quant菜鸟的修行路
  7. Magic Retouch Pro mac(ps磨皮插件)破解版
  8. 马未都谈收藏:历史进程的每一步我都赶上了
  9. mysql model怎么用_【原创】小灰灰自行封装mysql操作的Model方法 | 小灰灰博客
  10. Error: input elem num(408000) reshaped elem num(102000)